Forum: Mikrocontroller und Digitale Elektronik Empfangsroutine erweitern + Treibersuche


von dmxler (Gast)


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

von dmxler (Gast)


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

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.