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.