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

Модератор: boogyman

Ответить
Аватара пользователя
Shnaps151
Новичок
Сообщения: 1
Зарегистрирован: 17 июн 2012, 19:54

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

#1

Сообщение Shnaps151 »

Здравствуйте,я начинающий и делаю проект, в котором 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 КБ) 1082 скачивания
Project.rar
Протеус и CodeVision
(127.23 КБ) 1123 скачивания
Аватара пользователя
boogyman
Модератор
Сообщения: 183
Зарегистрирован: 25 дек 2011, 22:48
Откуда: Москва

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

#2

Сообщение boogyman »

По моему если в Proteuse схема не влезает в синий прямоугольник то она работать не будет
Ответить