Taster nach Zeit abfragen BASCOM

Gast #1689012
Lesenswert?

Hallo,

Ich möchte einem Taster nach einer bestimmten Zeit Abgefragt wird d.h.
dass wenn der Taster unter 1,5 Sekunden gedrückt wird soll der Ausgang 
Ausgeschaltet wird wenn er über 1,5 Sekunden gedrückt wird soll Portb.0 
eingeschaltet werden und Portb.1 so lange eingeschaltet werden wie auch 
der Taster gedrückt wird.
1
$regfile = "2313def.dat"
2
$crystal = 400000
3

4
Config Portb.0 = Output                                     'Relais1
5
Config Portb.1 = Output                                     'Relais2
6
Config Portb.3 = Input                                      'Taster
7
Config Portb.4 = Output                                     'LED
8
Portb.3 = 1                                                 
9
Portb.4 = 1
10
Waitms 500
11
Portb.4 = 0
12
Waitms 500
13
Portb.4 = 1
14
Waitms 500
15
Portb.4 = 0
16

17
Main:
18

19
If Pinb.3 = 1 Then
20
Waitms 1500
21
If Pinb.3 = 0 Then
22
Portb.0 = 0
23
Portb.1 = 0
24
Goto Main
25
End If
26
Waitms 3000
27
Portb.0 = 1
28
Taster:
29
If Pinb.3 = 1 Then
30
Portb.1 = 1
31
Goto Taster
32
Else
33
Portb.1 = 0
34
Goto Main
35
End If
36
Else
37
Goto Main
38
End If

Ich hoffe ihr wisst was ich meine :)

MFG
Gast #1689830
Lesenswert?

Hallo Matze,

habe mich ein wenig eingearbeitet und losgelegt!
Würde das so funktionieren??
1
$regfile = "2313def.dat"
2
$crystal = 4000000
3

4
Config Timer0 = Timer , Prescale = 256
5
Dim Zähler As Byte
6
Zähler = 0
7
Enable Timer0
8
Dim Zint As Bit
9
Zint = 0
10
On Timer0 Timerinterput
11
Enable Interrupts
12
Config Portb.0 = Output                                     'Relais1
13
Config Portb.1 = Output                                     'Relais2
14
Config Portb.3 = Input                                      'Taster
15
Config Portb.4 = Output                                     'LED
16
Portb.4 = 1
17
Waitms 500
18
Portb.4 = 0
19
Waitms 500
20
Portb.4 = 1
21
Waitms 500
22
Portb.4 = 0
23
Do
24
If Zint = 0 Then
25
Debounce Pinb.3 , 1 , Timeron , Sub
26
Zint = 1
27
Else
28
Debounce Pinb.3 , 0 , Timeroff , Sub
29
Zint = 0
30
End If
31
Loop
32

33
End
34
Timeron:
35
Timer0 = 64
36

37

38

39

40
Return
41
Timerinterput:
42
Zähler = Zähler + 1
43
If Zähler = 4 Then
44
Portb.0 = 1
45
Portb.1 = 1
46
End If
47
Return
48
Timeroff:
49
Disable Timer0
50
If Zähler <= 3 Then
51
Portb.0 = 0
52
Portb.1 = 0
53
Else
54
Portb.0 = 0
55
End If
56
Return

MFG
Gast #1689978
Lesenswert?

@ Peter Hess:

> Muss der Taster Input (3.Zeile) nicht mit PINB.3 gesetzt werden ?

Muss nicht; BASCOM ist es egal, ob da "PORTB" oder "PINB" steht. Es 
weiss, was gemeint ist, und setzt in beiden Fällen die Pin-Funktion 
richtig.
Gast #1690276
Lesenswert?

Hallo Christopher,

meiner Meinung nach nein.
Ich habe mal kurz was geschrieben. Habe allerdings andere Ports benutzt, 
weil ich gerade kein freies Steckbrett habe. Stecken überall LCD´s 
drann. Aber da kommt es ja auch nicht drauf an. Funktioniert so auf 
einem Mega8

PS.: Hab den Taster gegen Masse geschaltet, also Pullup nicht vergessen 
:-)
PPS.: 1,5 Sekunden sind echt wenig, wenn du es von Hand bedienen 
möchtest nimm lieber etwas mehr...
1
$regfile = "2313def.dat"
2
$crystal = 4000000
3

4
Config Timer0 = Timer , Prescale = 256           'Feuert 6,1x / Sekunde
5

6
Dim Ticks As Integer
7
Dim Tickson As Integer
8

9
Tickson = 9                                      'Passt nicht ganz, sind 1,47 Sekunden
10

11
Enable Interrupts
12
Config Portb.5 = Output
13
Config Pinb.3 = Input
14
Config Portb.4 = Output
15

16
Relais1 Alias Portb.5
17
Taster Alias Pinb.3
18
Led Alias Portb.4
19

20
Relais1 = 0
21
Taster = 1
22
Led=0
23

24
For Ticks = 1 To 5
25
Toggle Led
26
Waitms 500
27
Next
28
Ticks = -1
29

30

31
Enable Timer0
32
On Timer0 Timerinterput
33

34
Do
35
If Taster = 1 Then
36
   Led = 0
37
   If Ticks > -1 Then
38
      Ticks = -1
39
      Relais1 = 0
40
   Else
41
      Ticks = -1
42
   End If
43
Else
44
   Led = 1
45
   If Ticks = -1 Then Ticks = 0
46
   If Ticks = Tickson Then
47
      Ticks = -2
48
      Relais1 = 1
49
      End If
50
   End If
51

52
Loop
53

54
Timerinterput:
55
If Ticks > -1 Then
56
Incr Ticks
57
End If
58
Return

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren