Ok, is mal wieder was dazwischen gekommen, aber nun ist sie fertig - die erste Lektion µC für LED-Styler....
1 - Einstieg & erstes Lauflicht
Grundausstattung
Am einfachsten wirds mit einem fertigen Entwickler-Board - ich persönlich benutze das von Pollin - kostet 15,- Euro und kann alles was man soweit braucht (und noch mehr)...
Ansonsten Lochrasterplatine + Lötkolben.. geht auch.
Softwaremäßig dürft ihr euch schonmal auf leichte Basic-Kost einstellen - kapiert soweit jeder. Zum Einsatz kommt Bascom Basic. Wers nicht erwarten kann, darf schonmal das Handbuch durchstöbern... Die Demoversion funktioniert einwandfrei, mann kann nur keinen Code über 4kB erzeugen und darf keine kommerziellen Produkte damit erstellen.
Funktionsweise eines µC
Im Prinzip können µC erstmal nicht viel mehr als meist nur einen Großteil ihrer Pins entweder auf VCC (Versorgungsspannung) oder Masse zu schalten.
Das können sie allerdings extrem schnell und sehr genau.
Mit diesen digitalen Schaltzuständen öffnen dann verschiedenste Dinge gemacht werden - Displays ansteuern, RS232, USB - eben all die Dinge die digitale Geräte ausmachen.
Die hier besprochenen Microcontroller haben alle eine interne Taktquelle - das reicht für erste Versuche voll aus, wer mehr Rechenpower benötigt kann an die passenden Pins einfach einen Quarz oder Resonator anklemmen.
Interne Taktquelle bedeutet in unserem Fall (ATiny2313) bis zu 8MHz - wer wie ich mal mit einem Atari ST angefangen hat, der weiß, dass 8MHz nicht gerade wenig sind.
Schauen wir uns mal einen der einfacheren aber weitverbreitetsten Atmel AVR Chips an - ATiny2313 Datasheet (das Datasheet direkt auf die Platte speichern, braucht ihr später noch)
Der Tiny2313 ist als DIP- und als SMD- Package erhältlich - letzteres ist für Endprodukte sicherlich toll - weil klitzeklein - aber zum testen eher hinderlich - daher werden in diesem Tutorial nur bedrahtete Komponenten verwendet.
[Blockierte Grafik: http://img231.imageshack.us/img231/5393/atiny2313pinoutaw7.png]
Der Chip hat 20 Pins - zwei davon sind GND (10) und VCC (20). Die anderen Pins lassen sich quasi frei als In-/Output belegen. Input wäre z.B. ein Schalter, der zwischen einem Pin und VCC geschlossen wird. Output ein Pin, der z.B. eine LED mit der Versorgungsspannung verbindet.
Im Bild ist zu erkennen, dass die Pins alle mehrfach belegt sind/werden können: Pin 4 ist sowohl PortA1 (dazu später mehr) als auch XTAL2 (2. Anschluss für einen externen Quarz). Die Belegung(en) in der Klammer können teilweise durch sogenannte Fusebits beeinflusst werden, teilweise auch per Programmierung.
Man könnte zum Beispiel zuerst bestimmte Pins als Lauflicht nutzen, bei Bedarf aber auch zum flashen des Chips oder als RS232.
Wir werden uns aber zuerst auf die Grundfunktion der Pins beschränken - ihr Dasein als schnöde Ports.
Jeder AVR hat Ports - mal mehrere oder auch nur einen halben - ein voller Port besteht aus 8 Pins, die verschiedenen Ports werden durch Buchstaben gekennzeichnet, ihre Pins mit Zahlen von 0-7.
Der 2313 hat einen kompletten Port (B) und einen mit nur 7 Pins (D). Zusätzlich gibt es noch Port A mit drei Pins.
Einfacher Programmieradapter
Diesem Chip muss jetzt natürlich Leben eingehaucht werden - das geschieht mit Hilfe von Maschinencode der in den Chip geflasht wird.
Dazu muss der Chip an den Rechner angeklemmt werden (aus Gründen der Einfachheit hier nur für Windows beschrieben)...
Die simpelste Methode besteht aus einem Druckerkabel (Centronics) und ein paar Widerständen (zur Sicherheit, sonst könnte die Schnittstelle am PC leiden.)
Hier der Schaltplan:
[Blockierte Grafik: http://img114.imageshack.us/img114/2412/ispcablemx8.th.gif]
Die Widerstände können relativ frei gewählt werden - 1KOhm geht auch soweit ich weiß...
Die Pinbezeichnungen am ISP finden sich am Chip wieder:
RST(RESET)-Pin 1
MISO - Pin 18
MOSI - Pin 17
SCK(USCK) - Pin 19
GND - Pin 10
ISP ist ein InSystemProgrammer - man führt in seiner Schaltung lediglich die 5 o.g. Pins auf einem praktischen Stecker raus und dann kann der Chip beliebig umgeflasht werden, ohne dass man irgendwas ausbauen muss.
Zum Flashen benutze ich PonyProg2000
Wer das Pollinboard hat, der schließt die ISP vom Board per 9-poligem Kabel an die Serielle Schnittstelle des PCs an. An den Einstellungen von PonyProg muss man u.U. schonmal etwas rumschrauben - wenn mans einmal hat, ist aber alles gut Testweise versucht man den Chip mal zu löschen - wenn das glatt geht, dann sollte man auch seinen Speicher auslesen können - natürlich ist der noch leer.
Die Programmierung
Zum Füllen des Chips brauchen wir also ein Programm.
Das erstellt man mit einem passenden Interpreter und Compiler - Basic, C oder Assembler.
Ich benutze Bascom Basic - mit Sicherheit die einfachste Lösung für Anfänger.
Fangen wir einfach an:
An Pins 12-19 (PortB) schließt der geneigt Leser bitte je eine normale LED mit passendem Vorwiderstand an. Und zwar die Anode (langes Bein), da der AVR ja VCC liefert. (Da ich ein Schwein bin, mach ichs immer ohne Widerstände und dreh einfach das Netzteil passend runter - die AVRs vertragen 2,7 - 5,5V bei unter 10MHz) - Batterie geht natürlich auch, der ganze Aufbau verbrauch nicht wirklich viel Strom.
Entweder Integriert ihr eine ISP Schnittstelle zum Flashen oder sockelt den Chip einfach.
In Bascom folgenden Code schreiben/pasten:
[code:1]
'---------------Dieser Teil überschreibt die Compilereinstellungen - braucht man nicht zwingend
$regfile = "2313def.dat" 'Beschreibungsdatei für benutzten Chip
$crystal = 8000000 'Frequenz des Taktgebers - in diesem Fall 8MHz
$hwstack = 32 'Einstellungen für Stacksize usw... erstmal unwichtig - nicht ändern
$swstack = 10
$framesize = 40
'---------------
Config PortB = Output 'Den gesamten PortB als Output definieren
Dim Warten as Byte 'Variablen müssen am Anfang definiert + dimensioniert werden!
Warten = 150 'Zu wartende Zeit zwischen den einzelnen Schritten in Millisekunden (1/1000 sek)
Do 'Startet eine Schleifen (am Ende steht Loop)
PortB = &B00000000 'Setzt PortB komplett auf AUS
Waitms Warten 'Wartet in diesem Fall 150 Millisekunden
PortB = &B00000001 'Aktiviert einen Pin
Waitms Warten
PortB = &B00000011 'Jetzt noch einen 2.
Waitms Warten
PortB = &B00000110 'Es bewegt sich!
Waitms Warten
PortB = &B00001100
Waitms Warten
PortB = &B00011000
Waitms Warten
PortB = &B00110000
Waitms Warten
PortB = &B01100000
Waitms Warten
PortB = &B11000000
Waitms Warten
PortB = &B10000000
Waitms Warten
Loop 'Wieder zurück zum 1. Schritt... für immer!
End 'Der guten Form halber ein END am Ende.
[/code:1]
Eventuell müssen noch die Fusebits des Controllers gesetzt werden, damit er den internen Taktgeber verwendet. Das kann man in PonyProg machen - wie man die Bits am besten setzt findet man mit Hilfe dieser Seite raus: AVR Fusebit Calculator
Allerdings sollte der Lieferzustand schon passen. Im Zweifelsfall erstmal auslesen und mit dem Calculator vergleichen. Wilde Änderungen können den Chip unbrauchbar machen (im schlimmsten Fall).
Den Code dann compilieren und - sofern keine Fehlermeldungen angezeigt werden - das entstandene HEX File mit PonyProg2000 öffnen.
Ladet Euch aber bitte die neueste Version!
Schließlich in den Chip flashen und wenn alles gut ging, dann läuft das erste Lauflicht.
Schaltplan & Board zu Teil 1
Aufgrund der Nachfrage hier noch Schaltplan und ein mögliches Board-Layout...
Teileliste ist schnell gemacht: 8x LED und passenden Widerstand für die verwendete Versorgungsspannung (s. Datenblatt des Chips und der LEDs + Widerstandsrechner), den Chip, den Sockel und einen Taster - wenn man das Ding reseten will. (für den Reset wird einfach Pin1 auf GND gelegt) - daher wird noch ein sogenannter Pull-Up-Widerstand benötigt: Der zieht im Normalzustand den Reset-Pin auf VCC, damit der Port nicht "flattert".
Einen Schaltplan für den Programmieradater findet ihr oben, ein Layout dafür mach ich nicht - hab keine Centronics in meiner Eagle-Lib gefunden und wer sowas nicht hinkriegt sollte vielleicht das Pollin Board kaufen
Die Eagle-Datei versende ich gerne auf PM - ist ja nicht wirklich was besonderes.
Den Chip am besten sockeln, so kann man ihn immer fein rausnehmen und neu flashen und er muss keinen Lötstress ertragen...
[Blockierte Grafik: http://img63.imageshack.us/img63/84/tutorial1schaltungneuqe9.th.png] [Blockierte Grafik: http://img57.imageshack.us/img57/9760/tutorial1layoutneusp6.th.png]
Stefan Z