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
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
> 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
>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.
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??
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