www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeitfunktion mit Atmega8


Important 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.
Autor: Bernd S. (bernd16)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Leute,

ich beschäftige mich seit Kurzem mit Mikrocontrollern. Dementsprechend 
habe ich auch nur geringe Kenntnisse. Nun zu meinem eigentlichen 
Problem: Ich möchte einen Atmega8 als Art "Zeitschaltuhr" programmieren. 
Diese soll alle 12 Stunden eine Aktion ausführen. Da ein Delay nur für 
kürzere Verzögerungszeiten funktioniert, brauch ich nun Eure Hilfe....

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Delay ist sowieso der falsche Ansatz
(abgesehen davon, dass wenn man 20 mal 1 Sekunde wartet, man in Summe ja 
auch 20 Sekunden gewartet hat. Wie die Arithmetik einer Uhr 
funktioniert, weißt du? 60 Sekunde sind 1 Minute. 60 Minuten sind 1 
Stunde. Du willst 12 Stunden warten.)

Was du brauchst ist: Der Einsatz eines Timers.
http://www.mikrocontroller.net/articles/AVR_-_Die_...

Autor: Bernd S. (bernd16)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke für den Link. Ich hab mir den Timer mal durchgelesen und den 
Beispielcode auf meine Bedürfnisse abgeändert. Leider funktioniert das 
nicht ganz :-(  Hat jemand von euch eventuell noch ein einfaches 
Beispielprogramm (C)?

Autor: Trollpfleger (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bernd S. schrieb:
> Danke für den Link. Ich hab mir den Timer mal durchgelesen und den
> Beispielcode auf meine Bedürfnisse abgeändert.
Dann lass mal sehen...

Autor: Bernd S. (bernd16)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Okay. Also nach 5 Sekunden (anstatt meine 12 Stunden, um das Programm 
schneller zu testen) soll Ausgang PD0 gesetzt werden.

CODE: im Anhang. Die Zeilen mit Kommentar versehen, wurden geändert.

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bernd S. schrieb:
> Also nach 5 Sekunden

Sieht für mich eher nach 5 Minuten aus.

Bernd S. schrieb:
> CODE: im Anhang.

Und wieso als .txt, und nicht als .c?

Beitrag #2679718 wurde vom Autor gelöscht.
Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Als erstes nimmst du jetzt mal deinen Code und rückst ihn korrekt ein!

Dann wirst du auch deinen Fehler sehen.

Autor: Bernd S. (bernd16)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
hm...ich vermute, dass "Ausgang setzen" außerhalb der Endlosschleife 
war...?!

Autor: Peter II (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
was soll das while hier machen?
while(1)               
 
  TCCR1B = (1<<WGM12) | (1<<CS10);                     
  OCR1A = XTAL / DEBOUNCE - 1;          
  TCNT1 = 0;                            
  second = 0;
  prescaler = (uchar)DEBOUNCE;          
  TIMSK = 1<<OCIE1A;                 
 ...

Autor: Dennis Heynlein (c-logic)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Dieses Dauer-While ist aber etwas fehl am Platz.

 while(1)

  TCCR1B = (1<<WGM12) | (1<<CS10);

Autor: Bernd S. (bernd16)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
okay. habs rausgenommen. Ausgang wird jetzt auch gesetzt, allerdings mit 
extremer Verzögerung. Muss ich noch etwas an der Frequenz bzw. Prescale 
verändern?

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Überprüf doch mal, ob deine 'extreme Verzögerung' nicht zufällig den 
Wert

11059008L / 1000000

also ca 11 hat.

Wenn ja, dann läuft dein µC nicht mit 11Mhz sondern ist noch im 
Auslieferungszustand 1Mhz

Autor: Bernd S. (bernd16)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
reicht es dann einfach, wenn ich 11059008L auf 1000000 Hz im Code 
ändere?

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich würd sicherheitshalber mal mit dem Taschenrechner die sich daraus 
ergebenden Zahlen nachrechnen, ob sie sich noch so einigermassen im 
Rahmen bewegen.

Allerdings:
Ohne Quarz mit einer halbwegs genau definierten Frequenz, wirst du mit 
deiner Uhr nicht viel Freude haben. Wenn die je nach Tagestemperatur 
unterschiedliche Abweichungen hat, wird sie dir schnell aus dem Ruder 
laufen. Da könnte man sich diesen ganzen Aufwand auch sparen und das 
Schätzeisen tatsächlich auch gleich mit delay_ms betreiben.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net