Forum: Mikrocontroller und Digitale Elektronik TIMER0_OVF_vect startet bei Mega1284P nicht


von Matthias (matthiasm)


Lesenswert?

Guten Abend,

ich habe ein Problem mit einer einfachen Timer Routine die nicht startet 
:(

Folgender Code:
1
#ifndef F_CPU
2
//#define F_CPU 3686400UL
3
#define F_CPU 8000000UL
4
#endif
5
6
#include <avr/io.h>
7
#include <util/delay.h>
8
#include <util/twi.h>
9
#include <string.h>
10
#include <stdlib.h>
11
#include <stdio.h>
12
#include <stdint.h>
13
#include <avr/interrupt.h>
14
#include <inttypes.h>
15
16
#define PWR_LED      PINB4
17
18
19
ISR( TIMER0_OVF_vect )                      // every 10ms
20
{
21
22
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms
23
  
24
  // Zum testen ob sich was tut...
25
  PORTB ^= (1<<PWR_LED);
26
}
27
28
int main(void)
29
{
30
    // Inititalisierung des 10ms Timers
31
    TCCR0A = (1<<CS02)|(1<<CS00);                // divide by 1024
32
    TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms
33
    TIMSK0 |= 1<<TOIE0;
34
      
35
    sei();
36
    while (1) 
37
    {
38
    
39
    }
40
}

... relativ überschaubar, die LED kann ich auch schalten und toggeln, 
also an der Hardware liegt es nicht. Bei 10mS müsste die LED zumindest 
glimmen... mit dem Oszi sieht man aber auch keine Regung.

Mir scheint als wären die globalen Interrupts geblockt, diese habe ich 
aber mit sei() gestartet.

Bitte helft mir :)

Danke!!!
Matthias

von Bastian W. (jackfrost)


Lesenswert?

Hi,

Wo setzt du den Pin als Ausgang ?

Gruß JackFrost

von Matthias (matthiasm)


Lesenswert?

Hier jetzt so ;-) Hat tatsächlich noch gefehlt, fiel aber nicht auf weil 
ich die LED ja schalten konnte.

Ändert allerdings nichts ...
1
int main(void)
2
{
3
  // Pin als Ausgang konfigurieren
4
  DDRB |= (1<<PWR_LED);
5
  
6
  
7
    // Inititalisierung des 10ms Timers
8
    TCCR0A = (1<<CS02)|(1<<CS00);                // divide by 1024
9
    TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms
10
    TIMSK0 |= 1<<TOIE0;

von Bastian W. (jackfrost)


Lesenswert?

Clockselect ist im Register TCCR0B.

Gruß JackFrost

von Matthias (matthiasm)


Lesenswert?

Pfeilgrad oO

Danke, läuft!!

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.