beste CO-ers
Dit programma moet gaan dienen als temperatuur regeling voor een verwarming .
Probleem is dat het instellen niet werkt
bij de eerste keer zie ik "Stel temperatuur in" vlug voorbij gaan en het programma blijft dan in een lus afwisselen tussen temperatuur / ingestelde temperatuur en temp /save
de ds1621 werkt echter wel
Hoe moet ik dit oplossen?
Device = 16F628A
Config INTRC_OSC_NOCLKOUT, CP_OFF, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, BODEN_off
DelayMS 200
ALL_DIGITAL=true
Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.2
Declare LCD_ENPIN PORTB.3
Declare LCD_LINES 2
Cls
Clear
Declare SCL_PIN PORTB.0 ;I2C
Declare SDA_PIN PORTB.1 ;I2C
TRISA = %00001100
SYMBOL relais = PORTA.1 ;relais
SYMBOL up = PORTA.2 ;omhoog
SYMBOL down = PORTA.3 ;omlaag
SYMBOL store = PORTA.4 ;opslaan
;constante
SYMBOL Hysteresis = 5
SYMBOL on = 0 ;aan
SYMBOL off = 1 ;uit
SYMBOL dender = 50 ;anti dender tijd
;variabele
DIM temperatuur AS BYTE ;temperatuur
dim T As Word
Dim dummy As Byte
temperatuur = EREAD 0 ;eeprom geheugen 0 lezen ( seconde )
DELAYMS 500 ;LCD stabilisering
CLS
BusOut %10010000,172,[1] ;oneshot mode in t-sensor.
BusOut %10010000,[238] ;start conversie
start: ;begin van programma
CLS ;schoon lcd
PRINT AT 1,1, "Stel temperatuur in"
WHILE 1=1
IF up = 0 THEN ;als omhoog 0 is dan
DELAYMS dender
INC temperatuur ;temperatuur met 1 verhogen
ENDIF ;einde als
IF down = 0 THEN ;als omlaag 0 is dan
DELAYMS dender
temperatuur = temperatuur - 1 ;seconde verlagen met 1
ENDIF ;einde als
IF temperatuur = 0 THEN ;als temperatuur = 0 dan
DELAYMS dender
ENDIF ;einde als
IF store = 0 THEN ;als opslaan = 0 dan
DELAYMS dender ;anti dender
EWRITE 0, [temperatuur] ;eeprom geheugen 0 schrijven
CLS
PRINT AT 1,9, "temp"
PRINT AT 2,9, "save "
DELAYMS 1500
cls
ENDIF ;einde als
PRINT AT 2,1, " ", @temperatuur, " C." ;laten zien hoeveel seconde is ingesteld
BusIn %10010001,172,[dummy] ;lees config register van T-sensor
If dummy.7=1 Then ;1=conversion ready, 0=busy
BusIn %10010001,170,[T] ;lees T-sensor
BusOut %10010000,[238] ;start nieuwe temperatuur conversie
End If
DelayMS 100
If T.HighByte<128 Then ;positieve temperatuur
Print At 1,1," "
Print DEC2 T.HighByte
If T.LowByte=0 Then
Print ".0"
Else
Print ".5"
End If
End If
IF T.HighByte < temperatuur THEN ;Als temperatuur lager is dan instelling dan...
relais = on ;relais aan
ELSEIF T.HighByte > (temperatuur + Hysteresis) THEN ;anders, als temp.hoger is dan instelling
relais = OFF ;relais uit
ENDIF
Print 223,"C"
wend
;GoTo start
Heb je pullups voor je schakelaars?
Dus
--/\10K/\---5V
|
pic -----schakelaar --- massa
Wat ik denk dat er gebeurt is: De pic heeft geen pullups, daarom zijn de ingangen zwevend. De pic registreert overal 0 dus loopt de hele lus door. Bij store komt er na de lcd een 500ms delay, daarom zie je dat nog wel op het scherm en springt het programma voor de rest verder.
ik vraag me sowieso af waarom je in wilt kunnen stellen?
Het lijkt mij iig geen handige feature, omdat ik toch altijd hetzelfde etsmiddel gebruik. Mijn etsbak meet gewoon de temperatuur, en houd deze schommelend tussen de 45 en 42 graden. Verder kan ik de heater overrulen en de luchtmachine uit/aanzetten.
Ik weet niet of je zelf je print gaat maken ervoor, maar houd je PIC/AVR weg bij de 230V. Het zou kunnen storen, uC reset etc.
Gr. Rik
@ bassie
Ik heb pull-ups gebruikt
@Rikkepic
Dus als ik de temperatuur rond de 50 graden houd ,dan is het OK?
De PIC was er eigenlijk voor om te meten hoe warm dat het etsmiddel is
Op de verpakking van je etsmiddel staan de specificaties.Meestal bij fijnetsmiddel(ammoniumpersulfaat)moet je de temperatuur tussen de 40-45 graden hebben. niet 50,dat kan teveel zijn.
250gr. moet opgelost worden met een liter water meen ik.
succes ermee
Gr. Rik