www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sekundentimer mit ATMEGA88V


Autor: Oppodelldog (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

#include <avr/io.h>
#include <avr/interrupt.h>


int main(void)
{

  TCCR1B = (1<<CS12);  // Timer 1 mit 256 prescale starten
  TIMSK1 = 0x1;    // Overflow Interrupt setzen
  TCNT1H = 0x88;    // für 1 Hz
  TCNT1L = 0xee;

  sei();  // Global Interrupts aktivieren

  DDRB = 0xff;

  while(1)
  {
  }
  return 0;
}

ISR (TIMER1_OVF_vect)
{
  TCNT1H = 0x88;  // für 1 Hz
  TCNT1L = 0xee;
  PORTB ^=0xff;
}

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

Bewertung
0 lesenswert
nicht 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.

Autor: Oppodelldog (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

CKDIV8-Fuse.

MfG Spess

Autor: Valentin Buck (nitnelav) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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/avrtimerca...
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

Autor: Oppodelldog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, CKDIV8-Fuse, ist ja cool :-))
Danke euch ! Super!

Viele Grüße

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.