AVR: Wann schaltet Ausgang

Gast #107697
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
Gast #107698
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ß
Gast #107699
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
Gast #107703
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ß
Gast #107704
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
Gast #107707
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ß?

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