Forum: Mikrocontroller und Digitale Elektronik Schnellstmöglicher Bitbang (pin ein ausschalten) beim AVR


von C. H. (hedie)


Lesenswert?

Hallo

Der betreff verräscht schon einiges...

Was ist das schnellstmögliche BitBanging bei einem AVR? (Attiny2313)

Und wie erreicht man es?

Ich denke mal mit Assembler oder irre ich da?

Danke schonmal

von Falk B. (falk)


Lesenswert?

@  Claudio Hediger (hedie)

>Was ist das schnellstmögliche BitBanging bei einem AVR? (Attiny2313)

Guggst du Assembler Dokumentation, siehst du 1 Takt für OUT Befehl bzw. 
2 Takte für sbi/cbi Befehle.

MfG
Falk

von gunter (Gast)


Lesenswert?

bei 3 asm (2xout + rjmp) befehlen pro zyklus, mit 16 mhz quarz -> 
thereotisch 5,3 mhz möglich.

von gunter (Gast)


Lesenswert?

rjmp sind 2 takte also 4 mhz.. sorry.

von avr (Gast)


Lesenswert?

der Tiny2313 kann auch "Toggling"
1
Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of
2
DDRxn. Note that the SBI instruction can be used to toggle one single bit in a port.

avr

von tschika (Gast)


Lesenswert?

Wenn der Timer den Pin toggelt, schafft man es bis zur halben 
Grundfrequenz.

von (prx) A. K. (prx)


Lesenswert?

avr schrieb:

> der Tiny2313 kann auch "Toggling"

Ist aber netto auch nicht schneller.

Max ist 10MHz wenn unrolled.

Ob Assembler oder C, es zählt was hinten rauskommt. Wenn man da ein Auge 
drauf hat kanns aufs Gleiche rauslaufen.

von C. H. (hedie)


Lesenswert?

Hmmm

Danke für die antworten...

Ich werds wohl so machen, das ich ne PLL hinten dran hänge... :)

Wenn die ja mal eingeschwungen ist, gibts ja keine verzögerungen mehr 
oder?

(74HCT4046)

von Uwe (Gast)


Lesenswert?

Hi!
Es gibt nicht das
"schnellstmögliche BitBanging bei einem AVR? (Attiny2313)"
Es ist immer eine Frage der Randbedingungen.
Die schnellste Art "einen" Pin zu wechseln ist über einen Timer in 
CTC-Mode, wobei das Compareregister auf 0 gesetzt wird. Dann hast du 
CKL/2.
Du bist dabei allerdins an feste Pins gebunden.
In Software:
Wenn Tastverhältnis gleich sein soll:
1
      .
2
      .
3
neu: sbi Port, Bit
4
     nop
5
     cbi Port, Bit
6
     rjmp neu
7
8
oder:
9
10
     ldi R16,1
11
     ldi R17,1
12
neu: eor R16,R17
13
     out Port,R16    ;set/reset Bit0 des jeweiligen Ports
14
     rjmp neu

Tastverhältnis 1/4:
1
      .
2
      .
3
neu: sbi Port, Bit
4
     cbi Port, Bit
5
     rjmp neu

Du siehst viele Wege führen zum toggeln.

Viel Erfolg, Uwe

von avr (Gast)


Lesenswert?

@A.K.
Hab auch nicht geschrieben, daß es schneller ist.
Ist nur wirklich sinnvoll beim toggln, kein wenn gesetzt dann
löschen etc. nötig.

avr

von Grrrr (Gast)


Lesenswert?

Claudio Hediger schrieb:
> Ich werds wohl so machen, das ich ne PLL hinten dran hänge... :)

Wenn jemand nach der maximalen Toggle-Geschwindigkeit fragt macht eine 
PLL keinen Sinn, für was auch immer.

von (prx) A. K. (prx)


Lesenswert?

Uwe schrieb:

> Es gibt nicht das
> "schnellstmögliche BitBanging bei einem AVR? (Attiny2313)"

Eine Untergrenze für den Abstand von zwei Flankenwechseln eines Portpins 
bei Einhaltung der zulässigen Arbeitsfrequenz gibt es sehr wohl. Ob die 
Antwort etwas nützt ist eine andere Frage.

von j.azz (Gast)


Lesenswert?

Wenn's  nur darum geht, eine möglichst hohe Frequenz an einem Pin zu 
haben,
die synchron mit dem Systemtakt ist, kann man sich doch den Systemtakt 
auf einen Portpin legen.

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.