02.05.2013 Aufrufe

beginner_de

beginner_de

beginner_de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Avr-Asm-Tutorial S. 59<br />

Die Taktfrequenz wird in diesem Fall von <strong>de</strong>n externen Komponenten bestimmt.<br />

• AVRs mit einem o<strong>de</strong>r mehreren internen Oszillatoren: diese haben eine voreingestellte Taktfrequenz,<br />

die im Kapitel "System Clock and Clock Options" bzw. im Unterkapitel "Default<br />

Clock Source" steht. Je<strong>de</strong>r AVR-Typ hat da so seine beson<strong>de</strong>re Vorliebe.<br />

• AVRs mit internen RC-Oszillatoren bieten ferner die Möglichkeit, diesen zu verstellen. Dazu<br />

wer<strong>de</strong>n Werte in <strong>de</strong>n Port OSCCAL geschrieben. Bei älteren AVR geschieht das durch<br />

<strong>de</strong>n Programmierer, bei mo<strong>de</strong>rneren schreibt ein automatischer Mechanismus <strong>de</strong>n OSC-<br />

CAL-Wert zu Beginn in <strong>de</strong>n Port. Auch die Automatik benötigt <strong>de</strong>n Han<strong>de</strong>ingriff, wenn höhere<br />

Genauigkeit gefor<strong>de</strong>rt ist und <strong>de</strong>r AVR abseits <strong>de</strong>r Spannung o<strong>de</strong>r Betriebstemperatur<br />

betrieben wird, für die er kalibriert ist (beim ATtiny13 z.B. 3 V und 25°C).<br />

• Im Kapitel "System Clock and Clock Options" wird auch erklärt, wie man durch Verstellen<br />

von Fuses<br />

• zwischen internen und externen Taktquellen auswählt,<br />

• einen internen Vorteiler zwischen Taktquelle und Prozessortakt schalten kann (Clock Prescaler,<br />

siehe unten),<br />

• eine Wartezeit beim Start <strong>de</strong>s Prozessors einfügt, bis <strong>de</strong>r Oszillator stabil schwingt ("Delay<br />

from Reset").<br />

Die Fuses wer<strong>de</strong>n mittels Programmiergerät eingestellt. Obacht! Beim Verstellen von Fuses,<br />

z.B. auf eine externe Taktquelle, muss diese auch angeschlossen sein. Sonst verabschie<strong>de</strong>t<br />

sich <strong>de</strong>r Prozessor absolut taktlos vom Programmiergerät und gibt diesem keine sinnvollen<br />

Antworten mehr.<br />

• Um das Publikum zu verwirren, haben einige AVR noch einen Vorteiler für <strong>de</strong>n Prozessortakt<br />

(Clock Prescaler). Dieser lässt sich entwe<strong>de</strong>r per Fuse (siehe oben) auf 1 o<strong>de</strong>r 8 einstellen,<br />

bei manchen AVR aber auch per Software auf Teilerwerte von 1, 2, 4, 8, bis 256 einstellen<br />

(Port CLKPR).<br />

Haben Sie aus all <strong>de</strong>m Durcheinan<strong>de</strong>r jetzt herausgefun<strong>de</strong>n, mit wieviel MHz <strong>de</strong>r AVR nun eigentlich<br />

läuft (fc), dann ergibt sich die Dauer eines Prozessortakts (tc) zu: tc [µs] = 1 / fc [MHz] Bei 1,2<br />

MHz Takt (ATtiny13, interner RC-Oszillator mit 9,6 MHz, CLKPR = 8) sind das z.B. 0,83 µs. Die<br />

restlichen Stellen können Sie getrost vergessen, <strong>de</strong>r interne RC-Oszillator ist so arg ungenau, dass<br />

weitere Stellen eher <strong>de</strong>m Glauben an Zauberei ähneln.<br />

Zeitverzögerung<br />

Mit <strong>de</strong>r Anzahl Prozessortakte von oben (nc=3*c1, c1=200, nc=600) und 1,2 MHz Takt ergibt sich<br />

eine Verzögerung von 500 µs. Mit maximal 640 µs ist die Maximalbegrenzung dieser Konstruktion<br />

erreicht.<br />

Verlängerung!<br />

Mit folgen<strong>de</strong>m Trick können Sie noch etwas Verlängerung herausholen:<br />

.equ c1 = 200 ; 0 Takte, macht <strong>de</strong>r Assembler alleine<br />

ldi R16,c1 ; 1 Takt<br />

Loop: ; Schleifenbeginn<br />

nop ; tue nichts, 1 Takt<br />

nop ; tue nichts, 1 Takt<br />

nop ; tue nichts, 1 Takt<br />

nop ; tue nichts, 1 Takt<br />

nop ; tue nichts, 1 Takt<br />

<strong>de</strong>c R16 ; 1 Takt<br />

brne Loop ; 2 Takte wenn nicht Null, 1 Takt bei Null

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!