Forum: Mikrocontroller und Digitale Elektronik Frequenz AVR: wie testen


von schon (Gast)


Lesenswert?

Hallo,

gehe ich richtig in der Annahme, dass folgendes Bascom-Listing:

Do
Portc.0 = 0
Portc.0 = 0
Portc.0 = 1
Portc.0 = 0
Portc.0 = 0


Loop
End

Portc.0 für exakt einen Tak einschalten müsste? Der AVR läuft mit 16 
MHz, aber die Eins im obigen Beispiel dauert komischerweise 2 Takte... 
Wie kann das sein?

von Sven S. (badphantom)


Lesenswert?

Sieh Dir mal das Dissambly an, wenn möglich. Vermutlich werden zwei 
Operationen durchgeführt.
Der Port ist vermutlich 8 bit breit (?)

von Justus S. (jussa)


Lesenswert?

Sven Schaumann schrieb:
> Vermutlich werden zwei Operationen durchgeführt.

da der verwendete µC-Typ mal wieder ein Geheimnis zu sein scheint, muss 
ich zwar raten, aber imo dürfte ein Blick ins Datenblatt der meisten 
8Bit-AVRs zeigen, dass das Setzen/Löschen eines Bits zwar mit einem 
Befehl erfolgt, der aber zwei Takte braucht...

von STK500-Besitzer (Gast)


Lesenswert?

>da der verwendete µC-Typ mal wieder ein Geheimnis zu sein scheint, muss
>ich zwar raten, aber imo dürfte ein Blick ins Datenblatt der meisten
>8Bit-AVRs zeigen, dass das Setzen/Löschen eines Bits zwar mit einem
>Befehl erfolgt, der aber zwei Takte braucht...

Der Controller ist ein AVR (welcher genau, dürfte keine Rolle spielen, 
da die sich im Setzen von Ports eher unwesentlich unterscheiden).
Interessant ist eher, was der Bascom-Compiler aus der Zeile macht.
Andere Compiler würden das Setzen eines einzelnen Portpins durch SBI 
(oder wie der Befehl in Assembler heissen mag) ersetzen.
Deswegen wäre das von Bascom erzeugte Assembler-Listing interessant.

von Karl H. (kbuchegg)


Lesenswert?

STK500-Besitzer schrieb:
> Andere Compiler würden das Setzen eines einzelnen Portpins durch SBI
> (oder wie der Befehl in Assembler heissen mag) ersetzen.

Ein Blick ins Datenblatt verrät:
CBI und SBI brauchen 2 Takte
(Habs auch nicht geglaubt, bis ich es gesehen habe)

von Justus S. (jussa)


Lesenswert?

Karl heinz Buchegger schrieb:

> Ein Blick ins Datenblatt verrät:
> CBI und SBI brauchen 2 Takte
> (Habs auch nicht geglaubt, bis ich es gesehen habe)

das meinte ich ja...ich wollte mich nur nicht zu weit aus dem Fenster 
lehnen und behaupten, dass das für alle AVRs gilt. Und egal was BASCOM 
macht, schlußendlich muss es die verfügbaren Instructions benutzen (bzw. 
ich wüsste nicht wie etwas anderes gehen sollte) und damit kann es auch 
nicht schneller als diese zwei Takte gehen...

von spess53 (Gast)


Lesenswert?

Hi

>das meinte ich ja...ich wollte mich nur nicht zu weit aus dem Fenster
>lehnen und behaupten, dass das für alle AVRs gilt.

Gilt auch nicht für alle. Ausnahmen sind: XMega und ATTiny10 mit einem 
Takt.

MfG Spess

von STK500-Besitzer (Gast)


Lesenswert?

>Ein Blick ins Datenblatt verrät:
>CBI und SBI brauchen 2 Takte
>(Habs auch nicht geglaubt, bis ich es gesehen habe)

Wieder was gelernt... ;)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Zur ursprünglichen Frage: wenn dein AVR eine CKOUT-Fuse hat (neuere
Typen), dann setze sie, und du bekommst den internen CPU-Takt an
einem Portpin heraus geführt -- ganz und gar ohne BASCOM oder C oder
Assembler. ;-)

Wenn nicht, dann bleibt immer noch die Möglichkeit, einen Timer in
den CTC-Modus zu versetzen, `toggle OCx on compare match' als
Funktion zu Programmieren, und das zugehörige OCRx auf 0 zu
programmieren.  Dann liefert der OCx-Pin (den man natürlich auf
Ausgang programmieren muss) f[CPU]/2.  (Alternativ kann man natürlich
auch OCRx auf 499 programmieren, dann wird f[CPU]/1000 am Ausgang
geliefert.)

von schon (Gast)


Lesenswert?

Jâ, es ist SBI, was zwei Takte braucht. Wusste ich gar nicht. Mist. 
Naja, Danke!

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.