AVR: Wann schaltet Ausgang

Gast #107697
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
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
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
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
> 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 #107705
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
Gast #107706
> 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
Gast #107707
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

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.