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