Für mich hilfreiche Links zum ATtiny

Ich benutze gerne den Arduino in seinen verschiedenen Formen. Alle Anschlüsse sind leicht erreichbar (steckbar) und die Programmierung mit der Arduino IDE ist für gewöhnlich auch ein Kinderspiel. Der Nachteil ist, dass so ein Arduino, auch in den kleinen Varianten, immer noch recht groß ist und auch viel Strom verbraucht. Also musste mal was Neues her. Am besten sollte es auch noch weitest gehend kompatibel mit dem Arduino sein. Da bin ich dann auch den ATtiny gestoßen. Immerhin werden auf dem Arduino auch die Chips von Atmel verbaut. Nur diesmal sollte es eben ein ATtiny statt des ATmega sein.

Den ATtiny gibt es in verschiedenen Ausführungen. Ich habe mir zum Testen einen ATtiny12, ATtiny45 und ATtiny85 besorgt. Jeweils in der Duchsteckversion mit 8 Beinchen. Von Außen sind alle Versionen gleich. Nur im Innern ergeben sich kleine Unterschiede. So hat beispielsweise der ATiny85 drei PWM Ausgänge und der ATtiny 45 nur 2.

Für mein Hundeblinklicht ist es wichtig, dass die Elektronik sparsam mit der Energie umgeht. Zusätzlich habe ich noch nach einer einfachen Möglichkeit gesucht, die Elektronik mit einem einfachen Taster statt eines Schalter abzuschalten. Der ATtiny funktioniert auch ohne Spannungsstabilisierung. 1,8 V bis 5,5 V Betriebsspannung benötigt der kleine Chip. Ideal für einen 3,7 V Lithium-Akku, dessen Spannung von 4,2 V bis ca 3,6 V geht.

Ich fassen einmal kurz meine erreichten Vorteile des ATtiny gegenüber des Arduinos auf.

  • Einsparung des Schalters zum Abschalten der Elektronik
  • Wegfallen des DC-DC Spannungswandlers von 3,7 V auf 5 V
  • ATtiny ist bedeutend kleiner als ein ganzes Arduino Mini Bord
  • ATtiny ist günstiger
  • ATtiny ist stromsparender

 

Unten: Gehäuse mit Arduino Mini, Oben: ATtiny Das aktuelle Gehäuse ist sogar noch einmal etwas kleiner geworden.

Die Größeneinsparung ist schon enorm. Aber auch die Kosteneinsparung ist sehr gut. So ein Arduino Mini (Klon) kostet ca. 8 Euro, vielleicht auch nur 5 Euro. Der ATtiny nur um die 1 Euro. Kostenintensiv ist auch der DC-DC Wandler. Der von mir verwendete Pololu Wandler kostet um die 4 US$. Der eingesparte Schalter kostet nur ein par Cent. Aber man spart auch noch Platz im Gehäuse 🙂

Nun ist der ATtiny da. Wie soll der nun programmiert werden. Ein dafür geeigneten „Flasher“ habe ich mir nicht gekauft. Mit einem Arduino soll das Ganze auch funktionieren. Also mal kurz rumgesucht und folgenden Link (neben anderen) gefunden: http://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren Dort wird beschrieben, was man machen muss, damit man mit Hilfe eines Arduinos den kleinen ATtiny mit Daten füttern kann. Zuerst hatte ich es mit einem Arduino Leonardo versucht, aber damit klappte es nicht. Mit einem Arduino Mega funktionierte es dann.

Danach habe ich nach einer Möglichkeit gesucht, den ATtiny in einen Energiesparmodus zu versetzten. Auch hier gibt es diverse Programmbeispiele. Angefangen habe ich mit diesem hier: http://www.arduino-hausautomation.de/2014/emils-ampel-attiny45-im-tiefschlaf/ Eine kleine Ampel wird per Knopfdruck eingeschaltet. Nach einer bestimmten Zeit wird der ATtiny wieder schlafen geschickt. Den dort abgebildeten Code musste ich noch ein bisshen anpassen, damit der ATtiny per Knopfdruck aufgeweckt und auch wieder schlafen geschickt werden kann.

 

 

Pinbelegung ATTiny
Pinbelegung ATtiny 45 – Seite 2

Mega      Duem
D53       Reset (SS)
D51       D11 (MOSI)
D50       D12 (MISO)
D52       D13 (SCK)
Gnd       Gnd
+5         +5

Auch dieser Link war hilfreich: http://playground.boxtec.ch/doku.php/arduino/attiny Hier werden ein paar der ATtiny Typen verglichen.

 

Um den Code auf den jetzigen Stand zu bringen, musste ich einiges lesen. Auch das anfangs kryptisch wirkende Datenblatt des ATtiny hat sich mir ein wenig geöffnet. Hier ist noch ein Quellcode zu finden, in dem die Verwendung der Register ausführlich beschrieben ist: http://matt16060936.blogspot.de/2012/04/attiny-pwm.html
Zu guter Letzt habe ich mich noch mit den Interrupts auseinander gesetzt. http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

Meine Methode „lauflicht()“ ist so gestaltet, dass die ohne die Funktion delay auskommt. So war es möglich, schnell auf einen Tastendruck zu reagieren. Bei Verwendung von delay hätte der Taster während des delays nicht reagiert. Mittlerweile müsste ich soweit sein, dass ich den Taster komplett als Interrupt definiere. Dann müsste der ATtiny auch während der Wartephase reagieren. Das probiere ich später noch mal aus.