Een LM35 uitlezen met een PIC (Asm)

Heeft er iemand ervaring met een LM35 samen met een PIC ?

Ik probeer de juiste temperatuur te krijgen.
De LM35 geeft 10mv per graad.
Deze waarde converteer ik naar een digitale waarde, maar hoe kan ik deze waarde nu zo krijgen dat ik de juiste temperatuur krijg ?

Uiteraard een AD-omzetter met bv een 16F88.
Als je nu slim schaalt, heb je weinig rekenwerk.
Stel je wilt graag een oplossing van 0,1 C, dit komt overeen met 1mV. De AD in de 16F88 is een 10bit. Dat zijn dus 1024 stappen en kunnen een schaal van 102,4 C geven. met offset zou je hier -20 tot +80 C van kunnen maken, zoals je het wilt.
Je moet twee dingen doen, het eerste is zorgen dat 1bit overeenkomt met 1mV, dat doe je door een verschil in Ref_l en Ref_h van de AD omzetter te maken van 1024 x 1mV = 1,024V
Het tweede is zorgen dat je de juiste offset hebt, dit kun je vrij eenvoudig met een verschilversterker realiseren.
Het is raadzaam om waardes dicht bij de 0V en de 5V te vermijden omdat een beetje opamp hier niet goed mee om kan gaan.

Ja... en toen ?

Ik ben bezig met dit schema:
http://www.sxlist.com/images/boards/temp-et/index.htm

Hierbij wordt de LM35 direct op de PIC aangesloten, en wordt er met weerstanden de uitgangswaarde van de LM35 gewijzigd (als ik het goed zie).
Is dat iets, en hoe kan ik deze weerstanden berekenen.
Welke waarde moet R3 hebben ?

Ik gebruik een PIC16F876A.

Omdat ik nog niet met VRef+ en VRef- gewerkt heb, ben ik daar nu mee bezig.
Moeten deze referentie spanningen via een pen of kan ik die ook alleen intern gebruiken ?

Stel ik wil een bereik van 2...4 volt, dan stel ik VRef- in op 2 en VRef+ op 4 volt ?

[Bericht gewijzigd door MMSoft op zaterdag 6 mei 2006 11:03:47

Die R3 vormt met de daarachterliggende condensatoren een laagdoorlaat filter om wat ruis te verwijderen. Hij is niet echt kritisch, ik zou 1k proberen.

Ja... en toen ?

Ik krijg de waarde 11 terwijl het zo'n 22 graden is.

Zie ik het goed, dat de VRef+ en VRef- waarde (PIC) allen voor de Comparator(s) zijn ?

[Bericht gewijzigd door MMSoft op zaterdag 6 mei 2006 11:09:51

Op 6 mei 2006 11:02:02 schreef MMSoft:
Omdat ik nog niet met VRef+ en VRef- gewerkt heb, ben ik daar nu mee bezig.
Moeten deze referentie spanningen via een pen of kan ik die ook alleen intern gebruiken ?

Je moet ze extern aanbieden, anders kun je ze niet varieren. Ik zou op Ref_l 2V aanbieden en op Ref_h dan 3,024V. Als je nu zorgt dat de gnd van de LM35 op 2,3V komt te liggen en een weerstand van out (LM35) naar 0V legt (zie datasheet) kun je meten van -30 tot +72,4.
Je neemt dan de waarde van de AD, trekt er 300 af, deelt door 10 en voila.

Ja... en toen ?

Op 6 mei 2006 11:05:27 schreef MMSoft:
Ik krijg de waarde 11 terwijl het zo'n 22 graden is.

Zie ik het goed, dat de VRef+ en VRef- waarde (PIC) allen voor de Comparator(s) zijn ?

Nee dat zie je niet goed :)

Ja... en toen ?

De Referentie spaningen wil ik maken met spanningsdelers.
Dus 2 weerstanden in serie tussen de 5v en de gnd.
Zou dat nauwkeurig genoeg zijn ?

Voor de weerstand tussen de LM35 Out en 0 volt moet ik een 200 ohm 1% weerstand gebruiken ? (had de datasheet al gelezen, maar begrijp het nog niet echt).

Volgens mij moet ie 2V/50uA = 40K zijn. Maar ik neem aan dat het niet zo heel nauw steekt.
Een simpele weerstandsdeler kan om te beginnen, een stabiele referentiespanning is ook handig (dus niet een 7805 waarop ook je PIC en display draait) Zet wel even een condensatortje over de weerstanden.
Ik zou het gewoon inderdaad met weerstanden opbouwen, testen, sofware schrijven. Mocht je ontdekken dat er meer nodig is omdat bv de spanningen varieren dan kun je dit altijd nog anders doen voor je een definitieve schakeling maakt.

Ja... en toen ?

Hoe kan de uitgang van de LM35 op 2 volt komen (-30 graden) als de gnd van deze LM35 op 2,3 volt hangt ?

Bestaat er een progje/Site, die weerstanden kan berekenen t.b.v. een spannings deler ?

[Bericht gewijzigd door MMSoft op zaterdag 6 mei 2006 11:38:18

Op 6 mei 2006 11:36:38 schreef MMSoft:
Hoe kan de uitgang van de LM35 op 2 volt komen (-30 graden) als de gnd van deze LM35 op 2,3 volt hangt ?

Bestaat er een progje/Site, die weerstanden kan berekenen t.b.v. een spannings deler ?

Daar heb je dus dat extra weerstandje voor nodig.

Maak het jezelf niet te moeilijk met die weerstanden, je hebt 5 V.
Van je (PIC) 5 V naar gnd:
+5V
2k2
geeft 3.024V -> Ref_h PIC
22k parallel aan 680
geeft 2.3V -> GND LM35
330ohm
geeft 2V -> Ref_l PIC
2k2
GND

De waardes zijn niet exact, maar blijven ruim binnen 1%
Let erop dat de LM de weerstandsdeler iets belast.

Ik zie nog een maartje, de LM35 moet minimaal 4V hebben wat betekent dat deze in dit geval met 6V-20V moet worden gevoed.

Waar kan ik de rekening naar toe sturen ? :)

Ja... en toen ?

Zeg maar wat je wil, en waar het naar toe kan :)

Ik was intussen met de software kant bezig, en kom daar nog een probleem tegen.

Als de temperatuur -30 graden is:
AD waarde is dan 0.
moet er dan ook -300 af ?

De spanning voor de LM35 (6-20 volt) moet die erg stabiel zijn ?

[Bericht gewijzigd door MMSoft op zaterdag 6 mei 2006 12:17:05

Als je bij een AD-waarde van 0 geen 300 eraf haalt geeft ie ineens 0 graden aan he, dus ja, het is toch echt -30 dan :)

De voeding van de lm35 is denk ik niet heel kritisch gezien de ruime range, maar kan er niet zo snel iets van in de datasheet vinden.

Ja... en toen ?
JoWi

Special Member

Als je gebruikt maakt van een spanningsdeler om de referentie spanningen in te stellen hou er dan wel rekening mee dat je geen grote nauwkeurigheid meer haalt. Je voedingspanning is namelijk niet constant genoeg (en 1mV afwijking is is .1 graad afwijking). De meeste regulators wijken al .05 tot .1 V af en dan heb je nog het verlies over de rest van je schakeling. En betere oplossing is het gebruik van een referentiediode op de Vref ingang.

Ignorance is bliss

Jep Jowi, helemaal gelijk, had ik ook al even aangetipt.
MM, laat je ons ook weten hoe het afloopt ?

Ja... en toen ?

Ik ben nu aan het zoeken hoe ik het beste de waarde 300 van de AD waarde kan halen.
Ook zit ik nog een beetje met het negatieve getal.

Referentiediode, moet ik dan aan een Zenerdiode denken ?

[Bericht gewijzigd door MMSoft op zondag 7 mei 2006 08:09:58

Ik ben druk bezig om een 'Goede' waarde uit de AD converter te krijgen.
Om de een of andere reden gaat er iets mis bij het omzetten van 2 Bytes naar 4 digits.

Edit:
Gevonden, AdresH/AdresL zitten in verschillende Banken...

[Bericht gewijzigd door MMSoft op zondag 7 mei 2006 10:33:13

De AD Converter uitlezen met 2 bytes (High/Low) gaat nu prima.
Zolang ik de Vref+ en Vref- maar niet gebruik.

Als ik ADCON1 van B'10001110' wijzig in B'10001101'
Dan werkt het niet meer !

Als test, RA2 met gnd verbonden en RA3 aan de 5 volt gehangen.

Edit:
PIC16F876A
Alle 'A' pinnen zijn als ingang ingesteld.

[Bericht gewijzigd door MMSoft op zondag 7 mei 2006 13:57:59

De ref pinnen moet je ook nog "analoog" zetten ?
Dus behalve het aan zetten van de REF pinnen in ADCON1 moet je ook ANSEL goed zetten, pinnen 2 en 3 moeten daar ook ge-enabled zijn.

Ja... en toen ?

Daar was ik ook al mee bezig geweest !
De PIC16F876A heeft het register 'ANSEL' niet...

Hee, je hebt gelijk...
Ik zat hier even in een source voor een 16F88 te kijken, dacht dat de AD-modules het zelfde waren.
Hmmm, het zou moeten werken als je verder niets hebt veranderd. Niet toevallig RA2 en 3 verwisseld of misschien ook bank-probleem ?

Ja... en toen ?

Meerdere malen verwisseld, daar had ik ook al aangedacht.

Het werkt prima, totdat ik ADCON1 van B'10001110' wijzig in B'10001101'

Edit:
Een Nieuwe PIC geplaatst, en nu werkt het !

[Bericht gewijzigd door MMSoft op zondag 7 mei 2006 17:05:41

Ok, met je billen bloot dan, show me your source, en ik ga je echt wel een vette rekening sturen :), moet je niet in de zon zitten trouwens ?

Ja... en toen ?

Zit ik nog met 1 ding:

2 Getallen (16 bits (Hi/Lo) van elkaar aftrekken lukt.
Maar ik zit met het probleem 'Negative getallen'

Ik krijg dan een heel hoog getal !

Voorbeeld:
00000000 00101100 (44 Dec)
00000001 00101101 - (301 Dec)
-------------------
11111110 11111111 (65279 Dec)

Terwijl ik 00000001 00000001 ((-)257 Dec) nodig heb.

Edit:
-Nieuwe PIC was dus de oplossing (maar als je wilt, dan stuur ik de code alsnog).
-In de Zon, Nee vandaag is het hobby dag :)
-Ik heb nog een mooie PIC16F876A voor je...

[Bericht gewijzigd door MMSoft op zondag 7 mei 2006 17:41:55