http://www.lumitronixforum.de/viewtopic.php?t=1599
wurde kurz erklärt wo man sein eigenes Programm/Code reinschreiben muss und wie man es zum Microcontroller überträgt.
Nun kommen wir zum Programme schreiben bzw. programmieren.
Alle Beispiele hier sind für den Atmega8 geschrieben. Mit einem anderen Microntroller könnte es vielleicht nicht laufen (wenn z.B. der I/O-Port nicht vorhanden ist). Außerdem sind die Beispiele/Codes für das Pollin-Board geschrieben. Dadurch wurden in den Beispielen die richtigen I/O-Pins ausgewählt, wo die 2 Leds, 3 Taster,... angeschlossen sind!
Kurz: alle die den Atmega8 in Kombination mit dem gleichen Pollin-Board wie ich verwenden. Können die Beispiele 1:1 übernehmen.
Grundstruktur
Die Grundstruktur ist folgender Maßen aufgebaut:
$regfile = "m8def.dat" <- Hier wird der Microcontroller-Typ festgelegt, in diesem Code ist es der Atmega8, für Atmega32 wäre es "m32def.dat" anstatt "m8def.dat"
$crystal = 1000000 <- Hier wird der Takt festgelegt, 1000000 sind 1 Mhz, immer den Takt angeben, den der Oszillator bzw. der Taktgeber erzeugt! Sonst läuft es mit der falschen Geschwindigkeit oder es ruckelt. Übertakten kann man damit nicht.
Do <- "Do" heißt so viel wie mache/führe folgendes aus, er führt den Code unter "Do" aus
<- Hier kommt unser Programm/Code rein
Loop <- Loop kann man einem Looping vergleichen, ist eine Endlosschleife und springt zu "Do" zurück und macht dies endlos. Sprich er führt unseren Code zwischen "Do" und "Loop" Endlos aus.
Hier der reine Code ohne Erklärung:
Code: Alles auswählen
$regfile = "m8def.dat"
$crystal = 1000000
Do
Loop
Kommentare in den Code reinschreiben
Möchte man Kommentare im Code hinterlegen, so muss man vor dem Kommentar ein ' (Apostroph) schreiben.
Ansonsten würde der Compiler es als einen Befehl nehmen und ausführen oder ein Fehler bringen.
Alles was hinter dem ' (Apostroph) in der gleichen Zeile wie das ' (Apostroph) steht, wird vom Compiler nicht berücksicht. Z.B.:
$regfile = "m8def.dat" 'Hier kann ich mein Kommentar schreiben
Im Bascom werden Kommentare als grüne Schrift dargestellt
I/Os-Pins (Eingänge/Ausgänge) deklarieren und ansteuern
Damit ein I/O bzw. Pin angesteuert wird, braucht man natürlich mehr als die Grundstruktur.
Wichtig ist die Bezeichnungen der Pins, welche man unter 5. Informationen zu einzelnen AVR-Microcontrollern-Typen: http://www.lumitronixforum.de/viewtopic.php?t=1615 findet. Z.B.: "PD5" oder "PD2". Da man mit dieser Bezeichnung die einzelne I/Os bzw. Pins anspricht.
Deshalb ergänzen wir das Ganze (ich erkläre nur die neu hinzugefügten Befehle):
$regfile = "m8def.dat"
$crystal = 1000000
Config Pind.5 = Output <- Hier wird ihm gesagt, dass der Pin "PD5" ein Ausgang ist. Wäre die Konfiguration für den Pin "PC0" so würde es "Config Pinc.0 = Output" heißen.
Config Pind.6 = Output <- Hier wird Pin "PD6" als Ausgang deklariert.
Config Pind.2 = Input <- Hier wird Pin "PD2" als Eingang deklariert.
Do
Portd.5 = 1 <- Der Pin "PD5" wird auf 1 bzw. High gesetzt. Sprich Pin "PD5" mit 5 Volt versorgt. Wichtig ist, dass beim Ansteuern mit "PortX.X" und weiter oben beim Deklarieren mit "PinX.X" schreibt!
Waitms 1000 <- Hier macht er 1 sek. Pause (1000 Milisekunden = 1 Sek.)
Portd.5 = 0 <- Der Pin "PD5" wird auf 0 bzw. Low gesetzt. Auf Deutsch 0 Volt.
Waitms 1000 <- Wieder 1 Sek. Pause
Portd.6 = 1 <- Diesmal "PD6" auf High
Waitms 1000 <- Wieder 1 Sek. Pause
Portd.6 = 0 <- "PD6" auf Low
Waitms 1000 <- Wieder 1 Sek. Pause
Loop
Hier der Code ohne Erklärung:
Code: Alles auswählen
$regfile = "m8def.dat"
$crystal = 1000000
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.2 = Input
Do
Portd.5 = 1
Waitms 1000
Portd.5 = 0
Waitms 1000
Portd.6 = 1
Waitms 1000
Portd.6 = 0
Waitms 1000
Loop
Die Led1 leuchtet, nach 1. Sek. geht sie aus, nach 1. Sek. geht Led2 an, nach 1 Sek. geht Led2 aus, 1 Sek. Pause und das ganze fängt wieder von vorne an. Somit endlos.
Ist sozusagen, ein Wechselblinker zwischen zwei Leds. Man kann die 1 Sek. Pause runterdrehen auf z.B. 200. Dadurch würde das ganze schneller blinken.
Die Standard I/O- bzw. Pin-Bezeichnungen durch eigene Bezeichnung ersetzen und ansteuern
Die Standard Pin-Bezeichnungen sind schwer zu merken und kaum auseinander zu halten.
Hierfür gibt es eine Lösung, man verwendet folgenden Befehl:
Meinname Alias Portd.5
Dadurch kann ich den "PD5" mit "Meinname" ansprechen. Z.B: "Meinname = 1" und somit Led1 auf High stellen.
Der oberige Code würde mit eigenen Bezeichnungen dann so aussehen:
Code: Alles auswählen
$regfile = "m8def.dat"
$crystal = 1000000
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.2 = Input
Taster1 Alias Pind.2
Led1 Alias Portd.5
Led2 Alias Portd.6
Do
Led1 = 1
Waitms 1000
Led1 = 0
Waitms 1000
Led2 = 1
Waitms 1000
Led2 = 0
Waitms 1000
Loop



