Forum: Mikrocontroller und Digitale Elektronik Software USART mit Interrupt?


von excelsior (Gast)


Lesenswert?

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

von Ralf (Gast)


Lesenswert?

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

von leo9 (Gast)


Lesenswert?

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

von excelsior (Gast)


Lesenswert?

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

von leo9 (Gast)


Lesenswert?

@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

von excelsior (Gast)


Angehängte Dateien:

Lesenswert?

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
Noch kein Account? Hier anmelden.