Duck: Difference between revisions
ArneRossius (talk | contribs) No edit summary |
ArneRossius (talk | contribs) No edit summary |
||
(5 intermediate revisions by the same user not shown) | |||
Line 14: | Line 14: | ||
Diese Version besteht aus 34 LEDs auf einer Platine, welche in Entenform angeordnet sind und verschiedene Animationen abspielen. Der Taster befindet sich in einer Ecke der Platine, das Quaken wird über einen Mini-Lautsprecher auf der Platine wiedergegeben. | Diese Version besteht aus 34 LEDs auf einer Platine, welche in Entenform angeordnet sind und verschiedene Animationen abspielen. Der Taster befindet sich in einer Ecke der Platine, das Quaken wird über einen Mini-Lautsprecher auf der Platine wiedergegeben. | ||
== Varianten == | |||
Es existieren mehrere Varianten der Ente: | Es existieren mehrere Varianten der Ente: | ||
Line 20: | Line 22: | ||
* Eine auf 50% Größe reduzierte Version mit SMD-Bauteilen - siehe [[DuckMini]]. | * Eine auf 50% Größe reduzierte Version mit SMD-Bauteilen - siehe [[DuckMini]]. | ||
== | == Animationen == | ||
Die Animationen werden in einer eigenen Pseudo-Sprache aus Assemblermakros geschrieben. Die Datei "animations/ani_list.asm" enthält die Reihenfolge und Wiederholhäufigkeit der Animationen, in den Kommentaren am Anfang der Datei sind zudem die zur Verfügung stehenden Pseudo-Befehle erklärt. Die restlichen Dateien im "animations"-Verzeichnis sind Beispielanimationen. Um ein eigenes Animationsprogramm zu erstellen kann entweder die gesamte Animations-Abfolge in die Datei "ani_list.asm" geschrieben werden, oder mehrere Animationen können als asm-Dateien gespeichert und dann mit der ".include"-Direktive in "ani_list.asm" eingebunden werden. | |||
== Audio == | |||
Das auf Tastendruck abzuspielende Geräusch wird als Liste aus nicht vorzeichenbehafteten 8-Bit-Werten gespeichert, d.h. der Wert 128 (0x80) entspricht der Nulllinie (Stille). Der Wert 0 darf nicht in den Daten vorkommen, da er zur Erkennung des Endes verwendet wird. Der nutzbare Datenbereich ist daher 1 bis 255 (128±127). Der Microcontroller wird mit 8 MHz getaktet und verwendet eine 8-Bit-PWM zur Erzeugung des Audiosignals, woraus sich eine Abtastrate von 31.25 kHz ergibt. | |||
Um das Quaken der Ente durch eine anderes Geräusch zu ersetzen muss dieses zunächst in das beschriene Format gebracht werden (8 Bit, kein Vorzeichen, 31.25 kHz Abtastrate), was z.B. mit dem Programm Audacity möglich ist. Mit dem selben Programm kann man auch eventuelle Stille vor und nach der Aufnahme entfernen, da nur sehr begrenzt Speicher für die Audiodaten bereitsteht. Das Programm belegt zusammen mit den Beispiel-Animationen gut 1 KiB im Programmspeicher des ATmega8. Für die Audiodaten verbleiben also knapp 7 KiB, das entspricht einer Länge von ca. 227 ms. Nachdem die Audiodaten mit Audacity exportiert wurden, können Sie mit dem Perlscript im Verzeichnis "audio" in eine Assemblerdatei konvertiert werden, die dann nur noch in das Hauptprogramm "duck.asm" eingebunden werden muss (Zeile unter der Sprungmarke "audio:"). | |||
Die Schaltung wird von einem ATmega8 gesteuert, welcher die LEDs multiplext und bei Bedarf das Quaken abspielt. Der Lautsprecher wird per PWM angesteuert, so dass kein Digital-Analog-Wandler benötigt wird. Die Daten für das Quak-Geräusch belegen ca. drei | == Version 1.0 == | ||
Die Schaltung wird von einem ATmega8 gesteuert, welcher die LEDs multiplext und bei Bedarf das Quaken abspielt. Der Lautsprecher wird per PWM angesteuert, so dass kein Digital-Analog-Wandler benötigt wird. Die Daten für das Quak-Geräusch belegen ca. drei Viertel des Programmspeichers, der Rest wird für den Programmcode und die Animationen verwendet. Das Projekt wird mit 4.5-5 V betrieben, z.B. aus drei AA-Batterien. | |||
Für den Lautsprecher werden zwei PWM-Ausgänge verwendet, wobei der zweite Ausgang das inverse PWM-Verhältnis des ersten ausgibt. Auf diese Weise ist die mittlere Spannung zwischen den Ausgängen doppelt so hoch als wenn nur ein Ausgang verwendet würde, die Lautstärke erhöht sich entsprechend. Um noch mehr Lautstärke zu erreichen werden die beiden PWM-Signale von Gegentaktstufen aus je zwei Transistoren verstärkt, da sonst der Innenwiderstand der AVR-Pins den Strom durch den Lautsprecher sehr begrenzen würde. | |||
Die LEDs sind zu einer herkömmlichen 6x6-Matrix verschaltet, wobei allerdings die letzten zwei LEDs fehlen. Die Spalten sind direkt ohne Vorwiderstände mit den Ausgängen des AVR verbunden, so dass nur der interne Widerstand der AVR-Ausgänge von ca. 25 Ω den Strom durch die LEDs begrenzt. Die Ausgänge für die Zeilen werden von NPN-Transistoren verstärkt, um Helligkeitsschwankungen zu vermeiden. | Die LEDs sind zu einer herkömmlichen 6x6-Matrix verschaltet, wobei allerdings die letzten zwei LEDs fehlen. Die Spalten sind direkt ohne Vorwiderstände mit den Ausgängen des AVR verbunden, so dass nur der interne Widerstand der AVR-Ausgänge von ca. 25 Ω den Strom durch die LEDs begrenzt. Die Ausgänge für die Zeilen werden von NPN-Transistoren verstärkt, um Helligkeitsschwankungen zu vermeiden. | ||
=== Hardware === | |||
* [[:File:Duck-rev1.0-schematic.png|Schaltplan]] (PNG) | * [[:File:Duck-rev1.0-schematic.png|Schaltplan]] (PNG) | ||
Line 33: | Line 47: | ||
* [[:Media:Duck-instructions-rev1.0.pdf|Bausatz-Anleitung Rev. 1.0]] für Platine Rev 1.0 (englisch) | * [[:Media:Duck-instructions-rev1.0.pdf|Bausatz-Anleitung Rev. 1.0]] für Platine Rev 1.0 (englisch) | ||
== | === Firmware === | ||
* [[:Media:Duck-20161204.zip|Firmware Version 2016-12-04]] | * [[:Media:Duck-20161204.zip|Firmware Version 2016-12-04]] für ATmega8 oder ATmega8A | ||
* [[:Media:Duck-20151215.zip|Firmware Version 2015-12-15]] | * [[:Media:Duck-20151215.zip|Firmware Version 2015-12-15]] für ATmega8 oder ATmega8A | ||
=== | === Immer-An-Modus === | ||
Die | Mit einem Jumper zwischen Pins 4 (PB3) und 6 (Masse) auf der ISP-Stiftleiste kann der Immer-An-Modus aktiviert werden. In diesem Modus schaltet sich die Ente beim Anlegen der Spannungsversorgung automatisch ein und lässt sich auch nicht mit dem Taster abschalten. Um den Modus wieder zu verlassen reicht es, den Jumper wieder abzuziehen. | ||
== Version 2.0 == | |||
In der zweiten Version wurde der Controller durch einen ATtiny84 ersetzt. Die LEDs werden jetzt mit Charlieplexing angesteuert, so dass sie nur 7 Pins benötigen. Die Transistoren sind nun als Emitterfolger verschaltet, um kompatibel mit dem Charlieplexing-Verfahren zu sein, und die Basiswiderstände können auch entfallen. Eine Spalte der LEDs wird ausgewält, indem der Microcontroller den dazugehörigen Pin high steuert und der Transistor so die LED-Anoden mit Spannung versorgt. Die Kathoden-Pins aller LEDs in dieser Spalte, die aufleuchten sollen, werden low gesteuert, alle anderen Pins bleiben hochohmig (Eingang). Dieser Ablauf erfolgt für alle 6 Spalten und wiederholt sich dann (wie beim Multiplexing auch). | |||
Im Moment wird diese Version nur von Platinen halber Größe mit 3-mm-LEDs verwendet. | |||
=== Hardware === | |||
==== 3-mm-LEDs, halbe Größe ==== | |||
* [[:File:Duck-3mm-rev2.0-schematic.png|Schaltplan]] (PNG) | |||
* [[:Media:Duck-3mm-rev2.0.sch|Schaltplan]] (EAGLE 4.x) | |||
* [[:Media:Duck-3mm-rev2.0.brd|Platinenlayout]] (EAGLE 4.x) | |||
* [[:Media:Duck-3mm-instructions-rev1.0.pdf|Bausatz-Anleitung Rev. 1.0]] für Platine Rev 2.0 (englisch) | |||
=== Firmware === | |||
* [[:Media:Duck-tn84-2022-07-25.zip|Firmware Version 2022-07-25]] für ATtiny84 oder ATtiny84A | |||
=== Immer-An-Modus === | === Immer-An-Modus === | ||
Da in dieser Version die ISP-Pins auch LEDs ansteuern, kann kein Jumper mehr verwendet werden. Stattdessen wird der Immer-An-Modus aktiviert, indem beim Anlegen der Versorgungsspannung der Taster gedrückt gehalten wird. Um den Modus wieder zu verlassen, muss die Versorgungsspannung wieder abgeschaltet werden. | |||
== Fotos == | == Fotos == |
Latest revision as of 18:44, 1 March 2024
zur Projektübersicht | |
Jahr | 2015 |
Anzahl Pixel | 34 |
Graustufen / Farben | 8 Graustufen |
Leuchtmittel | 5-mm-LEDs |
Leistungsaufnahme | |
Kontaktperson | Arne Rossius |
Projekt-Website |
Die Duck (Ente) wurde von der "Ente" der French Embassy auf dem Camp Observe. Hack. Make. 2013 inspiriert. Dort gab es einen großen, mit "Do not press here" beschrifteten Taster, welcher ein Enten-Quaken abspielte, wenn man ihn drückte.
Diese Version besteht aus 34 LEDs auf einer Platine, welche in Entenform angeordnet sind und verschiedene Animationen abspielen. Der Taster befindet sich in einer Ecke der Platine, das Quaken wird über einen Mini-Lautsprecher auf der Platine wiedergegeben.
Varianten
Es existieren mehrere Varianten der Ente:
- Eine auf 75% Größe reduzierte Version (nur Prototyp).
- Eine auf 50% Größe reduzierte Version mit 3-mm-LEDs.
- Eine auf 50% Größe reduzierte Version mit SMD-Bauteilen - siehe DuckMini.
Animationen
Die Animationen werden in einer eigenen Pseudo-Sprache aus Assemblermakros geschrieben. Die Datei "animations/ani_list.asm" enthält die Reihenfolge und Wiederholhäufigkeit der Animationen, in den Kommentaren am Anfang der Datei sind zudem die zur Verfügung stehenden Pseudo-Befehle erklärt. Die restlichen Dateien im "animations"-Verzeichnis sind Beispielanimationen. Um ein eigenes Animationsprogramm zu erstellen kann entweder die gesamte Animations-Abfolge in die Datei "ani_list.asm" geschrieben werden, oder mehrere Animationen können als asm-Dateien gespeichert und dann mit der ".include"-Direktive in "ani_list.asm" eingebunden werden.
Audio
Das auf Tastendruck abzuspielende Geräusch wird als Liste aus nicht vorzeichenbehafteten 8-Bit-Werten gespeichert, d.h. der Wert 128 (0x80) entspricht der Nulllinie (Stille). Der Wert 0 darf nicht in den Daten vorkommen, da er zur Erkennung des Endes verwendet wird. Der nutzbare Datenbereich ist daher 1 bis 255 (128±127). Der Microcontroller wird mit 8 MHz getaktet und verwendet eine 8-Bit-PWM zur Erzeugung des Audiosignals, woraus sich eine Abtastrate von 31.25 kHz ergibt.
Um das Quaken der Ente durch eine anderes Geräusch zu ersetzen muss dieses zunächst in das beschriene Format gebracht werden (8 Bit, kein Vorzeichen, 31.25 kHz Abtastrate), was z.B. mit dem Programm Audacity möglich ist. Mit dem selben Programm kann man auch eventuelle Stille vor und nach der Aufnahme entfernen, da nur sehr begrenzt Speicher für die Audiodaten bereitsteht. Das Programm belegt zusammen mit den Beispiel-Animationen gut 1 KiB im Programmspeicher des ATmega8. Für die Audiodaten verbleiben also knapp 7 KiB, das entspricht einer Länge von ca. 227 ms. Nachdem die Audiodaten mit Audacity exportiert wurden, können Sie mit dem Perlscript im Verzeichnis "audio" in eine Assemblerdatei konvertiert werden, die dann nur noch in das Hauptprogramm "duck.asm" eingebunden werden muss (Zeile unter der Sprungmarke "audio:").
Version 1.0
Die Schaltung wird von einem ATmega8 gesteuert, welcher die LEDs multiplext und bei Bedarf das Quaken abspielt. Der Lautsprecher wird per PWM angesteuert, so dass kein Digital-Analog-Wandler benötigt wird. Die Daten für das Quak-Geräusch belegen ca. drei Viertel des Programmspeichers, der Rest wird für den Programmcode und die Animationen verwendet. Das Projekt wird mit 4.5-5 V betrieben, z.B. aus drei AA-Batterien.
Für den Lautsprecher werden zwei PWM-Ausgänge verwendet, wobei der zweite Ausgang das inverse PWM-Verhältnis des ersten ausgibt. Auf diese Weise ist die mittlere Spannung zwischen den Ausgängen doppelt so hoch als wenn nur ein Ausgang verwendet würde, die Lautstärke erhöht sich entsprechend. Um noch mehr Lautstärke zu erreichen werden die beiden PWM-Signale von Gegentaktstufen aus je zwei Transistoren verstärkt, da sonst der Innenwiderstand der AVR-Pins den Strom durch den Lautsprecher sehr begrenzen würde.
Die LEDs sind zu einer herkömmlichen 6x6-Matrix verschaltet, wobei allerdings die letzten zwei LEDs fehlen. Die Spalten sind direkt ohne Vorwiderstände mit den Ausgängen des AVR verbunden, so dass nur der interne Widerstand der AVR-Ausgänge von ca. 25 Ω den Strom durch die LEDs begrenzt. Die Ausgänge für die Zeilen werden von NPN-Transistoren verstärkt, um Helligkeitsschwankungen zu vermeiden.
Hardware
- Schaltplan (PNG)
- Schaltplan (EAGLE 4.x)
- Platinenlayout (EAGLE 4.x)
- Bausatz-Anleitung Rev. 1.0 für Platine Rev 1.0 (englisch)
Firmware
- Firmware Version 2016-12-04 für ATmega8 oder ATmega8A
- Firmware Version 2015-12-15 für ATmega8 oder ATmega8A
Immer-An-Modus
Mit einem Jumper zwischen Pins 4 (PB3) und 6 (Masse) auf der ISP-Stiftleiste kann der Immer-An-Modus aktiviert werden. In diesem Modus schaltet sich die Ente beim Anlegen der Spannungsversorgung automatisch ein und lässt sich auch nicht mit dem Taster abschalten. Um den Modus wieder zu verlassen reicht es, den Jumper wieder abzuziehen.
Version 2.0
In der zweiten Version wurde der Controller durch einen ATtiny84 ersetzt. Die LEDs werden jetzt mit Charlieplexing angesteuert, so dass sie nur 7 Pins benötigen. Die Transistoren sind nun als Emitterfolger verschaltet, um kompatibel mit dem Charlieplexing-Verfahren zu sein, und die Basiswiderstände können auch entfallen. Eine Spalte der LEDs wird ausgewält, indem der Microcontroller den dazugehörigen Pin high steuert und der Transistor so die LED-Anoden mit Spannung versorgt. Die Kathoden-Pins aller LEDs in dieser Spalte, die aufleuchten sollen, werden low gesteuert, alle anderen Pins bleiben hochohmig (Eingang). Dieser Ablauf erfolgt für alle 6 Spalten und wiederholt sich dann (wie beim Multiplexing auch).
Im Moment wird diese Version nur von Platinen halber Größe mit 3-mm-LEDs verwendet.
Hardware
3-mm-LEDs, halbe Größe
- Schaltplan (PNG)
- Schaltplan (EAGLE 4.x)
- Platinenlayout (EAGLE 4.x)
- Bausatz-Anleitung Rev. 1.0 für Platine Rev 2.0 (englisch)
Firmware
- Firmware Version 2022-07-25 für ATtiny84 oder ATtiny84A
Immer-An-Modus
Da in dieser Version die ISP-Pins auch LEDs ansteuern, kann kein Jumper mehr verwendet werden. Stattdessen wird der Immer-An-Modus aktiviert, indem beim Anlegen der Versorgungsspannung der Taster gedrückt gehalten wird. Um den Modus wieder zu verlassen, muss die Versorgungsspannung wieder abgeschaltet werden.
Fotos
Mehr Fotos unter http://arne.blinkenarea.org/Duck/gallery.htm.