PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taktteiler 4 wie bei PIC´s?



The Man
01.06.2008, 08:11
Hallo,

ist das bei AVR eigentlich auch so, dass der Takt mit 4 dividiert wird wie bei PIC´s. Hab da bisher nicht drüber nachgedacht, aber auch noch nicht mit auf die Nase gefallen.

THX
The Man

McJenso
01.06.2008, 09:04
Hallo,

bei den ATmegas und ATtinys nicht. Wobei es Controller gibt, bei denen man den Takt über Fusebiteinstellungen durch 8(?) teilen kann. Möglicherweise ist das Bit ab Werk gesetzt, müsste man dann halt ändern.

Gruß

Jens

PicNick
01.06.2008, 10:57
Beim PIC ist das so:
https://www.roboternetz.de/wissen/index.php/PIC16F87x_Einf%C3%BChrung#CPU_.2F_Clock

Beim AVR etwas trickreicher
https://www.roboternetz.de/wissen/index.php/Atmel_Controller_Mega16_und_Mega32#Instruction_Cyc les

Besserwessi
01.06.2008, 13:16
Bei vielen neuere AVRs (z.B. Mega88,Mega324) läuft der interne RC Takt mit 8 MHz und wird nach den Fuses anfangs durch 8 geteilt. Der Teilerfaktor läßt sich aber per Software einstellen (1 bis 256 soweit ich wiess).

Felix G
02.06.2008, 07:45
Die kurze (vereinfachte) Variante: bei AVRs ist 1 Cycle = 1 Takt.


Natürlich ist es intern ein klein wenig komplexer, wie auf dem von PicNick verlinkten Bild zu sehen. Denn normalerweise wird während der Ausführung eines Befehls, schon der nächste aus dem Flash geladen. Im Endeffekt spielt das im laufenden Programm dann aber keine wesentliche Rolle mehr, und man kann vereinfacht davon ausgehen daß 1 Cycle = 1 Takt ist.

Natürlich muss man auch aufpassen ob der Takt denn auf seinem Weg von der Takterzeugung zum CPU-Kern irgendwo runtergeteilt wurde (was zählt ist ja der CPU-Takt). Das ist aber meist nicht der Fall (zumindest wenn man den AVR mit einem externen Quarz betreibt).


Betreibst du einen ATmega32 also mit einem 16MHz Quarz, dann kann er pro Sekunde bis zu maximal 16 Millionen Befehle ausführen (üblicherweise wird dieses Maximum natürlich nicht erreicht, da eben nicht alle Befehle nur 1 Cycle brauchen)



Das steht aber auch alles im Datenblatt...
beim ATmega32 z.B. kann man unter "AVR CPU Core" -> "Instruction Execution Timing" folgendes nachlesen:

The
AVR CPU is driven by the CPU clock clkCPU, directly generated from the selected clock
source for the chip. No internal clock division is used.

Und unter "System Clock and Clock Options" -> "Clock Systems and their Distribution" ist z.B. noch ein schönes Blockdiagramm das zeigt wie der Takt überhaupt an die einzelnen Teile des AVR verteilt wird. Auch das kann bei der Beantwortung derartiger Fragen hilfreich sein.