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).
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:
- Lade Dir dieses Softwarepaket: blinksdings_code.zip
in Dein Home-Verzeichnis!
- Entpacke es! Es entsteht der Ordner blinksdings_code.
- Öffne eine Konsole bzw. ein Terminal!
- 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 )
- Gehe in den Ordner blinksdings_code mit:
cd blinksdings_code
- 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!)
- 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.
|