thinkJDs Blog WhooHoo es blinkt!!!

26Mai/115

MoodPxl facts Teil 1

"Bomb the facts bitch!"

Dieser Aufforderung komme ich gerne nach! Hier also ein paar Fakten über die technische Umsetzung von MoodPxl:

Die Hardware ist nicht all zu spannend und besteht hauptsächlich aus:

Die Komponenten werden dann fachgerecht zusammengefrickelt um schnell mit dem spassigen Teil des Projekts zu beginnen, der Firmware. Diese hat folgende Aufgaben  zu erfüllen:

  • Erzeugen der PWM, in diesem Fall vier Kanäle mit je 10bit Auflösung.
  • Kommunikation mit dem Funkmodul RFM12.
  • Temperaturmessung und Steuerung des Lüfters.
  • Gammakorrektur für jeden Farbkanal.
  • Ein Fader für schöne Farbübergänge in variabler Zeit.
  • Ne kleine Scriptengine um mehrere Befehle nacheinander ausführen zu können.
  • Ein bissel rechnen um HSV-Farbwerte in RGB umzurechnen.

Erstes Problem, die Gammakorrektur:

Die PWM-Au?ösung von 10bit entspricht theoretisch 1024 Helligkeitsstufen. Nach den ersten Versuchen die Stufen von 0 bis 1024 zu durchlaufen, fällt auf, dass die Helligkeit anfänglich sehr stark zunimmt und später nur noch leicht steigt. Der Grund liegt in der Kennlinie des Auges. Das Helligkeitsemp?ndenist so ausgelegt, dass wir bei sehr wenig Helligkeit (Straßenbeleuchtung) und bei extrem großer Helligkeit (Sommertag) gut sehen können, es ist also nicht linear. Um dem Auge einen linearen Farbverlauf vorzugaukeln, muss die Helligkeit angepasst werden. Dazu berechnet man für jeden Helligkeitswert den entsprechenden Korrekturwert. Am Ende erhält man die folgende Kennlinie:

 

Von der ehemaligen 10 bit Auflösung bleiben so noch 8 bit übrig. Die Werte sind alle vorberechnet und in einer Tabelle im Programm abgelegt. Das belegt etwas mehr Speicher, spart aber teure Rechenzeit.

Zweites Problem, das Funkprotokoll:

Daten via Funk zu übertragen ist nicht unbedingt trivial, vor allem dann nicht, wenn man versucht das widerspenstige RFM12 Funkmodul mit einem völlig anderen Funkchip (CC1100 von TI) zum Kommunizieren zu überreden. Von dem grundsätzlichen Problem wie der Frequenzauswahl und so weiter mal abgesehen, benötigt man vor ein stabiles Funkprotokoll.

Auf der folgenden Grafik könnt ihr sehen, wie ein MoodPxl Datenpaket aufgebaut ist. Es entspricht weitestgehend dem Funkprotokoll der RFM12 Lib von Das Labor. Die Lib selbst war für meine Zwecke unbrauchbar, daher habe ich das Protokoll noch einmal selbst implementiert.

  • Die blau markierten Felder werden, richtige Kon?guration vorausgesetzt, vomFunkchip CC1100 automatisch generiert.
  • Die Präambel 0xAAAA entspricht einer Abfolge von 16 High/Low Über-gängen. Sie wird gesendet, um dem Empfänger das Synchronisieren auf den Takt zu ermöglichen.
  • Das Syncpattern 0x2DD4 ist von dem Funkmodul RFM12 fest vorgegeben. Wenn dieses Datenwort empfangen wird, beginnt das Modul damit,die folgenden Daten in den Empfangspu?er zu schreiben. Dieser ist so konfiguriert, dass er beim Empfang von acht bit ein Interrupt auslöst. In der Interruproutine wird geprüft ob es sich um einen Empfangsinterrupt handelt (das Funkmodul unterstützt noch einige mehr) und falls ja, wird das Byte abgeholt.
  • Das Längenbyte gibt die Paketlänge ab dieser Position an. Da es keinSchlusszeichen gibt, dient es dem Empfänger, um das Ende der Übertragung zu erkennen.
  • Das Adressbyte des Masters ist immer 0x00, die Bytes 0x01 bis 0xFE kön-nen für die Slaves verwendet werden. Der Adresse 0xFF ist die Broadcastadresse. Mit ihr können alle Slaves in der Reichweite gleichzeitig adressiert werden.
  • Nach dem Header (Länge und Adresse) folgt eine Checksumme. Wenn die Checksumme nicht stimmt oder der Slave nicht adressiert ist, wird der Empfang ab hier eingestellt. Die Checksumme selbst ist eine einfache Längsparität, also eine XOR-Verknüpfung der Datenfelder mit 0xFF.
  • Die Nutzdaten, hier kommen die Befehle und deren Parameter rein. Es ist übrigens nicht empfehlenswert mehr als 30 Byte über die Luftschnittstelle zu verschicken. Das Funkmodul kommt sonst irgendwann aus dem Tritt.
  • Das letzte Byte der Übertragung ist eine CRC Prüfsumme über das komplette Paket.

Für den Anfang sollten das genug Fakten sein. Wollt ihr mehr wissen? Dann Schreibt mir einen Kommentar :-)

thinkJD

 

Kommentare (5) Trackbacks (0)
  1. Mich würden noch der ungefähre Preis für die Teile und der Zeitaufwand sowie der Schwierigkeitsgrad interessieren

    • Materialkosten im Moment etwa 100€. Ich bin aber dabei die Platinen neu zu designen und bestücken zu lassen. Da geht noch was.

      Mit Zeitaufwand meinst da da die Entwicklung? Ich habe etwa 150 bis 200 Stunden dran gebaut und programmiert. Nachbauen dürfte ein bis zwei Tage dauern.

      Schwierigkeitsgrad ist sehr subjektiv, je nach Skills. Das von grundauf zu bauen ist sicher kein Anfängerprojekt. Nachbauen sollte gehen, wenn man einen Lötkben an der richtigen Seite anpacken kann ;-)

      Die Hauptarbeit ist die Software und die ist soweit fertig.

  2. Fakten, Fakten, Fakten …. Sie sind dran, JD… ^^


Leave a comment

(required)

Noch keine Trackbacks.