Moin Moin,
ich stehe auf dem Schlauch mit dem AT90CAN128 Modul von Olimex. Die CPU
läuft anscheinend nur mit dem Uhrenquarz 32768Hz anstatt mit dem 16Mhz
an XTAL1/2
Ich habe im Datenblatt nicht entdecken können wie das passieren kann....
Im Anhang sind die Fuses zu sehen. ganz "normal" auf ext Crystal > 8Mhz,
CKDIV8 nicht enable.Ich habe den Timer0 ganz simpel wie folgt
initialisiert:
1 | // local variables
|
2 | volatile static uint8_t count = 0
|
3 |
|
4 | static bool
|
5 | init_HW(void) {
|
6 |
|
7 | //Init 8Bit Timer0, CTC, clk/1024
|
8 | TCCR0A |= (1 << CS02 | 1 << CS00);
|
9 | TIMSK0 |= (1 << TOIE0);
|
10 |
|
11 | // init I/O
|
12 | DDRE |= (1 << PE0) | (1 << PE1); //OUT
|
13 | PORTE &= ~((1 << PE0) | (1 << PE1)); // Set LOW
|
14 |
|
15 |
|
16 | // activate Interrupts
|
17 | sei();
|
18 |
|
19 | return(true);
|
20 | }
|
21 |
|
22 | ISR (TIMER0_OVF_vect) {
|
23 |
|
24 | count++;
|
25 | PORTE ^= ( 1 << PE1 );
|
26 | }
|
27 |
|
28 | int
|
29 | main(void) {
|
30 |
|
31 | init_HW();
|
32 |
|
33 |
|
34 | while (1) {
|
35 |
|
36 | if(count == 254) {
|
37 | PORTE ^= ( 1 << PE0 );
|
38 | count = 0;
|
39 | }
|
40 | }
|
41 |
|
42 | return 0;
|
43 | }
|
Die ISR lässt dann eine LED blinken und gibt den Takt des Times an PE1
aus. Ich messe nun am PE1 eine Periodendauer von 32ms was mich darauf
bringt, dass der Systemtakt nur 32Khz ist.
Laut Datenblatt wäre nur der Timer2 als Asynchroner timer mit dem Takt
an TOSC1/2 aktiv aber doch nicht Timer0/1/3 ??
Was mach ich denn hier falsch?
Daaanke für eure Hilfe