Das sollte vom Prinzip ungefähr so gehen (pseudocode):
Code:dim angeschaltet as bit if taster = 1 and angeschaltet = 0 then port = 1 angeschaltet = 1 elseif taster = 1 and angeschaltet = 1 then port = 0 angeschaltet = 0 end if waitms 1000
Hi Leute, brauch mal wieder eure Hilfe...
Ich hab folgendes vor: An einem Mikrocontrollerpin hängt ein Taster. Wird dieser Taster kurz gedrückt, schaltet ein Port auf High, wenn ich den Taster wieder drücke, soll dieser Port wieder auf Low schalten. Kann mir da vielleicht jemand helfen, wie der Bascom-Code dafür vom Prinzip her aussieht? Bin ja nicht gerade die Programmierleuchte...
Danke schon mal im vorraus,
Martin
Das sollte vom Prinzip ungefähr so gehen (pseudocode):
Code:dim angeschaltet as bit if taster = 1 and angeschaltet = 0 then port = 1 angeschaltet = 1 elseif taster = 1 and angeschaltet = 1 then port = 0 angeschaltet = 0 end if waitms 1000
Viele Grüße, William
-> http://william.thielicke.org/
Oder schau dir mal
Debounce PinX.Y, 0, toggle_port, sub
und
Toggle PortV.W
an.
PinX.Y steht dabei für den Pin, an den der Taster angeschlossen ist, 0 für Taster schaltet nach GND (1 für Taster schaltet nach VCC) und toggle_port ist ein Label, wo der Toggle Befehl steht. PortU.V ist entsprechend der Pin, den du umschalten möchtest.
Gruß
Rolf
Danke Leute, werd eure Beispiele mal ausprobieren!
Gruß,
Martin
hi
ich bin auch nen ziemlicher anfänger, hab mir gerade erst nen µC gekauft^^
ich baue gerade die selbe schaltung wie RAM, und habe das programm mal auf meinem controller geladen. nur bei mir blinkt die led jez. bei drücken des taster bleibt der takt stehen und wen ich wieder los lasse blinkt sie weiter
hir is ma das programm das ich aufgespielt habe
$regfile = "m8def.dat"
$framesize = 8
$swstack = 8
$hwstack = 8
$crystal = 8000000
$baud = 9600
Config Portb.0 = Output
Led Alias Portb.0
Config Pinb.1 = Input
Taster Alias Pinb.1
Portb.1 = 1
Do
Dim Angeschaltet As Bit
If Taster = 1 And Angeschaltet = 0 Then
Led = 1
Angeschaltet = 1
Elseif Taster = 1 And Angeschaltet = 1 Then
Led = 0
Angeschaltet = 0
End If
Waitms 100
loop
End
ich nehme mal stark an das ich für "angeschaltet" irgentwas einsetzen soll![]()
nur keine ahnung was^^
Mit portb.1 = 1 hast du den Pullup eingeschaltet. Wenn du mit dem Taster vom Pin nach Masse schaltest, sieht es so aus, das der Taster 1 liefert, wenn er nicht gedrückt ist und 0, wenn er gedrückt ist.
Deine IF-Konstruktion schaltet also bei jedem Durchlauf von 1 nach 0 und zurück, da Taster ungedrückt = 1 ist.
Gruß MeckPommER
P.S.: ab besten auch gleich die Werte für framesize, stacksize, etc. von 8 raufsetzen auf 40 oder 60 ... sonst wirds dem Controler zu eng![]()
Mein Hexapod im Detail auf www.vreal.de
ok ich habe die 1 gegen eine 0 getauscht, jetzt funktioniert es.
nur darf ich jez den taster nur ganz kurz drücken sonst registriert der gleich 2 einsen, wie kann ich das verhindern? denn das is echt unpraktisch.
du solltest auf flanken reagieren, d.h. du merkst dir den zustand des schalters, wie du dir den zustand der LED merkst und wenn der schalter vorher 0 und jetzt 1 ist reagierst du erst ....
also einfach ein
And letzteTaste = 0 hinzufügen und bei jedem durchlauf am ENDE letzteTaste mit dem wert des aktuellen taster belegen
Oder du machst es ganz einfach wie in meinem Beispiel oben:
am ende einfügen. Das geht natürlich nur wenn dein Programm nicht irgendetwas zeitkritisches machen muss.Code:waitms 1000
Viele Grüße, William
-> http://william.thielicke.org/
ok ich hab jez mehrmals versucht...
von wo bis wo ist ein durchlauf und in welcher zeile genau ist das ende. denn ich tu den befehl eindeutig an die falsche stelle ^^
Lesezeichen