Messbereich Pico ADC

  • Hallo

    Der Pico kann laut Datenblatt eine Spannung von 0 bis 3,3V messen und diese diese von 0 bis 65365 ausgeben. Ist das korrekt? Wie ist es aber mit 3V? Beim Pico ist der Hinweis mit drin das man mit dem LN4040 die ADC Ref auf 3,0V begrenzen kann. Gilt dann auch der Bereich bis 65... oder ist der Bereich dann auf ca. 61... begrenzt? Wenn die gemessene Spannung 2,996V ist wie kann sie umrechnen um einen genauen Wert zu bekommen?

    Wieder Fragen über Fragen. Hat jemand eine Antwort dazu?

  • Ich würde da einfach ein Voltmeter zur Hand nehmen und es mal ausprobieren. Welches Datenblatt spricht denn von 65365? Das ist ein 12-Bit ADC, da geht der Wertebereich 0 bis 4095.

    “Unfortunately forty years of programming experience has taught me that there's an essentially infinite supply of mistakes to make … your mistakes just get smarter most of the time.” — Steve Holden

  • > Welches Datenblatt spricht denn von 65365?
    Er benutzt Micropython. Die haben sich anscheinend dafuer entschieden den Wert immer auf 16 Bit zu skalieren.

    Und nein, sie schieben nicht einfach den Wert nach links sondern "vermurksen" ihn:

    Code
        return raw << (16 - bits) | raw >> (2 * bits - 16);

    Bisher habe ich keinen Weg gefunden um den 12 Bit Wert direkt auszulesen.

  • Ja das stimmt. Intern wird 12 Bit genommen und damit von 0 bis 4095. In Python wird es auf 16 Bit skaliert. Bei einem Spannung von 3,3V erreiche ich damit 65365, Wenn ich aber nur max. 3,0V messe bei einer Uref von 3,0V welcher Wert wird dabei angezeigt? Wieder 65365 oder weniger. Durch Messung konnte ich genau sehen welche Spannung kommt die ich messe. Wie verhält sich die Anzeige dabei, wieder 65635 oder weniger, so was um die 60000?

    Welcher Wert ist besser zur Spannungsmessung, 12 Bit oder 16 Bit?

  • Tell was heisst ”vermurksen”? Sie bilden halt die 12 Bit linear auf 16 Bit ab. Das macht man üblicherweise so. Alternativ kann man das mit Gleitkommazahlen machen. Einfach nur shiften würde ja nicht den Maximalwert erreichen, also nicht 0 bis 4095 auf 0 bis 65535 abbilden, sondern nur auf 0 bis 65520.

    Mit Dezimalbrüchen sähe die Rechnung so aus: 16_bit = 12_bit * (216 - 1) / (212 - 1)

    “Unfortunately forty years of programming experience has taught me that there's an essentially infinite supply of mistakes to make … your mistakes just get smarter most of the time.” — Steve Holden

  • Moin!

    In der C-SDK ist auch ein Beispiel. Da könnte man den Ursprungswert nutzen. Aber sie berechnen auch.... Seht selbst.

    Code
    const float conversion_factor = 3.3f / (1 << 12);
    uint16_t result = adc_read();
    printf("Raw value: 0x%03x, voltage: %f V\n", result, result * conversion_factor);

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Naja das ist ja noch mal was anderes. Die wollen halt nicht eine komische Zahl zwischen 0 und 4095 sondern einen Spannungswert zwischen 0 und 3,3 Volt ausgeben.

    “Unfortunately forty years of programming experience has taught me that there's an essentially infinite supply of mistakes to make … your mistakes just get smarter most of the time.” — Steve Holden

  • Moin achim 9876,

    was ist nun mit diesem Thread? Fertig von deiner Seite oder erwartest du noch was?

    Wenn fertig, dann, bitte, als erledigt markieren. Das geht oben bei "Thema bearbeiten".

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!