Freitag, 25. Februar 2011

automatische Dimmung der QLOCKTWO

Ein offener Punkt in dem QLOCKTWO-Nachbau ist immer noch die lichtabhängige Dimmung. Eberhard hat die Idee gehabt, dazu den "Output Enable"-Pin der 74HC595-Shift-Register zu nehmen. Mit Hilfe dieses Pins kann man die Ausgänge der Shift-Register ein- und ausschalten. Verbindet man ihn mit einem Pin vom Arduino, der PWM (Pulse Width Modulation) kann, sollte man die Matrix dimmen können.

Eberhard hatte seine OE-Pins allerdings schon fest an Ground gelegt und als Alternative die Stromversorgung der UDN2981A-Verstärker-Chips über einen Transistor an einen PWM-Pin vom Arduino angeschlossen. Bezüglich der Dimmung scheint das gut zu funktionieren, allerdings brennen ihm aus bislang ungeklärten Gründen immer wieder mal LEDs durch.

Ich habe daraufhin versucht, die Dimmung über die OE-Pins mit meiner Test-QLOCKTWO zu implementieren. Dabei hat sich gezeigt, daß die Taktung des Matrix-Multiplexings und die Taktung des PWM-Signals interferieren und es dadurch zum Flackern kommt.

Weitere Nachforschungen haben ergeben, daß die Methode digitalWrite() eher langsam ist (weil sie einige Prüfungen vornimmt). Das ist meistens kein Problem, möchte man allerdings hochfrequent eine Matrix ansteuern, kann es zu langsam sein. Es gibt einige Stellen im Web, die sich mit schnellerem Schreiben auf die Ports beschäftigen, wie z.B.

aber der Code hat bei mir nicht funktioniert. Ich habe daraufhin in dem Source-Code von Arduino nachgesehen, wie die Funktion digitalWrite() aufgebaut ist (Open-Source sei dank):


void digitalWrite(uint8_t pin, uint8_t val) {
uint8_t timer = digitalPinToTimer(pin);
uint8_t bit = digitalPinToBitMask(pin);
uint8_t port = digitalPinToPort(pin);
volatile uint8_t *out;

if (port == NOT_A_PIN) return;

// If the pin that support PWM output, we need to turn it off
// before doing a digital write.
if (timer != NOT_ON_TIMER) turnOffPWM(timer);

out = portOutputRegister(port);

if (val == LOW) {
uint8_t oldSREG = SREG;
cli();
*out &= ~bit;
SREG = oldSREG;
} else {
uint8_t oldSREG = SREG;
cli();
*out |= bit;
SREG = oldSREG;
}
}


Mit der Hilfe dieses Code-Schnipsels und ein paar Initialisierungen im Konstruktor kann man sich dann schnelle Funktionen bauen (hier am Beispiel des Schreibens auf die Serial-Clock-Leitung):


void ShiftRegister::fastDigitalWriteToClock(uint8_t val) {
if (val == LOW) {
uint8_t oldSREG = SREG;
cli();
*_clockOut &= ~_clockBit;
SREG = oldSREG;
}
else {
uint8_t oldSREG = SREG;
cli();
*_clockOut |= _clockBit;
SREG = oldSREG;
}
}


Jetzt sind die Interferenzen nicht mehr bei jeder "Dimmstufe" so stark wahrzunehmen. Ich muß noch ein bisschen experimentieren, um die richtigen, interferenzfreien Stufen zu finden, aber als Zwischenschritt bin ich schon mal ganz zufrieden.

Donnerstag, 24. Februar 2011

wireless QLOCKTWO, Teil 2

In einem älteren Post habe ich von dem Versuch berichtet, den QLOCKTWO-Nachbau mit 4 Eneloop-Akkus zu betreiben. Nach den Messungen und Berechnungen hätte er 5 Tage laufen sollen. Meine Versuche haben leider nur eine Laufzeit von 3 Tagen ergeben, also eher unbrauchbar. Vielleicht muß ich mir doch einmal gute Meßgeräte zulegen...

Dienstag, 22. Februar 2011

Das ewige DCF77-Problem

Stefan hat mich auf ein Problem mir dem DCF77-Empfänger aufmerksam gemacht, das ich anfangs nicht nachvollziehen konnte. Er sagte, bei ihm käme (wenn DEBUG eingeschaltet ist) immer "Checkbit P3: Date failed" und die Zeit würde nie übernommen werden. Interessanterweise kam das bei mir nie.

Zum Hintergrund: In der Originalversion der DCF77-Library von J. M. Lietaer wurden die Check-Bits, die im DCF77-Telegramm enthalten sind, nicht ausgewertet. Diese Funktionalität habe ich dann nachgerüstet, da ich immer wieder schlechte Zeitstempel empfangen habe.

Nach vielen Versuchen und mit viel Herumprobieren (inzwischen habe ich den Empfänger auf dem Steckbrett nachgebaut, das ist handlicher als eine ganze QLOCKTWO) habe ich festgestellt, daß wir irgendwie beide recht haben. Der Aufbau der Library bewirkt, daß das letzte Bit im Telegramm nicht gelesen wird und immer 0 ist. Dadurch werden Telegramme an bestimmten Tagen als gültig angsehen (wenn das Bit 0 sein soll) und an anderen als ungültig (wenn es 1 sein müsste).

Weitere Nachforschungen haben ergeben, daß das ganze Telegramm verschoben empfangen wird:

0011000110110010001010110010101000101000011000100010001000
_bitCount: 58
Decoding telegram...
Minutes: 26
Hours: 22
Date: 21
Day of week: 1
Month: 2
Year: 2011
Check-bit P3: date failed.
--------------RAZZASMMMMMMMPSSSSSSPDDDDDDWWWMMMMMYYYYYYYYP
0011000110110010001010110010101000101000011000100010001000


In den letzten beiden Zeilen wird das Telegramm nochmal mit Bedeutung ausgegeben. Wer sich etwas mit dem Aufbau des Telegramms (siehe einen der älteren Posts hier) beschäftigt hat, kann erkennen, daß alle Bits um 1 nach links gehören. J. M. Lietaer hat das einfach ausgeglichen, in dem er die Bits verschoben auswertet. Und damit wurde mir auch klar, warum er die Check-Bits nicht eingebaut hat. Es funktioniert einfach nicht.

Die Library einfach mal eben anpassen geht wegen ihres Aufbaus nicht. Ich werde nicht darum herumkommen, zumindest den Bit-Empfangsteil neu zu schreiben. Bis dahin hat man entweder nicht jeden Tag eine DCF77-genaue Zeit, oder man muß die Zeile, in der das Check-Bit P3 geprüft wird, auskommentieren.

Sonntag, 20. Februar 2011

LED ist nicht gleich LED

Ich habe mal drei LEDs genommen, um zu sehen, wie sie sich in einer QLOCKTWO machen würden. Eine ist eine LED mit 40° Abstrahlwinkel von Reichelt, eine ist von eBay und deutlich günstiger, hat aber auch nur einen Öffnungswinkel von 5° und eine ist eine Superflux "warm white" von einem der vielen LED-Shops im Internet mit einem Abstrahlwinkel von 120°. Ohne eine Diffusorfolie sehen alle relativ gleich aus.
Mit einer Diffusor-Folie allerdings sieht man einen deutlichen Unterschied.
Die billige eBay-LED hat einen sehr engen Bereich, den sie beleuchtet. Die LED von Reichelt bestrahlt einen größeren Bereich, grenzt aber immer noch recht scharf ab. Die Superflux-LED beleuchtet einen ähnlichen Bereich wie die von Reichelt, läuft aber an den Rändern sanfter aus. Und sie macht das mit einem Öffnungswinkel von 120°, d.h., sie gibt deutlich mehr Licht ab! Ob das Warm-weiß gefällt, ist natürlich geschmackssache. Fazit: Wer es sich zutraut, sollte für eine QLOCKTWO Superflux-LEDs nehmen.

Freitag, 18. Februar 2011

MythBusters - burning DVD laser

Im Make: Magazine, ich glaube in Volume 10, wird beschrieben, wie man aus einem DVD-Brenner die rote Laser-Diode ausbaut, um sich dann einen "burning laser" zu bauen. Dem muß ich natürlich nachgehen, nicht um Flugzeuge beim Landeanflug zu blenden, sondern aus reiner Neugierde. Und welcher echte Bastler möchte nicht einen "burning laser" haben. Nachdem ich einen alten PC "geerbt" habe, stand dem Projekt "MythBusters" nichts mehr im Wege.

Den DVD-Brenner zu zerlegen war eher eine einfache Aufgabe. Neben der optischen Einheit fallen dabei auch einige andere interessante Bastel-Teile wie z.B. Motoren, Zahnräder, Bleche, Platinen etc. ab.

Die optische Einheit zu zerlegen ist schon ein größeres Problem. Das erste, was ich gelernt habe: die große Linse in der Mitte der Einheit ist nicht der Laser oder irgendein aktives Bauteil. Es ist nur eine Linse, die aber über winzige Elektromagnete ihre Position verändern kann. Da DVD-Brenner ja auch CD-ROMs brennen und lesen können, gibt es zwei Lasereinheiten: eine mit einem roten Strahl und eine im nicht sichtbaren Spektrum.

Die rote Laser-Diode auszubauen war problematisch, da sie mit dem Aluminium-Druckguss-Gehäuse verklebt ist, ich nehme an, das dient auch der Wärmeableitung. Leider habe ich beim Heraushebeln das Gehäuse der Diode verbogen und damit ihr Innenleben zerstört.

Meine Erkenntnis: Ob man mit einem DVD-Brenner einen "burning laser" bauen kann, weiss ich noch nicht. Der Ausbau der Diode muß auf jeden Fall noch geübt werden. Ich warte auf das nächste "Schrottlaufwerk" und werde dann wieder berichten.

Neue Firmware

Ich habe die "Firmware" der Selbstbau-QLOCKTWO stark überarbeitet und in Klassen aufgeteilt, dadurch wird der Sketch (Qlockthree.pde) hoffentlich auch für Wenigprogrammierer etwas durchsichtiger. Die DCF77-Library habe ich auch in das Sketch-Verzeichnis aufgenommen, einerseits macht das weniger Probleme, wenn das Sketch-Verzeichnis nicht unter "Arduino" liegt, andererseits habe ich ja die Bibliothek modifiziert und komme dann nicht mehr mit dem Original in Konflikt.

Donnerstag, 17. Februar 2011

wireless QLOCKTWO

Nachdem mich Ramona & Alex auf einen möglichen Akku-Betrieb der Nachbau-QLOCKTWO angesprochen haben, habe ich mal den Stromverbrauch gemessen. Der liegt bei 0,14 Ampere im "Maximalbetrieb", also wenn alle LEDs eingeschaltet sind. Durch das Multiplexing ist aber natürlich tatsächlich immer nur eine Reihe an, also maximal 12 LEDs (mit den Ecken). Im normalen Betrieb braucht sie 0,04 Ampere. Das entspricht 0,24 Watt bei 6 Volt. Mit vier 1200 mAh-Akkus sollte die Uhr dann 4800 mAh / 40 mA = 120 h = 5 Tage laufen.
Ich habe daraufhin in meine Test-QLOCKTWO ein Vierer-Pack Eneloop-Akkus eingebaut und werde berichten, wie lange sie durchgehalten hat. Und eine elegante Tauschmöglichkeit für das Akku-Pack müsste dann auch noch gefunden werden.

Mittwoch, 16. Februar 2011

QLOCKTWO-Video

Bernd hat mich auf ein Video aufmerksam gemacht, in dem gezeigt wird, wie eine QLOCKTWO entsteht. Unbedingt sehenswert!

Freitag, 11. Februar 2011

Glimmende LEDs in der Matrix

Immer wieder mal kommt nach der Fertigstellung eines QLOCKTWO-Nachbaus die Frage auf, warum die LEDs über den eigentlich leuchtenden LEDs ganz leicht glimmen. Die Vermutung bislang war, daß die Darlington-Arrays in den Verstärker-Chips (UDN2981A) nicht schnell genug abschalten können, also mit der Multiplexing-Rate nicht mithalten können.
Ich habe mal versucht, diese These nachzuvollziehen. Dazu habe ich gemessen, wie oft eigentlich die loop()-Schleife pro Sekunde durchlaufen wird. Bei mir sind das 3736 Durchläufe pro Sekunde, ein Durchlauf benötigt ergo 0,00027 Sekunden. Da die Matrix im Multiplexing-Verfahren angesteuert wird und 16 Reihen enthält wird eine Reihe in 0,00027 Sekunden/16=16 μSekunden geschaltet. Aus dem Datenblatt der Chips kann man ersehen, daß der "Turn-Off Delay" bei 5 μSekunden (typisch) und 10 μSekunden (maximal) liegt. Da sind wir bei unserem 16 μSekunden-Zyklus (für Ein- und Ausschalten) tatsächlich ganz schön nah dran.
Bei den Fußnoten des Datenblattes findet sich bei genauem Hinsehen: "NOTES: Turn-off delay is influenced by load conditions. Systems applications well below the specified output loading may require timing considerations for some designs, i.e., multiplexed displays [...]". Der minimale "Load", also Strom, ist mit 350 Milliampere angegeben, meinen Messungen nach braucht die ganze QLOCKTWO gerade mal 160 Milliampere.

Zusammengefasst: Eigentlich ist der UDN2981A-Chip für die QLOCKTWO ungeeignet. Besser geeignet wären schnelle Schalttransistoren (der 2STX2220 hat z.B. ein Turn-Off Delay von 250 Nano-Sekunden). Wer das Glimmen vermeiden möchte, muß auf Schalttransistoren wechseln (und hat damit natürlich eine Menge mehr Bauteile auf dem Board). Mea culpa - aber ich bin eben "nur" Experimental-Elektroniker und mich hat das Glimmen bislang nicht gestört.

Donnerstag, 10. Februar 2011

Software und das RBBB

Ich bekomme immer wieder mal Anfragen, wie denn die Software auf den RBBB kommt. Die Kurzfassung lautet: "Mit der Arduino-IDE über den USB-BUB aufspielen, fertig". Aber das ist vielleicht doch sehr kurz. Daher möchte ich es etwas ausführlicher erklären...

Zuerst muß man sich im Klaren darüber sein, daß das RBBB (Really Bare Bones Board von JEE-Labs) ein sogenannter "Arduino-Clone" ist. Wer es ganz genau nimmt: ein Clone vom Arduino-UNO ohne den USB-Teil.

Und was ist Arduino? Arduino ist ein Ansammlung von Techniken, um Designern und Nicht-Ingenieuren die Verwendung von Microcontrollern einfach zu ermöglichen. Das bedeutet, Arduino ist eine Entwicklungsumgebung (IDE, Integrated Development Environment) mit der man einfach Programme schreiben kann, eine Sammlung von Bibliotheken und eine Sammlung von Microcontroller-Boards für verschiedene Anwendungs-Szenarien (bis hin zu Kleidung und dem sogenanntem "wearable computing"). Die Hardware und Software sind Open-Source. Dadurch kann jeder, der Lust hat, die Boards nachbauen. Und dadurch sind die Boards wiederum ziemlich günstig geworden. Aber ein Arduino-UNO kostet immernoch ca. 26,- €. Für Entwicklungen ist das O.k., für den dauerhaften Einsatz in fertigen Projekten aber zu teuer (und zu sperrig).
Und jetzt schließt sich der Kreis: Für den dauerhaften Einsatz in Projekten gibt es günstige Arduino-Clones, wie eben genau das RBBB oder auch den Ardweeny (der aber in Europa irgendwie nicht aufzutreiben ist). Ein Punkt, warum diese Clones günstig sind, ist die fehlende USB-Unterstützung, die man ja nur einmal beim Aufspielen der Software benötigt. Der Arduino-UNO hat einen Chip an Bord, der die Umsetzung von USB auf TTL (was der Atmel ATmega-Microcontroller benötigt) übernimmt. Genau das ist der USB-BUB!

Und nach dieser länglichen Erklärung wird der Aufspielvorgang vielleicht klarer:

  1. Die Arduino-IDE herunterladen und installieren (FTDI-Treiber nicht vergessen).

  2. Wie im Bild den USB-BUB an das RBBB stecken, dann das USB-Kabel an den USB-BUB und den Rechner anstecken.

  3. Über "Tools->Serial-Port" den richtigen virtuellen seriellen Port auswählen.

  4. Über "Tools->Board" das richtige Board auswählen (Duemilanove with ATmega328).

  5. Den "Sketch" (wie es in der Arduino-Sprache heisst) in der IDE laden. Wer wissen möchte, warum es "Sketch" heisst, kann mal nach "Processing" googeln.

  6. Über einen Knopf, der wie ein Pfeil nach rechts auf ein Punktgitter aussieht, die Software auf das RBBB spielen.


Das dauert ca. 15 Sekunden und eine LED auf dem USB-BUB flackert dabei. Dann ist die Sofware auf dem RBBB und bleibt dort auch ohne Strom erhalten (aber kann natürlich jederzeit neu Aufgespielt werden).

Mittwoch, 9. Februar 2011

Erste Aktivitäten zum großen Bastelwochenende

Durch meine QLOCKTWO-Nachbau-Aktivität (und dem erfreulichen Ergebnis) haben sich einige Freunde & Bekannte zusammengefunden, die auch eine QLOCKTWO bauen möchten, sich aber alleine nicht so richtig trauen. Wir haben daraufhin beschlossen, ein großes QLOCKTWO-Nachbau-Wochendende zu veranstalten. Die größte Hürde dabei, nämlich die Terminfindung, haben wir bereits gemeistert (Doodle sei dank).
Die zweite große Hürde war, einen Folienplotter zu finden, der die Folien zu einem akzeptablen Preis schneidet. Oder als Alternative einen Siebdrucker. Tatsächlich haben wir von einem freundlichen Designer geplottete Folien bekommen, die aber nicht ausgelöst waren. Das Auslösen ist zeitintensiv (zumindest für Ungeübte) und damit teuer.

Da wir die Folien erst in ca. 5 Wochen benötigen, wollten wir sie zuerst zwischenlagern, damit dann jeder Teilnehmer seine Folie selbst auslösen kann (oder entgittern, wie der Fachmann sagt). Allerdings wurden wir darauf hingewiesen, daß der Klebstoff der Folie bei längerer Lagerung anfängt, wieder ineinander zu fliessen. Also haben wir uns gestern hingesetzt und die Folie ausgelöst, was besonders beim "A" ein ziemliche Fummelei ist.

Damit sind wir jetzt für das Wochenende komplett, die Bauteile, IKEA-Rahmen und RBBBs sind auch schon da. Ich arbeite bis dahin noch an einer ausführlichen Anleitung, die ich nach abschließender Bearbeitung aufgrund der Rückmeldungen an dem Wochenende hier zur Verfügung stellen werde.

Mittwoch, 2. Februar 2011

DCF77-Poster

Wo wir gerade bei dem Thema Poster sind: im Zuge meiner Versuche zu verstehen, wie das DCF77-Zeitsignal übertragen wird, habe ich mir ein Poster gemacht.
Eigentlich wollte ich ein "interaktives" Poster machen und in den Kreis LEDs einbauen, die das Zeitsignal dann tatsächlich "live" zeigen. Bislang bin ich noch nicht dazu gekommen, aber wenn jemand anderes Lust hat: hier ist das Poster.

Dienstag, 1. Februar 2011

QLOCKTWO-Poster

In der letzten Zeit habe ich viele Nachfragen bezüglich des Nachbaus einer QLOCKTWO von meinem alten Blog ausgehend erhalten. Ich habe daher beschlossen, mein gesammeltes QLOCKTWO-Nachbau-Wissen in einem Poster zu vereinen, das sich jeder Interessierte selbst ausdrucken (lassen) kann. Viel Spaß damit!