Einen guten Sonntag morgen, Ich habe da mal ein paar Fragen. Im zuge meines neuen Aquariums habe ich mir überlegt nach und nach eine Steuerung dafür zu bauen, entwickeln. Für Tageszeitbasierte Aktionen brauche ich schonmal eine Uhr. DS1307 z.B. gestellt werden soll sie erstmal über ein LCD 4x20 Zeichen. Wenn ich nun sagen wir mal eine Lampe um 9:30 Uhr angehen soll und um 20:00 Uhr wieder aus. Wie kann ich das realisieren. Ich muss ja eine Abfrage laufen lassen welche andauernd überprüft ob die eingestellte Zeit erreicht worden ist. ungefähr so: WENN "eingestellte Zeit" GLEICH "system Zeit" DANN "Ausgang1 einschalten" für's auschalten das gleiche nur mit Ausgang1 auschalten. Kann ich das so realisieren? Bin Anfänger in Sachen C Programmierung. Später sollen noch Sachen dazu kommen wie LCD Menü, Heizungsteuerung mit Nachtabsenkung, pH-Wert und der ganze Kram, aber erstmal soll es bei einfachen Sachen bleiben. Sprich SystemUhr, Heizungsteuerung mit DS18B20 und Zeitschaltuhr. Gruß, Daniel J.
Hi, Daniel, das Zauberwerkzeug heißt "Endlosigkeit der Main-Schleife". Du richtest nach main() und nach all den Initialisierungen eine Schleife ein mit beispielsweise while(1). In dieser Schleife prüfst Du die Realtime clock ab oder die interne Uhr (wozu ein DS1307? Den emulieren wir auf der linken Backe des Atmega16ff mit dem TCNT2 im asynchronen Betrieb und sparen Strom mit einem der Sleep-Modes. Ist die Bedingung der Clock erfüllt, wird gehandelt nach Plan. Ciao Wolfgang Horn
Die Ereignisse kannst Du z.B. in einer sortierten Tabelle ablegen. Pro Eintrag speicherst Du die Ausführzeit und einen Funktionspointer auf die Aktion.
> ungefähr so: > > WENN "eingestellte Zeit" GLEICH "system Zeit" DANN "Ausgang1 > einschalten" > > für's auschalten das gleiche nur mit Ausgang1 auschalten. Besser ist es übrigens, wenn du das ganze nicht an Zeit-PUNKTEN festmachst, sondern an Zeit-INTERVALLEN. Wann muss das Licht eingeschaltet sein? Wenn die aktuelle Uhrzeit später als die Einschaltzeit aber früher als die Ausschaltzeit ist. Ob du eine RTC nimmst oder ob du den Mega die Uhr machen lässt, ist in unseren Breiten meiner Meinung nach weitgehend Geschmacksache. RTC hat den Vorteil, dass sie auch bei einem Stromausfall die Uhrzeit nicht verliert und das sie aus dem Stand heraus genau geht. Die Sache mit dem Stromausfall ist allerdings so eine Sache. Wie oft fällt denn bei uns wirklich der Strom aus? Und selbst wenn: Wie schlimm ist es, wenn im Aquarium nach einem Stromausfall das Licht 1 Tag lang um ein paar Stunden versetzt ein/ausschaltet. Du stellst die Uhr händisch wieder ein und danach läuft sie wieder auf der Zeit. Selbiges mit der Uhrzeit. Eine Software Uhr kriegt man leicht so hin, dass sie von der Umstellung Sommer/Winterzeit im Frühling bis zum Gegenteil im Winter um nicht viel abweicht. > Später sollen noch Sachen dazu kommen wie LCD Menü Irrtum. LCD brauchst du möglichst schnell. Du brauchst es, damit du während der Programmentwicklung dir dort Informationen ausgeben kannst. Gerade für einen Neuling ist nichts schlimmer, als wie wenn er keine Ausgabemöglichkeit hat um festzustellen, was im Programm abgeht.
StinkyWinky schrieb: > Die Ereignisse kannst Du z.B. in einer sortierten Tabelle ablegen. Pro > Eintrag speicherst Du die Ausführzeit und einen Funktionspointer auf die > Aktion. Machs nicht so komplizert. Sowas braucht er, vor allen Dingen als Neuling, noch lange nicht.
Danke für eure Antworten. Mit dem LCD wollte ich auch vorziehen. So ist es einfacher informationen zu erhalten und auch später einzugeben. Irgendwo muss ich ja sehen was passiert. Ich will mich da Stück für Stück ran tasten. Mit dem Licht wann es angehen soll ja wie soll ich das erklären. Es soll um 9:00 Uhr angehen und anbleiben bis 20:00 Uhr als Beispiel jetzt. Oder verstehe ich dich falsch?. Ich denke eine Software Uhr reicht erstmal, den RTC hatte ich hier noch rumfliegen mit Uhren-Quarz, zwecks Stromausfall das kommt eher selten vor hier.
Daniel Joachims schrieb: > Mit dem LCD wollte ich auch vorziehen. So ist es einfacher informationen > zu erhalten und auch später einzugeben. Irgendwo muss ich ja sehen was > passiert. Genau > Ich will mich da Stück für Stück ran tasten. Gute Einstellung. Langsam - Stück für Stück. > Mit dem Licht > wann es angehen soll ja wie soll ich das erklären. Es soll um 9:00 Uhr > angehen und anbleiben bis 20:00 Uhr als Beispiel jetzt. Oder verstehe > ich dich falsch?. Ne, passt schon. Aber nicht: if( Uhrzeit ist 9 Uhr ) Licht ein if( Uhrezeit ist 20 Uhr ) Licht aus sondern if( Uhrzeit >= 9 Uhr && Uhrzeit <= 20 Uhr ) Licht ein else Licht aus Den Unterschied merkst du, wenn du die Uhr einstellst :-) Ist auch einfacher in der Programmierung. Denn dann hast du Zeitintervalle mit jeweils eine Anfangszeit und einer Ausschaltzeit. Und wenn die tatsächliche Uhrzeit da dazwischen ist, dann gilt ein Zustand (hier: Licht ein, kann aber natürlich auch sein: Temperatur 21° Grad) Aber das hat alles noch Zeit. Erst mal gibt es Hausaufgaben zu machen :-) Programmieren und Grundlagen lernen.
So sehe ich das auch. Danke Danke. Erstmal muss das LCD ankommen 4 x 20 Zeichen sollten genug sein. Und dann wird erstmal Grundwissen angeeignet und angewendet bis dahin bin ich Wochen weiter. Ich habe hier ein Atmega32 der sollte für's erste reichen denke ich. Lange habe ich mich gewehrt, und mehr als sourcecode auf einen anderen AVR umzubauen oder einzelne Funktionen umzuschreiben waren nicht drin. Aber ganze Programme zu schreiben da muss ich noch viel lernen.
Na dann. wenn du schon Dinge gemacht hast. Ein Tip: Wenn du die Uhrezeit als Minuten seit Mitternacht speicherst, fallen die Vergleiche einfacher aus, als wenn du sie als Stunden und Minuten speicherst. Stunden / Minuten ist zwar für Anzeige und Eingabe für den Menschen bequemer (weil wir es so gewohnt sind), aber programmintern ist eine einzige ganze Zahl viel einfacher zu handhaben.
Vielen Dank für denn Tip der hört sich sogar richtig gut an. Leider Versuche ich vergeblichst mein 4x20 LCD im 4bit Modus zu initialisieren. Ich habe das LCD per 4bit an den ATmega32 angeschlossen D4-D7 am LCD an PORTA des ATmega PA0-PA3 liegen die Datenleitungen, an PA4 - PA6 die Steuersignale. Dies habe ich auch in der lcd-routine.h so angepasst. Ich habe das ganze nach dem Tutorial hier gemacht. Habe schon einiges gesucht hier und gefunden aber das Display wird nicht initialisiert. Es erscheinen lediglich die 2 in meinem Fall weißen Balken. Es soll HD47780 kompatible sein der Typ ist YB2004A LBWABBB 5.0V Die Offenen Datenleitungen sind auf GND gelegt. Der ATmega32 läuft zurzeit bei 16Mhz.
Der Atmega32 kann aber nur 8mhz (wenn du ihm nicht einen ext. Quarz gibst). Die offnen Datenleitungen brauchst du bei dem Display nicht zu GND'en.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.