Hallo ruNN0r
Bei 25 Grad Celsius hat der KTY81-220 einen min und einen max Wert.
1960 bis 2040 Mittig also 2000 Ohm
Wenn wir jetzt mal die worst case Werte berechnen für min und max:
ergeben sich folgende Spannungen bzw. ADU Werte:
bei min 5/(4700+1960)*1960 = 1,4714714714714714714714714714715 Volt ==> 301 ADU steps
bei max 5/(4700+2040)*2040 = 1,5133531157270029673590504451039 Volt ==> 310 ADU steps
Da können also rund 9 counts Differenz sein, das wäre innerhalb der Spezifikation des Datenblattes vom KTY
Wenn es genauer werden soll, müstest DU den KTY81-210 benutzen.
Zu deinem Programmcode:
Deine Funktion ADC_read soll einen "unsigned char" zurück liefern ??? das sind nur Werte von 0..255
Dein ADU hat aber Werte von 0..1023
Aber wie ich deiner Funktion entnehme liefert sie garnichts zurück. oder da fehlt ein Stück Code, kann ja sein.
Oder Du wertest denn temp2 Wert direkt aus, das kann ich deinem Code jetzt nicht entnehmen, aber ich hoffe er ist auch als 16 Bit Wert definiert.
warum schiebst DU den ADRESH 6 mal links ?? Du überschreibst Dir Bit 6 und 7 vom vorher gelesenem ADRESL Ergebnis.
Du hast im ADCON1 RIGHT JUSTIFIED ausgewählt also ADFM = 1
damit müste dein Auslesen meiner Meinung nach so aussehen:
Ich vermute mal, genau hier liegt das Problem......Code:temp2 = ADRESL; temp2 += (ADRESH << 8);
ADCON1 = 0b11001110; /* right justified */
Zum timing:
minimun TAD time is 1,6µsec
ADCS2 ADCS1 ADCS0 = 101 ergibt FOSC/16 wären dann bei 4Mhz / 16 = 4 mikro Sekunden.
Das sollte okay sein.
ich hoffe ich konnte Dir weiterhelfen
Siro







Zitieren

Lesezeichen