Zeittakt

Gast #186039
Hi Leute,
ich mache gerade eine C-Programmierung und möchte eine Zeitbasis
von einer Sekunde und wollte fragen wie ihr das macht.
Ich habe einen 4Mhz-Quarz und müßte nach Adam Riese das Ganze in 2
Schleifen a 2000-Zählungen hinbekommen.
In der Simulation macht meine Zeit allerdings Zicken.

Thomas
Gast #186040
16 bit timer mit 256 prescaler nehmen, das macht dann 4000000/256=15625;
timer auf interrupt on compare match einstellen und mit 15625 aufladen,
fertig ist der einterrupt jede 1 sec.
Gast #186041
Hossa,
erstmal vielen Dank für die schnelle Antwort.
Ich muß zu meiner Schande gestehen,daß ich zwar schon öfter in
C-Programmiert habe aber noch nie so tief ins Detail des AVR gegangen
bin.
Hört sich aber gut an.Die nächsten Tage sind gerettet :-))

Thomas
Gast #186042
hi,

dies wäre nur 1 von tausend möglichkeiten, dafür aber leicht zu
begreifen und exakt; hier ein code-beispiel für atmega8 mit 4mhz in
codevision:



#include <mega8.h>

// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{

TCNT1H=0x00;
TCNT1L=0x00;
// Place your code here

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here



// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15,625 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x3D;
OCR1AL=0x09;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;


// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here

      };
}
Gast #186043
hi emil,

fehlt da nicht noch ein Halt am ende der whileschleife???
sonst würde doch ständig der code in der whileschleife abgearbeitet...
oder noch ne whileschleife in der du eine Variable abfragst die im
timerinterrupt gesetzt/löscht wird

(P.S.: würde mich auch mal interresieren wie die Haltbefehle
funktionieren ;o))

bye Rico
Gast #186044
hi,

als erstes: das so angeführte beispiel ist natürlich relativ sinnlos;
es würde zwar funktionieren und jede sekunde ein interrupt erzeugen,
aber mehr nichts

und zweitens: es gibt eine paar sehr gute anleitungungen hier unter
"artikel" und "avr-tutorial", die sich auf c-programmierung für
atmels beziehen, die sind sehr empfehlenswert und ähnliche fragen
werden dort ausführlich behandelt
Gast #186045
Drittens: das hier ist die Codesammlung !
Soll heissen: hier sollen Codefragmente oder ganze Programme
veröffentlicht werden.

Alle anderen Foren sind zum Fragen da ;)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.