Großziffer LED Thermometer mit AtTiny2313
Sebastian Pohl - 3. Februar 2015Als Geschenk war ich auf der Suche nach einem Thermometer mit großen, gut lesbaren Ziffern. Leider scheint es davon als fertiges Produkt nur wenige zu geben und die, die es gibt, entsprachen nicht den Vorstellungen. Also bleibt nur selber bauen.
Ohne große Kenntnis über Microkontroller zu haben ist der erste Schritt die Suche im Netz. Glücklicherweise gibt es dazu auch mehrere brauchbare Suchergebnisse. Meine Wahl fiel letztendlich auf eine kurze Anleitung von Arne Rossius die auf www.elektronik-kompendium.de zu finden ist.
Diese Anleitung ist relativ kurz gehalten, bietet aber einen Schaltplan und auch ein Foto des Aufbaus auf einem Breadboard. Dazu finden sich dort auch alle Dateien die man für die Programmierung des AtTiny braucht (Sofern man exakt den dort beschriebenen Aufbau umsetzt, für die hier beschriebene Lösung sind die Dateien am Ende des Artikels angehängt). Da ich, wie eingangs erwähnt, keinerlei Erfahrung in diesem Bereich habe, mussten auch alle nötigen Werkzeuge angeschafft werden, neben den reinen elektronischen Bauteilen habe ich noch ein USB Programmier-Interface für den AtTiny bestellt.
Ein Nachteil dieser Schaltung ist allerdings, das es nur für kleine ca. 1,5 cm große 7-Segment Ziffern gedacht ist. Diese werden mit der gleichen Spannung betrieben wie einzelne LEDs und die Versorgungsspannung des AtTiny reicht aus um die Segmente zum leuchten zu bringen. Verwendet man allerdings große Ziffern, müssen diese mit 12 Volt betrieben werden um zu leuchten. Diese Spannung lässt sich nicht mehr mit dem AtTiny direkt schalten.
Mit einiger Hilfe durch den Autor selbst (vielen Dank dafür!) und mit etwas Recherche im Internet konnte ich aber auch dafür eine Lösung finden. Es gibt spezielle ICs die genau für diesen Zweck gedacht sind. Mit kleiner Spannung auf einem Eingang kann eine höhere Spannung auf einen Ausgang geschaltet werden. Die Grundidee dazu habe ich hier her. Ebenfalls ein glücklicher Zufall ist, dass der Autor mir geänderte Programmdateien zur Verfügung gestellt hat die eine Einstellungsmöglichkeit für diese geänderte Schaltung haben. Die Dateien sind am Ende des Artikels verlinkt. Kompiliert habe ich den Code mit AVRStudio und auf den AtTiny übertragen mit dem Kommandozeilen-Tool avrdude. Für beide Programme sind die Einstellungen die vorgenommen werden müssen sehr spezifisch zur Hardware die man verwendet, daher muss man hier selbst ein wenig herumprobieren.
Um das ganze dann noch an einer 12 Volt Stromquelle zu betreiben habe ich einen Spannungswandler eingebaut, der 5 Volt bereitstellt. Damit steht die Betriebsspannung des AtTiny zur Verfügung und 12 Volt um die LED Segmente anzusteuern. Den Aufbau dazu habe ich von dieser Webseite.
Mit den Änderungen sieht der Schaltplan dann ungefähr so aus:
(Da es mein erster Versuch mit Eagle ist, ist die Ausführung weit davon perfekt zu sein, die grobe Idee sollte aber klar sein.)
An den Verbindungen SV3 und SV2 werden die LED Segmente angeschlossen. SV2 sind die gemeinsamen Anoden der Segmente, SV3 die Kathoden. Die Pins von SV3 sind dabei von A bis G benannt für die einzelnen Segmente und DP steuert den Dezimalpunkt an. Welcher Pin an welchen Anschluss der Segmentanzeige angeschlossen wird kann man der Aufstellung rechts des Anschlussymbol entnehmen. Dabei werden die ersten beiden Ziffern normal eingebaut und die letzten beiden um 180 Grad gedreht damit sich die °C anzeige ergibt. Bitte auch beachten, das die Widerstände R3 bis R10 an die verwendeten Segmente angepasst werden müssen. Wichtig ist, das bei den großen Ziffern der Dezimalpunkt einen anderen Widerstand benötigt als die anderen Segmente.
Baut man die Schaltung nun auf einem Stück Lochraster-Platine auf könnte es ungefähr so aussehen:
Auf der Bestückungsseite sieht man die zwei langen weißen Kabel, diese verbinden den 5V Ausgang des Spannungswandlers mit der Stromversorgung des AtTiny. Auf der Rückseite sind die Widerstände für die LED Segmente sichtbar.
Hier übrigens noch ein Bild aus dem Entstehungsprozess als ich die Schaltung mit kleinen Segmenten getestet habe (noch ohne Spannungswandler und an einer 5V Stromquelle).
Hier zeigt sich übrigens auch sehr deutlich wie hilfreich ein Breadboard sein kann. Wenn man 36 Kabel (32 Kathoden, 4 Anoden) sortieren muss, ist es einfacher sie zu stecken als immer umzulöten.
Die Segmente mit Anschluss:
Fertig sieht das ganze dann so aus (Zum Test an einer 9V Batterie):
Zu sehen ist die Temperaturmessung und die Einstellungsmöglichkeiten für Minimal- und Maximaltemperatur die sich über den Taster anwählen und einstellen lassen.
Zum Abschluss hier noch die Stückliste (aus Eagle exportiert, bitte mit Schaltplan nochmal auf Vollständigkeit überprüfen!):
- 2 x Kondensator, Kapazität 100n
- 2 x Kondensator, Kapazität 12p
- 2 x Elektrolytkondensator, 10/63
- 1 x AtTiny 2313
- 1 x Thermometer DS18S20
- 1 x LPZ2905Z
- 1 x UDN2981
- 1 x ULN2803
- 1 x Quartz 4 Mhz
- 1 x Widerstand 10k
- 1 x Widerstand 4k7
- 7 x Widerstand für Segmente (Wert bitte ausrechnen)
- 1 x Widerstand für Dezimalpunkt (Wert bitte ausrechnen)
- 4 x 7-Segment Anzeige (geeignet für 12 Volt Versorgungsspannung, bitte beachten das durch Verwendung von UDN2981 und ULN2803 jeweils 1V Spannungsabfall einzurechnen ist, von 12 Volt bleiben also effektiv 10 Volt zur Versorgung der Segmente)
- Lochrasterplatine, Kabel, Steckverbindungen nach belieben.
Und die Dateien mit dem Quellcode die mir von Arne Rossius zur Verfügung gestellt wurden (Für die Bedeutung der einzelnen Makefiles bitte in der originalen Anleitung nachlesen!):
- Makefile (Hier lassen sich die Optionen für avrdude ablesen)
- Makefile-1200
- Makefile-int4mhz
- thermometer.asm
Im ASM File bitte die folgenden Optionen beachten:
.equ SEGMENT_ACTIVE_LOW = 1 .equ ANODE_ACTIVE_LOW = 1
Beide müssen bei der Verwendung von UDN2981 und ULN2803 auf 0 gesetzt werden.
.equ USE_DS18S20 = 0
Dieser Wert muss auf 1 gesetzt werden, wenn das Thermometer Element DS18S20, wie in der Stückliste genannt, verwendet wird. Für DS18B20 kann er auf 0 bleiben.
Ein Gehäuse für den Aufbau folgt noch.
Kleine Tipps am Ende:
- 7-Segment Ziffern gibt es mit gemeinsamer Kathode oder gemeinsamer Anode. Für diese Anleitung werden Ziffern mit gemeinsamer Anode verwendet.
- Es ist äußerst peinlich nach langem Fluchen festzustellen, das man den AtTiny falsch herum eingebaut hat. Also sehr gründlich nachdenken wo sich welcher Pin auf der Rückseite der Platine befindet.
- Für alle ICs bietet es sich an entsprechende Sockel mitzubestellen, dadurch lassen sich die einzelnen Bauteile leichter wechseln. Vor allem der AtTiny ist ein Kandidat der eventuell mehrfach aus- und eingebaut wird.
Hallo Sebastian
Bekomm das Teil nicht ums verrecken zum laufen.
Hardware müsste passen, aber das .asm-File in .hex konvertieren klappt irgendwie nicht. Könntest du mir bitte die konvertierte Flash-Datei /Dateien) zuschicken.
Muss ich das EEPROM auch beschreiben?
Die Schaltung vom Arne Rossius hab ich gut hinbekommen aber hier hab ich kein Glück.
Danke im Voraus
Gruss Werner
Hallo Werner,
leider bin ich auch nicht super-fit in Sachen Microcontroller… Ich habe die Dateien auch nicht mehr zur Hand, die sind irgendwo in den Backups. Kriegst du denn Fehler wenn du versuchst die .hex Datei zu erstellen?
Sebastian will dir nicht auf die Nerven gehen mit meiner Fragerei aber ich hab schon soviel Zeit investiert dass ich es halt gerne zu Ende bringen würde. Die erzeugt .Hex-Datei will einfach nicht laufen. Hast du wie schon gefragt das EEPROM vom ATtiny2313 auch programmiert und hast du wirklich Anzeigen mit gemeinsamer Kathode verwendet?
Der UDN2981 „schiebt“ doch nur 12Volt Richtung SV2 deswegen wäre eigendlich Anzeige mit gemeinsame Anode logischer.
Hallo Werner,
bitte entschuldige meine arg verspätete Antwort. Leider habe ich aktuell die entsprechenden Tools nicht installiert und auch keine Projekte mit den Sachen daher kann ich nur versuchen aus dem Gedächtnis zu antworten.
Wenn ich mich richtig erinnere habe ich zuerst Segmente mit gemeinsamer Kathode gekauft ( aus Versehen ) und die erste Prototyp-Schaltung damit aufgebaut. Im „fertigen“ Aufbau sind es tatsächlich Elemente mit gemeinsamer Anode. Ich werde den Text gleich entsprechend korrigieren!
Zu der Hex Datei: Leider kann ich dir da nicht viel sagen, ich habe mich an verschiedene Anleitungen im Netz gehalten und im Prinzip rumprobiert bis es ging. Wenn ich das Makefile das im Artikel verlinkt ist aber richtig interpretiere wird auch das EEPROM programmiert.