AVR Binäruhr (Version 1)

Anmerkung: An dieser Stelle wird die erste, mittlerweile überholte Version der Uhr beschrieben. Inzwischen existiert eine verbesserte Version, die auch als Bausatz verfügbar ist.
Näheres dazu hier.

avr_uhr.jpg Ursprünglich basierte das Vorhaben eine Binäruhr – sprich eine Uhr, die auf interessante Weise die Zeit im Binärformat anzeigt – zu bauen auf einer Website, wo der Bau einer solchen auf Basis von Zähler ICs und einigen Logikgattern unter Verwendung der Netzfrequenz als Takt beschrieben war.
Dieses Vorgehen erschien mir jedoch nach anfänglicher Euphorie ein wenig umständlich, vielleicht war mir der Aufwand des Fädelns der Anschlüsse 21 einzelner LEDs auch zu groß – diese wurden in dem auf jener Website hinterlegten Bauanleitung auch alle gleichzeitig über je einen Ausgang der Zähler angesteuert. Ein Multiplexbetrieb war nicht vorgesehen.

Also legte ich das Vorhaben nach dem halben Aufbau der LED-Platine (auch aus Zeitgründen, Abi lässt grüßen) erstmal auf Eis.
Irgendwann verwandelte sich mein Interesse an der Programmierung von Microcontrollern dann – wie sollte es anders sein, wieder nach Lektüre einer Website, die sich mit AVR Controllern von Atmel auseinander setzt – in die Idee das Ganze einfach mal auszuprobieren.

Die AVRs eignen sich meiner Meinung nach optimal für den Einstieg, da sie zum einen, aufgrund der Eigenschaft in eingebautem Zustand programmierbar zu sein (“ISP” – also keinen zusätzlichen überteuerten Programmer benötigen) und sich zum anderen relativ leicht handhaben lassen.

Auf der Suche nach einem geeigneten Projekt für den Anfang, fiel mir dann wieder die angefangene LED-Platine in die Hände. Somit war es gefunden.

Die Anzeige

So, nun aber genug der Einleitung. Die Anzeige besagter Uhr besteht wie gesagt aus 21 LEDs:

  • 4 für die Sekunden 1er (rot)
  • 3 für die Sekunden 10er (rot)
  • 4 für die Minuten 1er (rot)
  • 3 für die Minuten 10er (rot)
  • 4 für die Stunden 1er (rot)
  • 2 für die Stunden 10er (rot)
  • eine Status LED (grün)

Es handelt sich also um eine Anzeige im BCD-Format.

Diese werden über eine Matrix im Multiplexbetrieb einzeln angesteuert, d.h. Diejenigen LEDs, die “an” aussehen sollen, werden jeweils für den Bruchteil einer Sekunde nacheinander eingeschaltet, so erscheint es für das menschliche Auge, als seien sie dauerhaft an. uhr_display.jpg
Bei dieser Betriebsart kommt man logischerweise mit einer weitaus geringeren Menge an Ausgängen aus, als bei der oben beschriebenen – es reichen 10 bit um die Matrix anzusteuern.

Um die Ablesbarkeit zusätzlich zu verbessern, werden die LEDs, die eigentlich eine logische 0 darstellen sollen, so angesteuert, dass sie trotzdem leicht glimmen.

In meiner Variante habe ich 4 positive und 6 Massebits vorgesehen. Da der verwendete Microcontroller ATMega8 einen weitaus größeren Massestrom verträgt, als er bei auf HIGH liegenden Ports liefern kann, können die Masseleitungen der Matrix direkt mit den entsprechenden Pinnen verbunden werden. Die 4 positiven Leitungen hingegen werden durch 4 Transistoren verstärkt.
Die Vorwiderstände der LEDs wurden wegen des Multiplexbetriebs mit 100 Ohm gewählt, dies erzeugt (zumindest bei den derzeit verwendeten, recht hellen LEDs) ein zum Ablesen angenehmes, nicht blendendes Licht. Im normalen Betrieb wären sie mit 100 Ohm zu hell.

Die benötigte Spannung von 5V wird durch einen Spannungsregler (LM 7805) bereitgestellt, d.h. zum Betrieb kann ein unstabilisiertes Netzteil, welches zwischen 7,5 und ca 12V DC liefert eingesetzt werden. Alternativ können Spannungsregler und Netzteil natürlich auch durch ein stabilisiertes 5V Netzteil ersetzt werden.

Platinenherstellung

Nachdem die – zunächst auf einem Breadboard aufgebaute – Uhr dann schließlich (zumindest vom schaltungstechnischen Gesichtspunkt her) ihren Dienst versah, startete ich dann den ersten Versuch, eine komplette Platine herzustellen, sprich incl Layout usw. Mein bis dahin einziger Versuch eine Platine zu ätzen, war der Programmieradapter für den AVR gewesen, wo ich aber auf ein fertiges Layout zurück gegriffen hatte.
Also Schaltplan mit Eagle gezeichnet und so lange gebastelt, bis mir das Layout für die Prozessor- und die LEDplatine soweit gefielen, und auch perfekt übereinander passten. Das war eigentlich – neben der Programmierung in Assembler (klar, selber schuld :P ) die meiste Arbeit, da es doch einer gewissen Einarbeitungszeit bedarf, bis man auch alle benötigten Funktionen dieser (ziemlich genialen) Software richtig zu nutzen lernt.
Wie nicht anders zu erwarten, hatte die zuerst geätzte Prozessorplatine noch einige Schönheitsfehler, die sich aber nach ein bisschen Fehlersuche relativ leicht beheben ließen.

So begab es sich, dass die Uhr tatsächlich eines schönen Sonntag abends erstmals auf der richtigen Platine (mit der – wegen fehlenden LEDs – noch provisorischen LED Platine) einwandfrei ihren Dienst versah.
Fehlte nur noch die richtige LED-Platine. Das Problem waren aber die zunächst verwendeten extrem hellen LEDs, die sich jedoch leider durch ein klares Gehäuse und einen sehr kleinen Abstrahlwinkel auszeichnen, was beim Ablesen von vorne leichte Probleme bereiten kann.
Also begann die Suche nach vernünftig aussehenden, dabei jedoch hellen, aber nicht blendenden LEDs, oder alternativ die Möglichkeit, eine matte Folie oder Glasscheibe direkt vor die Anzeige zu setzen, um die Ablesbarkeit von allen Seiten so gut wie möglich zu halten.

Nach intensiver Suche und einigen Versuchen, fiel dann – hauptsächlich aus ästhetischen Gründen – die Entscheidung doch zugunsten von LEDs mit klarem Gehäuse, jedoch dabei größtmöglichem Abstrahlwinkel aus. Die damit bestückte Platine hielt dann nicht ganz 24h, dann verabschiedete sich bei dem Versuch, die auf der “falschen” Seite mit Steckerleisten versehene LED Platine von der restlichen Schaltung zu trennen, die Kupferauflage vom Basismaterial der Platine. Nach einer kleinen Flucheskapade beschloss ich, dass die Verbindung also doch irgendwie anders hergestellt werden musste.
So machte ich mich einige Tage später daran, die LED Platine neu zu ätzen, bohren, etc.
Nachdem schließlich sämtliche vorher verbauten LEDs wieder ausgelötet und auf der neuen (wesentlich besser gelungenen) Platine platziert waren verband ich den ganzen Spöks mit Flachbandkabeln und siehe da, es funktionierte wieder und sah auch (durch die neuen LEDs) gleich ein ganzes Stück besser aus als in der Experimentalversion.

Stand der Entwicklung

Momentan ist die Hardware soweit fertiggestellt, es fehlt lediglich noch das Gehäuse, um den optischen Eindruck zu perfektionieren.
Auf Softwareebene fehlt im Prinzip auch nur noch die Routine, welche die Uhrzeit mit Hilfe des DCF77 Empfängers automatisch setzt.

und Bilder sagen ja bekanntlich mehr als 1000 Worte…

  1. #1 by Nidhoegger at November 8th, 2009

    Hi,

    ich find das projekt einfach nur spitze! Ich habs in nachgebauter fassung grade hier vor mir liegen (war mein erstes projekt) und es hat mich dazu animiert, die Uhr selbst neu zu entwerfen. Was rausgekommen ist: Ich hab einen eigenen schaltplan erstellt (der grundaufbau ist ziemlich gleich) und hab das ganze um 4 Taster am Port D erweitert, mit denen man zum einen Die zeit einstellen kann (das feature hat mir leider gefehlt oderi ch habs übersehen *gg*) und zum anderen kommt man damit in den demomode, in dem die uhr mehrere animationen durchspielt, wobei die uhr im hintergrund weiterläuft. Der neue Code ist komplett in C geschrieben, mit der genauigkeit stimmt es noch nicht zu 100%, aber daran werd ihc mich bald machen. Du kannst dich ja melden, falls du an dem material interessiert bist, mein C code sollte auch mit deiner version problemlos zurecht kommen (außer das die einstelltaster fehlen). Super dein Projekt!

    • #2 by markus at November 14th, 2009

      Hi Nidhoegger,

      Freut mich, dass es Dir gefällt (entschuldige die späte Antwort, bin im Moment etwas im Stress).

      Danke für Dein Angebot bzgl. Deiner Software – wie Du vielleicht gesehen hast bin ich momentan dabei, einen Bausatz zusammenzustellen und habe im Zusammenhang damit auch die Software neu geschrieben (und fast fertig).
      Die erlaubt es nun auch die Uhr per Taster zu stellen und ggf auch bald per DCF77 Empfänger, wenn ich genug Zeit habe ;)
      Bei meiner Version der Hardware auf der Webseite war nur eine Pfostenleiste für Taster, oder andere Erweiterungen vorgesehen.

      Viele Grüße & weiterhin viel Spaß,
      Markus

(will not be published)
  1. No trackbacks yet.

Switch to our mobile site