Autor |
Countdown- 7 Segment Anzeige |
|
|
|
|
BID = 554035
DaveWagner Neu hier
Beiträge: 25 Wohnort: Mühldorf
|
|
Hallo
Da mein Freund ein Board zum Programmieren hat will ich gleich einmal ein Programm auf einen Atmega8 laden.Das Programm soll die Zahlen 10 bis 0
im Sekundentakt anzeigen. Bei jeder Sekunde soll auch ein Piepston der Länge 250ms ausgegeben werden. Wenn null angezeigt wird, wird ein Motor durch einen FET angesteuert.An PortD.16 soll ein Taster angeschlossen werden der das Programm startet.An PortD.3 wird ein Taster angeschlossen der das Programm wieder von vorne anfangen lässt.An PortD.17 kommt der Piepser
An PortD.18 kommt der Motor über den FET.
Jedoch wird mir ein Fehler angezeigt bei Bascom.
Also hier das Programm :
$regfile = "m8def.dat"
$crystal = 1000000
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.2 = Output
Config Pind.10 = Output
Config Pind.11 = Output
Config Pind.12 = Output
Config Pind.13 = Output
Config Pind.14 = Output
Config Pind.15 = Output
Config Pind.16 = Input
Config Pind.3 = Input
Config Pind.17 = Output
Config Pind.18 = Output
If Portd.16 = 1 Then Do
Portd.5 = 1
Portd.6 = 1
Portd.2 = 1
Portd.10 = 1
Portd.11 = 1
Portd.12 = 1
Portd.13 = 1
Portd.14 = 1
Portd.17 = 1
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.5 = 0
Portd.6 = 0
Portd.2 = 1
Portd.10 = 1
Portd.11 = 1
Portd.12 = 1
Portd.13 = 1
Portd.17 = 1
Portd.14 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.10 = 1
Portd.11 = 1
Portd.12 = 1
Portd.13 = 1
Portd.14 = 1
Portd.15 = 1
Portd.17 = 1
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.10 = 1
Portd.11 = 1
Portd.15 = 1
Portd.17 = 1
Portd.13 = 0
Portd.14 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.11 = 1
Portd.12 = 1
Portd.13 = 1
Portd.14 = 1
Portd.15 = 1
Portd.17 = 1
Portd.10 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.11 = 1
Portd.12 = 1
Portd.14 = 1
Portd.15 = 1
Portd.17 = 1
Portd.13 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.10 = 1
Portd.11 = 1
Portd.14 = 1
Portd.15 = 1
Portd.17 = 1
Portd.2 = 0
Portd.12 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.10 = 1
Portd.11 = 1
Portd.12 = 1
Portd.15 = 1
Portd.17 = 1
Portd.14 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.10 = 1
Portd.15 = 1
Portd.13 = 1
Portd.12 = 1
Portd.17 = 1
Portd.11 = 0
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.10 = 1
Portd.11 = 1
Portd.2 = 0
Portd.12 = 0
Portd.13 = 0
Portd.14 = 0
Portd.15 = 0
Portd.17 = 1
Waitms 250
Portd.17 = 0
Waitms 1000
Portd.2 = 1
Portd.10 = 1
Portd.11 = 1
Portd.12 = 1
Portd.13 = 1
Portd.14 = 1
Portd.17 = 1
Waitms 250
Portd.17 = 0
Portd.18 = 1
End If Portd.3 = 1
If Portd.16 = 1 Then LOOP
Fehlermeldung = Bei der Zeile " End If Portd.3 = 1 " ist der Fehler
Error : 31 Invalid Datatype [[0011]0]
Was habe ich falsch gemacht ?
Danke im Voraus
David Wagner |
|
BID = 554041
Her Masters Voice Inventar
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 5308 Wohnort: irgendwo südlich von Berlin
|
|
End If Portd.3 = 1 sind 2 Zeilen. Wenn nicht, gibts eben einen Fehler. Wie wärs mal mit Handbuch lesen? RTFM hilft oft weiter.
|
|
BID = 554078
PhyMaLehrer Schriftsteller
Beiträge: 911 Wohnort: Leipzig
|
Ich habe jetzt einmal spaßeshalber diesen Quelltext in die BASCOM-Umgebung kopiert und kompilieren lassen. Tatsächlich wird mir nur dieser eine Fehler angezeigt. Das wundert mich sehr. Ich kann nämlich z. B. mit Pind.10 und Pind.18 nichts anfangen. Woher kommen diese großen Zahlen? Sind das Pin-Nummern? An Pin 10 beispielsweise liegt Bit 7 des Ports B, an Pin 18 liegt Bit 4 von Port B. (Im Datenblatt nachsehen, welche Port-Bits an welchen IC-Pins anliegen!)
Es müßte also nach meinem Verständnis nicht Pind.10 heißen, sondern Pinb.7 und nicht Pind.18, sondern Pinb.4 (analog bei den anderen Deklarationen und beim Setzen der Port-Bits).
Wenn ich die "angezählte" Zeile in zwei aufteile, kommt aber wieder ein Fehler, da nach If Portd.3 = 1 kein Befehl folgt, der in diesem Falle auszuführen wäre!
Die Programmierung genauerer Zeitabstände mittels Timer-Interrupt kommt vielleicht später mal noch. Für jetzt möchte ich aber darauf aufmerksam machen, daß die darzustellenden Zahlen im Abstand von etwa 1,25 s (und nicht 1 s) erscheinen, da pro Ziffer 1 s gewartet wird und pro Piepston 0,25 s!
|
BID = 554154
DaveWagner Neu hier
Beiträge: 25 Wohnort: Mühldorf
|
Hallo
Hab jetzt einen Teil gelöscht und die Pins umbenannt.
Der Einfachheit halber habe ich jetzt einen Abstand von 1,25sec gewählt, da ich mich mit Interrupts noch nicht auskenne.
Mfg
David Wagner
|
BID = 554158
PhyMaLehrer Schriftsteller
Beiträge: 911 Wohnort: Leipzig
|
... oder du machst die "große Pause" eben nur 0,75 s lang, dann stimmt's doch wieder!
|