ATmega644P UART , Senderegister nie Leer

OP #845622
Hallo,

ich habe folgendes Problem beim Programmieren des UART meines 
ATmega644P.

Den Code hab ich soweit direkt aus dem Datenblatt übernommen, bis auf
Register UBR0, das wird im Datenblatt mit 2 Registern ( High und Low ) 
dagestellt, wird mir aber beim Compilieren als Fehler angepriesen.


Nach dem Initialisieren wird das SendeDatenRegisterFlag UDRE0 ständig 
geprüft. Sobald dieses Leer, wird das SendeRegister mit dem Byte gefüllt 
und SOLLTE dann den Wert auf meiner RS232 Schnittstelle ausgegeben .

Die Ausgabe überprüfe ich auf meinem Rechner mit Hyperterminal und einem 
Angeschlossenem Null-Modem Kabel. Leider hab ich dabei keinen Erfolg, es 
kommen keine Daten an.



Ein Blick in den Simulator des AVR-Studios ( Device ist ATmega644P ) 
zeigt mir, das nach dem Zweiten schreiben in das SendeRegister das 
EmptyFlag des SendeRegisters ( UDRE0 ) nicht gesetzt wird. Somit bleibt 
das Programm in der Pollingschleife für das Flag hängen.

Scheinbar sendet der Controller die Daten nicht, da auch das TXCO Bit ( 
Daten gesendet ) zu keiner Zeit auf 1 gesetzt wird.


Aber wieso sendet der Controller nicht ? Evtl. Falsche Baudrate 
berechnet oder einen Fehler beim initialisieren gemacht ?

Den Clock Divisor 8 (CKDIV8) hab ich deaktiviert, d.h der Controller 
sollte mit dem Takt des Externen Quarzes laufen (14,7456MHz)

Hier ist das Programm, so wie ich es im Controller geflasht habe.

------------------------------------------------------------------------ 
--

#include<avr/io.h>


int main(void)
{
  //PRR = (PRR|(1<<PRUSART0));

  UBRR0 = 95; // BaudRate 9600 bei 14,7456MHz
  // Transmitter und Receiver Enable
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);

  UCSR0C = (1<<USBS0)|(1<<UCSZ00);

  while(1)
  {
    // Abfrage ob Senderegister Leer
    while ( !(UCSR0A & (1<<UDRE0)) )
      ;
    // Daten in Sende Register legen
    UDR0 = 0b10101010;
  }

}

------------------------------------------------------------------------ 
---

Danke schonmal fürs durchlesen, vielleicht kann mir von euch jemand 
weiterhelfen :)

Gruss Markus
Gast
Ist kein Kaufboard.

Der Max istfolgendermassen angeschlossen :

     Pin14 T1OUT ---> Pin2 RS232 (Rx)
     Pin13 R1IN  ---> PIN3 RS232 (Tx)

Ok, das Null-Modem Kabel funktioniert in diesem Fall natürlich 
nicht.Werde ich ändern.

Erklärt aber immernoch nicht das verhalten in der AVR-Studio Simulation 
?!?
Gast
Hab mal für nen ATmega8 das ganze Simuliert, und dabei verhält es sich 
genauso.
Ich bin mir aber ganz sicher, das hier das senden mit dem Controller 
funktioniert hatte.

Das mit dem EmptyFlag Scheint wohl mit der Simulation zusammenzuhängen 
:/

Werde mal ein Anderes Kabel anschliessen, evtl. Sendet der ATmega644P ja 
die ganze Zeit schon, und es hängt wirklich nur an dem Kabel.
Gast
Hab da jetz nix gefunden.
Ich warte jetz einfach mal auf das Kabel ab, werde dann schreiben falls 
es daran gelegen hatte....

Gruss Maggus
Gast
Ok, funktioniert nun :) (freu)


Scheinbar waren es zwei Sachen auf einmal .....

a)     Der Simulator vom AVR-Studio ist scheinbar sehr launig.
       Am Schluss konnte ich nichteinmal die Ports als Ausgänge 
definieren,
       über die Anweisung ist er einfach drübergesprungen. Deshalb auch
       wahrscheinlich der Fehler mit dem Empty-Flag.

b)     Wenn man sich ein Adapterkabel selbst bauen will, sollte man sich 
auch
       über die Belegung im klaren sein , Soviel nur dazu ;)


Trotzdem vielen Dank für die Hilfe :)

Gruss Maggus

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.