Das Blinksdings - Hello World Attiny13!



Wagen wir uns also an unsere erste Schaltung!

Ziel: Ein Attiny13 soll eine LED blinken lassen.
(Falls Du keinen Attiny13 hast, hier gibt's "Hello World!" auch für Attiny2313 und Atmega8).

Es handelt sich um ein sognanntes "Hello World!"
Damit bezeichnet man häufig den ersten Test von Programmiersprachen oder programmierbaren Geräten.


Schauen wir zunächst mal auf die vereinfachte Anschlußbelegung des Attiny13:


Du erkennst sicher:

  • den Anschluß für die Betriebsspannung: Vcc
  • den Betriebsspannungsminuspol: GND
  • die Anschlüsse von PORT B: PB0 bis PB5


So ein Anschlußbeinchen hat aber noch mehr drauf!
Wir können mit Programmbefehlen auch ganz andere Funktionen an so einem Anschlußbeinchen festlegen. Auf dem unteren Bild siehst Du die anderen Funktionen:

 

Keine Angst - Du mußt hier nicht alles kennen!

Wir werden aber einige von diesen in Klammern geschriebenen Funktionen gleich benutzen, um unseren Attiny zu starten (nämlich den RESET-Eingang), und um unser Programm in den Attiny zu schieben (doch dazu später).



So sieht der Schaltplan unserer ersten, vollständig funktionierenden Schaltung aus, die wir am besten auf einem Steckbrett aufbauen:





Und was macht die Schaltung?
Sie macht nichts sichtbares. Der Mikrocontroller ist in Betrieb und sein eingebautes Herz schlägt für Dich unsichtbar.

Die einzelnen Bauelemente haben folgende Aufgaben:

  • Der Widerstand R1 verbindet den RESET-Eingang des Mikrocontrollers mit 5V und versetzt ihn in den Zustand des Arbeitens. Typisch sind hier 10 KOhm. Man könnte statt des Widerstandes auch einen Draht nehmen. Das kann der Fall sein, wenn der bereits programmierte Attiny13 nur sein Programm "abspielen" soll. Zum Programmieren ist er notwendig - und wir wollen ja gleich programmieren.

  • Der Kondensator C1 filtert  störende Schwingungen weg, die der Mikrocontroller erzeugt.
    Typisch ist hier ein 100nF Keramikkondensator.

  • Als Betriebsspannung nehmen wir 5V.
    Du könntest auch eine 4,5V-Flachbatterie nehmen.

Schließen wir eine LED an, damit was blinken kann. Die LED zeigt in den Ausgang PB4 des Attiny13. Deswegen leuchtet sie genau dann, wenn PB4 eine 0 (man sagt auch "LOW-Pegel" und meint 0V oder "mit GND verbunden") ausgibt.







Hier der komplette Quelltext des C-Programmes:


#include <avr/io.h>
#define F_CPU 1200000UL //1,2 MHz
#include <util/delay.h>

int main(void)
{
  DDRB |= _BV(PB4); // PB4 ist jetzt Ausgang


 while (1) {

    PORTB &= ~_BV(PB4); // PB4=Low -> LED an
    _delay_ms(250); // Warte 250ms

    PORTB |= _BV(PB4); // PB4=High -> LED aus
    _delay_ms(250); // Warte 250ms
  }

  return 0;
}

Hier wird es Zeile für Zeile erklärt.


Und wie kommt das Programm nun in den Attiny?

Dazu müssen wir der Schaltung noch eine Schnittstelle zum Anstecken des Programmieradapters hinzufügen - hier JP1 genannt.

Auf einer Leiterplatte nehme ich da immer einfach eine abgekniffene IC-Fassung. Da wir aber hier auf einem Stecksystem arbeiten, erübrigt sich JP1 - wie Du gleich sehen wirst.







Für die Programmierschnittstelle bauen wir uns ein Kabel (=Programmieradapter). Dieser Programmieradapter wird auch für alle anderen Schaltungen der Mikrocontrollerspielwiese gebraucht. Er besteht aus einem Parallelportstecker, drei Widerständen, einem Stück fünfadrigen Kabels (nicht länger als 60 cm) und einer abgekniffenen  IC-Fassung (oder ähnliches).

Programmieradapter


Das Kabel muß mit den Widerständen wie folgt zusammengebaut werden:

Pin an ISP Bezeichnung Widerstand Pin am Parallelportstecker
1 Reset
-- 16 (init)
2 MOSI 470 Ohm 2 (D0)
3 MISO 220 Ohm 11 (busy)
4 SCK 470 Ohm 1 (strobe)
5 GND -- 18 (GND)


Die Widerstände platzierst Du am besten gleich in dem Parallelportstecker.
Ich habe mir mit Filzstift einen kleinen Punkt auf den winzigen ISP-Stecker (und später auf meinen Leiterplatten auf der ISP-Schnittstelle) dort gemacht, wo RESET ist.


Du hast alles richtig gebaut? Alles richtig zusammengestöpselt? Betriebsspannung OK?  Dann gehts jetzt los:

  1. Lade Dir dieses Softwarepaket: blinksdings_code.zip in Dein Home-Verzeichnis!

  2. Entpacke es! Es entsteht der Ordner blinksdings_code.

  3. Öffne eine Konsole bzw. ein Terminal!

  4. Werde root mit: su (und dann Passwort eingeben - nein, es kommen keine Sternchen)!
    (auf einer Live CD wird man root durch die Eingabe von: sudo su )

  5. Gehe in den Ordner blinksdings_code mit: cd blinksdings_code

  6. Aktiviere die Nutzung des Parallelports für unser Programmierkabel mit: sh Parallelport_aktivieren.sh
    (Das mußt Du nur jeweils einmal nach dem Starten Deines Computers tun. Bei einigen Linuxen ist es nicht nötig - schadet aber auch nix!)

  7. Kompiliere den Programmquelltext und schiebe das so entstandene Programm in den Mikrocontroller mit: make load

Und? Blinkts?

Du kannst jetzt den Programmquelltext blinksdinks.c mit Deinem Lieblingseditor verändern. Alles, was Du dann jeweils tun mußt, ist einfach (als root) make load einzugeben.


Anmerkungen:

  • Wenn Dein Attiny nun nach Wunsch programmiert ist, kannst Du Du die Programmierschnittstelle wieder entfernen und den 10K-Widerstand durch einen Draht ersetzen. Selbst den Kondensator könnte man jetzt weglassen, wenn die vom Attiny13 produzierten hochfrequenten Schwingungen keine Rolle spielen. Du hättest also einen Blinker aufgebaut, der aus 3 Bauelementen besteht.

  • Wenn Du den USB-Programmieradapter der Mikrocontrollerspielwiese benutzen willst, mußt Du im Makefile die Raute bei #PROGRAMMER = -c usbasp löschen

  • Wenn Du keinen Parallelport hast, lieber mit einem Mac arbeitest oder Windows benutzen mußt, dann schau hier nach.