Forum: Mikrocontroller und Digitale Elektronik AVR Tutorial


von Holger S. (tuctuc)


Lesenswert?

https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC

Wieso wird durch 1024 Incremente geteilt?
Müsste ich nicht durch 1023 Incremente Teilen?
Ich habe doch 1023 Incremente und die Null?

Grüße

Holger

von Jörg (Gast)


Lesenswert?

Holger S. schrieb:
> Ich habe doch 1023 Incremente und die Null?

Genau. Also 1024 Werte.

von Christian D. (chris83)


Lesenswert?

Holger S. schrieb:
> Ich habe doch 1023 Incremente und die Null?

Und das entspricht 1024 Werte.

von Holger S. (tuctuc)


Lesenswert?

/*
  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

von Staubfänger (Gast)


Lesenswert?

@ 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.

von Mikrocon T. (-42-)


Lesenswert?

Holger S. schrieb:
> ist das also nun ein
> Fehler mit den 1023?

Ja, einer der sich hartnäckig hält und immer wieder gemacht wird.

MfG

von Holger S. (tuctuc)


Lesenswert?

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.

von Holger S. (tuctuc)


Lesenswert?

Mikrocon T. schrieb:
> Holger S. schrieb:
>> ist das also nun ein
>> Fehler mit den 1023?
>
> Ja, einer der sich hartnäckig hält und immer wieder gemacht wird.
>
> MfG

Danke

von Staubfänger (Gast)


Lesenswert?

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.

von M. K. (sylaina)


Lesenswert?

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.

von Holger S. (tuctuc)


Lesenswert?

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 :-)

von Mikrocon T. (-42-)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.