RE: Schalter zu Taster

Gast #2138312
Lesenswert?

Hallo und danke für eure Hilfe!
Die Lösung von Helfer funktioniert perfekt. Nur wie bekomme ich es hin, 
dass es mehrere "Umwandler" gibt? Dieser Code auf Basis von Helfer geht 
irgendwie nicht:
1
$regfile = "2313def.dat"
2
$crystal = 1000000
3

4
'        Vcc
5
'         |
6
'         # int. Pull Up
7
'         |
8
' Pin PD0 o----+
9
'              |
10
'               \ Schalter
11
'              |
12
'             GND
13
'
14
Config Pind.0 = Input
15
Config Pind.1 = Input
16
Config Pind.2 = Input
17

18

19
'
20
' Pin PB0 o--###-->|--o GND
21
'
22
Config Portb.0 = Output
23
Config Portb.1 = Output
24
Config Portb.2 = Output
25

26
'
27
' Ausgangsbedingungen
28
'
29
Dim P0_pegel As Byte
30
Dim P1_pegel As Byte
31
Dim P2_pegel As Byte
32

33
P0_pegel = Pind.0
34

35
Do
36
  If Pind.0 = 1 And P0_pegel = 0 Then
37
    ' Steigende Flanke 0 nach 1 erkennen und Aktion durchführen
38
    P0_pegel = 1
39
    Portb.0 = 1
40
    Waitms 80 ' Überspringt implizit Prellen
41
    Portb.0 = 0
42
  Elseif Pind.0 = 0 And P0_pegel = 1 then
43
    ' Fallende Flanke 1 nach 0 erkennen und P0_pegel zurücksetzen
44
    Waitms 20                                               ' Prellen abwarten
45
    P0_pegel = Pind.0
46
  End If
47

48
    If Pind.1 = 1 And P1_pegel = 0 Then
49
    ' Steigende Flanke 0 nach 1 erkennen und Aktion durchführen
50
    P0_pegel = 1
51
    Portb.1 = 1
52
    Waitms 80 ' Überspringt implizit Prellen
53
    Portb.1 = 0
54
  Elseif Pind.1 = 0 And P1_pegel = 1 Then
55
    ' Fallende Flanke 1 nach 0 erkennen und P0_pegel zurücksetzen
56
    Waitms 20                                               ' Prellen abwarten
57
    P1_pegel = Pind.1
58
  End If
59

60
    If Pind.2 = 1 And P2_pegel = 0 Then
61
    ' Steigende Flanke 0 nach 1 erkennen und Aktion durchführen
62
    P0_pegel = 1
63
    Portb.1 = 1
64
    Waitms 80 ' Überspringt implizit Prellen
65
    Portb.1 = 0
66
  Elseif Pind.2 = 0 And P2_pegel = 1 Then
67
    ' Fallende Flanke 1 nach 0 erkennen und P0_pegel zurücksetzen
68
    Waitms 20                                               ' Prellen abwarten
69
    P2_pegel = Pind.2
70
  End if
71
Loop
Gast #2138320
Lesenswert?

Entschuldigt, ich habe mich irgendwie verkickt und habe einen neuen 
Thread dafür eröffnet dabei sollte es nur eine Antwort sein :S

@Helfer: Die Pull-Up-Widerstände habe ich extra eingebaut, ist mir 
irgendwie lieber ;) Auch bevor ich deine Lösung kompiliert habe, habe 
ich die Zeile gelöscht, also sollte es nicht daran liegen.
Gruß, Jan
#2138342
Lesenswert?

Du kannst gerne lange Programme schreiben. Nur wird die sich kaum ein 
Bascomer angucken, weil er weiß, daß es den Debounce Befehl gibt.

Man darf ruhig auch mal ins Bascom Manual reinschauen, ehe man drauflos 
programmiert.

AFAIK gibt es auch eine Portierung meiner 4-fach, 8-Tasten 
Entprellroutine nach Bascom. Der große Vorteil, sie kommt völlig ohne 
Delays aus.


Peter
Gast #2138360
Lesenswert?

Jan, dann solltest du das "geht irgendwie nicht" irgendwie genauer 
beschreiben.

Du darfst auch die Kommentare im Programm anpassen. Wenn in einem 
Kommentar ein interner Pull-up beschrieben ist, erwartet man auch die 
entsprechende Codezeile. Externe Pull ups ist PK, den alten Kommentar 
stehen zu lassen ist "Verarsche".

Du hast auch die Vorbesetzung von Px_state für P1 und P2 weggelassen.
Gast #2138713
Lesenswert?

>Zitat von Peter Dannegger
>Du kannst gerne lange Programme schreiben. Nur wird die sich kaum ein
>Bascomer angucken, weil er weiß, daß es den Debounce Befehl gibt.

Ich dachte, debounce ist nur für das entprellen zuständig ?!

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