Guten Tag zusammen,
ich fange gerade mit den AVR128DA an. Strukturell sind die ähnlich zu
den Tiny1 Serie (Tiny1614, Tiny3217) die ich schon viel im Einsatz habe.
Allerdings habe ich aktuell Probleme mit der Clock.
Mein Code sieht so aus:
Meiner Auffassung nach, sollte ich da 24 Mhz CPU Clock haben.
Wenn ich jetzt aber am Pin Messe, messe ich so genau 2Mhz lt. Osci
Frequenz der Rechteckspannung.
1 | CPU_CCP = 0xD8;
|
2 | CLKCTRL.MCLKCTRLA = CLKCTRL_CLKSEL_OSCHF_gc;
|
3 | CPU_CCP = 0xD8;
|
4 | CLKCTRL.MCLKCTRLB = 0;
|
5 | CPU_CCP = 0xD8;
|
6 | CLKCTRL.OSCHFCTRLA = CLKCTRL_FRQSEL_24M_gc;
|
7 |
|
8 | CPU_CCP = 0xD8;
|
9 | WDT.CTRLA = 0;
|
10 |
|
11 |
|
12 | PORTA.DIR = (1<<Pin3bp);
|
13 |
|
14 |
|
15 | while(1)
|
16 | {
|
17 | PORTA.OUT ^= (1<<Pin3bp);
|
18 | }
|
Weiterhin habe ich dann mal einen Timer initalisiert
1 | TCD0.CMPBCLR = 150;
|
2 | TCD0.INTCTRL = TCD_OVF_bm;
|
3 | TCD0.CTRLB = TCD_WGMODE_ONERAMP_gc;
|
4 | TCD0.CTRLA = (TCD_CLKSEL_OSCHF_gc | TCD_CNTPRES_DIV32_gc | TCD_SYNCPRES_DIV1_gc | TCD_ENABLE_bm);
|
der sollte mir 5 khz interrupt bringen. Die ISR sieht so aus
1 | ISR(TCD0_OVF_vect)
|
2 | {
|
3 | PORTA.OUT ^= (1<<Pin3bp);
|
4 | TCD0.INTFLAGS = TCD_OVF_bm;
|
5 | }
|
Statt 5khz messe ich nur 2,5 khz Rechteck mit dem Osci.
Ich habe oben als Define 24mhz F_CPU. Wenn ich 5ms delay_ms function in
der While mache habe ich auch eher so 7ms statt 5ms. Wenn ich das F_CPU
auf 20Mhz stelle habe ich exakt 5ms.
Irgendwie passt hier was nicht vom Timing? Was habe ich nur übersehen !?
Bitte um Hilfe.