Double und sprintf gehen nur zur halb?!

Gast #1935480
Lesenswert?

Hallo,

ich habe da folgendes Problem. Ich werte mit dem ADC eine Spannung aus. 
Die AD-Werte sind anedren Werten zugeordnet, die ich über eine Tabelle 
suche. Anschließend soll alles auf einem Display mit Kommastalle 
ausgegeben werden. Wenn ich das so wie unten mache, dann bleibt mein 
Display komplett leer. Editiere ich die Zeile "Spannung = a[result]" in 
"Spannung = 10.67", dann gibt mir das Display die gewünschten 10.67 
aus....

Daher gehe ich davon aus, dass  irgendwas mit der Zeile "static const 
double a[391] = { 5.56, 5.77, 6.87, 8.98, ...};" nicht stimmt.



Hier mal einige Auszüge:


#include <avr/io.h>
#include <stdlib.h>
#include "lcd-routines.h"
#include <util/delay.h>
#include <stdio.h>
#include <stdint.h>

double temperatur;
char Buffer[20];

Auszug aus der Displayausgabe

    static const double a[391] = { 5.56, 5.77, 6.87, 8.98, ...};
    Spannung= a[result];
    sprintf(Buffer,"%.2f", Spannung) ;
    lcd_string(Buffer);






Ich nutze die sprintf funktion, die ich wie hier im Wiki eingebunden 
habe. Über Sinn und Unsinn sei nun mal nicht gesprochen! :) Mir geht es 
nun erst ma drum zu verstehen warum es nicht funktioniert. Anschließend 
kann ich mir noch immer Gedanken machen, das Ganze anders zu lösen aber 
mich Interssiert erst einmal der Fehler! :)


Ich hoffe jemand kann mir bei meinem Problem helfen!

mfg Michael
Gast #1935560
Lesenswert?

danke für die schnelle Antwort! :) Ich hab mal testweise nur 4 Werte 
eingegeben und siehe da es geht!

Also muss ich das ganze in den Flash verschieben?!

Habe das Tutorial an der Stelle mal gelesen aber son bissl happert es da 
mit dem Verständnis!

Leider sind da immer nur Beispiele wie einzelne Werte geschrieben werden 
aber nicht wie ich so eine ganze Tabelle verschiebe bzw lese?!

Ich stehe noch am Anfang meines µC Wissens daher wäre ich für einen Tipp 
nochmals sehr dankbar!

mfg Michael
#1935562
Lesenswert?

Wenn du die ganze Tabelle auf einmal lesen willst, steht sie ja
wieder im RAM, wo nicht genug Platz ist.

Du musst sie im Flash anlegen (PROGMEM beim Deklarieren, siehe
Tutorial) und nur die aktuell benötigten Werte herausholen,
z.B. die benachbarten Stützstellen für eine lineare
Interpolation.
Moderator (Firma: Titel) Persönliche Seite #1935952
Lesenswert?

Peter Dannegger schrieb:
> Man sollte den Benutzer nicht völlig auf den Arm nehmen.
Manchmal lassen sich solche "Fehler" als verkaufsförderndes Argumtnet 
nehmen...

> Ausgaben sollten keine utopischen Genauigkeiten vorgaukeln.
Ich hatte da mal eine Waage mit 4 Wägezellen gebastelt und das Gewicht 
von Brettern (je ca. 40kg) bis auf 10g genau (2 Nachkommastellen) 
angezeigt. Das gab der 10-Bit-Wandler schon nicht her....
Und viel schlimmer: wegen eines Programmierfehlers wurde das Gewicht in 
337-Gramm-Schritten quantisiert. Der Kunde war schlichtweg beeindruckt, 
dass sich das Gewicht der beiden Bretter, die auf der Messe zur 
Verfügung standen, immer so schön reproduzierbar war... ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren