-
So jetzt Funktioniert es mit dem Schalten der Ports. Meint ihr ich hab da irgendein Denkfehler oder kann ich das so verwenden ? Hier der Code
Code:
$regfile = "m32def.dat"$crystal = 16000000
Config Dcf77 = Pind.7 , Timer = 1 , Gosub = Sectic 'DCF-Uhr Routine, lässt sich auch mit einem xMHZ Quarz ohne DCF-Empfänger nutzen
Config Porta.1 = Output
Config Porta.2 = Output
Enable Interrupts
Date$ = "09/04/00"
Time$ = "23:13:55"
Do 'übersichtliche Hauptschleife...
Gosub Temperaturregeln
Gosub Tastatur
Gosub Sonstiges
Gosub Zeitschalteruv
Gosub Zeitschalterwaerme
Loop
End
Sectic: 'wird sekündlich aufgerufen
Gosub Uhranzeigen
Gosub Temperaturanzeigen
If _sec = 0then
End If
Return
Schaltuhr:
Return
Zeitschalteruv:
If Time$ = "23:14:00" Then
Set Porta.1
End If
If Time$ = "23:14:05" Then
Reset Porta.1
End If
Return
Zeitschalterwaerme:
'Erster Schaltvorgang
If Time$ = "23:14:02" Then
Set Porta.2
End If
If Time$ = "23:14:07" Then
Reset Porta.2
End If
'Zweiter Schaltvorgang
If Time$ = "23:14:10" Then
Set Porta.2
End If
If Time$ = "23:14:15" Then
Reset Porta.2
End If
Return
Temperaturregeln:
'hier dein Code für die Temperaturregelung rein
Return
Tastatur:
'hier dein Code für die Tastatur / Drehencoder rein
Return
Sonstiges:
'hier dein Code für Anderes rein
Return
Uhranzeigen:
Print Time$ ; ""
Return
Temperaturanzeigen:
'hier dein Code für die Temperaturanzeige rein
Return
Gruß Tjark
-
Da ist noch eine Menge Überflüssgies drin. Die Subs waren Beispiele. Ist da kein Code drin, brauchst Du sie auch nicht. So springt er halt hin und gleich wieder zurück. Möchtest Du das Datum in unserer gewohnten Schreibsweise nutzen, dann am Anfang des Programmes einfach
Code:
Config Date = Dmy , Separator = .
hinzufügen. Das bei deinem vorletzen Code nicht wieder abgeschaltet wurde ist klar, denn mein Beispiel war für minutengenaues Schalten in der Sekunde 0. Außerhalb der Sekunde 0 wurde gar nicht in die Schaltuhr Sub gesprungen. Jetzt fehlt natürlich noch Code, um die Uhr und die Schaltzeiten (Entweder per Taster, Drehencoder, RS232 oder gar Fernbedienung) zu stellen. Du kannst natürlich auch einen DCF-Empfänger anschließen und die ZEiten fest einprogrammieren. Dafür wäre aber eine Überprüfung auf eine gültige Zeit von Vorteil. Die Schaltzeiten lassen sich im EEPROM speichern, wenn du sie veränderbar machen möchtest. Bei deinen Programmierkenntnissen kann auch es auch nicht schaden, wenn du den Watchdog zu Hilfe nimmst. Wird dieser nicht regelmäßig zurückgesetzt, weil das Programm sich verheddert, führt den AVR einen Neustart durch.
Ich denke, da habe ich dir wieder viel Neues genannt. Viel Spaß beim ausprobieren. (Mir macht das immer am meisten Spaß, vor allem, wenn am Ende dann alles so läuft, wie ich es mir vorgestellt habe)
Nur interessehalber: Wie steuerst Du die Geräte an?
-
Ja ich weiß das da noch einige überflüssige Sachen drinnen waren haben ja aber nicht gestört der Code muss ja eh noch umgeändert/erweitert werden :) Danke peterfido hast mir sehr geholfen. Ich habe mich auch sehr gefreut als das alles so lief wie ich wollte (schon komisch wie mann sich so freuen kann nur weil eine LED Blinkt ;)). Ich werde mir jetzt noch 2 Temperatursensoren kaufen. Mit dem einen Messe ich die Temperatur des Sonnplatzes des Chamäleons und mit dem andrern die Allgemeine Lufttemperatur damit sollen auch die Wärmelampen angesteuert werden. Außerdem noch ein Luftfeuchtigkeitssensor mit dessem Hilfe ich die Beregnungsanlage steuere um die Luftfeuchtigkeit im Terrarium auf 60-70% zu halten. Die Lampen will ich mit diesem Relais hier steuern und die Relais selber werden über IRLZ34N angesteuert die direkt an die Ports kommen. Wobei ich es besser finden würde wenn ich die Wärmelampen digital über PWM dimmen könnte aber ich weiß nicht wie. Villeicht habt ich ja eine Idee die Lampen haben 2x75 Watt.
Gruß Tjark