mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TIMER0_OVF_vect startet bei Mega1284P nicht


Autor: Matthias Machmal (matthiasm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

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

Folgender Code:
#ifndef F_CPU
//#define F_CPU 3686400UL
#define F_CPU 8000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
#include <util/twi.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <inttypes.h>

#define PWR_LED      PINB4


ISR( TIMER0_OVF_vect )                      // every 10ms
{

  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms
  
  // Zum testen ob sich was tut...
  PORTB ^= (1<<PWR_LED);
}

int main(void)
{
    // Inititalisierung des 10ms Timers
    TCCR0A = (1<<CS02)|(1<<CS00);                // divide by 1024
    TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms
    TIMSK0 |= 1<<TOIE0;
      
    sei();
    while (1) 
    {
    
    }
}

... 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

Autor: Bastian Werner (jackfrost)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Wo setzt du den Pin als Ausgang ?

Gruß JackFrost

Autor: Matthias Machmal (matthiasm)
Datum:

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

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

Autor: Bastian Werner (jackfrost)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Clockselect ist im Register TCCR0B.

Gruß JackFrost

Autor: Matthias Machmal (matthiasm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pfeilgrad oO

Danke, läuft!!

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.