- LiTime Speicher und Akkus         
Ergebnis 1 bis 6 von 6

Thema: Abtast-Rate und Auflösung beim ATMega8-ADC

  1. #1
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8

    Abtast-Rate und Auflösung beim ATMega8-ADC

    Anzeige

    Powerstation Test
    Hallo,

    bei der Suche nach der maximalen Abtasterate des ATMega8-ADCs bin ich im Datenblatt auf folgendes gestossen:

    By default, the successive approximation circuitry requires an input clock frequency
    between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than 10
    bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to get a
    higher sample rate.
    (unter "Analog to Digital Converter"->"Prescaling and Conversion Timing")

    Das erscheint mir auch logisch, denn bei ca. 13 Zyklen minus 2,5 Zyklen Overhead bleiben pro gesampeltem Bit ein Zyklus. Allerdings finde ich den entscheidenden Hinweis nicht, wie man weniger als 10Bit einstellen und nutzen kann.

    Ich meine nicht(!) die linksbündige Ausrichtung des Ergebnisses und nur ADCH auswerten. Damit werden nur die genutzten Datenbits verringert und die Verzögerung beim (und nach dem) Auslesen des Low-Bytes gespart, gesampelt werden trotzdem 10 Bit in 13 Zyklen.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hi,
    das ist auch nicht möglich. Allerdings ist es auch besser wenn man bei höheren Samplingrates die unteren 2 Bits wegfallen lässt damit das ergebniss letztendlich genauer wird. Denn wenn du jetzt nur 8 Bit hättest währen ja die untersten von denen auch ungenau. So sind diese wenigstens verwertbar.
    Hoffe ich konnt dir weiterhelfen.
    mfg franz

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Hoffe ich konnt dir weiterhelfen.
    Vielleicht schon, danke für die Mühe.

    Ich bin bei den avrfreaks auf die Design-Notes #021 gestossen. Und das verwirrt mich jetzt total. Die Sampeln in ihrem Beispiel mit einem 8MHz-ATMega mit 500kHz gleichzeitig 5 (oder 4?) ADC-Kanäle mit ISR. Ich habe keine Ahnung, wie das funktionieren soll.

    Unter "Conversion Resolution/Speed" steht da:

    If a fast sampling rate is required, it could be necessary to use only 8-bit resolution or
    less
    , and if full 10-bit resolution is desired, “slower” sampling could be enforced (the
    example below also relates to this question).
    und beim Beispiel ("Example Using the ADC") heißt es dazu:

    An ADC clock at 500 kHz violates the limit in ADC clocking for full 10 bit resolution (ADC
    clock 200 kHz for 10-bit resolution). Considering the table regarding “ADC characteristics”
    section “Analog to Digital Converter” in the data sheet, the absolute accuracy would
    probably be 2 - 3 LSB. This means that the ADC can be considered to be a 9-bit ADC
    since the LSB is not reliable.
    Bedeutet das nun, dass bei Tastraten über 200kHz die Zeit nicht ausreicht, um 10 Bit sauber zu wandeln? Und dass man dann damit rechnen muss, dass die unteren LSBs Schrott sind, aber die MSBs trotzdem stimmen?

    Das würde mir nämlich dann schon reichen, mehr als 4 Bit will ich gar nicht auflösen. Wenn ich dafür den Takt hochschrauben kann, ist das ok.

    Gruß

    mic
    Angehängte Dateien Angehängte Dateien
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hi,
    ja so könnte man es grob sagen. Denn jede Schaltung braucht einfach eine gewisse Zeit zum einschwingen und wenn jetz die Abtastrate hochgeschraubt wird, dann wird logischerweiße auch die Genauigkeit darunter leiden. Wenn es dir nicht auf die Genauigkeit ankommt sondern auf die Geschwindigkeit kannst du natürlich wie du schon gesagt hast die Abtastrate erhöhen. Allerdings eine frage was willst du mit 4-Bit, das ist ja extrem ungenau.
    mfg franz

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Allerdings eine frage was willst du mit 4-Bit, das ist ja extrem ungenau.
    Wenn ich nur schwarz oder weis unterscheiden will, sind 4Bit mehr als genug.

    Inzwischen habe ich das mit dem ADC gut im Griff und kann mit einem 8MHz-ATMega ein Fernsehbild(bas) digitalisieren. Allerdings nicht mit der maximalen horizontalen Auflösung, dafür reichen die 8MHz nicht aus. Vertikal habe ich aber volle Auflösung (bei 384*288 Punkten).

    Um die maximale Abtastrate zu erreichen betreibt man den ADC im free-running-Modus mit dem kleinsten prescaler-Wert (clk/2). Dann muss man nur noch möglichst schnell die gewandelten Daten auslesen, weil der ADC pro Wandlung nur 2 Takte benötigt. Deshalb kommt es quasi auf jeden Takt an, der zum Lesen benötigt wird. Da der ADC nur einen neuen Wert bildet, wenn ein alter gelesen wurde, kann man sich die ganze Handshakerei sparen. Da 8 Bit schneller als 16Bit gelesen werden können, stellt man ein linksbündiges Ergebniss ein und liest nur ADCH aus. Hier das Setup meines ADCs:

    Code:
    // ADC interne Referenz 2,56V, Ergebniss linksbündig, Kanal ADC4 (E_INT1) 
       ADMUX = (1<<REFS1) | (1<<REFS0)  | (1<<ADLAR) | 4; 
    // setzte free running triggern 
       SFIOR = (0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); 
    // kein interupt, Wandler einschalten, prescaller /2 
       ADCSRA = (0<<ADIE) | (1<<ADEN) | (0<<ADPS2) | (0<<ADPS1)  | (1<<ADPS0); 
    // Autotriggern bedeutet jetzt free running aktivieren, altes Flag löschen 
       ADCSRA |= (1<<ADATE) | (1<<ADIF); 
    // Initialisierung starten 
       ADCSRA |= (1<<ADSC); 
    // und noch die wohl eher unnötige Initiallesung 
       while (!(ADCSRA & (1<<ADIF))); 
       ADCSRA |= (1<<ADIF);
    Nach diesem Code sampelt der ADC ununterbrochen die angelegte Spannung. Nun muss man die Daten so schnell wie möglich in den Speicher übertragen um sie später auszuwerten. In C geht das wohl mit Zeigern auf Felder am schnellsten:

    uint8_t pixel[256],*pixelzeiger=pixel[0];
    do *pixelzeiger=ADCH; while (*pixelzeiger++ > 20);

    So schaffe ich ca. 60 Werte/Zeile des Videobilds. Andere Varianten die ohne Zeiger direkt auf das Feld zugreifen liefern max. 50 Werte pro Zeile.

    Wegen der internen 2,56V-Referenz des ADCs bedeuten Werte < 30 ein Synchronsignal, also den Start einer neuen Zeile. Um eine Zeile einzulesen um die Werte anschliesend in einem Diagramm darzustellen, genügt dieser kurze Code:

    Code:
    cli(); 
    while (ADCH > 20); // warten bis aktuelle Zeile zu Ende
    while (ADCH < 30); // warten bis Synchronimpuls fertig 
    do *pixelzeiger=ADCH; while (*pixelzeiger++ > 20);
    sei(); 
    *pixelzeiger=0; // Endekennung der Daten
    Danach stehen die Daten in pixel[] mit einer 0 im letzten Element.

    Bei der schrittweisen Erhöhung der Abtast- und Auslesegeschwindigkeit habe ich übrigens keine nennenswerten Fehllesungen festgestellt. Bei der verwendeten linksbündigen Darstellung des Ergebnisses betrug die Abweichung bei der Messung einer 1,5V-Batterie nur 0,02V gegenüber einer langsamen Messung mit prescaler /64.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    36
    Beiträge
    373
    Hi,
    ja ist doch super wenn alles funktioniert. Herzlichen Glückwunsch.
    mfg franz

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test