Buntich: Unterschied zwischen den Versionen
Tut (Diskussion | Beiträge) (→Software) |
Tut (Diskussion | Beiträge) |
||
(21 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Datei:BuntichZeichnungKlein1.png]] | [[Datei:BuntichZeichnungKlein1.png]] | ||
− | + | <gallery caption="Fotos"> | |
+ | Datei:2012_02_13_03.jpg|Buntich | ||
+ | Datei:Foto2108.jpg|Die RGB LED Matrix | ||
+ | Datei:2012-07-30_Buntich_Night.jpg|Buntich mit Schirm @ Night | ||
+ | Datei:2012-07-30_Buntich_Night-2.jpg|Buntich mit Schirm @ Night | ||
+ | </gallery> | ||
== News == | == News == | ||
+ | Buntich ist nun weitgehend fertig und hat auch seinen matten Rahmen. Ob ich nochmal eine Variante mit Tischtennisballhälften als Pixel mache, weiss ich nicht. Hier ein Link zu einem kurzen Video, wo Buntich draussen getestet wurde: http://www.youtube.com/watch?v=iXtga5ojqQ8 | ||
+ | |||
+ | Dank tatkräftiger Unterstützung rückt die Fertigstellung der Buntich-Hardware nun in greifbarer Nähe: Es wurden Pixel-Platinen gelötet, Kabelkanäle gefräst und die Stromversorgung der Zeilen ist verkabelt. In kürze dürften die ersten Zeilen im System komplett werden. Vielen Dank an alle Helfer! Aber nicht zu früh freuen, meine nächste LED-Schandtat ist schon in der Vorbereitung: Das [[LedBrett]]... | ||
+ | |||
Der Bootloader klappt jetzt. Damit lassen sich alle Buntich-Nodes am Bus gleichzeitig programmieren. Der Bootloader belegt dazu 1KB von den 16KB des ATmega16. Die Software auf dem Host läuft in der Kommandozeile unter Windows und Linux. Die Host-Software versucht das Hauptprogramm im Controller über einen Broadcast-Befehl zu beenden um in den Bootloader zu gelangen. Ansonsten wartet der Bootloader nach dem Einschalten der Stromversorgung etwa 4 Sekunden auf Befehle. Die Programmierung der 15KB dauert etwa 8 Sekunden und wird in Blöcken zu je 512 Byte durchgeführt. | Der Bootloader klappt jetzt. Damit lassen sich alle Buntich-Nodes am Bus gleichzeitig programmieren. Der Bootloader belegt dazu 1KB von den 16KB des ATmega16. Die Software auf dem Host läuft in der Kommandozeile unter Windows und Linux. Die Host-Software versucht das Hauptprogramm im Controller über einen Broadcast-Befehl zu beenden um in den Bootloader zu gelangen. Ansonsten wartet der Bootloader nach dem Einschalten der Stromversorgung etwa 4 Sekunden auf Befehle. Die Programmierung der 15KB dauert etwa 8 Sekunden und wird in Blöcken zu je 512 Byte durchgeführt. | ||
Zeile 81: | Zeile 90: | ||
== Wann? == | == Wann? == | ||
− | === Später === | + | === Später vielleicht... === |
* Spektrum-Analyser (AVR + Mikrofon + Software) | * Spektrum-Analyser (AVR + Mikrofon + Software) | ||
* Spiele (Nibbles, Tetris, etc.) | * Spiele (Nibbles, Tetris, etc.) | ||
* Taschenlampen-Pong | * Taschenlampen-Pong | ||
* Bildschirmlupe | * Bildschirmlupe | ||
+ | * Linux-Master-Software zur Ansteuerung des Displays | ||
+ | * Flimmerfreie Helligkeitserkennung über LEDs | ||
− | === | + | === Fertig === |
− | * | + | * Rahmen mit matter Folie als Diffusor |
+ | * Softwaregrundlage für Buntichansteuerung in Processing | ||
* Aufbau von allen 16 Buntich-Zeilen | * Aufbau von allen 16 Buntich-Zeilen | ||
* Lötworkshop Bestückung und Verkabelung der LED-Pixel-Platinen | * Lötworkshop Bestückung und Verkabelung der LED-Pixel-Platinen | ||
− | * | + | * Bootloader für Massenprogrammierung der Zeilen |
− | + | ||
− | + | ||
* Software zur automatischen Adresszuweisung (Display-Enumeration) | * Software zur automatischen Adresszuweisung (Display-Enumeration) | ||
* Buntich-Master (Master-AVR und Seriel-2-RS485 Umsetzung mit PC-Schnittstelle) | * Buntich-Master (Master-AVR und Seriel-2-RS485 Umsetzung mit PC-Schnittstelle) | ||
Zeile 109: | Zeile 119: | ||
== Software == | == Software == | ||
+ | === Node Software === | ||
+ | ==== Helligkeitssteuerung der LEDs ==== | ||
+ | Die LEDs werden über eine Art Pulsdichtemodulation angesteuert um möglichst viele und schöne Helligkeitsstufen zu ermöglichen. Ein Timer, der bei etwa 50.000 Inkrementen überläuft, zerlegt die LED-Zeit in 127 Zeitslots. Die Zeitslots haben allerdings keine einheitliche Länge, sondern werden von dunklen zu hellen Stufen immer länger, um der Gamma-Funktion zu folgen. Es wird ein Gamma von 2,2 benutzt, damit die empfundene Helligkeit für das menschliche Auge linear erscheint. Außerdem werden die Zeitslots auch nicht nacheinander, sondern nach einem bestimmten Algorithmus verwürfelt durchlaufen. So ergibt sich statt einer PWM eine Pulsdichtenmodulation, die den Vorteil hat, bei nicht extremen Helligkeitsstufen deutlich weniger zu flimmern. | ||
+ | |||
+ | ==== Kommandos der Leisten ==== | ||
+ | * BUNTICH_CMD_DISPLAY_DATA + 24 Bytes RGB für die LEDs lädt ein neues Helligkeitsset und startet im Hintergrund die nötigen Vorberechnungen für die Pulsdichtemodulation | ||
+ | * BUNTICH_CMD_DISPLAY_SYNC Tauscht intern die Buffer und bringt so das zuvor übertragene Helligkeitsset auf die LEDs | ||
+ | * BUNTICH_CMD_ENUMERATE_RESET Löscht die aktuell eingestellte Adresse | ||
+ | * BUNTICH_CMD_ENUMERATE_ENUM + 1 Byte: Setzt die Adresse, sofern der ENUM-Eingang auf 0 liegt. Wenn die Adresse angenommen wurde, wird der ENUM-Ausgang auf 0 gelegt, damit der nächste Node eine Adresse bekommen kann. | ||
+ | * BUNTICH_BROADCAST_BOOTLOADER + 1 Byte = BUNTICH_BROADCAST_BOOTLOADER -> Springt in den Bootloader. | ||
+ | |||
=== Bootloader === | === Bootloader === | ||
Über den Bootloader können alle Zeilen auf dem seriellen Bus gleichzeitig programmiert werden. Die Idee dabei ist, dass alle Zeilen die Kommandos und Daten gleichzeitig empfangen, aber der Reihe nach bestätigen. Dazu warten die Zeilen mit dem Senden solange, bis die Enum-In-Leitung 0 wird. Nachdem die Zeile das Byte gesendet hat legt sie für kurze Zeit die Enum-Out-Leitung auf 0, worauf die nächste Zeile senden wird. Da die erste Zeile fest auf 0 liegt fängt sie immer automatisch an. | Über den Bootloader können alle Zeilen auf dem seriellen Bus gleichzeitig programmiert werden. Die Idee dabei ist, dass alle Zeilen die Kommandos und Daten gleichzeitig empfangen, aber der Reihe nach bestätigen. Dazu warten die Zeilen mit dem Senden solange, bis die Enum-In-Leitung 0 wird. Nachdem die Zeile das Byte gesendet hat legt sie für kurze Zeit die Enum-Out-Leitung auf 0, worauf die nächste Zeile senden wird. Da die erste Zeile fest auf 0 liegt fängt sie immer automatisch an. | ||
Zeile 124: | Zeile 145: | ||
== Downloads == | == Downloads == | ||
+ | Bootloader für BuntichNodes und Host-Software: [[Datei:Buntichboot_V1.00.zip]], [[Datei:Buntichloader_V1.01.zip]] | ||
+ | |||
[[Datei:BuntichNodeSchaltplan.png|800px|Schaltplan BuntichNode]]<br \> | [[Datei:BuntichNodeSchaltplan.png|800px|Schaltplan BuntichNode]]<br \> | ||
Zeile 133: | Zeile 156: | ||
[[Kategorie:Projekte]] | [[Kategorie:Projekte]] | ||
+ | |||
+ | [[Datei:Buntich dots 004.png|160px|right|thumb]] | ||
+ | === Animationen === | ||
+ | * Mehrere Animationen und automatischer Wechsel: [[Datei:Buntich_multi2-120306a.zip]] | ||
+ | * Mehrere Animationen in einem: [[Datei:Buntich_multi1-120226b.zip]] | ||
+ | * Farbball bewegt: [[Datei:buntich_bunt2.zip]] | ||
+ | * Bunte Streifen 1: [[Datei:Buntich_stripes_001.zip]] | ||
+ | * Dots mit Farb-Übergang - V004 [[Datei:Buntich dots 004.zip]] | ||
+ | * Dots mit Farb-Übergang - V005 [[Datei:Buntich dots 005.zip]] | ||
+ | * Rote oder blaue Pille? - [[Datei:Buntich The Matrix 001-120226a.zip]] | ||
+ | |||
+ | === Präsentationen === | ||
+ | * Vorbereitung für WebMontag 12.3.2012 [[Datei:Buntich@WebMontag 2012-03-12 005.zip]] | ||
+ | * Buntich erklärt sich selbst - Demo für WebMontag 12.3.2012 [[Datei:Buntich self demo 005.zip]] |
Aktuelle Version vom 1. August 2012, 08:27 Uhr
Inhaltsverzeichnis
News
Buntich ist nun weitgehend fertig und hat auch seinen matten Rahmen. Ob ich nochmal eine Variante mit Tischtennisballhälften als Pixel mache, weiss ich nicht. Hier ein Link zu einem kurzen Video, wo Buntich draussen getestet wurde: http://www.youtube.com/watch?v=iXtga5ojqQ8
Dank tatkräftiger Unterstützung rückt die Fertigstellung der Buntich-Hardware nun in greifbarer Nähe: Es wurden Pixel-Platinen gelötet, Kabelkanäle gefräst und die Stromversorgung der Zeilen ist verkabelt. In kürze dürften die ersten Zeilen im System komplett werden. Vielen Dank an alle Helfer! Aber nicht zu früh freuen, meine nächste LED-Schandtat ist schon in der Vorbereitung: Das LedBrett...
Der Bootloader klappt jetzt. Damit lassen sich alle Buntich-Nodes am Bus gleichzeitig programmieren. Der Bootloader belegt dazu 1KB von den 16KB des ATmega16. Die Software auf dem Host läuft in der Kommandozeile unter Windows und Linux. Die Host-Software versucht das Hauptprogramm im Controller über einen Broadcast-Befehl zu beenden um in den Bootloader zu gelangen. Ansonsten wartet der Bootloader nach dem Einschalten der Stromversorgung etwa 4 Sekunden auf Befehle. Die Programmierung der 15KB dauert etwa 8 Sekunden und wird in Blöcken zu je 512 Byte durchgeführt.
Es gibt Fotos vom Reflow-Workshop, in dem wir die BuntichNode-Platinen bestückt haben! Vielen Dank an Philipp für die Fotos.
Buntich dimmt mittlerweile (zumindest eine Zeile) sowohl in Hardware (Datei:BuntichNodeFancyStartup.mpg) als auf in Software. Als nächstes geht es dann an die Optimierung der Node-Software, damit die Farben auch wirklich gut aussehen.
Der BuntichMaster ist jetzt auch aufgebaut, damit können nun vom PC aus die Zeilen über ihren Bus angesprochen werden.
Die erste Zeile mit 8 LEDs wurde vorläufig aufgebaut, hier ein Video: Datei:BuntichLeisteFirstBlink.mp4
Die Platinen für die BuntichNodes sind mittlerweile eingetroffen. Ebenso wurden genug Pixelplatinen geätzt und müssen nun noch gebohrt und bestückt werden. Die ersten 8 Pixelplatinen wurden aufgebaut. Eine Platine zum Test der Pixelplatinen wird zur Zeit aufgebaut.
Es gibt ein paar Fotos von den Fortschritten der Platinenherstellung der BuntichNode-Platinen. Zur Verfügung gestellt von unserem Sponsor Beta LAYOUT
Philipp hat auch mal die Platine BuntichPixel gerendert:
Was?
Buntich wird eine flexibel erweiterbare RGB-Matrix. Es besteht aus einzelnen Zeilen mit je 8 RGB-LEDs, die über ein Bussystem hinter- oder untereinander verbunden werden können. Das ganze kann dann von einem Master (ein Mikrocontroller, PC oder auch anderes Gerät) als ganzes angesteuert werden.
Hier mal ein paar Randinformationen:
- Jeweils ein ATmega16 für 8 RGB-LEDs
- Kein Multiplexing, die LEDs hängen direkt am Port des Controllers (daher max. 20mA pro LED)
- 24 Kanal Software PWM mit etwa 1000 PWM Stufen
- Wegen logarithmischer Helligkeitswahrnehmug des Auges etwa 64 Helligkeitsstufen nutzbar
- RS485 Bus um stressfrei die Daten mit 1 MBit/s auf das Display zu bringen
- Je ein RS485-Bus für Senden und Empfangen (kein Halbduplexbetrieb nötig)
- Alle LEDs können auch als Helligkeitsdetektoren genutzt werden
- Automatische Adresszuweisung der Displayzeilen via Kommunikationspins zu Nachbarzeilen
Warum?
- Weil zu einem Hackerspace einfach etwas buntes blinkendes gehört
- Weil wir ein großes Display zum spielen haben wollen
- Weil es cool ist
- Weil es in X und Y Richtung beliebig erweiterbar ist
- Weil es zeigt, wie ein Bussystem funktioniert
- Weil hier viele an Software und Hardware mitbasteln können
- Weil es geht! (*)
(*)...viele Grüße von Tut an das Labor in Bochum!
Wann?
Später vielleicht...
- Spektrum-Analyser (AVR + Mikrofon + Software)
- Spiele (Nibbles, Tetris, etc.)
- Taschenlampen-Pong
- Bildschirmlupe
- Linux-Master-Software zur Ansteuerung des Displays
- Flimmerfreie Helligkeitserkennung über LEDs
Fertig
- Rahmen mit matter Folie als Diffusor
- Softwaregrundlage für Buntichansteuerung in Processing
- Aufbau von allen 16 Buntich-Zeilen
- Lötworkshop Bestückung und Verkabelung der LED-Pixel-Platinen
- Bootloader für Massenprogrammierung der Zeilen
- Software zur automatischen Adresszuweisung (Display-Enumeration)
- Buntich-Master (Master-AVR und Seriel-2-RS485 Umsetzung mit PC-Schnittstelle)
- Aufbau der ersten Buntich-Zeile
- Reflow-Workshop für LED-Zeilen-Control-Platinen Bestückung
- Platinen für LED-Zeilen bestellen (inkl. Schablone, 16 Stück bei PCB-POOL)
- Ätzworkshop für Herstellung der LED-Pixel-Platinen (Toner-Transfer-Methode)
- LEDs für 16 LED-Zeilen bestellen (Bürklin)
- Bauteile für 16 LED-Zeilen bestellen (Elpro, Reichelt)
- Platinenlayout für LED-Pixel-Platinen
- Softwaregerüst für ATmega16
- Machbarkeit 24-Kanal Software-PWM zeigen
- Schaltung für LED-Zeile entwickeln und zeichnen
- Platine für LED-Zeile layouten
Software
Node Software
Helligkeitssteuerung der LEDs
Die LEDs werden über eine Art Pulsdichtemodulation angesteuert um möglichst viele und schöne Helligkeitsstufen zu ermöglichen. Ein Timer, der bei etwa 50.000 Inkrementen überläuft, zerlegt die LED-Zeit in 127 Zeitslots. Die Zeitslots haben allerdings keine einheitliche Länge, sondern werden von dunklen zu hellen Stufen immer länger, um der Gamma-Funktion zu folgen. Es wird ein Gamma von 2,2 benutzt, damit die empfundene Helligkeit für das menschliche Auge linear erscheint. Außerdem werden die Zeitslots auch nicht nacheinander, sondern nach einem bestimmten Algorithmus verwürfelt durchlaufen. So ergibt sich statt einer PWM eine Pulsdichtenmodulation, die den Vorteil hat, bei nicht extremen Helligkeitsstufen deutlich weniger zu flimmern.
Kommandos der Leisten
- BUNTICH_CMD_DISPLAY_DATA + 24 Bytes RGB für die LEDs lädt ein neues Helligkeitsset und startet im Hintergrund die nötigen Vorberechnungen für die Pulsdichtemodulation
- BUNTICH_CMD_DISPLAY_SYNC Tauscht intern die Buffer und bringt so das zuvor übertragene Helligkeitsset auf die LEDs
- BUNTICH_CMD_ENUMERATE_RESET Löscht die aktuell eingestellte Adresse
- BUNTICH_CMD_ENUMERATE_ENUM + 1 Byte: Setzt die Adresse, sofern der ENUM-Eingang auf 0 liegt. Wenn die Adresse angenommen wurde, wird der ENUM-Ausgang auf 0 gelegt, damit der nächste Node eine Adresse bekommen kann.
- BUNTICH_BROADCAST_BOOTLOADER + 1 Byte = BUNTICH_BROADCAST_BOOTLOADER -> Springt in den Bootloader.
Bootloader
Über den Bootloader können alle Zeilen auf dem seriellen Bus gleichzeitig programmiert werden. Die Idee dabei ist, dass alle Zeilen die Kommandos und Daten gleichzeitig empfangen, aber der Reihe nach bestätigen. Dazu warten die Zeilen mit dem Senden solange, bis die Enum-In-Leitung 0 wird. Nachdem die Zeile das Byte gesendet hat legt sie für kurze Zeit die Enum-Out-Leitung auf 0, worauf die nächste Zeile senden wird. Da die erste Zeile fest auf 0 liegt fängt sie immer automatisch an.
Eintritt in den Bootloader
Nach einem Reset startet der Bootloader und sendet zur Kontrolle einmal das Zeichen 'R'. Innerhalb von 4 Sekunden muss eine 4-Byte Codesequenz (0xEE, 0xDD, 0x11, 0xAA) übertragen werden, auf die eine Pause von etwa 100ms folgen muss. Verstreichen die 4 Sekunden oder wird nach 16 empfangenen Bytes nicht die Codesequenz erreicht, so wird der Bootloader verlassen. Ist alles in Ordnung antworten die Nodes mit der Versionsnummer des Bootloaders (typ. '1').
Befehle im Bootloader
- 'n' -> tut nichts, alle antworten aber mit 'o'
- 'r' -> springt ins Hauptprogramm, vorher antworten alle mit 'o'
- 'p' + Adress-Low-Byte + Adress-High-Byte + 512 Byte Daten + 1 Byte Prüfsumme (Summe über Adresse und Daten) -> 512 Bytes Flashen, danach antworten alle mit 'o' wenn erfolgreich, sonst 'f'
Befehle im Hauptprogramm
- 0xf8 + 0xf8 (als Broadcast behandelt) -> Bootloader anspringen
Downloads
Bootloader für BuntichNodes und Host-Software: Datei:Buntichboot V1.00.zip, Datei:Buntichloader V1.01.zip
Hier die Eagle-Files der BuntichNode-Platine: Datei:BuntichNodeV1.zip
Hier die Eagle-Files der BuntichPixel-Platine:
Datei:BuntichPixelV1.zipAnimationen
- Mehrere Animationen und automatischer Wechsel: Datei:Buntich multi2-120306a.zip
- Mehrere Animationen in einem: Datei:Buntich multi1-120226b.zip
- Farbball bewegt: Datei:Buntich bunt2.zip
- Bunte Streifen 1: Datei:Buntich stripes 001.zip
- Dots mit Farb-Übergang - V004 Datei:Buntich dots 004.zip
- Dots mit Farb-Übergang - V005 Datei:Buntich dots 005.zip
- Rote oder blaue Pille? - Datei:Buntich The Matrix 001-120226a.zip
Präsentationen
- Vorbereitung für WebMontag 12.3.2012 Datei:Buntich@WebMontag 2012-03-12 005.zip
- Buntich erklärt sich selbst - Demo für WebMontag 12.3.2012 Datei:Buntich self demo 005.zip