Forum: Mikrocontroller und Digitale Elektronik Atmega8 uart geht nicht wie bei anderen avrs


von micro1 (Gast)


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

von spess53 (Gast)


Lesenswert?

Hi

1<<UDR????

MfG Spess

von micro1 (Gast)


Lesenswert?

Ja bei den andren avrs geht es ja einwandfrei so wie ich es immer mache.
Gibt es beim atmega8 etwas besonderes zu beachten bei der usart?

von spess53 (Gast)


Lesenswert?

Hi

>Ja bei den andren avrs geht es ja einwandfrei so wie ich es immer mache.

Dann machst du schon immer etwas falsch:

1<<UDR ->  1<<UDRE

MfG Spess

von Hc Z. (mizch)


Lesenswert?

Schau' Dir mal folgende Zeilen näher an:

 UCSRC = URSEL | 0x06;
 while(!(UCSRA & (1<<UDR)))

URSEL ist eine Bitnummer und das Ding, das ein freies TX Data Register 
anzeigt, heißt nicht UDR.

Schwer zu glauben, dass das irgendwo lief.

von g457 (Gast)


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

von micro1 (Gast)


Lesenswert?

Ja tatsächlich es muss UDRE heisen.
Schande über mich

von Hc Z. (mizch)


Lesenswert?

Die Zeile mit URSEL ist auch verkehrt.  Aber das schrieb ich schon.

von micro1 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.