Zeittakt

Gast #186039
Lesenswert?

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 #186041
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren