Moin,
ich versuche gerade den Temperatursensor TSIC 206 mit einem ATMEGA644
auszuwerten und auf einem LCD auszugeben. Im Prinzip funktioniert das
auslesen auch ganz gut, mein Problem ist jetzt, dass meine Ausgabe
teilweise Werte von größer 5000 anzeigt. Wahrscheinlich liegt der Fehler
in der Umrechnung der Werte. Leider finde ich den Fehler im Moment
nicht, vielleicht gibt es ja jemanden, dem etwas auffällt. Hier mein
bisheriger Code:
Marco G. schrieb:> auslesen auch ganz gut, mein Problem ist jetzt, dass meine Ausgabe> teilweise Werte von größer 5000 anzeigt. Wahrscheinlich liegt der Fehler> in der Umrechnung der Werte.
Nun. Wenn du das vermutest, wer oder was hindert dich daran, dir mal die
Werte vor der Umrechnung auf dem LCD ausgeben zu lassen?
also wir haben die TSIC506 auf Arbeit. Und die geben 2700, bei 27°C aus.
Du musst mal ins Datenblatt schauen. Da gibt es auch 'hochgenaue' Typen.
Je nach Auflösung kann es durchaus sein, das du /1000 teilen musst. Wenn
du allerdings Pech hast und du hast ein OEM-TSIC erwischt hilft das
Datenblatt auch nicht.
Und auch wichtig: die arbeiten auch nur in einem bestimmten
Temperaturbereich genau.
Karl Heinz schrieb:> Marco G. schrieb:>>> auslesen auch ganz gut, mein Problem ist jetzt, dass meine Ausgabe>> teilweise Werte von größer 5000 anzeigt. Wahrscheinlich liegt der Fehler>> in der Umrechnung der Werte.>> Nun. Wenn du das vermutest, wer oder was hindert dich daran, dir mal die> Werte vor der Umrechnung auf dem LCD ausgeben zu lassen?
und daraus folgt dann dieser Wert.
Der letzte ist offenbar ab und an falsch. Aber was ist mit den davor?
Wie gross ist der Wert, den du vom Sensor bekommst und unter welchen
Umständen ergibt sich dann deine seltsame Ausgabe?
Auch nicht uninteressant:
Wie hast du dir vorgestellt, mit einem uint16_t negative Temperaturen
abzubilden? Wir haben jetzt Winter, da soll es nicht ungewöhnlich sein,
dass draussen auch mal Minusgrade vorkommen.
Ich habe mir die Werte mal "roh" als Dezimalzahl ausgeben lassen.
Interessanterweise sind dort manchmal Werte von -4000 bis -6500 zu
erkennen. Ich werde das noch einmal als HEX ausgeben lassen.
@mike
Den TSIC, den ich verwende soll eine Toleranz von 0,5°C haben. Ich will
ihn allerdings auch nur für Temperaturen von 10°C bis ca 45°C verwenden.
Ich hoffe er ist dafür geeignet.
@Karl Heinz
Karl Heinz schrieb:> Der letzte ist offenbar ab und an falsch
Leider nicht nur der, da ich mir die Variable Temperatur ausgeben lasse.
Diese weist auch schon diese großen Werte auf. Normal sind im Moment
Werte um 220 herum (Zimmertemperatur. Ich möchte damit nur Temperaturen
über 0°C messen, kälter sollte es in einem beheizten Haus lieber nicht
werden.
Marco G. schrieb:> Leider nicht nur der, da ich mir die Variable Temperatur ausgeben lasse.> Diese weist auch schon diese großen Werte auf.
An welcher Stelle. Temperatur wird 2 mal verwendet. Einmal um darin den
WErt vom Sensor zu speichern und das 2.te mal nach einer Umrechnung
So ist das nun mal im Debugging.
Wenn am Ende was falsches rauskommt, dann muss man die ganze Kette
zurückverfolgen, wie die jeweiligen Werte entstehen.
Und ja. Manchmal ist das gaaaanz bis zum Anfang. Jeder einzelne Schritt.
Marco G. schrieb:> Ich möchte damit nur Temperaturen> über 0°C messen, kälter sollte es in einem beheizten Haus lieber nicht> werden.
Ist trotzdem kein Argument mit negativen Temperaturen nicht zurecht zu
kommen.
Karl Heinz schrieb:> Ist trotzdem kein Argument mit negativen Temperaturen nicht zurecht zu> kommen.
stimmt, aber im ersten Schritt ist es für erst mal wichtig, die
Temperatur Konstant zu halten.
Die Umrechnung der Temperatur habe ich auskommentiert, ich sollte als
direkt die Werte bekommen, die von der Funktion zurückkommen.
Marco G. schrieb:> Karl Heinz schrieb:>> Ist trotzdem kein Argument mit negativen Temperaturen nicht zurecht zu>> kommen.>> stimmt, aber im ersten Schritt ist es für erst mal wichtig, die> Temperatur Konstant zu halten.>> Die Umrechnung der Temperatur habe ich auskommentiert, ich sollte als> direkt die Werte bekommen, die von der Funktion zurückkommen.
Gut.
Und? Zeigen sich auch dort schon Anomalien?
Dann musst du eben mal in die get FUnktion rein und nachsehen was da
schief läuft. Ev. mal mit dem Oszi kontrollieren ob da dasselbe Ergebnis
rauskommt, wie das was man auf der Leitung sieht.
Das #define F_CPU 1000000UL gehört ins Makefile und nicht in .c oder .h
Files. Ansonsten kann es Probleme mit _delay_ms/us geben.
Schön ist auch, dass zwar Parity ermittelt wird, aber das Erbegnis
scheinbar nicht interessiert.
Also mal ein
if (!checkParity(&temp_value1)) return 0;
einschieben und im Hauptprogramm reagieren.
eher so:
readSens(&temp_value1); // 1. Byte einlesen
readSens(&temp_value2); // 2. Byte einlesen
if (!checkParity(&temp_value1)) return 0;
if (!checkParity(&temp_value2)) return 0;
Du solltest versuchen, das Programm zu verstehen.
Btw:
if (!checkParity(&temp_value1))
ist das gleiche wie
if (checkParity(&temp_value1)==0)
oder
int ret;
ret=checkParity(&temp_value1);
if (ret==0) return 0;
Kleines Update:
Ich habe mal den TSIC206 gegen einen TSIC 306 getuscht. Nun bleibt die
Temperatur stabil, wahrscheinlich hatte der andere Sensor einen defekt.
Weiß jemand ein Datenblatt des TSIC 206 in dem das Package-marking
vermerkt ist? Ich wollte mal überprüfen, ob es nicht ein anderer Sensor
geworden ist, als auf der Verpackung steht.
Danke an alle, die mir bis hierher geholfen haben :)
Eine weitere Frage habe ich noch, jedoch zu einem anderen Bauteil.
Ich möchte als LCD eventuell ein EA DIP203G-4NLED verwenden. Wenn ich
mir das Datenblatt ansehe, genau die Maßzeichnungen verwirren mich ein
wenig die Maßangaben der Pins. 18 - 0,5 mm? Ich hätte auf 0,8mm getippt,
genauso soll die gesamte Stiftleiste nur 8mm lang sein. Da passt eher
die 18mm.
Hat jemand bereits Erfahrungen mit den Maßen des LCDs?
Ob die Pins 0.5 oder 0.8 mm Durchmesser haben, weiss ich nicht mehr. Was
aber unangenehm ist, das ist das Rastermass mit 2mm Abstand zwischen den
Pins und nicht wie sonst üblich 2.54mm.
Dadurch passt das Teil zb nicht in eine Lochrasterplatine. Für eine
geätzte Platine musste ich mir damals in Eagle ein eigenes Symbol
anlegen, weil man ja auch nicht mittels vorhandenen 9-poligen
Steckerleisten tricksen könnte.
Pete K. schrieb:>> EA DIP203G-4NLED>> Ganz schön teuer das Teil. Ein normales LCD kostet 2-3€:> Ebay-Artikel Nr. 271712320463
Da mußt Du dann aber drei Stück kaufen und passend zusammenflexen, damit
eine 4 x 20 Anzeige daraus wird.
@Karl Heinz
Da es für eine selbstgefertigte Platine ist, ist das Rastermaß egal.
Dann ist das Datenblatt aber von den Zeichnungen aber relativ schlecht,
muss ich sagen, die Angaben zu den Pins oder deren Rastermaß sind
anscheinend nicht richtig, oder ich interpretiere diese einfach falsch.
@Pete K.
Stimmt es ist recht teuer, jedoch ist es wie schon angesprochen ein 4 x
20 Display und die Bauform ist für meine Zwecke recht angenehm, ich
benötige keine weitere Verschraubung oder ähnliches.
Karl Heinz schrieb:> Für eine geätzte Platine musste ich mir damals in Eagle ein eigenes> Symbol anlegen
Ooh my god - vermutlich hätte die Anpassung eines bestehenden Packages
gereicht ...
Marco G. schrieb:> Wenn ich> mir das Datenblatt ansehe, genau die Maßzeichnungen verwirren mich ein> wenig die Maßangaben der Pins. 18 - 0,5 mm?
Selten eine so verbockte Maßzeichnung gesehen ...
Da hat wohl jemand - ohne dass er den blassestem Schimmer hatte, was er
tat - eine in Ehren ergraute Maßzeichnung für das Datenblatt neu
beschriftet.
Ingo schrieb:> Wie montiert man denn dieses LCD, gefällt mir ganz gut!
Einfach einlöten, keine Schrauben, keine Bolzen. Nur leider im 2mm
Raster und nicht 2,54mm
@Werner
Das habe ich mir auch gedacht, als ich die Zeichnung gesehen hatte und
versucht hatte das Rätsel der Pins zu lösen.
Du hast aber gesehen, dass das Display mit 3V3 betrieben wird und nicht
mit 5V?
Da die TSICs besser mit 5V betrieben werden rate ich Dir zu einem
anderen Display.
Natürlich habe ich gesehen, dass das LCD mit 3V3 betrieben wird und der
Sensor lieber mit 5V. Aus diesem Grund möchte ich zwischen uC und Sensor
zwei dieser Level-Shifter einsetzen: TXB0101
Werner M. schrieb:> Karl Heinz schrieb:>> Für eine geätzte Platine musste ich mir damals in Eagle ein eigenes>> Symbol anlegen>> Ooh my god - vermutlich hätte die Anpassung eines bestehenden Packages> gereicht ...
Weiss ich nicht mehr, wie ich das gemacht hab. Vermutlich hab ich mir 2
Pinheader genommen, im richtigen Abstand angeordnet, den Pinabstand
angepasst und ein Rechteck in der richtigen Größe drumrumgelegt.
Für ein Einzelstück fackel ich da nicht lange rum, so lange es seinen
Zweck erfüllt. Ehe ich da stundenlang nach etwas ähnlichem suche, das
angepasst werden kann, mach ich mir das lieber in ein paar Minuten
selber.
OK so?
Das war eines der ersten LCD, die ich je gekauft habe. Da wusste ich
noch nicht, dass es LCD auch viel billiger gibt. Aber die beiden
Pinreihen haben einen unbestreitbaren Vorteil. Sie fixieren das LCD
sauber auf der Platine. Mit der üblichen einzelnen Stiftleiste
funktioniert das weit nicht so gut.
Ich wollte das Display jetzt einmal in Betrieb nehmen, dabei ist mir
aufgefallen, dass der Hintergrund schwarz und die Schrift grün ist. Ist
dies normal, oder ist dies ein invertierter Modus? Gibt es auch schwarze
Schrift auf grünem Grund?