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


von Horst S. (Gast)


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?

von Timmo H. (masterfx)


Lesenswert?

Stand da nicht irgendetwas von propagation delay im Datenblatt?

von Horst S. (Gast)


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.

von Falk B. (falk)


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.

von Horst S. (Gast)


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?

von Falk B. (falk)


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.

von c-hater (Gast)


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.

von chosee (Gast)


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)

von Horst S. (Gast)


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.

von S. Landolt (Gast)


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)

von Horst S. (Gast)


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?

von S. Landolt (Gast)


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:
1
loop:
2
  sbi  PORTB,puls
3
  cbi  PORTB,puls
4
  rcall  wait5s
5
  rjmp    loop

auf dem ATtiny85 (mit intern 8 MHz):
1
loop:
2
   sbis  ACSR,ACI
3
  rjmp  loop
4
  sbi  ACSR,ACI
5
  sbi  PORT_LED,LED
6
  rcall  wait1s
7
  cbi  PORT_LED,LED
8
  rjmp    loop

Die LED blinkt im 5 s-Rhythmus.

von Horst S. (Gast)


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!

von S. Landolt (Gast)


Lesenswert?

Was soll dann als Referenz genommen werden? Im Augenblick ist Bandgap 
eingeschaltet.

von Horst S. (Gast)


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!

von S. Landolt (Gast)


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.

von asdfasd (Gast)


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?

von S. Landolt (Gast)


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.

von c-hater (Gast)


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...

von S. Landolt (Gast)


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.

von chosee (Gast)


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

von S. Landolt (Gast)


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.

von Axel S. (a-za-z0-9)


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"

von Horst S. (Gast)


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?

von S. Landolt (Gast)


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).

von S. Landolt (Gast)


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?

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.