Dear Kot's! I neeeeeed HELP!!! Прошу помощи, тк уже замучался и не знаю куда еще обратиться!
Проблема с передачей данных по уарт через интерфейс max485. Передаю данные между двумя контроллерами Atmega16 (master)<->Atmega8. В одну сторону (от мастера к слейву передача проходит на ура!) отправляю символ, на приемной стороне он опознается, производится соответствующее действие, но в обратную сторону беда - передача идет, но единожды и передается не то, что нужно!
Думаю инит уарта приводить смысла нет, тк передача проходит (на обоих контроллерах прошита одна и таже конфигурация)
На стороне мастера:
далее в главном цикле:
На приемной стороне(слейве)
ISR(USART_RXC_vect) //
{
PORTB &= ~(1<<PB1); //вкл лампочку
unsigned char c;
c = UDR;
if (c == 'g')
{
PORTD |= (1 << PD2); //вкл передачу
uart_putc('a'); //на тебе ответ!
PORTD &= ~(1 << PD2); //выкл передачу
}
}
На приемной стороне (стороне мастера)
Процедура отправки:
Помогите кто чем может! Замучался - сил нет!!!
Проблема с передачей данных по уарт через интерфейс max485. Передаю данные между двумя контроллерами Atmega16 (master)<->Atmega8. В одну сторону (от мастера к слейву передача проходит на ура!) отправляю символ, на приемной стороне он опознается, производится соответствующее действие, но в обратную сторону беда - передача идет, но единожды и передается не то, что нужно!
Думаю инит уарта приводить смысла нет, тк передача проходит (на обоих контроллерах прошита одна и таже конфигурация)
На стороне мастера:
Код: Выделить всё
ISR(TIMER1_OVF_vect) //опрос кнопок в таймере
{
//--------------кнопка 1------------------------------------
if (bit_is_clear(PINA,4)) // если нажали кнопку 1
{
knopka1 = 1;
}
else
{
knopka1 = 0;
}
if (knopka1 != knop_1) //если произошло изменение состояния кнопка
{
if (knop_1 == 0) //кнопка нажата
{
PORTD &= ~(1<<PD5); //загорелась лампочка
knop_1 = 1;
}
else // кнопка отжата
{
PORTD |= (1<<PD5); //выкл лампочка
knop_1 = 0;
}
}
//-----------------------------------------------------------------
}
Код: Выделить всё
while(1)
{
if (knop_1 == 1)
{
cli();
PORTD |= (1 << PD3); //включили передачу
uart_putc('g'); //отправили символ
PORTD &= ~(1<<PD3); //выкл передачу
sei();
}
}
ISR(USART_RXC_vect) //
{
PORTB &= ~(1<<PB1); //вкл лампочку
unsigned char c;
c = UDR;
if (c == 'g')
{
PORTD |= (1 << PD2); //вкл передачу
uart_putc('a'); //на тебе ответ!
PORTD &= ~(1 << PD2); //выкл передачу
}
}
На приемной стороне (стороне мастера)
Код: Выделить всё
ISR(USART_RXC_vect)
{
PORTB &= ~(1<<PB0); //вкл лампочку
unsigned char cc;
cc = UDR;
if(cc == 'a')
{
lcd_dat('A', 0x00); //вывод на дисплей
}
else
{
lcd_dat('B', 0x00);вывод на дисплей
}
}Процедура отправки:
Код: Выделить всё
void uart_putc( char c )
{
UDR = c;
while((UCSRA & (1 << UDRE)) == 0);
while ((UCSRA & (1<<TXC)) == 0);
_delay_us(90); //без нее не работает
}Помогите кто чем может! Замучался - сил нет!!!
