Hallo, ich komme nicht weiter. Nach der Vorlage im Tutorial habe ich eine Uhr mit 1602 LCD Display erstellt. Diese läuft auch zuverlässig. Jetzt möchte ich zu bestimmten Zeiten LED-s einschalten. Klappt so leider nicht, wenn ich das hinzufüge.Die LED geht nach 10 Sekunden an und bleibt an. loop1: ldi temp1,0xFF out DDRB,temp1 ldi temp1,Sekunden ; Lade Sekunden in r16 cpi temp1,10 ; Vergleiche r16 mit 10 breq LED_on ; Wenn Werte gleich, springe LED_off: Ldi temp1,0b00000000 Out PORTB,temp1 rjmp main LED_on: Ldi temp1,0b00000001 Out PORTB,temp1 Rjmp main Vielleicht hat jemand Zeit und kann mir auf die Sprünge helfen. Ist sicher kein größeres Problem. Danke. Bernd
:
Verschoben durch Moderator
Hi Der angehängte Code ist Deine Vorlage, das Tutorial? Dann zeig bitte Deinen Code. In dem Schnipsel beginnst Du bei LOOP und springst am Ende (LED an oder aus) nach MAIN - wo wieder Keiner akut weiß, was dort abläuft. Wenn Dein Code dort ebenfalls z.B. den Stack initialisiert, werden z.B. zwischenfunkende Interrupts ggf. 'aus dem Tritt' kommen. MfG
Hallo Patrick, hier der komplette Code. Aber ich bekomme es nicht mehr so hin wie ich es hatte. Jetzt geht die LED bei Start an und nicht mehr aus. Ich habe die Absicht die Register Sekunde, Minute, Stunde, mit einem Soll Wert (in diesem Fall 10 Sekunden) zu vergleichen und bei Übereinstimmung einen Pin zu aktivieren. Danke, das Du mal darüber geschaut hast. Gruß Bernd
Hallo, falls es jemanden interessiert. Bin jetzt weiter. Port B wird nach einer Minute eingeschaltet, nach 2 Minuten ausgeschaltet. Die Stunden beziehe ich später ein, und schalte einzelne Pins. Es wird eine Zeitschaltuhr mit 6 Kanälen. Diese wird von einer normalen Steckdosen Schaltuhr gestartet (Aquarium). Gruß Bernd
Hi Gerne weiter berichten, hatte die letzten Tage nur übersichtlich Zeit, so Kram wie 'Grillen und Bier trinken' kamen mir dazwischen - bei dem Wetter hoffe ich auf Dein Verständnis :) Freut mich, daß Du weiter gekommen bist, woran lag es ? MfG
Hi, es lag an meinem Unwissen und das liegt am chronischen Zeitmangel :-/. Nach den Anfängerübungen habe ich kaum Ahnung von der Materie. So wußte ich hier nicht wie ich in einer laufenden Isr die Zeit abfrage. Die Sekunden, Minuten und Stunden werden ja bei jedem Überlauf gelöscht. Hab das jetzt mit dem Sprungbefehl breq vorläufig gelöst. Mal schauen ob das mit mehreren Bedingungen klappt. Ja, das Wetter ist heute super, fühl mich gar nicht sooo wohl am PC wie sonst. Gruß Bernd
Beitrag #4934397 wurde vom Autor gelöscht.
Hi, ins Nirwana, klappt nicht wirklich mit der Schaltuhr. Ich kann nach stunden, Minuten oder Sekunden schalten, aber nicht zwei Bedingungen gleichzeitig. In der Isr funktioniert nur eine Abfrage, eine zweite stört den Programmablauf bis zum Absturz. Kann man die Alarmzeit nicht abgreifen (vergleichen) wenn sie aufs LCD geschickt wird? Das scheint allgemein ein Problem zu sein, was auch Profis nicht hinkriegen. Funktionierende Beispiele sind jedenfalls nicht zu finden. Schade, hier tut sich ja gar nichts, nicht mal Tipps. Sorry schwach, danke trotzdem. Liegt wohl am Frühlingswetter. Gruß Bernd
Bernd S. schrieb: > Kann man die Alarmzeit nicht abgreifen (vergleichen) wenn sie aufs LCD > geschickt wird? Natürlich kannst du das machen. Du hast doch die Register "Stunden", "Minuten" und "Sekunden". Ob du die nur für die Anzeige auf dem LCD verwendest, oder noch mit ein paar Werten aus einer Tabelle vergleichst (und dir somit quasi beliebig viele Schaltpunkte erzeugen kannst), ist doch völlig egal.
Bernd S. schrieb: > Das scheint allgemein ein Problem zu sein, was auch Profis nicht > hinkriegen. Funktionierende Beispiele sind jedenfalls nicht zu finden. LOL. Nein, das Problem ist vielmehr so trivial zu lösen, dass eine Lösung keiner besonderen Erwähnung bedarf. Man muss halt einfach nur wenigstens ansatzweise Assembler können. Und natürlich gibt es zehntausende Beispiele im Netz, bei der eine Kombination aus mehreren Bedingungen geprüft wird. Das ist einfach so alltäglich, dass niemand es der besonderen Erwähnung für wert hält. Im konkreten Fall braucht man nicht einmal wirklich kombinatorische Logik, man kann das mit etwas zweckentfremdeter Arithmetik deutlich effizienter lösen. Anfangen tut man jedenfalls damit, dass man die gewünschten Ein- und Ausschaltzeiten erstmal in einer Tabelle als Konstanten darstellt. Es würde sich anbieten, diese Tabelle im EEPROM anzulegen, Flash geht aber auch. Fang' also erstmal damit an...
In der ISR1 machst du nur deine UHR als Abhandlung. Für den Vergleich verschiedene Schaltpunkten kannst du enwtweder eine zweite ISR machen von Timer0 oder 2 der dann alle 5s aufgerufen wird und die Schaltpunkte vergleicht. Oder du schiebst diesen Abfragevergleich in das Hauptprogramm ein und rufst es von dort als Unterprogramm auf. Hier hängt es dann von der Laufzeit der anderen abzuarbeitenden Programmen ab.
Hallo, danke an Alle. Ich verstehe wirklich noch nicht viel davon, muß ich zugeben. Das Hobby frisst aber wirklich einen Haufen Zeit. Aber langsam und mit Eurer Hilfe geht's weiter. Ich hab das jetzt relativ einfach gemacht. Euch stehen sicher die Haare zu Berge, aber es funktioniert zuverlässig. Tabelle habe ich noch nicht hinbekommen. Die Überläufe wurden so geändert, das alle 5 Minuten (12 pro Stunde)einer stattfindet. Die zähle ich einfach hoch und lasse dann schalten. Bei 18 z.Bsp. wird nach 1h30 (nach Start Netzschaltuhr) geschaltet. Das reicht für 20h, das Aquarium läuft ja nur ca.12h. Das LCD soll sowieso nicht dran bleiben, weil ich dann eine dauernde Stromversorgung bräuchte. Je nach Zeit (und Lernkurve) wird das aber erweitert. Eine Frage hätte ich noch. Kann ich ein atmega8 Board mit der vorhandenen Konstantstromquelle für die LED-s versorgen? Diese hat 12 Volt, 350mA und noch Reserven. Gruß Bernd
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.