Forum: Mikrocontroller und Digitale Elektronik Ausgänge gegenainander verriegeln


von Dima (Gast)


Lesenswert?

Hallo,
Ich sitze hier in der Hitze und komme mit meinen Programm nicht weiter.
Ich habe 2 Taster. Taster1 Und Taster2. Und 2 Ausgänge Led1 und Led2.
Die funktion soll folgende sein:
-Taste ich Taster 1 1x dann soll Led1 leuchten.
-Taste ich Taster 1 noch einmal soll Led1 nicht mehr leuchten.

Das gleiche für Taster2 und Led2
Soweit habe ich es auch am klappen.

Aber jetzt kommt es:
- Betätige ich Taster1, dann leuchtet Led 1.
  Betätiger ich dann Taster 2, dann soll Led1 aus gehen und Led2  soll 
leuchten.

usw.

Also Led2 und Led1 soll nicht gleichzeitig Leuchten.

Das ist ja in der Art eine Verriegelung.

Ich habe keine Idee mehr.
Kann mir vielleicht jemand weiterhelfen?
Ich brauche wahrscheinlich nur einen Denkanstoß. Ich habe zur Zeit einen 
Brett vor dem Kopf.



$regfile = "m32def.dat"
$crystal = 10000000
$baud = 9600
$hwstack = 32
$swstack = 10
$framesize = 24

Config Portb = Input
Config Porta = Output
Config Portc = Output
Config Portd = Output
Config Debounce = 8
Portb = &B11111111

'LED1 an PB1
Led1 Alias Porta.1
Config Led1 = Output

'LED2 an PB2
Led2 Alias Porta.2
Config Led2 = Output

'TASTER1 an PB2
Taster1 Alias Pinb.2


'Taster 2 an PB2
Taster2 Alias Pinb.3



Dim Tasterwert11 As Byte
Dim Tasterwert22 As Byte


Do

Debounce Taster1 , 0 , Taster11 , Sub
Debounce Taster2 , 0 , Taster22 , Sub
Loop





Taster11:
If Taster1 = 0 Then Tasterwert11 = Tasterwert11 + 1

If Tasterwert11 = 1 Then

Led1 = 1
Led2 = 0

Elseif Tasterwert11 = 2 Then

Led1 = 0

Tasterwert11 = 0

End If



Taster22:

If Taster2 = 0 Then Tasterwert22 = Tasterwert22 + 1

If Tasterwert22 = 1 Then

Led2 = 1
Led1 = 0

Elseif Tasterwert22 = 2 Then

Led2 = 0

Tasterwert22 = 0

End If

von Samuel C. (dragonsam)


Lesenswert?

Da ich gerade Kust habe ein bisschen was zu Programmieren mach ich's dir 
mal kurz:
1
$regfile = "m32def.dat"
2
$crystal = 10000000
3
$baud = 9600
4
$hwstack = 32
5
$swstack = 10
6
$framesize = 24
7
8
                           'Einen Port als Input zu definieren kannst du dir sparen. Das ist beim einschalten automatisch so.
9
DDRA = &B00000110          'Lieber nur die Pins als Output definieren, die auch wirklich gebraucht werden. Den Rest auf Input und 0 lassen, dann sind sie hochomig.
10
Portb = &B00001100
11
12
'LED1 an PA1
13
Led1 Alias Porta.1
14
15
'LED2 an PA2
16
Led2 Alias Porta.2
17
18
'Taster1 an PB2
19
Taster1 Alias Pinb.2
20
21
'Taster2 an PB3
22
Taster2 Alias Pinb.3
23
24
                           'Die Variablen kannst du dir komplett sparen. Du könntest die Portregister direkt als Variable verwenden.
25
26
Do
27
   Debounce Taster1 , 0 , Taster1_down , Sub
28
   Debounce Taster2 , 0 , Taster2_down , Sub
29
Loop
30
31
End
32
33
Taster1_down:
34
   Led2 = 0                'Macht bei Taster1 auf jeden Fall LED2 aus.
35
   Toggle Led1             'Wechselt den Zustand von LED1
36
Return                     'Springt in die Hauptschleife zurück.
37
38
39
Taster2_down:
40
   Led1 = 0
41
   Toggle Led2
42
Return

Ich hoffe, ich konnte dir helfen.

von Herr M. (herrmueller)


Lesenswert?

Ich kenne den Basic Syntax nicht.

-------
Taster1

LED2 = 0
LED1 = LED1 EOR 1

-------

Taster2

LED1 = 0
LED2 = LED2 EOR 1

-------
EOR ist die logische exor Funktion, die das Basic hoffentlich hat.

von Dima (Gast)


Lesenswert?

Hallo Samuel C. (dragonsam)
hab das alles so in meinen Atmega 32 rein gebrannt.
Hat auf anhieb funktioniert.
Super Danke.
Aber ich weis nicht warum das so funktioniert.
Ich habe einen Aufsatz geschrieben und du machst da einen 3 Zeiler raus.
Super Danke

von Samuel C. (dragonsam)


Lesenswert?

Naja, du hattest die Voraussetzung, dass bei Taster1 LED2 ausgehen soll. 
Das macht man mit Led2 = 0
Bei Taster2 und LED1 ist es dasselbe.

Dann hattest du noch die Voraussetzung, dass bei Taster1 der Zustand von 
LED1 gewechselt wird. Wenn LED1 aus geht sie an und wenn sie an ist geht 
sie aus. Genau das macht "Toggle".

Beide Befehle in eine Routine und Tadaaa, fertig war's.

von Mitleser (Gast)


Lesenswert?

Dima schrieb:
> Ich habe einen Aufsatz geschrieben und du machst da einen 3 Zeiler raus.

Zu langen Aufsätze hatte Samuel heute am Sonntag wohl keine Lust ;-)

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.