Ich programmiere mir grad einen DMX512 Empfänger mit einem PIC16F877, hab beim USART Modul des PIC jedoch einige Probleme! Das Modul empfängt Daten, jedoch ist der Buffer gleich voll und ich bekomme einen OERR (Overrun Error) dann leere ich den Buffer und starte das USART von neuem. Dies funktioniert soweit schon, jedoch wenn ich die Daten die ich aus dem Buffer hole anschau, sind diese alles andere als DMX512 Werte ;-) hat jemand eine Ahnung davon? bzw. schon mal mit RS485 und PIC USART Schnittstellen herumprogrammiert? Ich bin über jede Hilfe froh!!! besten Dank Michael Wulz
Schau mal bei den alten Beiträgen unter "PIC verschluckt zeichen" oder so. das hatte ich einen code für die USART hineingestellt. vieleicht hilft dir der weiter.
>Dies funktioniert soweit schon, jedoch wenn ich die Daten die ich aus dem Buffer hole anschau, sind diese alles andere als DMX512 Werte Leider kenne ich den PIC nicht, bisher nur AVR. Da klappt das mit DMX über den UART ohne Probleme. Das sind keine DMX-Werte, was Du empfängst? Das geht doch gar nicht. DMX sendet ja auch nur ein 8bit-breites Byte. Das DMX-Protokoll kennst Du doch hoffentlich? Begriffe wie Break und Mark und von dem Startcode und dem zweiten Stopp-bit hast Du schon gehört?
ich programmiere schon seit 4 jahren DMX Empfänger, nur bisher nach einem etwas eigenem Prinzip ;) nur ich brauch ab nun mehr Rechenleistung, und da hab ich das USART Modul des PIC Ausprobiert! Es funktioniert bereits! Ich bekomme immer wenn ein Byte im USART Buffer empfangen wurde einen Interrupt, dann messe ich die Zeit zwischen den Interrupts! Ist eine Zeit eimal größer 88µS dann habe ich die BREAK entdeckt, folgt darauf noch ein Startbyte welchs (normalerweise 0 ist) dann ist die Initialisierung fertig und ich kann die einzelnen DMX Werte (0...255)x512 einlesen;-) das einzige was halt blöd ist wenn mal ein MARK zwischen den Bytes größer ist als die Break und der darauffolgende DMX Wert 0 ist dann wird dies ebenfalls als Break identifiziert ;-( Was gibts da für Möglichkeiten, sowas vorzubeugen? mfg Michael
Beim AVR gibt es das sog. Fehler-Bit im UART-Register. Das ist gesetzt, wenn nach einem Byte kein korrektes Stop-Bit empfangen wurde. Außerdem kann der UART vom AVR auch 9 Datenbits auswerten. Nimmt man das 9. Bit als Stop-bit an, so kann man schon mal die gesamte Empfangsroutine an den UART abgeben. Die Auswertung des Break geschieht dann mit Hilfe des Fehlerbits. Schon bemerkt? Ein Break = 88µs = 2 Byte incl. Startbit+2Stopbit. Wenn ich also ein Zeichen empfangen habe, aber das Fehlerbit gesetzt ist gehen ich davon aus, daß nach einem weiteren Zeichen der Startcode beginnt. Leider kenne ich die PIC nicht. Mußt also schon selbst sehen, ob es dort ähnliche Möglichkeiten gibt. Dann sparst Du Dir das messen. Denn wer viel mißt, mißt Mist! Gralf
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.