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.
Totale beginner
LTE-M/NB-IoT/WiFi/BLE/GNSS - https://www.quickspot.io
De 16F628A heeft geen ADC, maar das niet zo erg.
kijk hier maar eens:
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%)]
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
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