2013-01-12

Die Kleinen - ATtiny Chips im Arduino IDE

Um kleinere "Arduino"-Schaltungen aufzubauen, eignen sich auch Microcontroller der ATtiny-Reihe. Kleiner nicht im Sinne von SMD-Technik, sondern im Sinne von weniger IO-Pins, weniger Speicher, günstigerer Preis, weniger Bauteile, etc.
Hier sind meine ersten Versuche mit den Chips ATtiny 85, 44 und 2313.

Dazu muss man die Chips entsprechend verkabeln, wiederum das Arduino Board als Programmierer verwenden (siehe Arduino-ISP2 im früheren Post) und dann noch die passenden Definitionen der Chips ins IDE einbauen.

Fangen wir mit dem einfachen Teil an: Die Verkabelung läuft eigentlich genauso wie im vorangegangenen Post zum ATMega beschrieben. Hier dennoch ein paar Bilder, reine Fleissarbeit, aber wenns mal schnell gehen soll, vermeidet man so vielleicht Probleme.


ATtiny85 verkabeln:

Hier sind noch zwei alternative Anleitungen (inkl. Setup mit 10uF Kondensator statt den Widerständen)


ATtiny44 verkabeln:

..

ATtiny2313 verkabeln:


..

Sicherheitshalber nochmal die Pinouts, um SCK, MISO,MOSI,Reset,Clock und die Stromversorgung richtig an den Chip anzulegen:
 

Natürlich ginge es auch mit ASCII-Art - das nächste Mal vielleicht :-)

// ATMEL ATTINY2313
//
//                  +-\/-+
//            PA2  1|    |20  VCC
// RX   (D 0) PD0  2|    |19  PB7 (D 16)
// TX   (D 1) PD1  3|    |18  PB6 (D 15)
//      (D 2) PA1  4|    |17  PB5 (D 14)
//      (D 3) PA0  5|    |16  PB4 (D 13)*
// INT0 (D 4) PD2  6|    |15  PB3 (D 12)*
// INT1 (D 5) PD3  7|    |14  PB2 (D 11)*
//      (D 6) PD4  8|    |13  PB1 (D 10)
//     *(D 7) PD5  9|    |12  PB0 (D 9)
//            GND 10|    |11  PD6 (D 8)
//                  +----+
//
// * indicates PWM port


----------------  2313 --------

RST -        - VCC
 P0 -        - P16
 P1 -        - P15
 P2 -        - P14
 P3 -        - P13*
 P4 -        - P12*
 P5 -        - P11*
 P6 -        - P10
*P7 -        - P9
GND -        - P8


Stared pins (7, 11, 12, 13) are PWM pins.



Einen schönen Überblick als Din-A4 Referenzblatt mit allen gängigen Pinouts habe ich hier gefunden: http://electronicavm.files.wordpress.com/2012/06/microcontroller-reference-sheet-a4.png


Arduino IDE Vorbereiten

Um Programme für die ATtiny Chips zu programmieren, muss man entsprechende Board-Beschreibungen und Core-Definitionen im IDE hinterlegen. Ich habe zwei Pakete ausprobiert, die sich auch parallel installieren lassen:
1.) "attiny" (wird nach "arduino-1.0.3\hardware\attiny" installiert):
 ATtiny (siehe GitHub repository, beschrieben in: "Programming an ATtiny w/ Arduino 1.0",
2.) "arduino-tiny" (wird nach "arduino-1.0.3\hardware\tiny" installiert  - nur tiny-Ordner entpacken):

http://code.google.com/p/arduino-tiny/


Zu 1: Es existieren einige Forks zu dem Projekt. Ich habe einen gewählt, der auch mit dem ATtiny2313 funktioniert:  https://github.com/fschaefer/attiny/archive/master.zip
Einen kleinen Fix muss man noch von Hand nachführen: https://github.com/damellis/attiny/issues/8

High Low Tech hat auch noch eine schöne Beschreibung und einen Überblick:
http://hlt.media.mit.edu/?p=1229  (inkl. LED Beschaltung)

Wichtig: nicht vergessen, das IDE neu zu starten, nachdem man die Hardware-Pakete oben ergänzt hat, damit die zusätzlichen Boards in der Auswahlliste auftauchen.

Zum Laden eines Programmes dann den entsprechenden Chip auswählen und erst den "Bootloader" programmieren (setzt nur die Fuses), dann das Programm kompilieren und hochladen:
["ArduinoISP" Programm auf das Board geladen?]Board:  ATtiny85 (internal 8Mhz clock)Port:  COMProgrammer: Arduino as ISP
Wenn man in der Auswahlliste der Boards zu viele Einträge hat, kann man die "boards.txt" Dateien in den Unterordnern von arduino-1.0.3\hardware\* etwas entrümpeln. Insbesondere kann man sich alle Einträge mit externer Clock sparen.

Für einen ersten Versuch eignet sich das Demo-Programm "Blink":
  • Den Pin im Programm entsprechend anpassen (z.B. Pin 0).
  • Eine LED mit einem 1k Ohm Vorwiderstand an den Pin anschliessen
  • Programm kompilieren und auf den Chip laden.

Die Led sollte nach dem Hochladen zu blinken beginnen.

Bei einem ersten Versuch hatte ich ein sehr langsames Blinken - delay(1000) sollte im Sekundentakt blinken - Irgendwie lief es nach dem 2. Flashen besser.
Eine mögliche Erklärung: Die Definitionen in boards.txt und in den Definitionen enthalten Angaben zum Takt und zum Timing (Einfluss der Fuses?). Kann durchaus sein, dass ein Programm, das für ein 8 Mhz "Board" kompiliert wurde, anders als gedacht läuft, wenn man die Fuses für den 1Mhz Boardeintrag gesetzt hatte.

Troubleshooting

ATtiny85: Wenn es beim Programmieren zu einer Fehlermeldung kommt:
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85


Ignorieren!

ATtiny2313: Hier funktioniert das "Brennen" des Bootloaders (d.h. letztlich nur das Setzen der Fuses) problemlos. Beim Programm-Upload mit dem Arduino-ISP2 hab ich dann lange versucht einen Fehler zu beheben, der anscheinend gar keiner ist. Die Fehlermeldung
Binary sketch size: 912 bytes (of a 2,048 byte maximum)
avrdude: stk500_initialize(): programmer not in sync, resp=0x15

kann man getrost IGNORIEREN.




Weitere Troubleshooting-Quellen:
Baud-Rate fix für die ISP Programmierung der ATtiny Chips:  http://www.sirmc.net/view/2002/

Referenzen und Ideen für künftige Projekte:

Infos und Tipss zum 2313 (Pinouts, Bootloader, etc.): http://www.ernstc.dk/arduino/2313.htm

Falls es doch ein Bootloader für die ATtiny Serie sein darf:
Den ATtiny85 als USB Gadget verwenden:
...braucht dann allerdings wohl doch einen externen 12 Mhz Quartz als Taktgeber für das USB-timing.

Konkreter Einsatz (lässt sich aber auch für wenige EUR fertig kaufen):


Kommentare:

  1. Hallo Michael

    Ich habe deinen Block mit viel Interesse gelesen.
    Leider habe ich ein Problem mit dem ich nicht weiterkomme
    Mein Attiny 4313 sagt mir:
    unknown MCU 'attiny4313' specified
    Mit dem 2313 klappt alles...

    Ist dir der Fehler auch schon mal untergekommen?
    Gruß

    Andreas

    AntwortenLöschen
    Antworten
    1. Hallo Andreas,

      ich habe gerade mein Arduino-IDE nicht zur Hand.
      Vermutlich fehlen die Definitionen für den 4313.
      Schau doch mal nach, ob einer der Hardware-Unterordner die Definitionen enthält (siehe auch "Arduino IDE Vorbereiten"). Möglicherweise gibt es auch mittlerweile aktuellere Versionen mit weiteren Chips.

      Viel Erfolg,
      Michael

      Löschen