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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.