ADC-schnellste Methode ? ATmega8 Assembler

Gast #176098
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
Gast #176101
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
Gast #176103
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 ?
Gast #176104
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
Gast #176106
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
Gast #176107
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 ...
Gast #176109
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.
Gast #176110
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
Gast #176112
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.
Gast #176113
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, +++
Gast #176114
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 ?
Gast #176117
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
Gast #176118
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
Gast #176119
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...
Gast #176120
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.

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