AVR Tutorial

OP
/*
  ReadAnalogVoltage
  Reads an analog input on pin 0, converts it to voltage, and prints the 
result to the serial monitor.
  Graphical representation is available using serial plotter (Tools > 
Serial Plotter menu)
  Attach the center pin of a potentiometer to pin A0, and the outside 
pins to +5V and ground.

  This example code is in the public domain.
*/

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // Convert the analog reading (which goes from 0 - 1023) to a voltage 
(0 - 5V):
  float voltage = sensorValue * (5.0 / 1023.0);
  // print out the value you read:
  Serial.println(voltage);
}

https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage

Das ist ein Auszug aus den Arduino Tutorials, ist das also nun ein 
Fehler mit den 1023?

Danke und Grüße

Holger
Gast
@ Holger

Es hat hier (und an vielen anderen Stellen im Internet) dazu schon sehr 
ausführliche und ins Detail gehende Diskussionen gegeben. Bitte suche 
einmal danach.
OP
Staubfänger schrieb:
> @ Holger
>
> Es hat hier (und an vielen anderen Stellen im Internet) dazu schon sehr
> ausführliche und ins Detail gehende Diskussionen gegeben. Bitte suche
> einmal danach.

Das habe ich getan, so kam ich ja auch auf das arduino tutorial und die 
avr wikiseite.
Es gibt im Internet viele wiedersprüchliche Angaben, ich habe auch im 
328P Datenblatt nachgeschaut, und war nur nochmehr verwirrt.


War also die erste Version mit 1024 korrekt.
Gast
Holger S. schrieb:
> Staubfänger schrieb:
>> @ Holger
>>
>> Es hat hier (und an vielen anderen Stellen im Internet) dazu schon sehr
>> ausführliche und ins Detail gehende Diskussionen gegeben. Bitte suche
>> einmal danach.
>
> Das habe ich getan, so kam ich ja auch auf das arduino tutorial und die
> avr wikiseite.
> Es gibt im Internet viele wiedersprüchliche Angaben, ich habe auch im
> 328P Datenblatt nachgeschaut, und war nur nochmehr verwirrt.

Das letzte spricht für Dein Urteilsvermögen. Aber die Folgerung daraus 
oder ich nenne es mal "plausible Vermutung" hast Du nicht gezogen bzw. 
vermutet: Nämlich die, dass es darüber verschiedene Ansichten gibt, die 
jeweils plausibel sind.
Ich habe daher absichtlich nicht von "von der einen korrekten Aussage" 
geschrieben, die Du suchen solltest, sondern von "Diskussion".

Schaue Dir z.B. mal das linke Bild in dem Beitrag 
Beitrag "Re: 1023 oder 1024" an und entscheide 
Dich bitte nocheinmal ob:

>
> War also die erste Version mit 1024 korrekt.

eine unter allen Umständen wahre Aussage ist.

Ich räume ein, dass die Angabe im Datenblatt eine der möglichen wahren 
Aussagen ist, aber es gibt eben nicht nur eine Wahrheit bei der Sache. 
Lies Dir den Thread einfach mal durch.
Holger S. schrieb:
> War also die erste Version mit 1024 korrekt.

Ja, war sie. Einfach mal nachzählen: 0…1023 sind bei einer Schrittweite 
von 1 genau 1024 Werte und man dividiert durch die Anzahl der Werte und 
nicht durch deren höchste Wertigkeit.
Einfach mal an weniger Werte klar machen und sich vorstellen, dass man 
z. B. nur 10 Werte hat. Dann sollte es schnell klar werden, dass ein 
dividieren durch 9 schlicht falsch wäre und man durch 10 dividieren 
muss.
OP
Habe das ganze gelesen und nachvollzogen.

Danke, dieser Thread war extrem hilfreich.

Da ich weder 0 noch 1023 erreichen kann, werde ich wohl entweder

x/1024 * ADC
oder x/1024 * (ADC+ 0,5)

verwenden, letzteres dürfte aber wohl wieder rechenzeit kosten.


Allen vielen Dank :-)
Holger S. schrieb:
> letzteres dürfte aber wohl wieder rechenzeit kosten.

Ja sicher, der AVR hat keine FPU.

Ich konnte mich beim Skalieren der Messwerte bisher immer um die 
Division herum mogeln. Ich habe halt mit dem Kehrwert multipliziert und 
den Bruch um 2^8 oder 2^16 erweitert. Die Division erfolgte dann durch 
verwerfen des/der unteren Bytes. Es kommt aber immer auf den Einzelfall 
an, eine grundsätzliche Lösung, die für alle Fälle optimal ist, wird es 
nicht geben. Eine optimale Lösung ist immer ein Kompromiss zwischen 
Kriterien wie Auflösung, Genauigkeit, Scannrate, Rechenzeitverbrauch, 
Anzahl der Mess-Stellen, ...

Um Dir konkret raten zu können, müsste man wissen, was Du vor hast.

MfG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.