Timer Compare Match

Gast #1240217
Lesenswert?

int main(void)
{
DDRA = 0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
// PortB als eingang alle Pull up Widerstände acktiviert
DDRB = 0x00;
PORTB = 0xFF;


//Timer einstellen
TCCR1B = (1<<CS10);       //setzt den Prescaler 64
OCR1A = 11000;
TCNT1 = 0;                             //startewert des Counters
TIMSK = 1<<OCIE1A;                     //Compare-Int aktivieren
sei();

for(;;)
{
//hier werden die Ports gesetzt !
//set_Porta(PA1);
//set_Porta(PA0);
}
}

SIGNAL (SIG_OUTPUT_COMPARE1A)
{
//hier nicht Warum ?
set_Porta(PA1);
set_Porta(PA0);
)

Was könnte das Problem sein wenn der Interrupt nicht ausgeführt wird.
Kopiere ich die Befehle in main werden die Ports gesetzt !

Eigentlich hat der Code schon einmal funktioniert. Der einzige 
unterschied ist das ich jetzt den interne Quarz verwende.
Gast #1241089
Lesenswert?

Aus den Registernamen und Interrupt-Handlern schlußfolgere ich einfach 
mal, daß es vermutlich um einen AVR geht. Jetzt müßtest du nur noch 
verraten, um welchen Prozessor es konkret geht.

> unterschied ist das ich jetzt den interne Quarz verwende.

Es gibt beim AVR keinen internen Quarz. Meinst du den RC-Oszillator?
Gast #1336341
Lesenswert?

Sollte es sich um einen ATMega16 handeln dann hier die Auflösung
1
...
2
void initTimer()
3
{
4
  // CTC Mode aktivieren
5
  TCCR1A |= (0<<WGM11)|(0<<WGM10);
6
  TCCR1B |= (0<<WGM13)|(1<<WGM12);
7
  // Timer 1 Vorteiler setzen
8
  TCCR1B |= (0<<CS12)|(1<<CS11)|(1<<CS10);   // Vorteiler 64
9
  // Vergleichswert setzen
10
  OCR1A = 11000;
11
  // Interrupt wird durch Compare Match ausgelöst
12
  TIMSK |= (1<<OCIE1A);
13
  //ISR wird ausgelöst
14
  TIFR |= (1<<OCF1A);
15
  sei();
16
}
17

18
//Timerinterrupt Compare
19
ISR(TIMER1_COMPA_vect)
20
{
21
  // Toggle Pin  
22
  PORTA ^= (1<<PA0);
23
}
24
...

Achja, Vorteiler 64 und Vergleichswert 11.000 macht bei 1MHz 0,704s. Ich 
weiß, der OP hat natürlich nicht geschrieben welchen Takt er hat (warum 
auch). Aber der interne Oszi kann doch nur 1, 2, 4 und 8 MHz macht dann 
0,704s, 0,352s, 0,176s und 0,088s. So gewollt?

Ich weiß, dass es nicht mehr akut sein wird ;-)
Ich hatte bloß gerade eben das gleiche Problem und eigentlich keinen 
Bock auf Datenblatt lesen. Vielleicht kann sich der ein oder andere das 
jetzt sparen.

bye
Datasheet

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren