Hallo, ich versuche aktuell die neuen Attiny1614 in Betrieb zu nehmen. Ich habe 5V am Chip, Fuses in Standard-Einstellungen (20MHz RC, kein OSCLOCK). Ich habe ein Programm, besser gesagt "nichts". Es ist einfach nur: #define F_CPU 20000000UL #include <avr/io.h> #include <avr/delay.h> #include <avr/wdt.h> int main(void) { while(1) { PORTA.OUTTGL = (1<<PIN6_bp); _delay_ms(1000); wdt_reset(); } } Die LED sollte jetzt jede sek einmal aufblinken (0,5 Hz blinken). Ich habe hier einen ermittelten Takt von ca. 5 Mhz. Wie geht das?! Was mache ich falsch?!
Ich habe das Problem so halb gefunden. Da scheint wohl ein Prescaler nach dem Reset noch aktiv zu sein. Aktuell finde ich das Register zwar noch nicht womit ich den auf 1 schalte, aber irgendwie ist das schwachsinnig.
Mach mal den Wert bei _delay_ms() kleiner, IIRC kann das überlaufen. Ich sehe kein Setzen des Pinmode auf "Ausgang", aber mit nur dem weak Pullup käme man doch eigentlich nicht bis auf 5 MHz hoch...?
Das ist auf Ausgang gesetzt, klar. Habe ich vergessen anzugeben. Ich habe schon versucht mit 100ms, dann habe ich ca. 1 sek. Das muss irgendwas mit den Clockregistern sein, ich verstehe nur nicht, welche ich setzen muss.
CPU_CCP = 0xD8; CLKCTRL_MCLKCTRLA = CLKCTRL_CLKSEL_OSC20M_gc; CPU_CCP = 0xD8; CLKCTRL_MCLKCTRLB = 0x1; Damit habe ich, so wie ich das sehe, 10Mhz. Jetzt mal eine Frage: Wie bekomme ich 20 Mhz?! Nach dem DB ist der kleinste Prescaler 2. ?!?!
Mr. AVR schrieb im Beitrag #5384620: > CPU_CCP = 0xD8; > CLKCTRL_MCLKCTRLA = CLKCTRL_CLKSEL_OSC20M_gc; > CPU_CCP = 0xD8; > CLKCTRL_MCLKCTRLB = 0x1; > > > Damit habe ich, so wie ich das sehe, 10Mhz. Jetzt mal eine Frage: Wie > bekomme ich 20 Mhz?! Nach dem DB ist der kleinste Prescaler 2. ?!?! OMG Lies' endlich das verdammte DB! Da steht zu MCLKCTRLB: > Bit 0 – PEN: Prescaler Enable > This bit must be written '1' to enable the prescaler. When enabled, the > division ratio is selected by the > PDIV bit field. > When this bit is written to '0', the Main Clock will pass through undivided > (CLK_PER=CLK_MAIN), > regardless of the value of PDIV.
Anbei das DB. Auf Seite 61 sieht man den MUX, ich habe OSC20M gewählt, danach kommt der Prescaler-Block mit 1,2,4,8 usw. Okay. Dort steht auch, nach dem Reset hat man 3,33 Mhz (das kam ca. hin). Dann ab Seite 66 MCLKCTRLA = 0 (siehe Post vorher), ich habe OSC20M gewählt. Auf Seite 67 MCLKCTRLB, kleinster Prescaler nach PDIV ist 2. Wenn PEN = 0, kein Prescaler (Prescaler = 1) ist aktiv, wenn man die Prescaler nutzen möchte von PDIV, PEN muss auf 1 gesetzt werden. Hier sieht man, nach dem Reset der Wert ist 0x11 (17), also PEN und Prescaler 6 aktiv. Nun habe ich 20 Mhz int. RC. War für mich etwas verwirrend. Ich denke/hoffe vll. kann der Thread jmd. hilfreich sein, sind ja noch recht neu die Teile.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.