www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8, UART, MIDI und jede Menge Stress :)


Autor: Matthias Hullin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich habe meine liebe Not mit der Programmierung des ATMega8-U(S)ART.
Hoffentlich kann sich jemand eines Anfängers erbarmen und eine
Erklärung zu folgenden drei Phänomenen geben:

Erstens:
Die Probleme fangen schon mit dem Beschreiben der Register an.

; Frame-Format setzen: 1 start, 8 data, 1 stop bit
  ldi temp, 0x86    ; URSEL=1
  out UCSRC,temp    ; UBRRH UND UCSRC werden geschrieben
; Baudrate in den UART tickern
  ldi temp, 0x00    ; URSEL=0
  out UBRRH, temp    ; UBRRH UND UCSRC werden geschrieben
; etc...

Warum hat die liebe URSEL, die beim Schreiben zwischen UCSRC und UBRRH
wählt, ganz offenbar keinen Effekt?

Zweitens: Das Register UCSRC, in dem verschiedene Dinge stehen wie etwa
die Wortlänge (5-8 Bit), braucht anscheinend gar nicht geschrieben zu
werden! Mir liegen einige Beispielcodes vor, etwa der des
uC.net-MMC-MIDI-Recorders und der RozzBox (www.rozzbox.de), in denen
überhaupt kein Zugriff auf UCSRC stattfindet. Der Simulator im
AVR-Studio zeigt dieses Register standardmäßig mit dem Wert 0x00 an,
was einer Wortlänge von 5 Bit entspricht. Das MIDI-Protokoll hat aber 8
Datenbits. Warum funktionieren alle genannten Beispiele trotzdem?

Drittens: Angenommen, ich habe in meinem Programm eine Endlosschleife,
aus der heraus bei RXC in eine Interrupt-Routine gesprungen werden
soll. Ich pausiere die Ausführung des Programmes also in der
Endlosschleife, stelle im Simulator des AVR-Studio das UDR auf einen
Wert ein und setze das RXC-Bit in UCSRA. Wenn ich nun "Step-Into"
einen Schritt weitergehe, wird UDR auf null resettet, obwohl noch gar
nicht ausgelesen wurde. Warum?

Über jede hilfreiche Antwort freut sich

Matthias

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einfach mal die Hilfe in AVR Studio bemühen und festellen das diese
Registerzugriffe im Simulator noch nicht richtig implentiert sind. In
realer Hardware geht`s aber problemlos.

The USART's UBRRH and UCSRC registers share the same I/O address.
Writing to one of the registers will cause both registers to contain
the new value, regardless of the value of URSEL. Reading these
registers do not work as described in the datasheet.

Autor: Matthias Hullin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo mmerten,

danke schonmal für diesen sehr wertvollen Hinweis! (Du ahnst ja gar
nicht, was ich schon in Handbüchern und Hilfeseiten geblättert habe...)
Hast du vielleicht noch irgendwelche Tipps zu
"zweitens" (erhält der UCSRC des Chips beim Reset womöglich einen
Startwert ungleich null?) und
"drittens"? (wie gebe ich im Simulator korrekt UART-RX-Daten ein?)

Viele Grüße,
Matthias

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu zweitens: sehr unwahrscheinlich, alle Register außer den 32
Arbeitsregistern und dem SRAM werden beim Chipreset auf 0b00000000
initialisiert.

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Defaultwert für alle I/O-Register nach einem Reset ist im
entsprechenden Datenblatt ausführlich beschrieben. Also UART komplett
simulieren zu wollen ist doch etwas vergebene Mühe. Da müßte man ja
erste lange stimuli-file generieren, was wohl kaum sinnvoll sein
dürfte. Da ist der Test in real Hardware viel einfacher. Int-Routinen
kann man ja durch setzen der entsprechenden Flags testen.

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.