Guten Tag zusammen, ich hab ein Problem mit dem ADC des ATmega644: Ich möchte analoge Werte von 0V bis Vcc einlesen und auf ein LCD (0 bis 255) ausgeben. Wenn ich nun die Spannung langsam erhöhe sind immer Werte von 0 bis 25 zu lesen. Und dies zyklisch bis Vcc erreicht ist. Die Rechnerei zum Visualisieren ist Fehlerfrei. Ich komm aber nicht drauf, was da sein könnte. Evtl. Bits verschoben, Register nicht richtig gesetzt o. ä. HILFE!! Folgendermaßen ist der ADC initialisiert: uint16_t ReadChannel(void) { uint8_t i; ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); ADMUX |= (1<<REFS0) | (1<<ADLAR); //nachfolgend wird eine Wandlung durchgeführt. Dies wird empfohlen, um den Wandler "warmlaufen" zu lassen ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result = ADCH; // ADCW muss einmal gelesen werden, // sonst wird Ergebnis der nächsten Wandlung // nicht übernommen. // Eigentliche Messung - Mittelwert aus 10 aufeinanderfolgenden Wandlungen result = 0; for( i=0; i<10; i++ ) { ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result += ADCH; // Wandlungsergebnisse aufaddieren } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren result /= 10; // Summe durch zehn teilen = arithm. Mittelwert return result; } Danke im Voraus. Gruß
Auch wenn ich jetzt nicht 'die' Ahnung von C habe, so würde ich mal nachschauen, was in "result" steht bevor es durch 10 geteilt wird. Ich vermute "result" ist nur 8 Bit (oder eben 1 Byte) lang und nicht, wie benötigt, mindestens 12 Bit (oder eben 2 Byte). Da 255*10=2550 ist, und dieser Wert nun beim besten willen nicht in einem einzigen Byte unterzubringen ist, wird das Ergebnis logischerweise fehlerhaft sein. Vermutlich steht z.B. nach 10*255 der Wert "F6" hexadezimal in "result", was 246 dezimal entsprechen würde. Nu weiß ich net wie in C die Division gemacht ist, aber entweder es kommt dann nach der Division durch 10 eine 24 oder (wie in Deinem Fall) eine 25 bei raus. Damit wäre das Phänomen erklärt.
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.