www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Empfangsroutine erweitern + Treibersuche


Autor: dmxler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, vor einiger zeit hatte ich schonmal hier geschrieben, wegen einer 
DMX Empfangsroutine, die ich "studiert" habe und etwas umgeschrieben.
Jetzt habe ich nochmal eine Frage dazu.
UART, Empfang usw. sind soweit geklärt. Der Empfang läuft in einer ISR 
ab und nach dem alles erledigt wurde (Startbyte erkannt, Startadresse 
eingelesen und erkannt) wird per rjmp der Befehl:
handle_byte:

    clr dmx_status

    ;;VERARBEITUNG;;

    reti

angesprungen.

Dort können also die DMX Daten verarbeitet werden.
Jetzt möchte ich damit LED's dimmen. Da es eine Matrix (4x4 RGB) wird 
reichen also die Timer bzw. Hardware-PWM eines ATMegas nicht mehr aus.
(Dazu gleich nochmal die Frage nach Treibern)
In die Variable DMX_Byte lese ich das UDR ein. Jetzt habe ich allerdings 
ja nicht nur einen Kanal den ich auswerten möchte.
Angenommen ich möchte 3 Kanäle auswerten. (Rot Grün Blau) Wie mache ich 
das denn?
Ich habe mir dazu das Thema Mehrfachverzweigungen durchgelesen. Aber 
eigtl ist das ja nicht sinnvoll, denn wenn die erste passende Adresse 
abgearbeitet wurde wird ja zum Ende gesprungen?
in den Variablen frct_High und frct_Low habe ich die Startadresse 
eingelesen. Die Startadresse des Moduls soll also die PWM für die Rote 
LED sein. Das darauffolgende Byte, Startadresse + 1 soll die PWm für die 
Grüne LED sein usw.
Wie arbeitet man das "geschickt" ab?
Danke schonmal für Antworten diesbezüglich.

Meine zweite Frage bezieht sich ebenfalls auf dieses Thema.
Später soll eine Matrix mit 4x4 RGb LED's angesteuert werden. Dafür 
reichen die Hardware-PWM Kanäle eines Megas ja nicht mehr aus, und ich 
möchte ungern 48 kanäle per SoftPWM machen.
jetzt gibt es ja Treiber Bausteine, die die PWM übernehmen, z.B. 
"WS2801".
Diesem speziellen Baustein kann ich ja "einfach" das empfange Byte 
übermitteln und es übernimmt sozusagen die PWM.
Jetzt wollte ich fragen, ob jemand schon Erfahrung mit solchen Treibern 
hat oder sogar mal verglichen hat? Gibt es bei diesen Treiber eine Art 
"Referenzprodukt", was wirklich gut ist? Also hohe PWM-Frequenz, hohe 
Auflösung usw.
Natürlich wäre es auch schön, wenn es Treiber gibt, die gleich mehr als 
3 Kanäle können.

Vielen Dank schon einmal für evtl. Antworten.

Grüße

Autor: dmxler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe gerade nochmal gegooglet und mir andere Projekte mit 
ähnlicher Empfangsroutine angeschaut.
Dort werden die benötigten DMX_Bytes in den RAM geschrieben, und dieser 
dann im main ausgelesen.
Da ich noch kein Assembler-Profi bin hapert es da ein wenig bei mir.
Erstmal müsste ich ja irgendwie sagen, wieviele Bytes ab der 
eingestellten Adresse überhaupt im RAM gespeichert werden sollen.
Und dann das reinschreiben und rauslesen ist auch noch etwas unklar.
In C könnte ich ja ein Array machen mit z.B. 3 Feldern (also 3 Bytes ab 
Startadresse werden in den RAM gelegt).
Und dann kann ich ja auf jedes Element aus dem Array wieder einzeln 
zugreifen.
Aber wie funktioniert/realisiert man sowas in Assembler?

Danke

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.