Forum: Mikrocontroller und Digitale Elektronik Taster nach Zeit abfragen BASCOM


von Christopher Schenk (Gast)


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

von Matze (Gast)


Lesenswert?

Du brauchst einen Timer.
Guckst du hier:
http://www.rn-wissen.de/index.php/Bascom_und_Timer

Gruß
Matze

PS.: 400kHz bei $crystal richtig?

von Christopher Schenk (Gast)


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

von Peter H. (thunderfrog)


Lesenswert?

Verständnissfrage für mich:

Config Portb.0 = Output                                     'Relais1
Config Portb.1 = Output                                     'Relais2
Config Portb.3 = Input                                      'Taster
Config Portb.4 = Output                                     'LED

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

von Spezi (Gast)


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.

von Peter H. (thunderfrog)


Lesenswert?

Danke Spezi

von Matze (Gast)


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

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.