Forum: Mikrocontroller und Digitale Elektronik Bascom Taster


von Thomas (Gast)


Lesenswert?

Hallo,
Ich habe mal versucht in Bascom einen ein/aus Taster zu programmieren.
Die Variable "Tasterreact" soll dazu dienen den Taster wieder zu
aktivieren wenn man den Taster wieder los lässt, da sonst ja gleich
wieder alles ausgeschaltet wird wenn man den Taster zu lange drückt.


Dim An As Bit
Dim Tasterreact As Bit

 Ddrb = &B00000011
 Portb = &B00000100

 An = 0
 Tasterreact = 1

Do

If Pinb.2 = 0 Then
   If Tasterreact = 1 Then
   Portb.1 = 1

      If An = 0 Then
         Portb.0 = 1
         An = 1
         Tasterreact = 0
      Else
         Portb.0 = 0
         An = 0
         Tasterreact = 0
      End If
   End If
Else
   Tasterreact = 1
End If

Loop

End


Kann man das irgendwie besser machen.

von Dirk (Gast)


Lesenswert?

Hi

schau mal unter debounce in der hilfe.


Dirk

von Thomas (Gast)


Lesenswert?

Kannst du mir das kurz mal aufschreiben wie das geht ich bekommst nicht
so wirklich hin.

von Dirk (Gast)


Lesenswert?

Hi,



ich hab es ein bischen anders gemacht.$sim
$regfile = "8535def.dat"
Config Portb = Input
Dim An As Byte
Config Debounce = 30
do
Debounce Pinb.2 , 1 , Taster , Sub
loop
End                                                         'end
program

taster:
incr an
if an > 1 then
an = 0
Cls
Home
Lcd "aus"
Else
an = 1
Cls
Home
lcd "an"
End If
return


Mfg
Dirk

von Thomas (Gast)


Lesenswert?

Danke Dirk. Funktioniert richtig gut wie ich es wollte.

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Dirk

Müste noch einfacher gehen wenn Du in der Routine Taster den Befehl
Toggle verwendest.

Gruß
Michael

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Dirk und Thomas

Anbei mein Vorschlag, Gruß Michael.

$regfile = "8515DEF.DAT"
Config Portd = Input                                        'Hier ist
eine Taste angeschlossen
Config Portb = Output                                       'hier ist
eine LED angeschlossen

Config Debounce = 100
Set Portb.0

Do
Debounce Pind.0 , 0 , Schalter , Sub
Loop



Schalter:
Toggle Portb.0
Return

End                                                         'end
program

von Thomas (Gast)


Lesenswert?

Noch besser

von Thomas (Gast)


Lesenswert?

Eigentlich müsste das doch auch mit 3 Tastern und 3 LEDs gehen:


Ddrb = &B00000111
Portb = &B00111000

Do
Debounce Pinb.3 , 0 , Einaustaster1 , Sub
Debounce Pinb.4 , 0 , Einaustaster2 , Sub
Debounce Pinb.5 , 0 , Einaustaster3 , Sub
Loop
End


Einaustaster1:
Toggle Portb.0
Return

Einaustaster2:
Toggle Portb.1
Return

Einaustaster3:
Toggle Portb.2
Return


Nur irgendwie leuchtet die 3.LED durchgehend. Woran liegt das ?

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Thomas

Prüf noch mal das Data-direction Register. Ich habe nur eine winzige
Änderung gemacht und Ein/Ausgänge auf mein STK500 Board abgestimmt und
es geht einwandfrei.

Noch ein Hinweis: Bei manchen Prozessoren (CC-Basic) darf man erst
toggeln nachdem ein Anfangszustand definiert wurde

Gruß
Michael


$regfile = "8515DEF.DAT"


Config Portd = Input
Config Portb = Output


Config Debounce = 100




Do
Debounce Pind.0 , 0 , Schalter1 , Sub
Debounce Pind.1 , 0 , Schalter2 , Sub
Debounce Pind.2 , 0 , Schalter3 , Sub
Loop



Schalter1:
Toggle Portb.0
Return

Schalter2:
Toggle Portb.1
Return

Schalter3:
Toggle Portb.2
Return


End                                                         'end
program

von Thomas (Gast)


Lesenswert?

Ok Danke. Ich weis jetzt worans gelegen hat. Ich hab nur die ISP
abgesteckt und schon hat alles funktioniert.

von Tommy (Gast)


Lesenswert?

Hallo zusammen!

hab da ein proplem und hoffe mir kann hier geholfen werden.Erstmal der 
code

$regfile = "atTiny13.dat"
$crystal = 1200000
$hwstack = 24
$swstack = 16
$framesize = 32

Config Portb.0 = Input                                      'Hier 
Taster1
Config Portb.2 = Output                                     'Hier Led1

Config Portb.1 = Input                                      'Hier 
Taster2
Config Portb.3 = Output                                     'hier Led2

Config Debounce = 100
Reset Portb.2
Reset Portb.3

Set Portb.0
Set Portb.1

Do
Debounce Pinb.0 , 0 , Schalter1 , Sub
Debounce Pinb.1 , 0 , Schalter2 , Sub
Loop

Schalter1:
Portb.2 = 1
Wait 2
Portb.2 = 0
Return

Schalter2:
Portb.3 = 1
Wait 1
Portb.3 = 0
Return
End

so und jetz mein problem.
ich brauche gleichzeitig 2 funktionen und bring das einfach nicht auf 
die reihe.
wenn zb.taste 1 kurz getrückt wird,soll eine zeit ablaufen die erst led 
1 dann led 2 einschaltet und später beide ausschaltet.dennoch soll in 
dieser zeit auch taste 2 eine zeit steuerfunktion haben.sobald ich bei 
portb 2 ein WAIT einsetze,ist die funktion für taste 2 ausser betrieb.
wie kann man das anders machen??wäre nett wenn ich hier hilfe 
bekomm.danke im vorraus!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.