Hallo Modellbaufreunde,
heute installieren wir den Treiber für den USBASP, die Bascom-AVR Demo und testen unser erstes Programm.
Hier der
Link zum Treiber und hier nochmals der
Link zur Demo .
Der USBASP-Treiber
Die .zip Datei extrahieren und dann den USBASP mit dem Computer verbinden.
Nicht den Treiber im Internet suchen lassen, sondern in den extrahierten Ordner gehen und den Ordner libusb_1.2.4.0 auswählen.
Der Treiber ist nicht digital signiert! Bei Windows 8 - 10 eventuell die automatische Signaturprüfung deaktivieren.
Nach der Installation im Gerätemanager prüfen, ob der USBASP fehlerlos als Gerät angezeigt wird.
Die Bascom-AVR Demo...
... ist leider nur englisch und für Windows verfügbar.
Den Installer laufen lassen und das Programm starten.
Bascom verwöhnt uns mit einer vorzüglichen Hilfefunktion und sinnvollen Tooltips. Ruhig mal etwas schnuppern.
Den USBASP anschließen.
Bascom beenden.
Übernahme unserer Einstellungen:
Nun zuerst eine Sicherheitskopie der bascom-avr.xml Datei erzeugen.
Ihr findet die Datei unter:
C:\Users\####\AppData\Roaming\MCS Electronics\bascom-avr.xml
#### = Benutzer. Es kann auch C:\Benutzer\... heißen.
Jetzt öffnet die bascom-avr.xml und die angehängte Einstellungen.txt mit dem Editor.
Einstellungen.zip
Sucht in der Bascom.xml nach
<openpath>
Dort steht Euer Programmpfad.
Ersetzt den Programmpfad in der Einstellungen.txt durch Euren.
Sucht in der Bascom.xml nach
</DockingManager>
Alles oberhalb von </DockingManager> löschen.
sic!
Jetzt den Inhalt der geänderten Einstellungen.txt in der Bascom.xml oberhalb von </DockingManager> einfügen.
Zwischen dem Eingefügten und </DockingManager> soll genau
eine Leerzeile sein. Nicht zwei oder keine - eine. (siehe auch:
Heilige Handgranate von Antiochia )
Speichert die geänderte Bascom.xml. Der Editor speichert gerne als .txt-Datei. Gegebenenfalls manuell umbenennen.
Jetzt sollten wir die gleichen Einstellungen haben.
Das ist aber noch nicht verifiziert.
Wenn Ihr Bascom neu startet, sollte unter Options/Programmer im aufgegangenen Fenster der USBASP als Programmer ausgewählt sein;
das einzige Häkchen bei Auto-Verify und als Clock Frequency Auto.
(Bitte Feedback)
Dann schauen wir mal, ob alles funktioniert.
Das Steckbrett...
... ist wie folgt organisiert:
Wir haben links und rechts je zwei Kontaktspalten, die vertikal einzeln miteinander verbunden sind (rote und schwarze Linien).
Diese werden zumeist für die Spannungsversorgung genutzt.
Mittig haben wir, durch einen Spalt getrennt, Kontaktreihen zu je fünf Kontakten, die horizontal miteinander verbunden sind (gelbe Linien).
Aufbau unserer ersten Schaltung
- Vcc & GND des Adapters auf Kontaktspalten.
- Der 100 nF Entstörkondensator sollte möglichst nahe am Vcc-Pin des Mikrocontrollers liegen und mit dem zweiten Beinchen mit GND verbunden werden
- Pin 1 (Reset) via 10 kOhm Widerstand mit Vcc verbinden
- Resettaster (offen) zwischen Pin 1 und GND
- Vcc und GND anschließen
- LED an Pin 12 via Widerstand 1 kOhm anschließen; Kathode an GND
- Restliche Adapterkabel anschließen.
Der Schaltplan:
.
Anmerkung: In der Library war nur der pinkompatible ATtiny2313; wir benutzen den ATtiny4313 mit mehr Gedächtnis.
Der Übersicht halber ist die ISP-Verbindung nicht eingezeichnet. Ihr wisst ja, wo die vier übrigen Strippen des Adapters hin müssen.
Und hier könnt Ihr den Aufbau auf dem Steckbrett sehen!
Tatääää - unser erstes Programm:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
'*****************************
'
'
' Blinker
'
'
'*****************************
'
' PB.0 (Pin 12) -- 1k -- Anode LED -- Kathode LED -- GND.
'
'
' ***** Genutzter Microcontroller, Takt in Hz, Stacks & Framesize
$regfile = "attiny4313.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32
'***** Configs & Interrupts
' Portpin-Configs & Alias
Config Portb.0 = Output
Led1 Alias Portb.0
'***** Hauptprogramm
Do
Led1 = 1
Wait 1
Led1 = 0
Wait 1
Loop
End
|
Programmieren des Mikrocontrollers
- Kopiert den obigen Code in die Zwischenablage und öffnet Bascom.
- Falls kein Fenster "noname1" zu sehen ist, klickt auf das erste Icon "Create a new file" (Tooltips erscheinen bei jedem Icon).
- Fügt den inhalt der Zwischenablage ab Zeile 1 ein und speichert das ganze unter "WM Blinker1.bas" ab.
- Klickt auf das Icon "Check Syntax" und bleibt nach dem Klicken mit dem Mauszeiger auf dem Icon.
- In der grauen Statuszeile ganz unten sollte "No errors found" stehen.
- Klickt auf das Icon "Compile program" und bleibt nach dem Klicken mit dem Mauszeiger auf dem Icon.
- Es blitzt kurz ein Fenster auf, das aussagt wieviel Speicher benutzt wurde.
- In der grauen Statuszeile ganz unten sollte wieder "No errors found" stehen.
- Nun klickt auf das Icon "Program chip". Ein neues Fenster geht auf.
- In der grauen Statuszeile direkt unter den Icons steht bei Chip nur "???"
- Klickt auf das Icon "Identify chip" und in der Statuszeile wird unser ATtiny4313 mit seinen Speichern erkannt.
- Klickt nun auf das Icon "Erase and program chip" und unser Tiny wird programmiert und der Inhalt nochmals verifiziert.
Das Fenster schließt sich und...
... die LED blinkt im Sekundentakt
Wie haben wir den Tiny dazu überredet?
Schauen wir uns dazu den Code an, am besten im Bascom-Fenster.
Alles was auf ein Hochkomma (
') folgt, wird grün dargestellt und vom Compiler ignoriert. Das sind Kommentare, die der Dokumentation des Programms dienen.
In blau sehen wir die Bascom-Befehle.
In Zeile 14 sagen wir dem Compiler, welchen ATMEL-Chip wir programmieren wollen. Für jeden Chip gibt es eine eigene .dat-Datei:
$regfile = "attiny4313.dat"
In Zeile 15 sagen wir dem Compiler, mit welcher Frequenz in Hz der Chip betrieben wird; in unserem Fall Auslieferungszustand: 1 MHz:
$crystal = 1000000
Stacks & Framesize in Zeilen 16 - 18 sind von Bascom vorgeschlagene Standardwerte und sollen uns momentan nicht weiter interessieren.
Wir wollten eine LED an Pin 12 blinken lassen. Ein Blick auf das Chip PinOut-Fenster rechts (oder die Abbildung im letzten Post) sagt uns viel.
Fährt man mit dem Mauszeiger über die Pins, werden die Funktionen angegeben. Aha, Pin 12 heißt PB0 <- Null, nicht o.
Dies ist eine Abkürzung von PortB.0.
ATMEL-Mikrocontroller haben verschiedene Ports (A, B, C...), die jeweils 8 Bit haben. Also PortB.0, PortB.1 bis PortB.7.
Nicht alle Mikrocontroller haben vollständige Ports.
Pin 12 soll es sein. Also sagen wir dem Compiler in Zeile 22, dass Pin 12 für Ausgabe zuständig sein soll:
Config PortB.0 = Output
Da hängt unsere erste und momentan einzige LED. Nennen wir sie Led1.
In Zeile 23 sagen wir dem Compiler, dass, wenn Led1 im Code geschrieben wird, PortB.0 gemeint ist:
Led1 Alias PortB.0
Das kostet keinen Speicherplatz und ist nützlich!
In Zeilen 26 - 32 steht das eigentliche Hauptprogramm.
Im Normalfall eine Endlosschleife:
Do .... Loop gefolgt von
End (was im Widerspruch zur Endlosschleife steht - is' aber so.)
Was passiert in der Schleife?
In Zeile 27 sagen wir, dass PortB.0 aktiviert werden soll (+5 V) -> Led1 geht an.
In Zeile 28 sagen wir, dass der Mikrocontroller eine Pause von einer Sekunde machen soll. Der
Wait-Befehl will ganze Zahlen!
Soll die Pause geringfügig abweichen, so können wir auch den
Waitms-Befehl für Millisekunden benutzen.
In Zeile 29 machen wir Led1 wieder aus und warten in Zeile 30 wieder ein Sekündchen.
Dann das Ganze von vorne - ist ja eine Endlosschleife.
Einfach, gelle?
Hier noch ein paar Aufgaben/Spielereien für Euch:
- Wait-Werte ändern
- Wait 1 durch Waitms 1000 ersetzen
- Waitms-Werte ändern
- $crystal ändern, von 1 MHz z. B. auf 8 Mhz oder 100 kHz
- einen anderen Portpin ansteuern
- zwei Portpins ansteuern
Feedback erwünscht!
Und wenn Ihr Eure Hausaufgaben nicht macht:
Vorsicht! Eine Eigenart von Bascom: Sobald eine Änderung vorgenommen wurde und entweder die Syntax gecheckt oder kompiliert wird,
wird die Originaldatei ohne Nachfrage überschrieben. Deshalb zuerst mit "Save as" eine neue Datei anlegen, z. B. "WM Blinker1.1.bas" und dann spielen.
Schalten Sie auch nächstes Mal wieder ein, wenn Sie die M&Ms sagen hören: "Jetzt aber was Richtiges!"
Viele Grüße
Mathias & Micha
Inhaltsverzeichnis aller Projekt-Posts in Post 1