Forum: Mikrocontroller und Digitale Elektronik AVR: Wann schaltet Ausgang


von Winfried (Gast)


Lesenswert?

Hallo,

gibt es eine genaue Regel beim AVR (ATtiny 12), zu welchem Takt ein
Ausgang beim Befehl SBI/CBI ein- oder ausschaltet. Meine bisherigen
Beobachtungen waren, dass bei SBI nach einem Takt der Ausführung dieses
Befehls geschaltet wird, bei CBI nach dem zweiten Takt. Anders
ausgedrückt, SBI schaltet in der Mitte des Befehls, CBI schaltet am
Ende des Befehls. Aber auch nicht ganz genau. Und vor allem, wie mir
scheint, manchmal anders.

Ich brauche ein sehr genaues Timing für eine Step-Up Regler Anwendung,
deshalb ist das wichtig.

Wie sind eure Erfahrungen?

Winfried

von Chris (Gast)


Lesenswert?

Hallo,

beide Befehle benötigen laut Instruction Set zwei Taktzyklen. Wann
innerhalb dieser Zeit der Ausgang tatsächlich schaltet, hängt wieder
von den internen Laufzeiten ab.

Wie ist Dir Deine Beobachtung eigentlich gelungen? Man müßte hierfür
das Ausgangssignal relativ zum Quarztakt beobachten und dabei aber
genau wissen, bei welchem der Quarztakte genau derjenige Befehl
ausgeführt wird (z.B. mittels Testprogramm, bestehend nur aus CBI,
SBI-Befehlen). Nimmt man andere Ausgänge hierfür als Referenz, hätte
man dort auch wieder die interne Laufzeit in der Messung mit drin.

Gruß

von Moritz (Gast)


Lesenswert?

hi,
naja ich hätte das ganze in Assembler programmiert und mir dann
anstelle des Quarzes einen taster an Xtal 1 gegen gnd geschaltet und
dann kann man den AVR so langsam laufen lassen wie man will ging
jedenfals bei den laten :-) ....

mfg
Moritz

von Henning (Gast)


Lesenswert?

damit wird doch auch geworben: bis auf 0Hz heruntertaktbat

von Benedikt (Gast)


Lesenswert?

Wobei das heutzutage jeder uC oder CPU ist...
Das war nur damals anders, als Dynamische Speicher verwendet wurden.

von m. merten (Gast)


Lesenswert?

wann die avr port`s schalten ist doch im datenblatt recht genau
dokumentiert, wenn man sich die port-logik und das timing mal genau
ansieht.

von Chris (Gast)


Lesenswert?

Hallo Winfried und Moritz,

wenn man quasi-statisch bei 0...10 Hz beobachtet, spielt zumindest die
interne Laufzeit im Bereich einiger Nanosekunden, wie ich das oben
gemeint habe, keine Rolle. Dann braucht eben der eine Befehl nur einen
Zyklus und der andere zwei davon. Für das ganz genaue Timing im
Step-Up-Regler dürfte diese Laufzeit dann wohl eher relevant sein.

Gruß

von Winfried (Gast)


Lesenswert?

> Wie ist Dir Deine Beobachtung eigentlich gelungen?

Wenn man dies programmiert:
CBI PORTB, 3
nop
nop
nop
;-----Start
SBI PORTB, 3
CBI PORTB, 3
;-----End

dann ist der Pin bei 1MHz 3 us eingeschaltet.

Wenn man dies programmiert:
SBI PORTB, 3
nop
nop
nop
nop
;-----Start
CBI PORTB, 3
SBI PORTB, 3
;-----End

dann ist der Pin nur 1us ausgeschaltet. (Nur der Code von Start bis
Ende ist für die Messung interessant, davor nur Init).

Ich bin mir nicht ganz siche, aber ich denke, damit kann man eindeutig
sagen, dass es sich so verhält, wie beschrieben. Allerdings hatte ich
jetzt eben auch merkwürdige andere Konstellationen, wo die Sache um 1us
verschoben war. Entweder ich hab Mist programmiert oder das Timing ist
nicht immer identisch.

Winfried

von Andi (Gast)


Lesenswert?

Und wenn Du den AVR auf 8MHz oder höher taktest?
Dann ist ein Befehl nur 125ns oder weniger lang.
Mußt dann nur die kürzeren Ausführungszeiten beachten.

Gruß
Andi

von Winfried (Gast)


Lesenswert?

> Und wenn Du den AVR auf 8MHz oder höher taktest?

Geht nicht beim ATtiny12 mit 1.8V.

Ich werde nochmal etwas experimentieren, um herauszufinden, wie es sich
genau verhält.

Winfried

von Profi (Gast)


Lesenswert?

Schau Dir doch mal das obj-File oder List-File an, ob er wirklich das
übersetzt, oder ob er nicht was wegoptimiert.

Ehrlich gesagt kann ich mir nicht vorstellen, das Set und Clr
verschieden lang dauern oder das zu verschiedenen Zeiten machen.

Aber wer weiß?

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
Noch kein Account? Hier anmelden.