www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik timer1 ist langsamer als systemtakt


Autor: samir (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich hoffe dass ihr mir helfen könnt

atmeg8 mit quarz 3686400Hz prescaler=1024   3686400hz/1024=3600
normalerweise soll das programm mir für 1s gz=3600
aus gz=ueberlauf*56535+tcnt1 ausgeben. dh vor einem ein überlauf 
sogar.aber ich bekomme 1016.
ich bin....

//---------------------------------------------------------------------- 
--------------------------
#include "i2cUs.h"
#include "lcd.h"
#include <avr/interrupt.h>
#include <avr/delay.h>

char ch[20]="\0";
char cl[20]="\0";
volatile unsigned char ueberlauf=0;



ISR (TIMER1_OVF_vect)
{

  ueberlauf++;
  TCNT1 = 0;

}

int main(void)


    TCNT1=0;   //  Timer Daten Register Timer1 High auf 0 Setzen
    TCCR1B |= (1<<CS12)|(1<<CS10); //Timer Starten mit Vorteiler 1024
    _delay_ms(1000);//zum testen der zeit
    TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10));//stop des counters
   TIMSK |= (1<<TOIE1);
   sei();

                lcdInit();
                lcdGoto(1,4) ;
                itoa(TCNT1,ch,10)
                itoa(ueberlauf,cl,10);
                lcdWriteText(ch);//aktuelle Zählerstand
                lcdGoto(2,4) ;
                lcdWriteText(cl);//anzahl von überlauf


return 0;

}

vielen dank im voraus.

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
F_CPU korrekt definiert?

Ohne Definition geht er von einem Default von 1MHz aus, damit wartet 
dann dein _delay_ms() um ca. Faktor 3,6 zu wenig, das würde mit deinem 
Zählerwert hinkommen.

Ausserdem solltest du den Overflow-Interrupt vor dem Delay aktivieren, 
sonst könnte er auch dann nicht auslösen, wenn es wirklich zu einem 
Overflow käme ;-)

Andreas

Autor: blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
_delay_ms(1000);//zum testen der zeit

ist SEHR SEHR ungenau

steht auch in der delay.h

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
blubb schrieb:
> ist SEHR SEHR ungenau
SEHR SEHR genaue aussage...

@samir:
- lies mal deine compiler-warnings.
- der main funktion fehlt die öffnende {
- ueberlauf ist ein char, damit 8bit breit und kann nicht größer als
  255 werden...
- timer-register musst du weder initialisieren, noch zurücksetzen.
- deiner formel für die zeit fehlt eine 1. siehe datenblatt.

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

Bewertung
0 lesenswert
nicht lesenswert
Und natürlich die übliche Frage:
Ist der Quarz über die Fusebits auch aktiviert?

Autor: Hotte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
samir schrieb:
> atmeg8 mit quarz 3686400Hz prescaler=1024   3686400hz/1024=3600
> normalerweise soll das programm mir für 1s gz=3600
> aus gz=ueberlauf*56535+tcnt1 ausgeben. dh vor einem ein überlauf
> sogar.aber ich bekomme 1016.
> ich bin....

Wenn man bei einem 8 Bit-Counter/Timer mit ISR auf Überlauf wartet, ist 
die Rechnung:

3686400hz/1024/256

die isr wird 1x aufgerufen, wenn der Timer überläuft. Im Falle von 8 bit 
also alle 256 x 3686400/1024stel Hz (im Besten Fall, wenn nicht durch 
andere Interrupts unterbrochen).

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist der timer1 nicht ein 16bit-typ?

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
  • 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.