Umrechnung beim ADC Max127

Gast #1207932
Hi Leute,ich habe hier ein kleines Problem bei der Umrechnung des ADC 
Wertes eines Max 127 mit einem ATmega8.

Die einfachste Variante ist die Multiplikation des ADC 16Bit Wertes mit 
dem Faktor 2441 (Range 0 bis 10 Volt) was ja eine 16 x 16 Bit 
Multikation wäre ich habe es mit
1
volt=result*2441;
 versucht und gebe den wert mit
1
uart_puts( ultoa( result, s, 10 ) );

aus. Aber ich bekomme nur misst raus.

Ich denke es gibts bei multiplikation ein Problem oder was meint ihr?

Danke im Vorraus

Flo
Gast
Für das Einlesen:
1
//MAX127
2
void read_max(uint8_t channel)
3
{  
4
  cli();
5
  result=0;
6
  PORTB=0x01;
7
  for(i=0;i<12;i++)
8
  {
9
    i2c_start_wait(maxWrite);
10
    i2c_write(channel);
11
    i2c_stop();
12
    i2c_start_wait(maxRead);
13
    value=i2c_readAck();
14
    value<<=8;
15
    value|=(uint16_t)i2c_readNak();
16
    i2c_stop();
17
    value>>=4;
18
    result=result+value;
19
  }
20
  result=(uint16_t)result/12;
21
  volt=result*2441;  
22
  PORTB=0x00;
23
  sei();
24

25
}

Ausgabe
1
case 'A':uart_puts("Channel 0: ");
2
             read_max(Read0);
3
           uart_puts( itoa( volt, s, 10 ) );
4
           break;

Ich erkenne den Fehler daran das im Terminal statt 4999168 (Bei 5V am 
Eingang) ein 15620 oder gar ein negativer wert erscheint.
Hallo,

[Glaskugelmode]

Da in C erstmal gerechnet wird und zwar mit den Datentypen der 
Berechnung,
hier also sehr wahrscheinlich auch result als uint16_t und dann 
zugewiesen, kommt Müll raus.
Wenn es so ist, dann sollte ein cast

volt = (uint32_t) result * 2441;

helfen.

Hmm hat sich überschnitten, das Posting.
Liegt sicher daran...

PPS; der Code ist trotzdem unvollständig, welchen Typ haben volt, result 
usw??

Gruß aus Berlin
Michael
Gast
Verdammt wieder was vergessen. volt hat uint32_t oder hab ich eventuell 
nen denk fehler bei der umrechnung?Hab mal mit 2048 als ADC wert im 
Taschenrechner gerechnet und das passt das ergebniss und es passt auch 
in einen 32 Bit integer.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.