Guten Abend.
Hab hier einen Mega8 der mit einem internen Takt von 4MHz läuft.
Hab ein Programm geschrieben das immer den Port B.3 invertiert.
1
while(1){
2
3
PORTB.3=~PORTB.3
4
}
Am Oszi gemessen bekomme ich nur eine Rechecksignal mit ca. 63 kHz. Das
wundert mich ein wenig, eigentlich hätte ich ja mit mindestens einem
dreistellingen kHz-Wert gerechnet. So viele Befehle stecken doch da
nicht dahinter, oder?
Gert
> Das wundert mich ein wenig, eigentlich hätte ich ja mit mindestens einem> dreistellingen kHz-Wert gerechnet. So viele Befehle stecken doch da> nicht dahinter, oder?
Wissen ist Macht!
Schau dir das Assembler-Listing an.
spess53 wrote:
> Welchen Teil hast du nicht verstanden?
Ich tippe auf:
Lothar Miller wrote:
> Schau dir das Assembler-Listing an.
bin mir aber noch nicht ganz sicher...
@Gert (Gast)
>dreistellingen kHz-Wert gerechnet. So viele Befehle stecken doch da>nicht dahinter, oder?
Wenn der Compiler was taugt dauert die Schleife 5 Takte, macht effektiv
einen Teiler durch 10 = 400 kHz.
Und du bist sicher, dass dein AVR auf 4 MHz läuft? Die meisten laufen ab
Werk mit 1MHz.
Poste mal VOLLSTÄNDIGEN Code.
MFG
Falk
Jupp ... der lief nicht auf 4MHz. Danke für den Tipp.
Hab's jetzt
CKSEL3=0
CKSEL2=0
CKSEL1=1
CKSEL0=1
eingestellt. Das sollten ja 4MHz sein, wenn ich das im Datenblatt
richtig verstanden habe.
Messe jetzt ca 260 kHZ...
Falk wrote:
>Wenn der Compiler was taugt dauert die Schleife 5 Takte
Gert wrote:
>Messe jetzt ca 260 kHZ...
ups... da ist noch ein 6ter. ;)
Marke:
cbi xx ;1 Takt
sbi xx ;1 Takt
rjmp Marke ;2 Takte
es geht auch mit 4 Takten -> 1MHz/2 =500KHz
Leute, wenn es um das schnelle Toggeln eine Ports geht, gibt es bei den
neueren AVRs einen Befehl dafür: das Schreiben eines 1-Bits ins
PIN-Register (glaub ich zumindest, bitte selbst nachschauen: Toggle).
Dann sollte es in 2 oder 3 Zyklen gehen.
Nur dass Gert offenkundig keinen GCC verwendet. Bleibt abzuwarten, was
sein Compiler draus gemacht hat. Und ob die Optimierung überhaupt
eingeschaltet war.
A. K. wrote:
> Was auf 6 bzw. 7 Takte rausläuft (CBI,SBI,RJMP=2).
Stimmt, da hast du recht. Es sind 7 Takte für einen Zyklus ergo
irgendwas um 571 kHz und damit etwas mehr als doppelt soviel wie vom OP
gemessen...
eProfi wrote:
> Leute, wenn es um das schnelle Toggeln eine Ports geht, gibt es bei den> neueren AVRs einen Befehl dafür: das Schreiben eines 1-Bits ins> PIN-Register (glaub ich zumindest, bitte selbst nachschauen: Toggle).
Nützt aber nix beim Mega8. Ausserdem dürfte es hier nicht um Wettrennen
gehen, sondern um ein Missverhältnis zwischen Erwartung und Realität.
Tim T. wrote:
> Stimmt, da hast du recht. Es sind 7 Takte für einen Zyklus ergo> irgendwas um 571 kHz und damit etwas mehr als doppelt soviel wie vom OP> gemessen...
Nö. Der Gesamtzyklus sind 6+7=13 Takte, also rund 300KHz am Pin.
A. K. wrote:
> Tim T. wrote:>>> Stimmt, da hast du recht. Es sind 7 Takte für einen Zyklus ergo>> irgendwas um 571 kHz und damit etwas mehr als doppelt soviel wie vom OP>> gemessen...>> Nö. Der Gesamtzyklus sind 6+7=13 Takte, also rund 300KHz am Pin.
Stimmt, ich hab da bei den 2 Taktern gepennt, es sind natürlich 13 Takte
und 307 kHz am Pin :)
> ... es werden lauter Feldermeldungen angezeigt
Das ist ja schön. Google mal nach "Fehlermeldung". Die Lösung deines
Problems sollte sich relativ weit oben unter den Suchergebnissen
befinden, denk ich mal.