hallo
ik heb nu een paar dagen een paar lcd's voor me pic.
nu wil ik hier de temperatuur in graden celsius op uitlezen.
ik heb een NTC 10K om de temp uit te lezen.
ik gebruik een 16F628A.
ik heb al rondgeken op het forum en op picbasic maar ik kom er maar niet achter.

Spanningsdeler maken, spanning meten met de ADC en dan omrekenen nar temp.

De 16F628A heeft geen ADC, maar das niet zo erg.
kijk hier maar eens:

http://www.picbasic.nl/

dan is het gewoon de waarde die je krijgt omrekenen naar graden celcius. Dit is echter niet geschikt om naukeurige metingen te doen. Daarvoor neem je best de DS1820 of iets in die aard.

mvg,
totale beginner

ja ik heb wel gelzen hoe ik varibele weerstanden in kan lezen. maar nu weet ik niet hoe ik dit omreken naar graden celsius.

een grafiek opzoeken van weerstand tegen temp. dan uitrekenen bij verschillende waardes(volt) welk temp hoort. en dan een programma maken wat dat berekend.

is te doen, alleen niet noukeurig

Zo heb ik het ook ooit gedaan, voor een project. Je krijgt een ontzettend ingewikkelde e-machtsfunctie, maar het is wel te doen.

Echt nauwkeurig is het niet, want die weerstanden zijn niet echt nauwkeurig. De ADC-inlezer, die je op PicBasic vind maakt het nog onnauwkeuriger, omdat er relatief veel stroom door de weerstand loopt, die de weerstand opwarmt...

Ipv die ds1820 kan je mss eens kijken naar de Microchip MCP9700 serie. Ik heb de MCP9700A gebruikt, zeer makkelijk in gebruik en goedkoop.

Je gaat dus een spanningsdeler maken bestaande uit:
een referentiespanning Vref, jouw NTC, een weerstand R en de GND.

Als je nu de spanning Ur over R meet, dan weet je stroom I.
==> (I=Ur/R)
En je weet je spanning Untc over de NTC.
==> (Untc=Vref-Ur)

Dus je weet nu ook de weerstand Rntc van de NTC op dat moment.
==> Rntc=Untc/I

Wel nu moet je dmv van de specifieke karakteristiek-grafiek van de NTC, de temperatuur afleiden. Uiteraard moet je dit programmeren !

Let wel dat Vref en weerstand R, heel stabiel zijn.

*** Best wel bewerkelijk, misschien kun je op internet voorbeelden van zo'n project vinden. Of overweeg een ander project en gebruik een kant en klare temperatuurmeet-chip. (DS1820 ?)

Succes

Hier heb je degene die taddam bedoeld, die loopt redelijk lineaire. Hier de data sheet.

http://ww1.microchip.com/downloads/en/DeviceDoc/21942c.pdf

Hier heb je nog een code voor de DS1820.


Device 16F628A                ;Gebruik een 16F628A type
Config WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, HS_OSC ;INTRC_OSC_NOCLKOUT verwijderd
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

Declare XTAL 4          
Declare LCD_RSPIN PORTB.0      ;RS pin declareren

        ;76543210              
TRISA = %11111110              ;i/o portA
TRISB = %11110111              ;i/o portB

Print $FE,$40,$0E,$0A,$0E,$00,$00,$00,$00,$00

Symbol schakelaar = PORTA.1        
Symbol dq = PORTA.2   ; inlees poort ds1820
Dim Temp As Word              ' Holds the temperature value 
Dim C As Byte                 ' Holds the counts remaining value 
Dim CPerD As Byte             ' Holds the Counts per degree C value   
Dim backlight0 As Byte         ;Variabele instellen
Dim teller As Byte

DelayMS 500 ;lcd stabalyse

Clear

start:                 
backlight0 = ERead 0            ;Eeprom backlight waarde opvragen
HPWM 1, backlight0, 2000

While 1 = 1
  Print At 1,1, "Temperatuur :: "
  
  OWrite dq, 1, [$CC, $44]      ' Send Calculate Temperature command 
  Repeat 
  DelayMS 1000                  ' Wait until conversion is complete 
  ORead dq, 4, [C]              ' Keep reading low pulses until
  Until C <> 0                  ' the DS1820 is finished.
  OWrite dq, 1, [$CC, $BE]      ' Send Read ScratchPad command
  ORead dq, 2,[Temp.LowByte,Temp.HighByte, C, C, C, C, C, CPerD]
  ' Calculate the temperature in degrees Centigrade
  Temp = (((Temp >> 1) * 100) - 25) + (((CPerD - C) * 100) / CPerD)
  Print At 2,5, Dec Temp / 100, ".", DEC2 Temp, 0, "C "
  For teller = 0 To 40
    If schakelaar = 0 Then
      DelayMS 150
      GoTo honderd
    EndIf
    DelayMS 100
    Inc teller
  Next
  teller = 0    
Wend

honderd:        
Cls
Print At 1,1, "BL-Selecteren"
Print At 2,1, "   100%"
HPWM 1, 255, 2000
  
While 1 = 1
  If schakelaar = 0 Then
    DelayMS 150
    If schakelaar = 0 Then
      backlight0 = 255
      DelayMS 1900
      GoTo memory
    Else
      GoTo zesenzestig
    EndIf
  EndIf
Wend

zesenzestig:          
Cls
Print At 1,1, "BL-Selecteren"  
Print At 2,1, "   66%"
HPWM 1, 168, 2000
  
While 1 = 1         
  If schakelaar = 0 Then  
    DelayMS 150
    If schakelaar = 0 Then
      backlight0 = 168
      DelayMS 1900
      GoTo memory
    Else
      GoTo drieendertig
    EndIf
  EndIf
Wend

drieendertig:     
Cls
Print At 1,1, "BL-Selecteren"     
Print At 2,1, "   33%"
HPWM 1, 84, 2000
  
While 1 = 1
  If schakelaar = 0 Then   
    DelayMS 150 
    If schakelaar = 0 Then
      backlight0 = 84
      DelayMS 1900
      GoTo memory
    Else
      GoTo uit
    EndIf
  EndIf
Wend

uit:       
Cls
Print At 1,1, "BL-Selecteren"   
Print At 2,1, "   UIT"
HPWM 1, 0, 2000
 
While 1 = 1  
  If schakelaar = 0 Then        
    DelayMS 150     
    If schakelaar = 0 Then
      backlight0 = 0
      DelayMS 1900
      GoTo memory
    Else
      GoTo honderd
    EndIf
  EndIf
Wend

memory:
Cls
EWrite 0, [backlight0]           ;Eeprom geheugen schrijven
Print At 1,1, "BL-Selecteren"
Print At 1,1, "     Opgeslagen!"
DelayMS 2500
Cls
GoTo start

End

[Bericht gewijzigd door Lambiek op (91%)]

dan zou je ook nog de tc77 kunnen gebruiken, dan heb je geen adc nodig. net als de ds1820

het hoeft niet zo nauwkeurig en het is gewoon even voor 1 keertje. dus ik gebruik toch mijn NTC.
kan iemand mij een voorbeeldprogrammatje geven want ik heb echt geen idee.

Dat is 'm idd lambiek, wel vreemd, die datasheet zegt dat in TO-92 package de 9700A niet beschikbaar zou zijn, farnell heeft nochtans een MCP9700A-E/TO...

Bon, daar heb je dus wel een ADC voor nodig, maar de component heeft enkel een 100 nF bypass cap nodig geloof ik, vrij simpel.

Als het alleen is om te kijken of je zo iets kunt programeren kun je ook de ingelezen waarde op je LCD zetten, en misschien een kleine berekening ermee doen, zonder dat je het echt omrekent naar graden celsius.

De verhouding tussen weerstand en temperatuur van een NTC wordt gegeven door

R = A*e^(B/T)

R = weerstand in Ohm
A = een constante (in Ohm, dit is de waarde die ook op de weerstand staat)
B = een constante in graden Kelvin (als ik het goed heb 25 graden Celsius, waarop de weerstand geijkt is, dus dat is 298 graden Kelvin)
T = de absolute temperatuur (in Kelvin)

Hiermee kun je alles uitrekenen, maar dat is wel ingewikkeld, zeker in een PIC.

daarbij is de 'e' een ast getal. zoals je ook phi hebt.
'e' is ongeveer 2,718 en nog een hele sliert van 8e 2e en 1e

ik zie het al: het is allemaal erg lastig. ik ga gewoon de ds1820 kopen iemand idee waar goedkoop?

voti, dick best, en waarschijnlijk nog een berg aan websites en winkels

ja ik heb gevonden. dick best kost maar 2,80 dus lekker goedkoop ten opzichte van de grote C want daar is ie 8 euro o.i.d