mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik High speed am AVR Analogkomparator?


Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir mal jemand auf die Sprünge helfen? Ich find's im Datenblatt 
nicht!

Wie schnell ist der Komparator (z.B. im ATTiny85) überhaupt?
Kann ich noch mit einem 8MHz-Signal das ACI-Flag Triggern?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stand da nicht irgendetwas von propagation delay im Datenblatt?

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bezieht sich das mit dem Propagation Delay nicht auf die 1..2 Zyklen im 
AC0-Flag (State)? Das brauche ich nicht!

Ich will auswerten, wann die Welle anliegt und wann nicht, daher würde 
ich als Loop das ACI-Flag (also das Interrupt-Flag) zurücksetzen und 
direkt wieder einlesen wollen.

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Horst S. (hdc)

>Wie schnell ist der Komparator (z.B. im ATTiny85) überhaupt?

>Kann ich noch mit einem 8MHz-Signal das ACI-Flag Triggern?

Glaub ich nicht.

Beim ATmega88 sind es 500-750ns Verzögerungszeit.

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Glaub ich nicht.
>
> Beim ATmega88 sind es 500-750ns Verzögerungszeit.

Bis der Interrupt ausgelöst wird?
Oder ist das die Zeit, die der Komparator kippen muss, damit überhaupt 
ein Interrupt ausgelöst wird?

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steht nicht näher beschrieben im Datenblatt. Ich vermute, das ist die 
Zeit für den reinen Durchlauf durch den Komparator vom Eingang bis zum 
Ausgang. Danach kommt der Digitalteil.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horst S. schrieb:

> Kann mir mal jemand auf die Sprünge helfen? Ich find's im Datenblatt
> nicht!
>
> Wie schnell ist der Komparator (z.B. im ATTiny85) überhaupt?

Der Komparator selber ist ziemlich schnell, nützt aber nix, weil sein 
Ausgang synchronisiert wird. D.h.: im allerbesten Fall kannst du knapp 
1/2 Systemtakt noch korrekt korrekt erfassen.

Allerdings: Du wirst diese theoretisch mögliche Samplefrequenz nicht 
wirklich nutzen können. Das gibt die Verarbeitungsgeschwindigkeit nicht 
her.

Nur Einzelpulse, von denen du vorher schon recht genau weisst, wann sie 
eingehen werden, kannst du mit 1/3 Systemtakt erfassen, weil halt ein 
"in" und ein "st" zusammen drei Takte dauern.

Für alles andere wird es noch langsamer...

> Kann ich noch mit einem 8MHz-Signal das ACI-Flag Triggern?

Wenn das Teil mit mehr als 16MHz läuft: ja. Aber wie schon gesagt: der 
praktische Nutzen geht gegen Null.

Autor: chosee (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> Steht nicht näher beschrieben im Datenblatt. Ich vermute, das ist die
> Zeit für den reinen Durchlauf durch den Komparator vom Eingang bis zum
> Ausgang. Danach kommt der Digitalteil.

Denke ich auch. 500 bis 750ns Zeiten stehen als "Analog Comparator 
Propagation Delay" abhängig von Vcc im Datenblatt. An anderer Stelle 
steht, daß das ACO-Bit nach ein bis zwei Zyklen Synchronisationzeit 
gesetzt wird. Die Zeit wird also noch addiert und ist auch noch 
taktabhängig. Gleiches dürfte auf das Interruptbit ACI zutreffen. 
(ATmega88a)

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Der Komparator selber ist ziemlich schnell, nützt aber nix, weil sein
> Ausgang synchronisiert wird. D.h.: im allerbesten Fall kannst du knapp
> 1/2 Systemtakt noch korrekt korrekt erfassen.
>
> Allerdings: Du wirst diese theoretisch mögliche Samplefrequenz nicht
> wirklich nutzen können. Das gibt die Verarbeitungsgeschwindigkeit nicht
> her.
>
> Nur Einzelpulse, von denen du vorher schon recht genau weisst, wann sie
> eingehen werden, kannst du mit 1/3 Systemtakt erfassen, weil halt ein
> "in" und ein "st" zusammen drei Takte dauern.
>
> Für alles andere wird es noch langsamer...
>
>> Kann ich noch mit einem 8MHz-Signal das ACI-Flag Triggern?
>
> Wenn das Teil mit mehr als 16MHz läuft: ja. Aber wie schon gesagt: der
> praktische Nutzen geht gegen Null.

Neeneeneeneeee,
Die 8 MHz sind nur der Träger. Das eigentliche Nutzsignal ist ein 
19,2kBaud amplitudenmodulierter UART-Stream. Insofern will ich 
eigentlich genau das machen, was die UART auch macht: Im 4-, 8- oder 
16-fachen der Baudrate den Pegel (hier das Auftreten des 
ACI-Interruptes) untersuchen und daraus bestimmen, ob eine 1 oder eine 0 
gesendet wird. Was mir allerdings aus den Angaben des Datenblattes nicht 
klar ist:
a) Wie ist die Bandbreite des Komparators und
b) wird der ACI bei kurzen Impulsen < fOsz überhaupt ausgelöst?

Daher interessieren mich die Latenzen < 1us eher weniger.

Ich könnte mir auch einen Komparator (zur Verstärkung) nebst Monoflop 
(um die negative Halbwelle zu überbrücken) extern dranbauen und das so 
gleichgerichtete Signal an einen Port (im besten Fall dann wohl RxD) 
führen. Das wollte ich mir sparen.

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht. Ein 100 ns-Impuls wird von einem ATtiny85 mit internem Takt von 
8 MHz detektiert.
(In der Hoffnung, dass mir die Sonne nicht das Hirn verbrannt hat)

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
> Es geht. Ein 100 ns-Impuls wird von einem ATtiny85 mit internem Takt von
> 8 MHz detektiert.
> (In der Hoffnung, dass mir die Sonne nicht das Hirn verbrannt hat)

Das ist mal 'ne Aussage.
Hast Du das jetzt extra ausprobiert? Oder hattest Du das schon vorher am 
Start?
Mit welcher Eingangsspannungsdifferenz hast Du den Impuls am Komparator 
eingefüttert?

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eben ausprobiert. Volle Spannung, d.h. Ausgang auf Eingang.

Zur Erläuterung:
auf einem ATmega48 (vorher 20.000, jetzt auch 22.118 MHz) läuft:
loop:
  sbi  PORTB,puls
  cbi  PORTB,puls
  rcall  wait5s
  rjmp    loop

auf dem ATtiny85 (mit intern 8 MHz):
loop:
   sbis  ACSR,ACI
  rjmp  loop
  sbi  ACSR,ACI
  sbi  PORT_LED,LED
  rcall  wait1s
  cbi  PORT_LED,LED
  rjmp    loop

Die LED blinkt im 5 s-Rhythmus.

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du noch zwei Widerstände zur Hand, die als Spannungsteiler die 
Amplitude des Impulses am Komparator auf 0,5V senken?
Ach lass, Du hast mich so schon glücklich gemacht!
Ich danke Dir!

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was soll dann als Referenz genommen werden? Im Augenblick ist Bandgap 
eingeschaltet.

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten ein Poti am negativen Eingang des Komparators, damit man 
messen kann, ob die angegebene Toleranz der Differenzspannung (ich 
glaube, das waren um die 50mV) auch bei dieser Impulslänge noch 
eingehalten werden.

ABER LASS ES, ES IST SCHON SPÄT!

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ein Steckbrettaufbau, Sie müssen also alle Angaben unbedingt 
verifizieren!

Folgendes sehe ich hier:
PB1 == AIN0: Spannungsteiler  Vcc  10 k  -B1- 1 k  GND
PB0 == AIN1: Spannungsteiler  m48   6k8  -B0- 1 k  GND

Ersetze ich die 6k8 durch 8k2 blinkt die LED nicht mehr.
Ersetze ich nun am m48 die 22.118 durch 16.0 MHz (also 125 statt 90 ns), 
dann blinkt sie wieder.

Autor: asdfasd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich könnte mir auch einen Komparator (zur Verstärkung) nebst Monoflop
> (um die negative Halbwelle zu überbrücken) extern dranbauen und das so
> gleichgerichtete Signal an einen Port (im besten Fall dann wohl RxD)
> führen. Das wollte ich mir sparen.

Schon mal überlegt, ob ein einfacher Hüllkurvendemodulator bestehend aus 
Diode, Kondensator und Widerstand nicht reicht?

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist jetzt schlecht: betreibe ich den ATtiny85 mit 1 MHz, blinkt die 
LED nur noch sporadisch. Also wird das AC-Flipflop wohl doch synchron 
mit dem Systemtakt gesetzt.

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:

> Das ist jetzt schlecht: betreibe ich den ATtiny85 mit 1 MHz, blinkt die
> LED nur noch sporadisch. Also wird das AC-Flipflop wohl doch synchron
> mit dem Systemtakt gesetzt.

Das schrieb ich bereits weiter oben im Thread und noch lange vor mir hat 
das jemand freundlicherweise in das Datenblatt des Tiny85 geschrieben...

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Datenblatt des ATtiny85 konnte ich das nicht finden, für eine genaue 
Quellenangabe wäre ich dankbar.
Ich hatte mir durchaus vorstellen können, dass ein Flipflop unmittelbar 
am Komparatorausgang asynchron gesetzt wird und erst die weitere 
Verarbeitung synchron erfolgt, eben um solche kurzen Ereignisse 
detektieren zu können.

Autor: chosee (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:
> Im Datenblatt des ATtiny85 konnte ich das nicht finden, für eine genaue
> Quellenangabe wäre ich dankbar.

Die Sychronisationszeit entnehme ich aus Atiny Datenblatt

ATtiny25/V / ATtiny45/V / ATtiny85/V
doc2586
16.2.2 ACSR – Analog Comparator Control and Status Register
Bit 5 – ACO: Analog Comparator Output

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, chosee.
Ich hätte mir zwar auch unter dieser Formulierung noch anderes 
vorstellen können, auch stört mich dieses unbestimmte 'delay of 1 - 2 
clock cycles', aber okay, so ist es nun mal.

Autor: Axel S. (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
S. Landolt schrieb:

> Ich hätte mir zwar auch unter dieser Formulierung noch anderes
> vorstellen können, auch stört mich dieses unbestimmte 'delay of 1 - 2
> clock cycles', aber okay, so ist es nun mal.

Die Unbestimmtheit resultiert aus der Abtastung. Je nach Phasenver- 
schiebung zwischen IO-Takt und der Signalflanke wird sie nur um einen 
Takt oder um 2 Takte verzögert.

Die Schaltung des Sychronisierers findet sich an verschiedenen Stellen 
im Datenblatt. Bspw. in "10.2 Ports as General Digital I/O"

Autor: Horst S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
asdfasd schrieb:
> Schon mal überlegt, ob ein einfacher Hüllkurvendemodulator bestehend aus
> Diode, Kondensator und Widerstand nicht reicht?

War auch mein erster Gedanke, allerdings: Bei einer Signalamplitude von 
0,3 ... 0,5 V eher nicht. Da müsste ich erst noch nen Gleichanteil 
draufaddieren, dazu vorher die Impedanz des Signals anpassen, etc, also 
doch wieder 'nen Bauteilgrab.



S. Landolt schrieb:
> Danke, chosee.
> Ich hätte mir zwar auch unter dieser Formulierung noch anderes
> vorstellen können, auch stört mich dieses unbestimmte 'delay of 1 - 2
> clock cycles', aber okay, so ist es nun mal.

Und ich muss ehrlich sagen: Ich hab's immer noch nicht. Das allerdings 
mag daran liegen, dass in Fig. 18-1 überhaupt keine Takte eingezeichnet 
sind und für mein grundlegendes Verständnis externe Interrupts immer 
asynchron zum Systemtakt angetriggert werden (wenn nix anderes 
dabeisteht).

Dass das AC0-Flag synchronisiert mit Delay weitergereicht wird, ist 
dokumentiert. Dass die Signalwege von AC0 und ACI hinter dem Komparator 
gesplittet sind, ist aus dem Blockschaltbild in Fig. 18-1 ersichtlich.

Bleibt ja nur noch die Möglichkeit, dass das Ausgangssignal vom 
Komparator vor dem Split für beide Flags getaktet abgefragt wird. Dann 
aber müsstest Du bei Deinem ersten Test mit dem 100ns-Puls schon 
unglaubliches Glück gehabt haben, um ein regelmäßiges Muster zu 
bekommen.

Passt Dein Programm auf dem Empfänger automatisch die Anweisung "wait1s" 
auf die 1MHz an?

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die waits stimmen.
Mein Fehler gestern war der langsame Rhythmus von 5 s. Ich hatte mich 
zwar entspannt zurückgelehnt und zugeschaut, aber sicher nicht länger 
als eine Minute, und das waren dann eben nur zwölf Ereignisse - eine 
dürftige statistische Basis (wie sich dann ja auch heute morgen zeigte).

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnten Sie einen Quarz mit 20 MHz anschließen?
Oder die internen 16 MHz per OSCCAL etwas hochziehen, dann sollte es 
doch für die zu detektierenden 8 MHz reichen?

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.