Forum: Mikrocontroller und Digitale Elektronik ADC-schnellste Methode ? ATmega8 Assembler


von Bernhard (Gast)


Lesenswert?

Hallöchen,

ein ATmega8 soll so schnell wie möglich eine AD-Wandlung durführen.

An meinem OSZI habe ich 26 Takte gemessen.

Und so habe ich das Register ADSCR eingestellt:
(Vorteiler=0)

ldi temp, (1<<ADEN)|(1<<ADSC)|(1<<ADFR)|(1<<ADIF)|(1<<ADIE)  + 0
out ADCSR, temp

Momentan wird nach jeder fertigen AD-Wandlung (26 Takte) ein Interrupt
ausgelöst und das Ergebnis der AD-Wandlung bereitgestellt.

Meine Frage, gehts noch schneller?

Gruß

Bernhard

von Simon Küppers (Gast)


Lesenswert?

Nimm Free Running betrieb und werte die Daten im Interrupt aus. Sollten
ca 13 Takte sein dann.

von Benedikt (Gast)


Lesenswert?

Mit geringerer Auflösung (nämlich 1bit) gehs mit max. 8MS/s:
in r16, pina

Du betreibst den ADC mit über 600kHz. Das ist etwa das 40 fache der
Spezifikation....

von LameM (Gast)


Lesenswert?

@Bendikt
darf er ja, das geht halt zu lasten der genauigkeit, wie du auch schon
angedeutet hast :-)

@Bernhard

hast du dir überhaupt schon mal das Datenblatt angeschaut?
da stehen lustige Sachen drinne, die manchmal sogar ganz interessant
sind und deine Fragen auch beantworten.

LameM

von LameM (Gast)


Lesenswert?

....achso: und dafür musst du nichtmal dein Oszi einschalten ;-)

von Martin (Gast)


Lesenswert?

>Mit geringerer Auflösung (nämlich 1bit) gehs mit max. 8MS/s:
in r16, pina

Aber dann kann man wenig mit dem Signal machen.
Man hat nur 2 Takte platz:

loop:
     in r16,PINB  ;1 Takt
     mov r0,r16  ;1 ;Ergebnis in den einen Register, in den Speicher
                                         _                       geht
nicht weil es zu lange dauert (2 Takte)
     in r16,PINB
     mov r1,r16
     ...........
     ...........
     in r16,PINB
     mov rN,r16

Oder habe ich eine andere Möglichkeit etwas übersehen ?

von Andi (Gast)


Lesenswert?

ähem... Martin, Benedikt!
Mit "in r16,PINB" oder "in r16,PINA" wird das nix mit dem
INTEGRIERTEN ADC!
Es muß heißen "in R16,ADCH" bei 8 Bit ADC und ADLAR = 1.

@Martin: Statt IN und MOV ginge auch gleich "in r0,PINB", nur mal so
am Rande.

MfG
Andi

von Benedikt (Gast)


Lesenswert?

@Andi

in r16, portx funktioniert bei jedem AVR, auch ohne ADC, halt eben nur
mit 1bit Auflösung (besser bekannt als High und Low Pegel...)

von Andi (Gast)


Lesenswert?

Klar, legt man eine wechselnde Spannung an einen Port-Pin an ist dieser
ab 2/3 VCC high (1) und unter 1/3 VCC low.
Aber was bringt das bitte ausser man möchte nur eine Spannungsquelle
überwachen ob sie an oder aus ist?

MfG
Andi

von Rufus T. Firefly (Gast)


Lesenswert?

Ich nehme an, daß Benedikt darauf hinauswill, daß der ADC bei
vierzigfacher Überschreitung seiner zulässigen Samplerate kaum mehr
effektive Auflösung haben wird als ein einzelnes Bit ...

von Andi (Gast)


Lesenswert?

Das klingt logisch :-)

MfG
Andi

von Martin (Gast)


Lesenswert?

@Andi
>Statt IN und MOV ginge auch gleich "in r0,PINB", nur mal so
am Rande.
Stimmt man kann auch in Register r0-r15 die werte aus der Ports lesen,
das habe ich übersehen.

>Mit "in r16,PINB" oder "in r16,PINA" wird das nix mit dem
INTEGRIERTEN ADC!
Das ist mir schon klar, dem Benedikt höhstwahrscheinlich auch.
Es ging nur dar um dass wenn man 1bit Auflösung haben will, braucht man
nicht mehr den AD-Wandler zu bemühen. Ein Pin an einem Port mit eventuel
vorgeschaltetem Komparator reicht schon.

von Andi (Gast)


Lesenswert?

Oder 8 verschiedene Widerstände am kompletten Port.
Dann sind auch 8 Bit ohne ADC möglich.
Hatte ich damals für den Druckerport im Atari ST gebastelt zum samplen
und schneiden von Audio-Signalen.

MfG
Andi

von Martin (Gast)


Lesenswert?

>Oder 8 verschiedene Widerstände am kompletten Port.
Dann sind auch 8 Bit ohne ADC möglich.
Dann hast du kompleten AD-Wandler gebastelt. Der hat aber nur 3bit
Auflösung.

von Benedikt (Gast)


Lesenswert?

Meiner Erfahrung nach, ist das Messergebnis bis etwa 40kS/s ganz gut
brauchbar, danach steigt das Rauschen ziemlich schnell an.

Für 600kS würde ich einen ADS830E/820E von Reichelt verwenden. Damit
sind einige 10MS/s bei 8 bzw. 10bit möglich.

von Michael (Gast)


Lesenswert?

Hier wird ein bißchen viel durcheinandergewürfelt: mal 600kHz mal 600kS.
Soll jeder für sich klären.
Mir geht es um einen Blick ins Datenblatt, das Genauigkeitsangaben bei
200kHz und 1MHz angibt. Bei 2MHz kann man meiner Erfahrung nach noch 6
Bit nutzen.
Wenn es bei einigen Leuten zu stark rauscht: doppelseitige Platine,
sauberes Layout, Massefläche, Erfahrung, +++

von Benedikt (Gast)


Lesenswert?

Wenn ich es richtig verstanden habe, wird hier 16MHz CPU Takt und einm
Prescaler von 2 also mit 8MHz ADC Takt gearbeitet. Macht also rund
600kS/s.

Welche Auflösung ist da wohl noch möglich ? 4bit ?

von Andi (Gast)


Lesenswert?

@Martin:
>Dann hast du kompleten AD-Wandler gebastelt. Der hat aber nur 3bit
>Auflösung.
Hä? Wieso nur 3 Bit bei 8 Pins?

MfG
Andi

von Chris (Gast)


Lesenswert?

> Hä? Wieso nur 3 Bit bei 8 Pins?

Weil es nur 8 verschiedene Zustände gibt (1. Pin high, 1. und 2. Pin
high, etc.).

von Andi (Gast)


Lesenswert?

So ein schmarrn, da war damals natürlich etwas mehr auf der Schaltung
als ein paar Widerstände drauf.
Im Endeffekt war es ein 8 Bit ADC.
Ich weis den kompletten Schaltplan nicht mehr, ist schon lange her (war
vor der PC-Domäne) und war damals aus einem Programmierheft.
Ich hatte mir damals eine komplette Software zum Aufnehmen, Bearbeitung
und Anzeige der Audiowellen geschrieben und da hätte die Anzeige dann
sehr abgestuft ausgesehen.

MfG
Andi

von Martin (Gast)


Lesenswert?

Ich kann da zu noch folgendes sagen:
Man kann den internen AD-Wandler von ATMega8 locker über die 200kHz
übertakten.Man verliert nur die Auflösung.

Hier ein Beispiel, 8Mhz Taktfrequenz, Vorteiler 8x, Eingangsignal 1kHz
Sinus, Signal ohne erkennbare Verzerrungen:
http://www1.kielnet.net/home/marc.in/bilder/takt8Mhz_prescx8_sin1kHz.png

Hier 8Mhz Taktfrequenz, Vorteiler 2x, Eingangsignal 3.15kHz Sinus,
Signal verzerrt:
http://www1.kielnet.net/home/marc.in/bilder/takt8Mhz_prescx2_sin3.15kHz.png

von Benedikt (Gast)


Lesenswert?

@Martin
Was ist denn das für eine Software, mit der du die Kurven dargestellt
hast ?
Die gefällt mir... Kann man die irgendwo bekommen ?

Hier geht es um 8MHz ADC Takt, das Eingangssignal sollte also schon
stark verzerrt sein...

von Martin (Gast)


Lesenswert?

>Hier geht es um 8MHz....
Ich meinte 8MHz Mikrocontroller Takt
Es ist trotzdem ziemlich viel, aber es scheint tatsächlich so zusein.
Der Vorteiler wird so konfiguriert:
ldi temp3, 0b11010001 ;001 also durch 2
out  ADCSR, temp3

Diese Software ist von mir, es ist nicht einmal halbfertig, es kann
zwar schon Daten aus dem Mikrocontroller empfangen aber das meiste muss
noch programmiert werden. Und es ist kompllet für Linux, dürfte also für
dich kaum von Interesse sein.

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.