Archiv der Kategorie: Elektronik

Funkel_01

Auf der Suche nach einer sinnvollen Anwendung, um teilentleerten Lithium-Knopfzellen noch den Rest an Energie auszusaugen, bevor man sie in´s Recycling gibt, habe ich mir eine kleine Schaltung zusammengefrickelt. Meist funktionieren Geräte mit halbleeren Batterien nicht mehr richtig oder stellen den Betrieb ganz ein. Aus Fernbedienungen für Funksteckdosen oder Innenraumthermometern fallen immer mal wieder Knopfzellen wie die CR2032 an, die noch mehr als die Hälfte an Energie enthalten. Mit diesem Projekt kann der Rest der Ladung noch sinnvoll verbraten werden, beispielsweise als Signalgeber an der Stelle, wo man den Autoschlüssel zuletzt hingelegt hat… Weiterhin kann die Schaltung im Modellbau Anwendung finden. Weil ich mit dem Prototypen zufrieden bin, habe ich auch gleich noch ein Layout dafür gezeichnet, um die Serienfertigung anzustoßen ;-).
Konkret geht es hier um einen winzigen Mikrocontroller, der mit 3 Pins 6 LEDs ansteuert. Wie das? Nun, das Prinzip ist nicht neu und nennt sich „Charlieplexing“, was eine besondere Form des „Multiplexing“ ist, falls dieser Begriff geläufiger ist. Hierbei nutzt man die Tatsache, dass ein Controller einen Pin auf 0 (also Masse) auf 1 (also Plus) oder hochohmig (nichts von alledem) schalten kann. Dadurch kann man mehrere LEDs parallel an die Pins anschalten, genauer gesagt: antiparallel und so mit einer geschickten Ansteuerung immer die gewünschte LED leuchten lassen. Bei 2 Pins, kann man maximal 2 LEDs steuern, bei 3 Pins sind es schon 6 LEDs und bei 4 Pins gar 12 LEDs…

So sieht das ganze Konstrukt aus. Als Controller werkelt ein Microchip ATTiny10 (früher ATMEL), ein Winzling im SOT-23 Gehäuse mit 3 nutzbaren I/O-Pins.

Die Bauteilewerte sind:
C1: Keramik, Tantal oder Polymer, 10µF 6.3V (1206)
C2: Keramik 100nF/16V (0402)
R1: 10kOhm (0402)
R2…R4: jeweils 150 Ohm bis 330 Ohm, je nach LED und Spannung (0402)

Die Schaltung funktioniert von 2V bis 5.5V, wobei bei niedrigen Spannungen nur rote LEDs in Frage kommen, die eine Flussspannung um 1.6V haben. Blaue und weiße LEDs lassen sich erst ab etwa 4V Eingangsspannung verwenden. Es sollten immer gleiche LEDs mit der selben Farbe für einen Aufbau verwendet werden, da es sonst prinzipbedingt Leuchtunterschiede gibt.

Der Controller ist, aufgrund seines kleinen Speichers von nur 1kByte, in Assembler programmiert. Über das jeweils in den Controller geladene Programm kann man mit den LEDs, je nach Anwendung , die lustigsten Blinkeffekte ausgeben. Hierbei kann man entscheiden, ob das Ganze wie in meinem Fall sehr lange aus einer Batterie blinken soll und somit sehr wenig Strom verbrauchen soll, oder ob es als Effekt in einer Umgebung arbeitet, wo die Spannung ohnehin immer zur Verfügung steht. Der Kreativität sind nur duch den kleinen Speicher Grenzen gesetzt.

Die Platine ist 14.7 x 13.5mm klein, also recht kompakt. Das Auflöten der Teile erfordert eine spitze Pinzette, wahrscheinlich eine Sehhilfe und zwei ruhige Hände ;-). Die Platinen kann man recht günstig bei Online-Anbietern bestellen, ich habe mit AISLER gute Erfahrungen gemacht, was Qualität, Schnelligkeit und Preis angeht.

EAGLE Dateien:
CharlieBlinker_T10.zip

Programm zum Aufspielen mit Microchip Studio 7:
Funkel01_Test1.zip

Für das Programmieren des Controllers ist ein Programmer mit TPI-Programmierschnittstelle notwendig (ATMEL ICE, STK600, AVR-ISP mkII, AVR-Dragon) oder ein entsprechend programmierter Arduino. Um den ATTiny10 programmieren zu können, muss die Betriebsspannung 4.5…5.0V betragen.

Hier ein kurzes Video von der Funktion oben verlinkten Programms, als Signalgeber mit minimalem Stromverbrauch. Der Controller schläft 4 Sekunden, rotiert die LEDs durch und schläft wieder. Im Schlaf mit eingeschaltetem Watchdog verbraucht der Zwerg nicht einmal 10µA.

Das erste Programm, Stromaufnahme gemittelt nur etwa 200µA

Lauflichtblinker
Hier ein Programm für einen Blinker wie in einem modernen Auto. Dieses Progamm ist kein Stromsparprogramm, der Controller ist dauerhaft aktiv. Alle LEDs können quasi zeitgleich leuchten.

Funkel_01_Strip_Light_Flasher


Zufallsgenerator
Hier ein Programm, bei dem jede LED durch einen Zufallsgenerator angesteuert wird. Wie auf der alten Enterprise im Maschinenraum ;-).

Funkel_01_Randomizer


Spannungsgesteuerter Bargraph
Dieses Programm gibt die Höhe der angeschlossenen Betriebsspannung als Leuchtbalken aus. Im Programmkopf können Parameter für die ADC-Startspannung und die Schrittweite des jeweils höheren Leuchtpunktes eingestellt werden. Als Anwendung kommen beispielsweise ein Schnelltester für LiPo- oder LiIon-Akkus oder ein Spannungswächter in Frage. In diesem Fall sollten rote LEDs verbaut werden, da sie die niedrigste Flussspannung haben, die in diesem Beispiel für die Messung der Betriebsspannung in einer Dunkelpause als Referenz genutzt wird. Somit werden keine zusätzlichen Bauteile benötigt.

Funkel_01_VC-Bargraph


Eieruhr
Dieses Programm enthält einen Countdow-Zähler für 6 Minuten. Die aktuelle Zeit wird durch die Länge des Leuchtbands angezeigt, die obere Minute blinkt. Jede Minute wird das Leuchtband um eine LED kürzer. Ist die Zeit abgelaufen, wird ein schnelle „Knight-Rider-Leuchteffekt“ für 10 Sekunden angezeigt, danach geht der Controller in den Tiefschlaf mit unter 0.1µA Stromaufnahme. Daher kann die Schaltung dauerhaft an der Batterie verbleiben. Die Zeit kann mit einem Taster zwischen GND und Reset-Pin (RST Lötauge auf der Platine) neu gestartet werden. Im Programmkopf kann ein Parameter eingegeben werden (Standardwert: 199), um die Ganggenauigkeit der Sekunde einzustellen.

Funkel_01_Countdown-Timer


Weitere Programme mit anderen Lichteffekten und Funktionen werden folgen.

Zoom H5 / Zoom H6 Remote Protokoll

Hier finden sich einige Live-Mitschnitte des Zoom H5 / Zoom H6 Remote-Protokolls zwischen der Kabelfernbedienung und dem Recorder.

Die Beschreibung des Zoom H6 Protokolls erfolgt weiter unten.

 

Zoom H5 Remote Protokoll

 

Vielleicht möchte jemand den Zoom H5 nutzen, um diesen zu einer (DSLR) Kamera zu synchronisieren. Dabei bietet sich das Starten und Stoppen mittels des Remote-Anschlusses am Recorder an. Die Daten werden mit 2400 Baud, Startbit, 8 Datenbits, keine Parität, 1 Stoppbit seriell im Voll-Duplex übertragen. Die Versorgungsspannung und die Datenpegel liegen bei 3.3V.

Die Pinbelegung des Fernbedienungssteckers ist im Bild zu sehen, welches ich mir hier geliehen habe: http://www.apm-motionpictures.de/de/h4ncontrol

Die Mitschnitte wurden mit einem Logic-Analyzer erstellt. Alle Bilder lassen sich vergrößern, wenn man sie anklickt. Die beiden oberen Zeilen geben die Datentelegramme der Fernbedienung wieder, die beiden unteren Zeilen die Datentelegramme des Recorders (als Bitstrom und dekodiert). Der Recorder sendet viele der LED-Kommandos mehrfach, immer wenn sich an den LED-Zuständen im Recorder etwas ändert. Die Auswertung in der Eigenbaulösung muss daher jeden empfangenen Befehl verarbeiten. Es werden immer dann LED-Kommandos zur Fernbedienung gesendet, wenn entweder am Recorder eine Taste gedrückt wird, die den Zustand der LED(s) verändert, oder wenn eine solche Taste an der Fernbedienung gedrückt wird. Von der Fernbedienung muss jeder Befehl nur ein einziges Mal gesendet werden. Der Recorder verschickt stets 3-Byte-Befehle, das erste Byte hat immer Bit 7 und Bit 3 gesetzt. Die Fernbedienung verschickt stets 2-Byte-Befehle, das erste Byte hat immer Bit 7 gesetzt. Eine gedrückte Taste überträgt einen bestimmten Wert größer/gleich 0x80, 0x01. Eine losgelassene Taste überträgt immer den Wert 0x80, 0x00.

Die Fernbedienung funktioniert erst nach einer erfolgreichen Anmeldung am Recorder. Diese Anmeldung ist hier zu sehen:

 

Nachfolgend werden alle Datentelegramme gezeigt, die beim Drücken einer Taste auf der Fernbedienung von dieser gesendet werden, gegebenenfalls mit einer Antwort durch den Recorder, falls LEDs verändert werden.

Taste Volume +:Taste Volume -:Taste L einschalten:Taste L ausschalten:Taste R einschalten:Taste R ausschalten:Taste 1 einschalten:Taste 1 ausschalten:Taste 2 einschalten:Taste 2 ausschalten:Wiedergabe Kanäle L/R starten:Pause:Stop Kanäle L/R:Schneller Vorlauf:Schneller Rücklauf:Aufnahmestart:Aufnahmestopp:

 

Nachfolgend werden alle Datentelegramme beim Drücken einer Taste auf dem Recorder gezeigt, die eine Veränderung der LEDs bewirken.

Taste L einschalten:Taste L ausschalten:Taste R einschalten:Taste R ausschalten:Wiedergabe Kanäle L/R starten:Wiedergabe Kanäle L/R stoppen:Wiedergabe Kanal 1 starten:Wiedergabe Kanal 1 stoppen:Wiedergabe Kanal 2 starten: Wiedergabe Kanal 2 stoppen:Aufnahme Kanäle L/R starten:Aufnahme Kanäle L/R stoppen:Aufnahme Kanal 1 starten:Aufnahme Kanal 1 stoppen:Aufnahme Kanal 2 starten:Aufnahme Kanal 2 stoppen:

 

Daraus ergibt sich folgende Zuordnung der Bits innerhalb der Befehlssequenzen:

 

Zoom H6 Remote Protokoll

 

Das Protokoll des Zoom H6 ähnelt stark dem des Zoom H5. Unterschiede sind die beiden zusätzlichen Kanäle 3 und 4, sowie eine andere Anmeldesequenz, die so aussieht:

 

Die Bitzuordnung der einzelnen Befehlssequenzen ist folgendermaßen gestaltet:

Debug-Anwendung für Gabotronics XMINILAB v2.3

Zum schnellen Debuggen von Controllerprojekten habe ich auf o.g. Entwicklungsbrett vor einiger Zeit mal eine Anwendung programmiert, um über ein serielles Protokoll (1 Leitung und Masse) verschiedenste Daten während der Programmerstellung oder für Tests sichtbar machen zu können. Hierbei können selbst kleinste Controller mit kleinem Programmspeicher und wenig oder gar keinem RAM (ATTiny13, ATTiny10…) ohne viel Aufwand an einem beliebigen I/O-Pin Daten senden und das XMINILAB macht diese auf seinem OLED sichtbar. Die Routinen zur Ausgabe sind beispielsweise in diesem Projekt enthalten:

Ladegerät-Tuning für Motorola T80/T81

Infos über das XMINILAB gibt es hier:

http://www.gabotronics.com/development-boards/xmeg…

Die Einspeisung des Signal findet an Pin „EXT“ des XMINILAB statt, der gegenüber Masse positiv sein muss.

Auf dem Foto ist eine Beispielausgabe zu sehen.

Die Datenübergabe kann HEX, DEZIMAL und ASCII sein, außerdem kann man auf die UART des XMINILAB routen und den Bargraf am rechten Rand mit 8 Bit füllen, um schnelle Signale eines einzelnen Bytes zu sehen. Vielleicht hat jemand Lust, sich das Ganze auf sein angestaubtes XMINILAB zu spielen… 😉

Ich benutze den Sniffer so gut wie jeden Tag, beruflich und auch privat.

Hier die Spezifikation zur Erzeugung des Datensignals beim sendenden Controller:

1. Displaypin Spezifikation:

– 0->1->0->1 – Pulsbreite: jeweils >=1µs bis maximal 30µs, symmetrisch!
– Startbit: 3 Flankenwechsel -> Pause
– Logisch 1: 2 Flankenwechsel -> Pause
– Logisch 0: 1 Flankenwechsel -> Pause

Pause zwischen Bits: >=5µs, jedoch mindestens 2,5-fache Pulsbreite
Pause zwischen Bytes: >=30µs

Die Pulse eines Bits dürfen nicht wesentlich jittern.
Pausen zwischen den Bits sind unkritisch und können vom Sender gestreckt werden. Gleiches gilt für Pausen zwischen Bytes.

Laufzeit für ein komplettes Zeichen inklusive Header und Adresse bei Minimal-Timing: ~180µs

Die Polarität der Daten ist irrelevant.
Der Pegel bleibt auf dem letzten Pegel eines Datenframes stehen, bis ein neuer Frame kommt.
Man kann hier wunderbar die Pin-Toggle-Funktion nutzen, die viele Controller von Haus aus bieten.

2. Datenformat:

2.1. Header

0000  LCD, HEX Daten
0001  LCD, DEZ Daten
0010  LCD, ASC Daten
0011  reserviert

0100  LED
0101  reserviert
0110  reserviert
0111  reserviert

1000  RS232, HEX Daten
1001  RS232, DEZ Daten
1010  RS232, ASC Daten
1011  reserviert

1100  reserviert
1101  reserviert
1110  reserviert
1111  reserviert

2.2. Adresse

xxxx xxxx  absolute Position auf dem LCD oder in der UART-Zeile

2.3. Datenbyte

xxxx xxxx  Nutzdaten, die dargestellt werden sollen

2.4. Aufbau Datenframe

LCD:  Startbit, Header (4Bit), Adresse (8Bit, 0x00-0xFF), Datenbyte (8Bit)
RS232:  Startbit, Header (4Bit), Adresse (8Bit, 0x00-0x27), Datenbyte (8Bit)
LED:  Startbit, Header (4Bit), Adresse (8Bit, 0x00), DatenByte (8Bit, LLLLLLLL, 1 Bit pro LED)

 

Download:

Firmware für das XMINILAB:

Xminilab_Sniffer_XM32A4U_ATM6