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
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ß
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
Wobei das heutzutage jeder uC oder CPU ist... Das war nur damals anders, als Dynamische Speicher verwendet wurden.
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.
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ß
> 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
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
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.