Forum: Mikrocontroller und Digitale Elektronik Clock / Timer Einstellungen ATXMEGA


von Talisker (Gast)


Lesenswert?

Hallo,

irgendwie habe ich ein Problem.

Bei meinem Controller ATXMEGA128A1 lassen sich die Clock und 
Osziparameter nicht verstellen.

Will eigentl. zu Testzwecken beide auf 32 MHZ einstellen.

//Clock-Speed 32 MHz
   CLK.CTRL = 0x01;
//Oszi-Speed 32 MHz
   OSC.CTRL = 0x01;
//Vorteiler A,B,C auf 0 einstellen
   CLK.PSCTRL = 0x00;
//Timer-Wert mit 0 laden-->??? wird das hiermit gemacht ???
   TCC0.CNT = 0x00;
   /*Timer-Top-Wert setzen*/
   TCC0.PER =  31249;
   /*8 Vorteiler*/
   TCC0.CTRLA = 0x05;
/*Timer im Normalmodus*/
   TCC0.CTRLB = 0x00;
   /*Interrupt konfigurieren*/
   TCC0.INTCTRLA = 0x03;
   sei();

//ISR
ISR(TCC0_OVF_vect){
       LEDPORT.OUTTGL = 0b10101010;
 }
LEDPORT-Einstellungen habe ich mal weggelassen.

Probleme:

1. Einstellen auf 32 Mhz funzt nicht. Weder am Testboard noch in der 
Simulation im AVR Studio. Fehlt da etwas? Oder müssen die Einstellungen 
an eine bestimmte Stelle?
2. Der Controller arbeitet offenbar mit den Voreinstellungen. D.h. 2 MHz 
und Vorteiler Clockvorteiler 0 und Timer-Vorteiler 8. Nach meiner 
Rechnung sollte da-->8 Mhz / 8 = 250000 --> (1/250000)*31250=0,125 s --> 
die Test-LED mit pro Sek 8 mal toggeln. Passiert aber nicht. Sondern sie 
toggelt jede Sekunde. Warum ist das der Fall?

Danke für eure Antworten!

von Talisker (Gast)


Lesenswert?

hmm,

hab jetzt nach 3 Stunden rumtüfteln und i-net durchforsten selber 
rausgefunden.

Die Berechnung mit 2 Mhz / 8 = 250000 --> (1/250000)*31250=0,125 s, 
stimmt soweit. Keine Ahnung was vorhin falsch war.

Um den Timer auf dem XMega umzustellen nutzt man folgenden Code:

 //es ist erforderlich erst einmal den Oszi auf den gewünschten Wert 
einzustellen
OSC.CTRL = 0x02; // hier 32 MHz, 2 MHz entspricht 0x00

//Warten bis das eben vereibarte im Oszi-Status Register eingetragen ist
 while(!(OSC.STATUS & 0x02));
//Write/Execute Protection umgehen hierfür ist 0xD8 einzutragen
 CCP = 0xD8;

 //nun kann auch der Clock auf den gewünschten Wert eingestellt werden
CLK.CTRL = 0x01; //wie gewünscht hier 32 MHz


Gruß.

von Avr N. (balze)


Lesenswert?

Hallo Talisker,

Talisker schrieb:
> hab jetzt nach 3 Stunden rumtüfteln und i-net durchforsten selber
> rausgefunden.

An der richtigen Stelle gesucht haette es vermutlich nur 3min. gedauert. 
;-)

Ich kann Dir nur waermstens die Application Notes (und die Beispiele 
dazu) empfehlen.

http://www.atmel.com/dyn/products/documents.asp?category_id=163&family_id=607&subfamily_id=1965

Da gibt es auch eine Application Note fuer das Clock System mit 
Beispielcode. (AVR1003)

MfG,

Balze aka AVR Noob

von Michael W. (talisker)


Lesenswert?

Is ja nich so als hätte ich es nicht offen gehabt. Also das AVR1003 
Dokument. Wenn ich jedoch ein Fuchs gewesen wäre, hätte ich einfach mal, 
wie du sagtest, die Beispiele angeschaut.

Naja aus Fehlern lernt man. Das nächste mal schau ich mir gleich die 
Beispiele an. Spart Zeit und Nerven.

Besten Gruß.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.