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
/* 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
@ 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.
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
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.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.