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
SERINIT: MOV SCON,#10011000B ;MODUS 2 9BIT-UART TB8=1 MOV PCON,#64 ;TEILER DURCH 64 FUER 250K-BAUD SETB ES ;SERIELLEN INT FREIGEBEN
> 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
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.:
1 | PCON |= 0x80 //SMOD1 |
2 | PCON |= 0x40 //SMOD0 |
3 | SCON |= 0x80 //SM0-FE |
4 | SCON |= 0x40 //SM1 |
Stimmt das dann so,bzw. ich müsste doch auch schreiben können:
1 | |
2 | PCON |= 0xC0 |
3 | SCON |= 0xC0 |
@Matthias Leider bringt mir das Tool nichts, da ich die Baudrate ja nicht über einen Timer erzeuge. Viele Grüße Johannes
ohne Timer oder Baudrategenerator (letztlich auch ein Timer) geht das nicht...
>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.
Hmm, wie willst Du denn das Brak erkennen? Ich mach das immer über das FE-Bit.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.