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

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.

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.