ATmega32 Timer 0 CTC-Mode: Prescaler nicht aktiv?

Gast #2974261
Lesenswert?

Hallo zusammen

Ich teste im Moment meinen ATmega32 ein wenig.
Am uC hängt ein 16MHz Quarz welcher korrekt konfiguriert wurde 
(_delay_ms() funktioniert)

Mein Code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/pgmspace.h>
4
#include <util/delay.h>
5

6
ISR(TIMER0_COMP_vect) { 
7
  PORTC ^= (1<<PC1);
8
}
9

10
int main(void) {
11
  DDRC |= (1<<PC0);
12
  DDRC |= (1<<PC1);
13
  
14
  TCCR0 = (1<<CS02) | (1<<WGM01);  // /64 | CTC mode
15
  OCR0  = 97; // => 99.328ms @ 16 MHz
16
  TIMSK |= (1<<OCIE0);
17
  sei();
18
  
19
  for(;;) {
20
    _delay_ms(100);
21
    PORTC ^= (1<<PC0);
22
  }
23
}

Eine LED an PC0 blinkt wie erwartet mit 10Hz. Die LED an PC1 leuchtet 
allerdings nur schwach (50%). Es schaut so aus als wäre der Prescaler 
nicht aktiv.

Weiss jemand warum das so sein könnte?

Vielen Dank & Grüsse
prog0
Gast #2974283
Lesenswert?

@Lötlackl

Stimmt, vielen Dank (habs vom vielen Ausprobieren vergessen zu ändern).

Allerdings funktioniert es mit der geänderten Zeile weiterhin nicht.
1
TCCR0 = (1<<CS01) | (1<<CS00) | (1<<WGM01);  // /64 | CTC mode

Hat jemand eine Idee wieso?
Gast #2974292
Lesenswert?

Hi

>Allerdings funktioniert es mit der geänderten Zeile weiterhin nicht.

>TCCR0 = (1<<CS01) | (1<<CS00) | (1<<WGM01);  // /64 | CTC mode

Noch schlimmer. Die obige Rechnung war mit Prescaler 256. Bei Prescaler 
64 sind es 392 µs und 1,276 kHz.

MfG Spess

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