www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datenverlust bei Serieller Kommunikation


Autor: Phil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage bezüglich der Seriellen Kommunikation eines uc mit 
einem PC z.B. .

Ich habe es jetzt tatsächlich geschafft Signale an den uc zu senden und 
hab mir das ganze mal per JTAG ICE MKII im Detail angeschaut.

Was mich jetzt wundert ist, dass wenn ich n Breakpoint vor das Einlesen 
des UDR Registers setze, liest er den ersten char ein und sollte dann 
eigentlichen keinen weiteren empfangen. Und genau da ist mein 
Verständnis Problem.

Ich habe einen AT90PWM3B und der hat einen EUSART mit einem EUDR welches 
16bit auf einmal verarbeiten kann; statt der normalen 8bit. Ich habe 
E(!!)USART den aber nirgendwo explizit initialisiert, sonder einfach 
meine "normale" USART Kommunikation aufgebaut.

Als Terminalprogramm nutze ich HTerm hier ausm Forum.

Wie sendet so ein Terminalprogramm also wenn ich meinetwegen 4 chars 
sende, aber nur 1 auf einmal empfangen kann. Wie merkt das das Terminal 
Programm? Oder hängt das mit der Baudrate zusammen?

In meinem konkreten Fall sende ich 4 chars und empfange (während des 
debuggens) 2. Liegt das am AT90 oder an der Art und Weise wie das 
Terminalprogramm sendet?

Ich hoffe ihr versteht was ich meine :-D

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Terminalprogramm weiß gar nichts von der Gegenstelle. Das schickt 
die Daten einfach nach den RS232-Standard raus (mit deinen Vorgaben von 
Geschwindigkeit, Start-, Stop- und Parity-Bit). Dein µC hat wohl durch 
das 16-Bit register halt einfach einen 2 Byte Buffer/Fifo.

Autor: Guter Rat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es außer der RxD und TxD-Verbindung noch eine Verbindung für
Handshake? (RTS).
Wenn nicht, ist es kein Wunder daß Zeichen verloren gehen.
Der Sender hat ja keine Ahnung, daß er nichts mehr senden darf.
Der Sendet einfach die 4 oder wieviel auch immr Zeichen, bis der String
zu Ende ist.

Dafür gibt es ja den "Handshake", ob HW-Handshake mit CTS/RTS oder
Per Software.
Der Sender kann vom Empfänger gestoppt werden, bis der wieder
aufnahmebereit ist.
Oder der Sender sendet das nächste Zeichen erst, nach dem der Empfänger
gemeldet hat: Bitte nächstes Zeichen.
Dann kannst Du den Empfang debuggen, der Sender wird halt angehalten,
bis Dein Empfänger wieder bereit ist.

Autor: Phil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Handshake gibt es nicht. nein.

Eine letzte Frage hierzu.

Ist es normal, dass man das UDR Register beim Debuggen nicht "angucken" 
kann. Es ist immer 0x00.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Phil (Gast)

>Ist es normal, dass man das UDR Register beim Debuggen nicht "angucken"
>kann. Es ist immer 0x00.

Eigentlich nicht. Kann aber mit deiner Software zusammenhängen.

MFG
Falk

Autor: Phil (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.. komisch.

Ich benutze die Methode hier aus dem Tutorial.

Uart mit Interrupt.

Es kann auch alles wunderbar hin und her gesendet werden. Es 
funktioniert quasi wie im Tutorial beschrieben.

Auch wenn ich nur den Code aus dem Tut verwende ändert sich der Inhalt 
des Registers nicht...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Phil schrieb:

> Ist es normal, dass man das UDR Register beim Debuggen nicht "angucken"
> kann. Es ist immer 0x00.

Du meinst online, auf dem Chip?
Das UDR Register darf hardwaremäsig nur 1 mal gelesen werden! Bei jedem 
lesenden Zugriff auf UDR rückt das nächste Byte aus der FIFO nach.

Wenn dein Debugger das nicht berücksichtigt (und ich wüsste nicht, wie 
er das machen soll, ohne massiv ins zu debuggende Programm 
einzugreifen), bringst du mit dem Debugger die komplette Empfangsfifo 
durcheinandner.

Zumindest bei den Megaxx ist das so. Wird bei deinem Boliden nicht 
anders sein.

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.