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
"static const double a[391]"ist mindestens 391*4=1564 Byte groß, passt das da noch auf den Stack? -- sonst willst du das wahrscheinlich in den Flash verschieben, Stichw.: "PROGMEM".
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
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.
Michael schrieb: > Die AD-Werte sind anedren Werten zugeordnet, die ich über eine Tabelle > suche. Wie kommst du auf diese Zuordnung? Kannst du da evtl. eine (lineare, quadratische, kubische) Annäherung in einer Formel abbilden und den Wert berechnen?
Ich halte double für leicht übertrieben, ich habe jedenfalls noch keinen 64Bit-ADC gesehen. Man sollte den Benutzer nicht völlig auf den Arm nehmen. Ausgaben sollten keine utopischen Genauigkeiten vorgaukeln. Peter
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... ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.