www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Problem


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat wirklich nich niemand den AVR mit einem 9bit UART verwendet ?
Hier das ganze Testprogramm. Wenn das 9.Bit gesetzt ist müsste Port A
an High gehen, ansonsten auf Low. Er ist immer Low.

.include "8515def.inc"

.def null=r14
.def voll=r17
.def temp=r20

.org 000
rjmp Initialisierung
.org URXCaddr                             ; Interruptvektor für
UART-Empfang
  in temp, UCR
  in RX, UDR
  sbrc temp, 1
  rjmp uart
  out porta, null
  reti
  uart:
  out porta, voll
  reti


Initialisierung:
ser voll
clr null
out ddra, voll
out ddrb, voll
out ddrc, voll
out PORTA, voll
out PORTB, voll


; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

 ; Baudrate einstellen
ldi temp, 3
out UBRR, temp
sbi UCR, RXCIE                  ; Interrupt bei Empfang
sbi UCR, RXEN                   ; RX (Empfang) aktivieren
sbi UCR, CHR9                   ; 9bit aktivieren
sei


Main:
rjmp Main

Autor: Ralph Dillhardt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe mit dem AT90S8515, 8MHz angefangen mit 9bit UART zu arbeiten.
Meine Tests mit dem Atmega161, Atmega162 und Atmega32 sind auch gut
Verlaufen.
Bei mir wird zwar kein Interrupt verwendet aber wenn Interresse besteht
kann ich dir meine Konfigurationsdaten zusenden.

Mit welchem Terminal-Programm soll den die 9Bit-Version Daten
austauschen?

MfG
Ralph

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das 9. Bit dient als Befehl/Daten Unterscheidung bei der Kommunikation
mit einem anderen uC.
Könntest du mal über meinen Code schauen (ist ja nicht viel). Am RXD
Pin liegt das 9. Bit auf jedenfall richtig an, aber das RXB8 ist immer
gelöscht !

Autor: Toto (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Irgendwie kann ich nicht ganz nachvollziehen was du mit deinem Programm
überhaupt erreichen willst.Schreib mal genauer was es überhaupt machen
soll.
Compilieren kannst du es so jedenfalls nicht.
z.B. in der Zeile "in RX, UDR" .Du musst  RX erst definieren
.def RX=r16. Damit speicherst du dann das UDR Empfangsregister in der
Variablen RX.
Wozu du die ganzen Ports als Ausgang setzt ist mir auch schleierhaft.
Den Interruptvektor hast du auch falsch gesetzt.Müsste so aussehen
.org URXCaddr               ; Interruptvektor für Empfang
rjmp  "Unterprogramm"
so wie bei deiner Initialisierung

Ich würde dir schwer empfehlen dich erstmal mit dem Tutorial hier auf
dieser Seite zu beschäftigen.
Ich hab mal das Beispiel zum UART-Empfang als Anlage kopiert.Simuliere
das ganze mal im AVR-Studio dann wird vieles klarer.

mfG  Toto

Autor: Toto (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hab dein Programm mal umgeschrieben.Wie ich es verstanden habe soll
also wenn bit 9 gesetzt ist Port A auf high gehen.Wenn bit 9 gelöscht
ist Port A auf low.
Wenn das so gewollt ist funktioniert das angehängte Programm.

mfG
      Toto

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Programm will ich nur das 9. bit testen.
Da das eigentlichen Programm lief im 8bit Modus problemlos, aber mit
9bit nicht. Daher habe ich einfach den Rest zum Fehler suchen gelöscht,
und so eben auch versehentlich das def RX...
Daher sind die ganzen Ports noch als Ausgang definiert.
Der Datenempfang geht, ich bekomme den richtigen Wert in RX, aber nicht
das 9. Bit !

Autor: Toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann liegt der Fehler wohl weniger am Programm sondern an einem Fehler
bei der Übertragung zum AVR.Wie sendest du die Daten den zum MC.?
Hyperterminal oder Ahnliches?
Wenn ich das obige Programm Simuliere macht es genau das was ich oben
geschrieben habe.
Bit9=1 >>> PortA=high
Bit9=0 >>> PortA=low

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist wohl mein Simulationsprogramm nicht perfekt.
Die Daten sende ich mit einem 8051uC im 9bit Modus und da kommen
wirklich 9bit raus.
Ich werde das mal in der Praxis ausprobieren (da hatte ich ja das
Problem, dass der uC nicht auf das 9.bit reagiert)...

Autor: Toto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem 8051 kenne ich mich nicht aus. Vielleicht kommt es ja zu
irgendwelchen Timingproblemen zwischen den beiden MC. Der AVR hat bei
bestimmten Quarzfrequenzen einen gewissen Prozentualen Fehler.

Schau mal in das Datenblatt vom 8515 das steht eine Tabelle drin wo der
Fehler bei bestimmten Frequenzen aufgelistet ist. Kann sein das er beim
9bit ausserhalb der Toleranz liegt. Wenn der 8051 ähnliche Fehler
aufweist addieren sie sich im schlimmsten Fall.

Welchen Simulator verwendest du denn?
Im AVR-Studio AVR Studio 4, 9, 0, 338 läufts auf jeden Fall und bisher
sind mir da keine Bugs aufgefallen.

Wenns garnicht läuft must du halt einen zusätzlichen Pin opfern und
damit abfragen ob Daten oder Befehle gesendet werden.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timing Probleme kann ich ausschließen, der Fehler beträgt bei beiden 0%
(kann man ja im Simulator schön einstellen, selbst wenn es die krummen
Quarzfrequenzen in der Realität nicht gibt.)

Ich werds einfach mal in der Praxis testen. Wenns da geht reicht es
mir, dann kann ich immerhin mal das 9. bit als Fehlerquelle
ausschließen.

Danke an alle die mir geholfen haben...

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.