Forum: Mikrocontroller und Digitale Elektronik Timer, Interrupt, 1000ms


von Dave C. (dave_chappelle)


Lesenswert?

Hi zusammen.

Bin gerade beim Bau einer Uhr, folgende Rahmendaten:


Quarz: 4.194304MhZ
Timer: 16Bit
Prescaler: 64

Sollte meinen Berechnungen nach alle 1000ms einen Timer Overflow geben.
Ich will alle 1000ms einen Interrupt, indem die einzelnen Werte 
(stunden, minuten sekunden) raufgezählt werden. Eine Uhr halt :)

µC ist ein ATMEGA 16.

Allerdings entsteht mir ständig eine Fehlermeldung, was mich ein wenig 
irritiert, vielleicht kann mir da ja jemand helfen. Meine Programm 
(auf's wichtigste gekürzt) sieht wie folgt aus:
1
#include <avr/io.h>  //IO Ports/Pins
2
#include <avr/interrupt.h> //Interrupt Lib
3
#include <stdint.h>  //Datentypen
4
#include <util/delay.h> //Delay Lib
5
6
int main(void)
7
{
8
9
  TCCR1B = 0x03; //Timer System Frequency Prescaler 64
10
  TIMSK |= (1<<TOIE1); //Interrupt alle 1000ms (Timer 1)
11
  sei(); //Globale Interrupts erlauben
12
13
  while (1){
14
15
  /* Anzeige, diverses, unwichtig für Timer */
16
17
           }
18
19
  #ifndef TIMER1_OVF_vect  
20
  #endif
21
  
22
  ISR (TIMER1_OVF_vect)
23
  
24
  {
25
    
26
  /*Rauf, runterzählen */    
27
28
  }
29
30
}

So, ich habe mich an dieses Beispiel hier gehalten

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR

Und hab das Register TCCR1B respektive TIMSK gemäss Datenblatt geändert.
Leider funktioniert das ganze nicht so wie ich will, ich erhalte immer 
folgende Fehlermeldung:

static declaration of '__vector_8' follows non-static declaration

und als Warnung

previous declaration of '__vector_8' was here

Kann mir da vielleicht jemand weiterhelfen?

Freue mich auch eure Beiträge

MFG
Dave

von Marwin (Gast)


Lesenswert?

Nimm mal die ISR aus main raus, das ist eine eigene Funktion...

von Dave C. (dave_chappelle)


Lesenswert?

Marwin schrieb:
> Nimm mal die ISR aus main raus, das ist eine eigene Funktion...

Das ging ja schnell, wow.
Danke, das hab ich nicht gewusst, ist mein erster Versuch mit Timer und 
Interrupts :)

von Dave C. (dave_chappelle)


Lesenswert?

Hat nun alles geklappt, super!
Danke für die Hilfe.

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.