Forum: Mikrocontroller und Digitale Elektronik RE: Schalter zu Taster


von Jan S. (Gast)


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

von Helfer (Gast)


Lesenswert?

Bist du sicher, dass du die internen Pull ups nicht brauchst? Die fehlen 
in deinem Code. In der Vorlage 
(Beitrag "Re: Schalter zu Taster") sind die noch drin

> Portd.0 = 1 ' int. Pullup ein

von Jan S. (Gast)


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

von Peter D. (peda)


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

von Helfer (Gast)


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.

von Helfer (Gast)


Lesenswert?

Ersetze PK durch OK

von Helfer (Gast)


Lesenswert?

> Du hast auch die Vorbesetzung von Px_state für P1 und P2 weggelassen.

P0_pegel = Pind.0
P1_pegel = Pind.1
P2_pegel = Pind.2

von Jan S. (Gast)


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 ?!

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.