-
Anfänger Code problem
hi,
ich wollte ein Script schreiben, das die LED#s blinken lässt, wenn ein Schalter gedrückt ist. Ich habe folgenden Code geschrieben:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Portd.7 = Output
Config Portc.1 = Output
Config Portc.0 = Output
Config Pina.7 = Input
Taster Alias Pina.7
Rot Alias Portd.7
Gelb Alias Portc.1
Gruen Alias Portc.0
Porta.7 = 1
Rot = 0
Gelb = 0
Gruen = 0
Do
If Taster = 1 Then
Rot = 0
Waitms 50
Rot = 1
Waitms 50
Gelb = 0
Waitms 50
Gelb = 1
Waitms 50
Gruen = 0
Waitms 50
Gruen = 1
Waitms 50
Gelb = 0
Waitms 50
Gelb = 1
Waitms 50
Else
Rot = 0
Gelb = 0
Gruen = 0
End If
Loop
End
Nur läuchten nun beim Drücken des tasters alle 3 Led's und beim Loslassen blinken sie,...was mach ich falsch?
-
Deine "Taster=1" Befehle unterbrechen das Leuchten einer Farbe immer nur für 50 mS. das ist nicht wirklich lange, da siehst du nix blinken.
Schreib mal Waitms 500 ( halbe Sekunde), dann wirst du mehr erkennen
-
daran liegts nicht...wenn ich das IF zeugs weg lasse blinken sie ja auch...
-
Ich vermute mal, daß du den Input-Pin mit dem Pullup auf +5 V ziehst und mit dem Taster bei Betätigung auf GND. Das wär zumindest üblich.
Dann ist deine Abfrage aber genau verkehrt
If Taste = 0 Then ' TASTE GEDRÜCKT
ELSE
' nicht gedrückt.
-
Bei den meisten Boards muss man sowohl bei den Tastern als auch bei den LED´s "umdenken": Die Taster sind i.d.R. nach Masse geschaltet, d.h. wenn Du ihn drückst, geht der Eingang auf Low. Deshalb ist ja auch der PullUp-Widerstand so wichtig, den Du mit "Porta.7=1" gesetzt hast. Der zieht den Eingang auf ein sauberes high, wenn der Taster offen ist.
In Kurzform: Taster gedrückt = Eingang low, Taster offen = Eingang high.
Das erklärt schonmal, weshalb die LEDs blinken, wenn der Taster nicht gedrückt ist.
Dass sie alle angehen wenn der Taster nicht gedrückt ist wird wohl daran liegen, dass sie von den Ausgängen nicht nach "Minus", sondern nach "Plus" geschaltet sind. Damit leuchten die LEDs, wenn der Ausgang low ist.
Ändere Deinen Code doch mal dahin ab, dass Du Rot, Gelb und Gruen als 1 setzt, die Blink-Schleife laufen lässt, wenn Pina.7 0 ist, und unter "Else" Rot, Gelb und Gruen auf 0 setzt.
Oops - @ PickNick: Da haben wir wohl ziemlich gleichzeitig geschrieben... O:)
-
-
@Sauerbruch:
so???
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
Config Portd.7 = Output
Config Portc.1 = Output
Config Portc.0 = Output
Config Pina.7 = Input
Taster Alias Pina.7
Rot Alias Portd.7
Gelb Alias Portc.1
Gruen Alias Portc.0
Porta.7 = 1
Rot = 1
Gelb = 1
Gruen = 1
Do
If Taster = 0 Then
Rot = 0
Waitms 50
Rot = 1
Waitms 50
Gelb = 0
Waitms 50
Gelb = 1
Waitms 50
Gruen = 0
Waitms 50
Gruen = 1
Waitms 50
Gelb = 0
Waitms 50
Gelb = 1
Waitms 50
Else
Rot = 0
Gelb = 0
Gruen = 0
End If
Loop
End
da passiert immer noch das gleiche...
ich habe im Grunde die Schaltung mit 3 Led's:
https://www.roboternetz.de/wissen/im...g_mitquarz.gif
-
Einzelne Pins konfigurieren sollte man übrigens mit config pin.x
Siehe Bascom Hilfe.
Du läßt immer noch alle Leds leuchten, wenn der Schalter offen ist:
Rot = 0
Gelb = 0
Gruen = 0
Gruß
Christopher
-
Wenn ich es so abändere immer noch das gleiche:
Code:
Else
Rot = 0
Gelb = 0
Gruen = 0
End If
Loop
End
-
@tuxianer:
im Schaltplan isses genau so: Taster nach masse, LED´s nach +5V. Wenn Du jetzt noch im "Else"-Teil Rot, Gelb und Gruen auf 1 setzt (wie chr-mt schrieb), müsste es klappen...
Rot = 0: LED an
Rot = 1: LED aus!!
Ist komisch aber wahr...