High speed am AVR Analogkomparator?

Gast #4190807
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.
Gast #4190863
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.
Gast #4190864
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)
Gast #4190939
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.
Gast #4190971
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?
Gast #4190988
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.
Gast #4191007
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!
Gast #4191076
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.
Gast #4191084
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?
Gast #4191254
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...
Gast #4191315
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.
Gast #4191382
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
Gast #4191510
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.
#4191657
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"
Gast #4191664
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?
Gast #4191751
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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren