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
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.
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
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 }; }
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
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
Drittens: das hier ist die Codesammlung ! Soll heissen: hier sollen Codefragmente oder ganze Programme veröffentlicht werden. Alle anderen Foren sind zum Fragen da ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.