PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 1 Relais 2 Signale



xbgamer
27.02.2010, 15:35
Servus ich habe ein Problem mit meiner Uhr bzw dem Menü.

Und zwar will ich dass einmal ein Relais anzieht wenn mit einem Taster im Menü Radio auswähle und das andere mal wenn Weckzeit und Uhrzeit übereinstimmen soll der selbe Ausgang gesetzt werden.

nun habe ich im moment ein klacken das relais zieht nicht an. ich vermute dass es an meinen else pind.1 = 0 liegt.

nur wie mache ich das am geschicktesten. desweiteren hab ich keine ahnung wie die uhr überhaupt los läuft. ich hab einen uhrenquarz angeschlossen nur tut sich da nix.

hier mal ein ausschnitt:


Debounce Pind.0 , 0 , Menue , Sub
If Modus = 0 Then
Locate 2 , 1
Lcd "aus "
End If


If Modus = 1 Then
Locate 2 , 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If

If Modus = 2 Then
Locate 2 , 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If

If Modus = 3 Then
Locate 2 , 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If

If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And Modus = 0 Then
Portb.1 = 1
Else
Portb.1 = 0

End If

Jaecko
27.02.2010, 15:57
desweiteren hab ich keine ahnung wie die uhr überhaupt los läuft. ich hab einen uhrenquarz angeschlossen nur tut sich da nix.


Und genau hier wär das _vollständige_ Programm wichtig. Nicht nur ein Ausschnitt.

xbgamer
27.02.2010, 15:58
ok hier:

$regfile = "m8def.dat"
$crystal = 1000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40



Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcdbus = 4
Cursor Off
Ddrb = &B11111111
Ddrd = &B00000000
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Portd.6 = 1
Portd.7 = 1

Enable Interrupts
Config Clock = Soft
Declare Sub Stunde
Declare Sub Minute
Declare Sub Menue
Declare Sub Stundew
Declare Sub Minutew
Declare Sub Onoff
Declare Sub Stellenmenue

Dim Modus As Byte
Dim Stellenstunde As Byte
Dim Stellenminute As Byte
Dim Konfiguration As Byte
Dim Anaus As Byte


Cls

Time$ = "00:00:00"

Do
Locate 1 , 1
Lcd Time$ ; " " ;
Locate 1 , 12
If Stellenstunde < 10 Then Lcd "0"
Lcd Stellenstunde ; ":"
If Stellenminute < 10 Then Lcd "0"
Lcd Stellenminute


Debounce Pind.0 , 0 , Menue , Sub
If Modus = 0 Then
Locate 2 , 1
Lcd "aus "
End If


If Modus = 1 Then
Locate 2 , 1
Lcd "MP3 "
Portb.0 = 1
Else
Portb.0 = 0
End If

If Modus = 2 Then
Locate 2 , 1
Lcd "Radio"
Portb.1 = 1
Else
Portb.1 = 0
End If

If Modus = 3 Then
Locate 2 , 1
Lcd "AUX "
Portb.2 = 1
Else
Portb.2 = 0
End If

Debounce Pind.1 , 0 , Stellenmenue , Sub


If Konfiguration = 1 Then 'Wecker stellen
Debounce Pind.2 , 0 , Stundew , Sub
Debounce Pind.3 , 0 , Minutew , Sub
End If


If Konfiguration = 2 Then 'Uhr stellen
Debounce Pind.2 , 0 , Stunde , Sub
Debounce Pind.3 , 0 , Minute , Sub
End If

Debounce Pind.4 , 0 , Onoff , Sub

If Konfiguration = 0 Then 'Wecker an/aus
If Anaus = 0 Then
Locate 2 , 11
Lcd " aus"
End If

If Anaus = 1 Then
Locate 2 , 11
Lcd " an"
End If
End If


If Stellenstunde = _hour And Stellenminute = _min And Anaus = 1 And Modus = 0 Then
Portb.1 = 1
Else
Portb.1 = 0

End If



Loop



'Stellenmenü 'Menü zum einstellen Wecker/Uhr
Stellenmenue:
Incr Konfiguration
If Konfiguration = 3 Then Konfiguration = 0
Locate 2 , 11

If Konfiguration = 0 Then
Locate 2 , 11
End If


If Konfiguration = 1 Then
Locate 2 , 11
Lcd "Wecker"
End If



If Konfiguration = 2 Then
Locate 2 , 11
Lcd " Uhr"
End If
Return


'Menü 'Menü MP3, Radio, Aux
Menue:
Incr Modus
If Modus = 4 Then Modus = 0
Return



'Stunde 'Hier wird die Stunde der Uhr hochgezählt
Stunde:
Incr _hour
If _hour > 23 Then
_hour = 00
End If
Return



'Minute 'Hier wird die Minute der Uhr hochgezählt
Minute:
Incr _min
If _min > 59 Then
_min = 00
End If

Return



'MinuteW 'Hier wird die Minute des Weckers hochgezählt
Minutew:
Incr Stellenminute
If Stellenminute > 59 Then
Stellenminute = 0
End If
Return



'Stundew 'Hier wird die Stunde des Weckers hochgezählt
Stundew:
Incr Stellenstunde
If Stellenstunde > 23 Then
Stellenstunde = 0
End If
Return



'onoff 'Hier wird der Wecker ein- und ausgeschaltet
Onoff:
Incr Anaus
If Anaus = 2 Then Anaus = 0
Return

xbgamer
27.02.2010, 16:46
kann ich das problem mit dem relais nicht einfach so lösen dass ich einen anderen ausgang für den wecker schalten lasse und den einfach auch auf das relais anschließe?

sollte ja eigentlich gehen is nur nicht so ellegant wie wenn ichs mit der software mache. nur muss ich dann 2 dioden einbauen die jeweils gegen den anderen port sperren?

Tido
27.02.2010, 17:11
Das Problem scheint klar:

Selbst wenn das Relais durch den Taster eingeschlatet wird, so wird es in der Zeile Portb.1 = 0 nach der If-Abfrage
If Stellenstunde = _hour And Stellenminute
wieder ausgeschaltet, wenn die Weckzeit nicht erreicht ist.

xbgamer
27.02.2010, 17:13
Das Problem scheint klar:

Selbst wenn das Relais durch den Taster eingeschlatet wird, so wird es in der Zeile
If Stellenstunde = _hour And Stellenminute
wieder ausgeschaltet, wenn die Weckzeit nicht erreicht ist.


soweit war ich auch schon nur wie kann ich es lösen?

Tido
27.02.2010, 17:16
Setz doch beim manuellen Einschalten des Radios eine Variable (lösche sie beim manuellen Ausschalten) und ändere die Zeile in
if variable<>"wert" then Portb.1 = 0

xbgamer
27.02.2010, 17:25
die uhr läuft mittlerweile. bleibt nur noch das problem mit dem relais. dein ansatz versteh ich nicht. ich arbeite doch bereits mit ner variable. siehe modus im code weiter unten.

Tido
27.02.2010, 18:49
Dann schreib eben:
if modus<>2 then Portb.1 = 0

Neutro
27.02.2010, 18:52
Das ganze kannst du doch auch mit einer oder Verknüpfung lösen:
if zustandX erreicht or zustand Y then
Relais setzen

MfG

Neutro