ATtiny1614 CPU Takt Problem

Gast #5384589
Lesenswert?

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?!
Gast #5384602
Lesenswert?

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.
Gast #5384612
Lesenswert?

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.
Gast #5384620
Lesenswert?

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. ?!?!
Gast #5384626
Lesenswert?

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.
Gast #5384630
Lesenswert?

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.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren