Modulo macht - 1

OP #4852157
Hallo,
ich will mit Hilfe des Modulo-Operators eine Integer-Zahl in eine 
Dezimalzahl "wandeln" (Format xx.y) und über UART bzw LCD ausgeben. Mein 
Wert bevor ich ihn weiter verarbeite hat z.B. 316 nach dem Modulo ist 
der Wert 31.5 Woran liegt das?

Hier kommt noch der Code dazu, ist derzeit noch alles sehr experimentell 
gehalten.
1
        while (1) 
2
    {  
3
    adcValue = ADC_Read(ADC_CHANNEL);
4
    
5
    //////////////////////////////////////////////////////////////////////////
6
    //ADC-Wert ausgeben
7
    uart_puts("ADC-Wert: ");
8
    uart_puts(itoa (adcValue, s, 10));
9
    uart_putc('\0');    
10
    lcd_clear();
11
        
12
    lcd_setcursor(1,1);
13
    lcd_string("ADC-Wert: ");
14
    lcd_string(s);
15
    
16
    //////////////////////////////////////////////////////////////////////////
17
    //Druckwert ausgeben (noch nicht Dezimal)
18
    uart_puts(itoa (convert_ADC(adcValue), s, 10));
19
    uart_putc('\0');
20
    //Ergebnis => 316
21
    
22
    //////////////////////////////////////////////////////////////////////////
23
    //Dezimaler Druckwert
24
    uart_puts("Druck: ");
25
    uart_puts(itoa (convert_ADC(adcValue/10), s, 10));
26
    uart_puts(".");
27
    uart_puts(itoa (convert_ADC(adcValue%10), t, 10));
28
    uart_putc('\0');
29
    //Ergebnis => 31.5
30
    
31
    lcd_setcursor(2,1);
32
    lcd_string("Druck : ");
33
    lcd_string(s);
34
    lcd_string(".");
35
    lcd_string(t);
36
    lcd_string(" bar");
37
    //Ergebnis => 31.5
38
    
39
    uart_putc('\0');
40
    _delay_ms(1000);
41
  }

Ausgabe in hterm
ADC-Wert: 305
316
Druck: 31.5

Grüße
Gast
Zeig doch bitte außerdem mal den Code von convert_ADC(). Denn das 
scheint ja irgendwie aus 305 eine 316 zu machen. Schlimmstenfalls ist 
das ja auch noch als Makro definiert, mit überraschenden Effekten.
OP
Nop schrieb:
> Zeig doch bitte außerdem mal den Code von convert_ADC(). Denn das
> scheint ja irgendwie aus 305 eine 316 zu machen. Schlimmstenfalls ist
> das ja auch noch als Makro definiert, mit überraschenden Effekten.

Die Wandlung von 305 zu 316 passt! Das ist nicht das Problem. Das ist in 
dem Bereich Zufall, dass es so nahe beieinander liegt.
Aber nicht die Wandlung von 316 in 31.5 => müsste 31.6 heißen eigentlich
Gast
ich glaube das Problem liegt bei convert_ADC(adcValue), du machst das 
Modulo vorher, das ist doch aber Unsinn.

Warum auch ständig convert_ADC aufrufen, das macht man einmal nach der 
Wandlung.
OP
Peter II schrieb:
> ich glaube das Problem liegt bei convert_ADC(adcValue), du machst das
> Modulo vorher, das ist doch aber Unsinn.
>
> Warum auch ständig convert_ADC aufrufen, das macht man einmal nach der
> Wandlung.

Ah klar, dass könnte es sein. Ein Rundungsfehler quasi in meiner 
convert_ADC. Das habe ich nicht bedacht, aber könnte passen. Probiere 
ich aus.

Wie gesagt ist im Moment noch experimentell der ganze Code. Ich konnte 
schnell testen ob das richtige raus kommt in dem ich einfach Copy&Paste 
gemacht habe. Da es grundsätzlich geht, werde ich ständige Konvertierung 
natürlich jetzt raus machen. Dann wird man auch sehen ob meine Zahl 
wieder stimmt.

Danke allen schon mal
Dein Faktor von ADC auf Druck sollte ja ca. 1,036 sein.
Beim ersten Modulo übergibst du ja nicht 305 sondern 30 was dann 31.088 
sind und das ist 31. Beim zweitenmal übergibst du 5 und das ist nach der 
Multiplikation 5.18 also 5.

Mach es wie weiter oben beschrieben einmal wandeln und dann davon den 
Modulo.

Gruß JackFrost

Antwort schreiben

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