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