mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Umrechnung beim ADC Max127


Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
volt=result*2441;
 versucht und gebe den wert mit
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

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vollständigen Code posten.
Woran erkennst Du den "Mist"?

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für das Einlesen:
//MAX127
void read_max(uint8_t channel)
{  
  cli();
  result=0;
  PORTB=0x01;
  for(i=0;i<12;i++)
  {
    i2c_start_wait(maxWrite);
    i2c_write(channel);
    i2c_stop();
    i2c_start_wait(maxRead);
    value=i2c_readAck();
    value<<=8;
    value|=(uint16_t)i2c_readNak();
    i2c_stop();
    value>>=4;
    result=result+value;
  }
  result=(uint16_t)result/12;
  volt=result*2441;  
  PORTB=0x00;
  sei();

}

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

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

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry für den Doppelpost aber ich habe vergessen zu sagen das der Wert 
ohne Umwandlung in Volt (also der Inhalt von result) korrekt ist.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry hatte ich vergessen result ist natürlich uint16_t genau wie value. 
Hab den cast versucht und das bringt keinen erfolg.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok hat sich erledigt hatte nen fehler mit ultoa gemacht und es an die 
flasche stelle gepackt trotzdem danke für die Hilfe und den Tipp mit dem 
cast.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.