Forum: Mikrocontroller und Digitale Elektronik Sekundentimer mit ATMEGA88V


von Oppodelldog (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, bin noch Anfänger,
dachte mir vielleicht kann mir hier jemand schnell weiterhelfen.
Ich versuche über den Timer1 einen Sekunden-Interrupt zu erzeugen.
Im Testszenario will ich an einem B-Pin eine LED b linken lassen.
Das klappt auch, nur blinkt die LED viel zu langsam. Der interrupt wird 
ca alle 8 Sekunden ausgeführt.. Also die Zahl 8 ist ja schon komisch, 
aber dachte ich hätte alles richtig eingestellt.

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
5
int main(void)
6
{
7
8
  TCCR1B = (1<<CS12);  // Timer 1 mit 256 prescale starten
9
  TIMSK1 = 0x1;    // Overflow Interrupt setzen
10
  TCNT1H = 0x88;    // für 1 Hz
11
  TCNT1L = 0xee;
12
13
  sei();  // Global Interrupts aktivieren
14
15
  DDRB = 0xff;
16
17
  while(1)
18
  {
19
  }
20
  return 0;
21
}
22
23
ISR (TIMER1_OVF_vect)
24
{
25
  TCNT1H = 0x88;  // für 1 Hz
26
  TCNT1L = 0xee;
27
  PORTB ^=0xff;
28
}

von Karl H. (kbuchegg)


Lesenswert?

Tja.
Dann werden wohl deine 8Mhz Taktfrequenz nicht stimmen.

AVR Prozessoren werden mit 1Mhz ausgeliefert. Du hast mit 8Mhz 
gerechnet. Also genau 8 mal zu schnell. Ist irgendwie auffallend.

von Oppodelldog (Gast)


Lesenswert?

Ok, ansonsten ist mein Versuch also korrekt.
Das beruhigt ja schon mal.

Allerdings kann ich nirgends die Einstellugn "1Mhz" finden,
ich finde in den Fuses folgendes:

SUT_CKSEL:
Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK + 65 ms

Daher hätte ich gedacht, dass der schon mit 8MHz läuft.

Wie kriege ich den denn mit Sicherheit auf 8Mhz ?

von Spess53 (Gast)


Lesenswert?

Hi

CKDIV8-Fuse.

MfG Spess

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Wieso benutzt du die gespaltenen Register?
In C brauchst du das nicht!
Und kleine Eigenwerbung: Man kann zawr die Formeln aus dem Datenblatt 
benutzen, Software geht aber auch! Hier gibts den AVRTimerCalculator:
http://apexys-toan.blogspot.com/2011/01/avrtimercalculator.html
Kleiner Tipp:
Es ist ziemlich kompliziert, immer wieder die Timerregister zu setzen.
Mach doch CTC mit dem OCR1A (siehe Datenblatt)!

Mit freundlichen Grüßen,
Valentin Buck

von Oppodelldog (Gast)


Lesenswert?

Hey, CKDIV8-Fuse, ist ja cool :-))
Danke euch ! Super!

Viele Grüße

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
Noch kein Account? Hier anmelden.