www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik At89C51RD2---UART konfigurieren


Autor: Jojo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

nachdem ein paar Freunde und ich beschlossen haben, ein kleines 
Washlight zu bauen, geht es nun an den Bau.Allerdings habe ich das 
Problem, dass ich trotz Studium der Datenblätter (sie liegen vor mir auf 
dem Tisch) nicht herausfinden konnte,wie ich den UART konfigurieren 
muss.

Als MC haben wir einen At89C51RD2,der über ein 16MHz Quarz getaktet 
ist.Nun sind wir soweit,dass wir als Modus für den UART den Mode2 
ausgewählt haben(dieser teilt die Taktfrequenz um 32 bzw. 16 und stellt 
die für DMX notwendigen Einstellungen zur Verfügung).Wenn ich das 
richtig verstaden habe,teilt dieser Teiler die CPU Frequenz um 16 bzw. 
32.Die CPU Frequenz beträgt nach Datenblatt in Standard-Einstellung die 
Hälfte der Frequenz des Oszillators.Also müsste ich den 32-er Teiler 
verwenden, um die 250.000 Baud zu erzeugen(Stimmt die Überlegung?).

Nun meine eigentliche Frage: Wie stelle ich den Teiler ein? Im 
Hardware-Manual von Atmel steht dazu,man soll das SMOD-Bit(PCON) 
setzen,dies kann ich jedoch nicht finden.
Oder gibt es vllt. eine bessere Einstellung für den UART, bzw. für den 
ganzen MC? (Kritik wird gerne angenommen)Bisher sind wir nur auf den MC 
festgelegt.Das ganze möchte ich jedoch gerne mit C programmieren(bisher 
mit µVision).

Viele Grüße und vielen Dank im Vorraus

Jojo

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

poste doch bitte mal deinen Code. Das SMOD-Bit wird gesetzt, indem du 
das Register PCON mit 0x80 veroderst, und gelöscht, indem du es mit 0x7F 
verundest. Das Register PCON ist nicht bitadressierbar, deswegen musst 
du es auf diesem Wege machen. Das verunden/verodern deswegen, damit die 
anderen Bits des Registers nicht beeinflusst werden. Übrigens heisst das 
SMOD-Bit des originalen 8051 beim RD2 SMOD1.

Das Register SCON setzt du auf 100100x0 (x bedeutet 0 oder 1, je 
nachdem, ob du Polling oder Interrupt benutzt). Arbeitest du mit 
Interrupt-Betrieb?

Zur Berechnung kann ich momentan sagen, dass dabei eine Baudrate von 
250k rauskommen müsste, wenn a) das SMOD-Bit gesetzt ist und b) du im 
X1-Modus des Oszillators arbeitest.

Hast du die Möglichkeit, mit einem Oszi nachzusehen, welche Baudrate 
rauskommt?

Falls weitere Fragen zur seriellen Kommunikation bestehen (oder auch 
andere Fragen), nur her damit :-)

Hoffe, ich konnte schon mal ein bisschen helfen...

Ralf

Autor: Michael Werner (michelw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SERINIT:
  MOV SCON,#10011000B  ;MODUS 2 9BIT-UART TB8=1
  MOV PCON,#64    ;TEILER DURCH 64 FUER 250K-BAUD
  SETB ES      ;SERIELLEN INT FREIGEBEN

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> MOV PCON,#64    ;TEILER DURCH 64 FUER 250K-BAUD

NEIN! Das Register PCON ist kein Teiler-Register. Das Bit 7 in PCON 
heisst SMOD und bestimmt, ob deine Baudrate verdoppelt wird. Deswegen 
hab ich geschrieben, dass du mit verunden bzw. verodern arbeiten musst, 
damit die anderen Bits nicht beeinflusst werden.
Wenn du 64 in PCON schreibst, dann passiert gar nix, ausser dass SMOD0 
gesetzt wird.

Die Zeile muss heissen:

ORL PCON,#128

dann wird das SMOD-Bit gesetzt und deine Teilerrate ist 32, andernfalls 
64.

Ralf

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jojo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe jetzt mal versucht das so zu übertragen.Also für den Modus 2 
muss ich SMOD0, SM0, SM1 und SMOD1 setzen bzw. "ausschalten".
D.h.:
    PCON |= 0x80   //SMOD1
    PCON |= 0x40   //SMOD0
    SCON |= 0x80   //SM0-FE
    SCON |= 0x40   //SM1 
Stimmt das dann so,bzw. ich müsste doch auch schreiben können:
 
    PCON |= 0xC0
    SCON |= 0xC0

@Matthias
Leider bringt mir das Tool nichts, da ich die Baudrate ja nicht über 
einen Timer erzeuge.

Viele Grüße
Johannes

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohne Timer oder Baudrategenerator (letztlich auch ein Timer) geht das 
nicht...

Autor: Michael Werner (michelw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>NEIN! Das Register PCON ist kein Teiler-Register. Das Bit 7 in PCON
>heisst SMOD und bestimmt, ob deine Baudrate verdoppelt wird. Deswegen

Ja , sorry .
Der Kommentar gehört nicht in die Zeile.

Autor: Michael Werner (michelw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm,
wie willst Du denn das Brak erkennen?

Ich mach das immer über das FE-Bit.

Autor: Jojo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
erstmals Danke für die Antworten.
Die Erkennung des Break sollte eig.über das 9. Bit erfolgen.Über die 
Auswertung des RI-Bits erkenne ich die Aktivität des Eingangs.Dann die 
abfrage ob das 9.bit gesetzt ist oder nicht.Wenn es längere Zeit nicht 
gesetzt ist -->break (22 Bits).

Viele Grüße
Jojo

PS:Ohne nerven zu wollen, funktioniert das Setzen der Bits so??

Autor: Alexander B. (lpc900)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also ich bin auch gerade dabei mir einen LEDMovinghead zu bauen der über 
DMX steuerbar ist.
Ich habe da so meine probleme da ich bis jetzt noch überhaupt nichts mir 
µC gemacht habe Hardware bin ich 100%fit nur software naja ....

So mal die Frage beim DMX Signal gibt es ja 2 Stopbits nur die sind ja 
beide auf High also kann ich ja kein fehlerhaftes Stopbit erkennen oder 
habe ich da gerade einen Denkfehler.

Würde mich auch freuen wenn jemand einen Quelltext in C oder ASM habt 
und ihn mir bereitstellen könnte ich arbeite mit einem LPC932 (8051) 
vielleicht hat ja jemand schon mal soetwas gemacht ein DMX signal auf 
nem 8051 ausgewertet .

Freue mich über eine Antwort

Gruß Alex

Autor: Alexander B. (lpc900)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Fertig :-)

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.