Poniżej wklejam kod najprostszego programu jaki można sobie wyobrazić do wysyłania czegokolwiek przez USART. Program ten jest wynikiem mojej desperacji. Od wielu wielu dni testuje programy swojego autorstwa i sciągnięte z neta gotowce (wg ich opisu i komentarzy działające bez zarzutu) i nie mogę uzyskać jakiejkolwiek komunikacji przez USART. Potrzebuję komunikacji dwustronnej, ale obecnie będę zadowolony jeżeli odbiorę chociaż jeden znak. Czy ktoś ma jakikolwiek pomysł dlaczego to nie działa? Pracuje na zestawie jak w temacie (ZL3AVR), programator działą, Atmega działa. Mam drugi taki zestaw, więc mogę to sprawdzać. Na samym dole zamieszczam screen fusów z Pony Prog.
Uprzedzając pytania: zapoznałem się z datasheetem do Atmegi, do zestawu ZL3 i przeszukałem całe forum elektrody i pokaźną część internetu w poszukiwaniu odpowiedzi na moją bolączkę. To wcale nie wyklucza, że mamy do czynienia z błahym problemem, bo nie mam specjalnie dużego doświadczenia w programowaniu AVR.

Uprzedzając pytania: zapoznałem się z datasheetem do Atmegi, do zestawu ZL3 i przeszukałem całe forum elektrody i pokaźną część internetu w poszukiwaniu odpowiedzi na moją bolączkę. To wcale nie wyklucza, że mamy do czynienia z błahym problemem, bo nie mam specjalnie dużego doświadczenia w programowaniu AVR.
#include <avr\io.h>
#define xtal 16000000L
#define baud 9600
void main(void)
{
// Calculate UBRR correctly using large temp variables
uint32_t temp;
temp = (xtal/(16 * baud))-1;
UBRRH = (temp >> 8);
UBRRL = (temp & 0xFF);
// Initialize UCSRB
UCSRB= (1 <<RXEN | 1 << TXEN );
// Initialize UCSRC cprrectly
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
while(1)
{
// Loop until UDR register is empty
while((UCSRA & (1 <<UDRE)) == 0);
// Transmit letter a
UDR = 'a';
};
}