Помогите с AVR и Max487 (Proteus)

Модератор: boogyman

Помогите с AVR и Max487 (Proteus)

Сообщение:#1  Сообщение Shnaps151 » 17 июн 2012, 19:13

Здравствуйте,я начинающий и делаю проект, в котором AtMega8 связывается с AtTiny2313 через RS485 (приемопередатчик MAX487). Мегу писал в AVR Studio 5, Тини в CVAVR (так уж получилось ;) )
Так вот, начал я с того, что просто наладил обмен по двум UART. Все работало. Затем присоединил микросхемы MAX487, добавил контроль переключения режимов приема/отправки. Все работать перестало.
Изображение
Код Меги:
Код: Выделить всё
void initUART()
{
    UCSRB|=(1<<3)|(1<<4);   
    UBRRH=0x00;
    UBRRL=0x33;
}
int main(void)
{
   lcd_init();
   lcd_str("first str");
   lcd_gotoxy(1,5);
   lcd_str("second str");
            initUART();
   DDRD|=0b00001000;
            lng=strlen(mystr);
   _delay_ms(250);
   lcd_clr();
   lcd_str("after clr");
   _delay_ms(1000);
   
    while (1)
    {   
      _delay_ms(500);
      PORTD|=0b00001000;
      while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
      UDR = '1'; //Начало передачи данных
      lcd_str("w");
      _delay_ms(500);
      while ( !(UCSRA & (1<<UDRE)) ); //Ожидание опустошения буфера приема
      UDR = '5'; //Начало передачи данных
      while (1)
      {PORTD&=0b11110111;
      if ((UCSRA & (1<<7)))
         {
            lcd_clr();
            rc=UDR;
            char mystr1[33];
            sprintf(mystr1,"t1=%i",rc);
            lcd_str(mystr1);
            break;
         }
      }      
   }
}


Код Тиника:
Код: Выделить всё
void USART_Init( unsigned int baudrate ) //Функция инициализации USART
{   
     UBRRH=0x0;
     UBRRL=0x33;//2A
     UCSRB = ( 1 << RXEN ) | ( 1 << TXEN ); //Разрешение на прием и н апередачу через USART
     UCSRC = (1<<USBS) | (3<<UCSZ0);
}
void main(void)                 
{
unsigned char devices;         //переменная в которой количество присоеденённых датчиков
int temp;                        //переменная для хранения температуры
char addr;
DDRD.3=1;
PORTD.3=0;
devices=w1_init();               //ищим датчики
USART_Init( 47 );
while(devices>0)                 //бесконечный цикл, если датчик подключен    devices>0
      {
          //USART_Transmit( USART_Receive()-0xA0); //Отправка принятого символа назад
          delay_ms(500);
          PORTD.3=0; //перевод в режим приема
         
          temp=ds18b20_temperature(0);  //читаем температуру 
          if (temp>1000){               //если датчик выдаёт больше 1000
             temp=4096-temp;            //отнимаем от данных 4096
             temp=-temp;                //и ставим знак "минус"
          }
          delay_ms(500);
         
          addr = USART_Receive();
          if (addr=='1')
          delay_ms(500);
          addr = USART_Receive();
          if (addr=='5')
          {
            delay_ms(400);
            PORTD.3=1;  // перевод в режим передачи
            USART_Transmit(temp);
          }
         
      };
}




Напрямую по уартам все работала, поэтому я решил что проблема не в разности скоростей и разном тактировании.
Файл проекта прилагаю. Там схема протеуса и все проекты.
Вложения
lcd.rar
Avr Studio (одним архивом не влезло)
(248.35 КБ) Скачиваний: 759
Project.rar
Протеус и CodeVision
(127.23 КБ) Скачиваний: 732
Аватара пользователя
Shnaps151
Новичок
 
Сообщения: 1
Зарегистрирован: 17 июн 2012, 18:54

Re: Помогите с AVR и Max487 (Proteus)

Сообщение:#2  Сообщение boogyman » 19 июн 2012, 17:23

По моему если в Proteuse схема не влезает в синий прямоугольник то она работать не будет
Аватара пользователя
boogyman
Модератор
 
Сообщения: 183
Зарегистрирован: 25 дек 2011, 21:48
Откуда: Москва


Вернуться в Микроконтроллеры AVR

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron
Rambler's Top100