www.mikrocontroller.net

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


Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon Küppers (Gast)
Datum:

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: LameM (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: LameM (Gast)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt logisch :-)

MfG
Andi

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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, +++

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.).

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/takt8M...

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.