Hi, ich möchte eine Software USART zum Empfang von DMX-Daten programmieren. Die Übertragungsrate des DMX-Protokolls liegt bei 250kHz. Ist ein Timer-Interrupt, der alle 4µS auslöst (= Bitlänge bei 250kHz) genau genug? Wenn ich einen 20 MHz-Quarz nehmen, dann habe ich beim PIC (16F628) einen Befehlszyklus von 5 MHz. Funktioniert das per per Timer & Interrupt oder ist das zu "ungenau"? Hat jemand Erfahrungen? Thx
Hi, ich habe sowas bisher immer nur mit 9600Baud-Signalen gemacht. Dabei habe ich allerdings immer mit der vierfachen Frequenz abgetastet, d.h. mit einem Timerinterrrupt, der alle 26us ausgelöst wird. Ich denke, dass es nicht ausreichend ist, jedes Bit nur einfach abzutasten, da Du ja auch das Startbit richtig erkennen musst (Es sei denn, Du machst es mit einem Flankeninterrupt, um das Startbit zu erkennen). Weiterhin war es bei mir so, dass das ganze sehr viel Rechenleistung gefressen hat (ST7 mit 8MHz) und ich hatte ja eine wesentlich geringere Datenrate. Du willst ja bestimmt auch noch andere Aufgaben erledigen. Ich bin mir also nicht so sicher, ob dass ganze bei dir hinhaut. Aber vielleicht ist ja nocht jemand anderer Meinung Viele Grüße, Ralf www.ralf-hochhausen.de
Genau wäre es schon, aber zu langsam. Offensichtlich verwendest du einen PIC mit 20MHz -> ein Befehl braucht 1/5MHz = 200ns; Pro Bit hast du nun Zeit für 4uS / 200ns = 20 Befehle, da geht sich gerade der Sprung in die Interruptroutine und Abspeichern vom Status aus. grüsse leo9
Hi, hmm, mit den 20 Befehlen habe ich auch ausgerechnet. Allerdings muss der PIC sonst nichts Rechnen. Der PAP sieht so aus: (While not Startbitflanke... Warte) (Startbit erkannt, jetzt Timer-IRQ aktivieren, warten bis IRQ Flag gesetzt wurde (Polling) (Bit am Eingang lesen und in Register schieben) ... ... (8x) ... (Erstes Stopbit prüfen) (Zweites Stopbit prüfen) (Byte-Nummer mit eigener Adresse Prüfen) ->Ja.. (Wert auf PORTB legen und Sprung zum Anfang) ->Nein.. (Sprung zum Anfang) Wenn ich das ganze nicht mit IRQ's lösen würde, sondern überall Pausen von 4µS einbauen würde, wäre es dann besser? Ich programmiere mit C, weshalb ich auch nicht genau sagen kann, wieviel Zeit jeder C-Befehl braucht?! Thx schonmal
@excelsior: Es geht trotzdem nicht; wenn du per Software pollst müßtest du mindestens mit doppelter Frequenz abtasten, also nur noch 10 Befehle. Mit diesen müßtest du das Bit einlesen, speichern, in irgendeiner Form einen Counter zählen und prüfen ob bereits 10 Bit empfangen wurden. das geht sich nicht einmal in assembler aus. Die zweite Variante wäre auf eine Flanke zu warten und dann alle 4us zu samplen (beim ersten mal natürlich nur 2us), das könnte sich ausgehen du kannst aber das Byte nicht interpretieren, da du zwischen Sample vom Stopbit und dem nächsten Startbit minimal nur 2us Zeit hast. Und wenn du nicht einmal einen Channel-Counter mitzählen lassen kannst brauchst du das DMX-Signal auch nicht auslesen ;-) Irgendwas sollte der PIC ja mit den Daten machen, oder ....? Nimm einen up mit HW Uart und du bist alle Sorgen los. Was willst du denn eigentlich ansteuern? grüsse leo9
Ich möchte ein paar Geräte DMX-fähig machen. Unter anderem zwei Nebelmaschinen. Mein PIC hat einen Hardware USART, der bei 20 MHz Takt sogar locker mehr als 300kHz Bustakt verarbeiten kann. Allerdings weiß ich nicht genau wie ich daran gehen muss, weil ich noch nie mit USART gearbeitet habe. Warte ich auf den Reset (88µS lang) "manuell" und schalte nach der ersten Flanke des ersten Startbits den USART ein, oder lasse ich den die ganze Zeit laufen? Wie kann ich meinem USART klar machen, daß mein Paket ein Startbit hat (L), zwei Stopbits (H) und das nach 88µS das ganze wieder von vorne losgeht? Btw. DMX ist doch ein asynchrones Übertragungsverfahren, oder?! Im Anhang hab ich mal kurz den DMX-Signalplan! (DMX-Infos: http://www.soundlight.de/techtips/dmx512/dmx512.htm)
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.