www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software USART mit Interrupt?


Autor: excelsior (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: excelsior (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: excelsior (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.