- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: 10 Bit ADC aber 13 Zyklen. Wie geht das?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17

    10 Bit ADC aber 13 Zyklen. Wie geht das?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Probiere grade den ADC im ATMEGA32 zu verstehen.

    Der arbeitet ja mit Sukzessiver Approximation und gibt ein 10 Bit Wert raus. Aber wieso arbeitet er dann in 13 Zyklen und nicht in 10?

    Die Formel für den Wert des ADC lautet ja wie folgt:

    ADC=(Vin*1024)/Vref (Brüche lassen sich hier schlecht darstellen)

    Hab als Beispiel einen Wert Vin von 2,65V und Vref von 5V angenommen. Komme auf einen Wert von rund 543.
    Wenn ich das ganze jetzt über die Sukzessive Approximation versuche kommen ich, wenn ich das ganze in 10 Zyklen mache, auf den binären Wert 0100001111, was dezimal 271 macht.

    Ich habe davon ein Diagramm mit 13 Zyklen in den Anhang gepackt. Vielleicht kann mir jemand von Euch sagen was ich falsch mache?

    Wäre Euch echt dankbar.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken adc-diagramm.jpg  

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der 10 Bit Wandler durch Sukkzessive Approximation wird auch schon 10 Schritte machen, um je 1 Bit zu gewinnen. Für die Komplette Wandlung kommt dann unter anderem noch die Sample and Hold Zeit dazu, nach Datenblatt sind das 1,5 Zyken des AD Taktes. Dazu kommt dann vermutlich noch 1/2 Zyklus Pause. Wo der AD Wandler sonst noch extra Zeit braucht, weiss ich nicht genau, aber es könnte gut sein, dass für das 1 te Bit mehr Zeit verwand wird, und ggf. noch etwas Zeit am Ende gebraucht wird. Es wird bei der ersten wandlung noch ein zusätzlicher Abgleich gemacht. Der muß auch noch irgendwo einfließen Der Wandler ist halt noch etwas komplizierter als die einfache sukkzessive Approximation aus dem Lehrbuch.

    Die PIC µCs brauchen 11 Zyklen - das aber auf kosten einer kurzen S&H Zeit so daß der Eingang etwas niederohmiger sein muß.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Danke für die schnelle und ausführliche Antwort.

    Das die Zyklen nicht zwangsläufig mit den Schritten zusammenhängen habe ich jetzt verstanden, aber wieso komme ich bei meiner Beispielrechnung nicht auf das richtige Ergebnis?

    Hab das jetzt nochmal für 10 Bit gemacht und in den Anhang geschmissen.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken adc-diagramm_529.jpg  

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Hier nochmal zu Verdeutlichung.

    Soll-Ergebnis:
    dezimal 543
    binär 0b1000011111

    Ist-Ergebnis:
    dezimal 271
    binär 0b0100001111

    Also wenn ich das Ist-Ergebnis um ein Bit nach links verschiebe würde es passen. Aber ich wüsste natürlich noch gerne wieso? Wird der erste Schritt bei der Sukzessiven Approximation nicht mitgezählt?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Ich glaube, dass dein erster Schritt Aref=5V keinen Sinn macht. Man würde mit 2,5V, der Hälfte des Max. Wertes anfangen.
    Dann wäre der 10. Schritt 2,6514, was wieder eine 0 bekommen würde.
    Damit hättest du als Ergebnis
    10_0001_1110 = 542
    und als berechnetes Ergebnis
    2,65*1024/5 = 542,72

    Scheint mir ok zu sein.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Nach der Wandlung braucht der ADC einen Takt, um das Ergebnis in das ADC Register zu übertragen. Während der ADC sich schrittweise an das Ergebnis heran tastet, verändert sich der Inhalt des ADC Register dadurch praktischerweise nicht.

    Das ADC Register ist also NICHT das interne Arbeitsregister des Wandler. Und nun wissen wir, wozu der 13. Takt gut ist.

    Da gibt es noch etwas zu beachten: Wenn man den ADC freilaufend einstellt, aktualisiert er das ADC Register fortlaufend mit dem Ergebnis der Messungen und löst dabei jedesmal einen Interrupt aus. Soweit ist noch alles klar. Die Überraschung kommt jetzt:

    Wenn Du in der Interrupt Routine den Kanal (Multiplexer) umstellst, dann wirst Du den Wert für den gerade eingestellten Kanal nicht im nächsten Interrupt erhalten, sondern erst im übernächsten.

    Denn auch die Kanalumschaltung ist doppelt gepuffert. Während Du den Kanal umschaltest ist der ADC nämlich bereits mit der nächsten Wandlung beschäftigt. Die Umschaltung wird erst nach dieser nächsten Wandlung wirksam, so dass das passende Ergebnis erst nach der übernächsten Wandlung verfügbar ist.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    16.01.2010
    Beiträge
    17
    Ich muss sagen, dass das echt aufschlussreiche Antworten von Euch sind. Danke

    Ich finde der ADC hat auch sehr interessante Features.

    Hab mich noch nicht an den Freerun-Mode, mit mehreren Kanälen, heran getraut. Bin nämlich noch relativ neu im Mikrocontroller basteln. Werde ich aber demnächst mal in Angriff nehmen.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    Wenn Du noch mehr analoge Kanäle brauchst, schau DIr den MCP3204 oder MCP3208 an. Diese beiden Chips werden seriell (SPI) angesprochen und sind genau so einfach zu verwenden, wie der interne ADC.

Berechtigungen

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

Solar Speicher und Akkus Tests