Forum: Mikrocontroller und Digitale Elektronik Latenz/Slew-Rate


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Phillip (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich war der Meinung, daß ATmegas (8er?) es nicht schaffen, einen I/O-Pin 
mit maximaler Geschwindigkeit zu toggeln. Also wenn man in C
1
while (1)
2
 PORTA ^= (1 << PA1);

schreibt, schafft es der Ausgang nicht, saubere Flanken und Pegel zu 
generieren. Ist das (noch immer) so, war das nur "früher" oder liege ich 
völlig falsch?

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Phillip schrieb:
> Ist das (noch immer) so, war das nur "früher" oder liege ich völlig
> falsch?

Du liegst da nur dann nicht völlig falsch, wenn Du versuchen würdest, 
einen OpenCollector-/OpenDrain-Ausgang zu emulieren. Aber die 
"totem-pole"-Treiber sind schneller als der Controller an den Bits 
wackeln kann.

von Achim S. (Gast)


Bewertung
1 lesenswert
nicht lesenswert
du liegst falsch (heute und auch früher schon). Seinen Pin alleine kann 
der µC schnell genug umschalten (von Ausnahmen wie Open-Kollektor-Pins 
abgesehen).

Die Sache wird anders, wenn du eine (kapazitive) Last an den µC-Ausgang 
hängst. Je nachdem, wie stark diese Last den Ausgang fordert, kann das 
von dir beschriebene Verhalten auftreten. Dabei kann ggf. auch schon der 
Eingang eines Oszis samt der Kapazität der Messleitungen schon eine zu 
große Lasstkapazität darstellen.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Phillip schrieb:
> PORTA ^= (1 << PA1);

Bei modernen AVR kannst du die Frequenz noch deutlich steigern wenn du
PINA = (1 << PA1);
verwendest.
Und die "Kurve" ist am Ausgang immer noch schön rechteckig. Auch bei 
20MHz Prozessortakt.

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Und wenn man Typen mit 64MHz Timer verwendet, dann kommt man mit dem 
Timer-Ausgang bis 32MHz Pinfrequenz. Wenn man da schlechte Kurven 
kriegt, dann liegt das nicht am µC, sondern an Layout, Anschluss oder 
Messquipment. So sollte man nicht erwarten, mit einem normalen Tastkopf 
mit Masseclip ein blitzsauberes Rechteck zu bekommen.

von W.A. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Phillip schrieb:
> Ich war der Meinung, daß ATmegas (8er?) es nicht schaffen, einen I/O-Pin
> mit maximaler Geschwindigkeit zu toggeln.

Das kommt drauf an, was du als Last dran hast.

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Ich hatte mal einen Tiny gebaut, dessen Timer-Ausgang per Poti auf 
~35MHz durchstimmbar war. Und um dem noch etwas mehr Pfeffer zu geben 
war noch ein 74AC00 dahinter - in DIL-Gehäuse auf Lötpunktraster, also 
"leicht" suboptimal.

Mit einem normalen Billigtastkopf, mit dem üblichen Masseclip-Anschluss, 
kam sowas bei 20MHz heraus:
https://www.mikrocontroller.net/attachment/27258/74AC-Ausgang.PNG

Mit anderen Tastköpfen und direktem Masseanschluss am Tastkopfschirm, 
statt Masseclip, sah das dann schon deutlich besser aus. Wobei das 
Messequipment immer noch nicht optimal war (100MHz Oszi bei 20MHz 
Rechteck hat eben Grenzen, meine Fähigkeiten als Tastkopfbauer auch):
https://www.mikrocontroller.net/attachment/27312/Nebeneinander.png
https://www.mikrocontroller.net/attachment/27319/Nebeneinander2.png

Das Signal direkt am Ausgang des AVR sah zwar deutlich besser aus, weil 
es etwas dezentere Flanken als der 74AC00 hatte. Aber es bleibt das 
Problem, dass man in solchen Bereichen einige Gedanken in das 
Messequipment investieren sollte. Wer misst misst Mist.

: Bearbeitet durch User
von Öh? (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@ Rufus @ Achim

Mag einer von Euch bitte mit einigen Worten erklären, warum 
Open-Kollektor-Ausgänge grundsätzlich langsamer als Totem-Pole-Ausgänge 
sind? Oder einen Link auf eine Erklärung posten?
Leider finde ich da auf die Schnelle nichts im Internet.

Das wäre nett.

von Arduino Fanboy D. (ufuf)


Bewertung
0 lesenswert
nicht lesenswert
Wegen dem Widerstand.

von (prx) A. K. (prx)


Bewertung
0 lesenswert
nicht lesenswert
Öh? schrieb:
> Mag einer von Euch bitte mit einigen Worten erklären, warum
> Open-Kollektor-Ausgänge grundsätzlich langsamer als Totem-Pole-Ausgänge
> sind?

Ein aktiver Pullup liefert mehr Strom als ein passiver. Mit passivem 
Pullup gibts bei nennenswerter kapazitiver Last bei der ansteigenden 
Flanke die übliche R/C-Ladekurve.

Der obere Transistor des Ausgangs eines AVR hat bei 5V Versorgung einen 
Innenwiderstand von um die 30 Ohm. Extern einen 30 Ohm Pullup an einen 
Open Drain Ausgang zu hängen ist nicht ratsam, jedenfalls nicht bei 
low-Pegel.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.