www.mikrocontroller.net

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


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

1<<UDR????

MfG Spess

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja tatsächlich es muss UDRE heisen.
Schande über mich

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Zeile mit URSEL ist auch verkehrt.  Aber das schrieb ich schon.

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.