помогите заставить работать связку МК ATMEGA32A - MAX485 - ПК (свисток)
а то я совсем уже упоролся...
ATMEGA32A 2мГц от внутреннего осциллятора, UART 9600, 8-1-0
драйвер 485 - китай, с Али
свисток RS485-USB
собрано на макетке, сейчас в бесконечном цикле посылается один символ и ловится гипертерминалом
точнее не ловится, даже мусора нет, но примерно каждый пятый вторник, во время полнолуния мусор таки начинает приходить
на TXD МК сигнал скачет, на выходе с драйвера тоже, как и на свистке...
линия связи 30см, витая пара, без согласования..
блин, мне кажется я уже все перепробовал...
схема

код
Код: Выделить всё
#define baudrate 9600L
#define bauddivider (F_CPU/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)
void usartInit() {
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UBRRL = LO(bauddivider);
UBRRH = HI(bauddivider);
UCSRA = 0;
UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE;
UCSRC = 1<<UCSZ0|1<<UCSZ1;
USART_TX_CTRL_DDR|=(1<<USART_TX_CTRL_PIN);
USART_TX_CTRL_PORT&=(1<<USART_TX_CTRL_PIN);
}
//управление приемом/передачей
void usartEnableTX(unsigned char state){
if (state==USART_TX_ON)
USART_TX_CTRL_PORT|=(1<<USART_TX_CTRL_PIN);
else
if(state==USART_TX_OFF)
USART_TX_CTRL_PORT&=!(1<<USART_TX_CTRL_PIN);
}
//ф-я отправки символа
void usartPutc( unsigned char data ) {
while ( !(UCSRA & (1<<UDRE)) );
UDR = data;
}
int main( void ) //Ãëàâíàÿ ôóíêöèÿ
{
usartInit();
sei();
for(;;) {
usartEnableTX(USART_TX_ON);
usartPutc("1");
}// for(;;)
}




