Hallo zusammen,
ich habe hier einen Attiny2313 den ich mit einem externen Quarz arbeiten
lassen will.
Auf dem Quarz steht folgendes:
EQZBJ
16.000M
18pF
Nach der Berechnung bin ich auf 2x 30pF für die Kondensatoren gekommen,
habe allerdings nur 22pF da gehabt - soweit ich das verstanden habe
sollte das funktionieren.
Ich habe nun ein Programm geschrieben welches in 1s die LEDs blinken
lässt:
1 | #define F_CPU 16000000UL
|
2 |
|
3 | #define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
|
4 | #define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT))
|
5 |
|
6 | #include <avr/io.h>
|
7 | #include <util/delay.h>
|
8 | #include <avr/interrupt.h>
|
9 |
|
10 | ISR (TIMER1_COMPA_vect)
|
11 | {
|
12 | static int cnt=0;
|
13 |
|
14 | if(cnt>0){
|
15 | PORTD=0xff;
|
16 | cnt=0;
|
17 | }else{
|
18 | PORTD=0x00;
|
19 | cnt++;
|
20 | }
|
21 |
|
22 | }
|
23 |
|
24 | void init(void)
|
25 | {
|
26 | DDRD=0xff;
|
27 | PORTD=0x00;
|
28 | sbi(TCCR1B,WGM12); //ctc ocr1a
|
29 |
|
30 | sbi(TCCR1B,CS12);
|
31 | sbi(TCCR1B,CS10); // 1/1024
|
32 | OCR1A=15625; // 1 sek
|
33 |
|
34 | sbi(TIMSK, OCIE1A);
|
35 |
|
36 | sei();
|
37 | }
|
38 |
|
39 | int main(void)
|
40 | {
|
41 | init();
|
42 |
|
43 | while(1)
|
44 | {
|
45 | _delay_ms(1);
|
46 | }
|
47 | }
|
Allerdings wird der Interrupt nur alle 8s aufgerufen.
Die Fuses sind auf EXTXOSC_8MHZ_XX_14CK_0MS gestellt.
An was kann es denn liegen, dass das Programm langsam abläuft?
Grüße