2 Eingänge 2 Ausgänge

Gast #2646565
Lesenswert?

Hallo,
irgendwie stehe ich auf 'n Schlauch.
Ich habe einen ATMega8 (später ATTiny45)
Es gibt 2 Taster an 2 Eingängen von +5V.
je nach dem welcher gedrückt wird soll ein Ausgang auf HI gehen für 35 
Sekunden. Sollte in dieser Zeit wieder einer von beiden gedrückt werden 
sollen beide sofort auf LO gehen...
in Bascom ;-)
Irgendwie bekomme ich das nicht hin...kann jemand helfen...?
Gast #2646573
Lesenswert?

Auf welchem Schlauch stehst Du denn?

Der Schlauch, der das eigenständige Arbeiten mit Energie versorgt?
Oder der Schlauch, der Faulheit kanalisiert?

Was hast Du denn schon gemacht? Was geht schon? Was geht nicht?
Gast #2646589
Lesenswert?

ja, sehr witzig...
folgendes hab ich schon, mit timer...geht aber halt nicht...
1
$regfile "m8def.dat"
2
$crystal = 8000000
3
Dim Status As Byte
4

5
' Pinkonfiguration *************************************************************
6
Eingang_auf Alias Pind.0
7
Eingang_zu Alias Pind.1
8
Ausgang_auf Alias Portd.2
9
Ausgang_zu Alias Portd.3
10

11
'Datenrichtugsregister Port B, 1=Ausgang, 0=Eingang
12
'Pin     76543210
13
Ddrd = &B00001100
14

15
Config Timer0 = Timer , Prescale = 1024                     ' (8000000Hz/1024) /256=30,517578Hz)
16
Enable Timer0
17
On Timer0 Timersprung
18
Enable Interrupts
19

20
Do
21
Loop
22

23
Reaktion_auf_taste:
24
   Ausgang_auf = 1
25
   Waitms 5000                                              '35 Sekunden warten
26
   Ausgang_auf = 0
27
Return
28

29

30
Reaktion_zu_taste:
31
   Ausgang_zu = 1
32
   Waitms 5000                                              '35 Sekunden warten
33
   Ausgang_zu = 0
34
Return
35

36
Timersprung:
37
If Ausgang_auf = 1 And Eingang_auf = 1 Then Goto Alles_aus
38
If Ausgang_auf = 1 And Eingang_zu = 1 Then Goto Alles_aus
39
If Ausgang_zu = 1 And Eingang_zu = 1 Then Goto Alles_aus
40
If Ausgang_zu = 1 And Eingang_zu = 1 Then Goto Alles_aus
41
If Eingang_zu = 1 Then Goto Reaktion_zu_taste
42
If Eingang_auf = 1 Then Goto Reaktion_auf_taste
43
Return
44

45
Alles_aus:
46
Ausgang_auf = 0
47
Ausgang_zu = 0
48
Re
Gast #2646602
Lesenswert?

TimBo schrieb:
> Irgendwie bekomme ich das nicht hin...kann jemand helfen...?

Ein Zustandsdiagramm sollte helfen aber es geht auch in Pseudocode

Modul: BlödeHausaufgabe

Flags:
WarTasteSchonGedrückt


Timer
ZeitSeitTasteGedrückt

Ist Taste gedrückt?
 WarTasteSchonGedrückt = Falsch dann Ausgang -> Hi
 WarTasteSchonGedrückt = Wahr dann Ausgang -> Low

usw. usf


Der Trick ist der die Aufgabe so gut wie möglich in Software abzubilden!

Das macht das programmieren leichter und nach einem Jahr weiß man worum 
es ging.
Gast #2646662
Lesenswert?

soweit geht es...nur mit den 35 sekunden warten am ausgang geht nicht...
1
$regfile "m8def.dat"
2
$crystal = 8000000
3
Dim Status_taste_auf As Byte
4
Dim Status_taste_zu As Byte
5
Dim Zaehler As Word
6
' Pinkonfiguration *************************************************************
7
Eingang_auf Alias Pind.0
8
Eingang_zu Alias Pind.1
9
Ausgang_auf Alias Portd.2
10
Ausgang_zu Alias Portd.3
11

12
'Datenrichtugsregister, 1=Ausgang, 0=Eingang
13
'Pin     76543210
14
Ddrd = &B00001100
15

16
Config Timer0 = Timer , Prescale = 1024                     ' (8000000Hz/1024) /256=30,517578Hz)
17
Enable Timer0
18
On Timer0 Timersprung
19
Enable Interrupts
20

21
Ausgang_zu = 0
22
Ausgang_auf = 0
23
Status_taste_auf = 0
24
Status_taste_zu = 0
25
Zaehler = 0
26

27
Do
28
   Debounce Eingang_auf , 1 , Reaktion_auf_taste , Sub
29
   Debounce Eingang_zu , 1 , Reaktion_zu_taste , Sub
30
Loop
31

32
Reaktion_auf_taste:
33
   If Status_taste_auf = 1 Then Goto Alles_aus
34
   If Ausgang_zu = 1 Then Goto Alles_aus
35
   Status_taste_auf = 1
36

37
Return
38

39
Reaktion_zu_taste:
40
   If Status_taste_zu = 1 Then Goto Alles_aus
41
   If Ausgang_auf = 1 Then Goto Alles_aus
42
   Status_taste_zu = 1
43

44
Return
45

46
Timersprung:
47
   If Status_taste_auf = 1 Then Ausgang_auf = 1
48
   If Status_taste_zu = 1 Then Ausgang_zu = 1
49
Return
50

51
Alles_aus:
52
   Ausgang_zu = 0
53
   Ausgang_auf = 0
54
   Status_taste_auf = 0
55
   Status_taste_zu = 0
56
   Zaehler = 0
57
Return
Gast #2646678
Lesenswert?

so hab ich hinbekommen...aber ob das nun eine optimale lösung ist...?
1
$regfile "m8def.dat"
2
$crystal = 8000000
3
Dim Status_taste_auf As Byte
4
Dim Status_taste_zu As Byte
5
Dim Zaehler As Long
6
' Pinkonfiguration *************************************************************
7
Eingang_auf Alias Pind.0
8
Eingang_zu Alias Pind.1
9
Ausgang_auf Alias Portd.2
10
Ausgang_zu Alias Portd.3
11

12
'Datenrichtugsregister, 1=Ausgang, 0=Eingang
13
'Pin     76543210
14
Ddrd = &B00001100
15

16
Config Timer0 = Timer , Prescale = 1024                     ' (8000000Hz/1024) /256=30,517578Hz)
17
Enable Timer0
18
On Timer0 Timersprung
19
Enable Interrupts
20

21
Ausgang_zu = 0
22
Ausgang_auf = 0
23
Status_taste_auf = 0
24
Status_taste_zu = 0
25
Zaehler = 0
26

27
Do
28
   Debounce Eingang_auf , 1 , Reaktion_auf_taste , Sub
29
   Debounce Eingang_zu , 1 , Reaktion_zu_taste , Sub
30
Loop
31

32
Reaktion_auf_taste:
33
   If Status_taste_auf = 1 Then Goto Alles_aus
34
   If Ausgang_zu = 1 Then Goto Alles_aus
35
   Status_taste_auf = 1
36

37
Return
38

39
Reaktion_zu_taste:
40
   If Status_taste_zu = 1 Then Goto Alles_aus
41
   If Ausgang_auf = 1 Then Goto Alles_aus
42
   Status_taste_zu = 1
43
Return
44

45
Timersprung:
46
   If Status_taste_auf = 1 Then Ausgang_auf = 1
47
   If Status_taste_zu = 1 Then Ausgang_zu = 1
48
Zaehler = Zaehler + 1
49
If Zaehler = 1050 Then Goto Alles_aus
50

51
Return
52

53
Alles_aus:
54
   Ausgang_zu = 0
55
   Ausgang_auf = 0
56
   Status_taste_auf = 0
57
   Status_taste_zu = 0
58
   Zaehler = 0
59
Return
Gast #2646707
Lesenswert?

nee..so jetzt richtig...der timer lief ja weiter im hintergrund
1
$regfile "m8def.dat"
2
$crystal = 8000000
3
Dim Status_taste_auf As Byte
4
Dim Status_taste_zu As Byte
5
Dim Zaehler As Long
6
' Pinkonfiguration *************************************************************
7
Eingang_auf Alias Pind.0
8
Eingang_zu Alias Pind.1
9
Ausgang_auf Alias Portd.2
10
Ausgang_zu Alias Portd.3
11

12
'Datenrichtugsregister, 1=Ausgang, 0=Eingang
13
'Pin     76543210
14
Ddrd = &B00001100
15

16
Config Timer0 = Timer , Prescale = 1024                     ' (8000000Hz/1024) /256=30,517578Hz)
17
'Enable Timer0
18
On Timer0 Timersprung
19
Enable Interrupts
20

21
Ausgang_zu = 0
22
Ausgang_auf = 0
23
Status_taste_auf = 0
24
Status_taste_zu = 0
25
Zaehler = 0
26

27
Do
28
   Debounce Eingang_auf , 1 , Reaktion_auf_taste , Sub
29
   Debounce Eingang_zu , 1 , Reaktion_zu_taste , Sub
30
Loop
31

32
Reaktion_auf_taste:
33
   If Status_taste_auf = 1 Then Goto Alles_aus
34
   If Ausgang_zu = 1 Then Goto Alles_aus
35
   Status_taste_auf = 1
36
   Enable Timer0
37
Return
38

39
Reaktion_zu_taste:
40
   If Status_taste_zu = 1 Then Goto Alles_aus
41
   If Ausgang_auf = 1 Then Goto Alles_aus
42
   Status_taste_zu = 1
43
   Enable Timer0
44
Return
45

46
Timersprung:
47
   If Status_taste_auf = 1 Then Ausgang_auf = 1
48
   If Status_taste_zu = 1 Then Ausgang_zu = 1
49
   Zaehler = Zaehler + 1
50
   If Zaehler = 1070 Then Goto Alles_aus
51
'35 Sekunden * 30,517578 (aus Timer0) = 1068,1152
52
'1070 dauert ca. 35 Sekunden
53
Return
54

55
Alles_aus:
56
   Ausgang_zu = 0
57
   Ausgang_auf = 0
58
   Status_taste_auf = 0
59
   Status_taste_zu = 0
60
   Zaehler = 0
61
   Disable Timer0
62
Return
Gast #2658658
Lesenswert?

hallo,
im anhang habe ich die schaltung welche nur halb funktioniert...
die beiten Transistoren die die von 12v geschalten werden schalten dann 
5V durch zum µc...dieser gibts dann an den Pins PB2 und PB3 ein HI aus, 
dieses soll dann die folgenden Transistoren schalten das sie 12V 
durchschalten....machen sie aber nicht....nur ca. 5V
kann einer helfen?
Danke schonmal
Angehängte Dateien:
Gast #2658814
Lesenswert?

hallo, nein, die beiden taster kommen von 12V (14,6V) von der 
Autobatterie.
Diese Tastsignale sollen für 35 Sekunden verlängert werden...
Die Transistoren schalten auch kei8ne Last...die Signale gehen aufs 
Steuerteil vom  Auto...
(Firma: google) #2659112
Lesenswert?

glaube hab ich oben schonmal geschrieben...

es ist eine verdeckautomatik, das verdeck meines cabrios geht nur auf/zu 
wenn man den taster gedrückt hält. nun dauert es etwa 35 sekunden bis es 
auf/zu ist.
und da dachte ich mir, ich (verlängere) den tasterdruck um 35 sekunden.
softwaremäßig ist es schon so programmiert, das wenn man ein 2tes mal 
drückt die sache anhält oder den anderen Taster drück auch anhält und 
erst bei erneutem drücken wieder losgeht.

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