Forum: Mikrocontroller und Digitale Elektronik Software Uhr Zeitschaltung Atmega8


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bernd S. (bernd66)


Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
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
von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
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

von Bernd S. (bernd66)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

von Bernd S. (bernd66)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

von Patrick J. (ho-bit-hun-ter)


Bewertung
0 lesenswert
nicht lesenswert
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

von Bernd S. (bernd66)


Bewertung
0 lesenswert
nicht lesenswert
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.
von Bernd S. (bernd66)


Bewertung
0 lesenswert
nicht lesenswert
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

von STK500-Besitzer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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...

von chris (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Bernd S. (bernd66)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.