Atmega8 uart geht nicht wie bei anderen avrs

Gast #1587685
Lesenswert?

Hallo,

ich habe schon bei meheren avrs die uart programmiert.
Hat bis jetzt immer geklappt. Zb atmega16 at90can atmega1280.
Jetzt habe ich ein atmega8
Meine init ist so

void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = URSEL | 0x06;
 UBRRH = 0x00; //set baud rate hi
 UBRRL = 0x33; //set baud rate lo
 UCSRB = 0x98;
}

void uart0_putc(char c)
   {

   while(!(UCSRA & (1<<UDR)));// Wait until Rs232 is ready
   UDR=c;
   }

Aber mein transmitter ist niemlas ready. Mein programm hängt immer in 
der while schleife was ist da los. Hat bis jetzt bei jedem atmega 
geklappt
Gast #1587739
Lesenswert?

micro1 schrieb:
> while(!(UCSRA & (1<<UDR)));// Wait until Rs232 is ready
                      ^
[..]
> Gibt es beim atmega8 etwas besonderes zu beachten bei der usart?

Ja - das Datenblatt ;-) Wie spess53 schon schrub: da gehört 'UDRE' hin 
(siehe auch das Datenblatt vom Mega8 im Kapitel "19.6.1 Sending Frames 
with 5 to 8 Data Bits") - UDR (also das Datenregister) hat da nix 
verloren.

HTH und HF
Gast #1587862
Lesenswert?

OK das mit dem UDR habe ich falsch kopiert. Richtig das durfte nie
funktionieren. Ich habe es berichtigt und nun geht es.
URSEL ist auch falsch hatte aber so keinen einfluss.

Leider war mein USB2SERIELL Wandler dahin.
Deswegen hatte ich so Probleme

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren