www.mikrocontroller.net

Forum: Compiler & IDEs 2oder mehr Timer/Counter nutzen


Autor: Steffen Brüssel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte nur mal fragen ob es denn technisch möglich ist beim Atmega
(16)2 Timer gleichzeitig zu nutzen. Ich möchte den overflow-INT jedes
Timers abfragen, im konkreten Fall bei Timer 0 und Timer1.
Allerdings scheint das mit WinAVR nicht zu gehen.
Jedenfalls wird immer nur ein Timer genutzt.
Ichhab schon x mal das Datenblatt gewälzt allerdings kann ich natürlich
Fehler meinerseits nicht ausschließen.

Quellcode:
#include <avr/io.h>
#include <progmem.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
//Arbeitstakt angeben
#define SYSCLK 8000000UL
//usart ansprechen

volatile unsigned int count=0;
volatile unsigned int count2=0;
volatile unsigned int Stellweg=1;//-->ergibt bei 8MHz etwa 1Hz Tak

void timer (void){
  TIMSK = _BV(TOIE0);          //overflow flag setzen--> ab jetzt kan
overflow interrupt ausgelöst werden
  TCNT0 = 0;                      //Rücksetzen des Timers
  TCCR0 = _BV(CS01);            //Prescaler 8
}
void timer1 (void){
  TIMSK = _BV(TOIE1);          //overflow flag setzen--> ab jetzt kan
overflow interrupt ausgelöst werden
  TCNT1 = 0;                      //Rücksetzen des Timers
  TCCR1B = _BV(CS00);            //Prescaler 1
}


int main(void) {
  timer ();
  timer1();
  sei ();                //interrupts ein
  DDRB = 0xff;//PortB = Ausgabe
  PORTB = 0xff;
  for (;;) {
  }
  return 0;
}

//lässt led blinken
SIGNAL (SIG_OVERFLOW0) {
  count++;
  if (count==Stellweg){
   if(PORTB & (1<<PB0)){
    PORTB&=~(1<<PB0);
   }
   else{
    PORTB|=(1<<PB0);
   }
  count=0;
  }
}
SIGNAL (SIG_OVERFLOW1) {
  count2++;
  if (count2==31){
   if(PORTB & (1<<PB1)){
    PORTB&=~(1<<PB1);
   }
   else{
    PORTB|=(1<<PB1);
   }
   count2=0;
  }
}

Danke für eure Hilfe.

Gruß

Bomb

Autor: Steffen Brüssel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gelöst:

TIMSK = _BV(TOIE0); ist falsch

so muss es sein

TIMSK |= _BV(TOIE0); Hab ohne das 'oder' einfach die anderen Werte im
Register überschireben. :/

tschö

Bomb

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.