Hi, I added the loop at the beginning of the program:
Yours was too fast and I didn't hear the clicks. It is now OK, at start-up three times the relay turns ON / OFF, then the display appears.Code:for sample = 0 to 3 rele=1 pause 1000 rele=0 pause 1000 next sample
As always, however, dividing the variable "temperature" by 10 or 100 and multiplying the variable "Tmax" by 10 or 100 the comapration between the two variables fails. and the end result is that the relay goes ON despite the Tmax is set to 30 and the value read by the sensor is 24 ° C (or at least I think, I say 24 ° C because it is what comes out on the display giving the string
If I try to show the pure "Temperature" variable on the display like this:Code:lcdout $ FE, 2, "Temp", dec2 (temperatures / 100), ".", dec1 (temperatures // 100), $ DF, "C")
Code:lcdout $ FE, $ C0, "TEmpe", temperatures
an ASCII character appears on the display which changes as the temperature changes.
I'm currently running this code
Code:'**************************************************************** '* Name : 16F88_LM235.BAS * '* Author : * '* Notice : Copyright (c) 2020 * '* : All Rights Reserved * '* Date : 04/04/2020 * '* Version : 1.0 * '* '**************************************************************** 'PIC 16F88 ' Hardware Assignments ' -------------------- ' LCD circuitery '01 - Vss (GND) '02 - Vdd (+5V) '08 RS - PORTB.2 '09 E - PORTB.3 '10 DB4 - PORTB.4 '11 DB5 - PORTB.5 '12 DB6 - PORTB.6 '13 DB7 - PORTB.7 ' -------- bit a bit controllo 0=output 1=input INTCON = 0 ' NO INTERRUPT ADCON1 = 001110 ' ADCON0 = 0101 'Disable Converter Module ANSEL = 000001 'Disable Inputs Tranne AN0 OSCCON = 100000 'Internal RC set to 4MHZ CMCON = 7 TRISA = 001111 ' impostazioni INP/OUT TRISB = 000000 ' delle porte '---------------------------------------------------- DEFINE LCD_DREG PORTB 'Porta B DATA OUT DEFINE LCD_DBIT 4 '0 --> Bit 0-3 : 4 --> Bit 4-7 DEFINE LCD_RSREG PORTB 'LCD register select port - Porta B --> RS DEFINE LCD_RSBIT 2 'LCD register select bit - Pin RS B2 DEFINE LCD_EREG PORTB 'LCD enable port - Porta B --> EN DEFINE LCD_EBIT 3 'LCD enable bit - Pin EN B3 DEFINE LCD_BITS 4 'LCD bus size 4 or 8 DEFINE LCD_LINES 2 'Number lines on LCD DEFINE LCD_COMMANDUS 2000 'Command delay time in us DEFINE LCD_DATAUS 50 'Data delay time in us ' EEPROM Locations Codice ASCII es. a=97 b=98 c=99 ... '=========================================================================== '=========================================================================== '=========================================================================== '***** SETTAGGIO PORTE ' VAR PORTA.0 'LM235M Pin 17 IncButton VAR PORTA.1 'SW Pin 18 DecButton VAR PORTA.2 'SW Pin 1 SetButton VAR PORTA.3 'SW Pin 2 ' VAR PORTA.4 ' Pin 3 ' VAR PORTA.5 ' Pin 4 Rele VAR PORTA.6 ' Pin 15 ' VAR PORTA.7 ' Pin 16 '----------------------------------------------- ' Var PORTB.0 ' Pin 6 ' var PORTB.1 ' Pin 7 l_rs var PORTB.2 'LCD sig. RS Pin 8 l_en Var PORTB.3 'LCD sig. E Pin 9 l_d4 var PORTB.4 'LCD 4 Pin 10 l_d5 var PORTB.5 'LCD 5 Pin 11 l_d6 var PORTB.6 'LCD 6 Pin 12 l_d7 var PORTB.7 'LCD 7 Pin 13 '-------------------------------------------------------------- '---------Define ADCin Parameters DEFINE ADC_BITS 10 'set number of bits in result DEFINE ADC_CLOCK 3 'set clock source (3=rc) DEFINE ADC_SAMPLEUS 50 'Set sampling time in uS ' RAM Assignments and Variables '=========================================================================== CounterA var byte ' General purpose Variable CounterB var byte ' General purpose Variable CounterC var byte ' General purpose Variable Dummy var word DatoEE var byte Tcomp VAR word Grade var Byte TimeOut var word ' Variable for SetUp Menu Time-Out temp var word temperature var word samples var word sample VAR BYTE quanta con 1250 Tmax VAR byte Tmin VAR byte '=========================================================================== Tmin=16 Tmax=30 START: '*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~ '*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~ for sample = 0 to 3 rele=1 pause 1000 rele=0 pause 1000 next sample Lcdout $FE, 1 'Clear screen temp = 0 'Clear temp register temperature = 0 'Clear temperature register sample = 1 'Clear sample register samples = 0 'Clear samples register 'rele=0 main: samples=0 FOR sample = 1 TO 20 'Take 20 samples ADCIN 0, temp 'Read AN0 into temp variable samples = samples + temp PAUSE 40 ' Wait 1/4 seconds per reading NEXT sample temp = samples/20 'Average over 20 samples (Every 5 seconds) temperature= (temp*10) */ quanta Pause 200 ' Timeout for LCD to settle LCDOUT $FE, 1 ' cancella LCD LCDOUT $FE, 2 ' ritorna al primo carattere lcdout $FE, 2, "Temp ",dec2 (temperature/100),".", dec1 (temperature//100),$DF,"C" lcdout $FE, $C0," TEmpe", temperature Tmax=Tmax*100 If temperature > Tmax then rele=1 else rele=0 Endif goto main




Bookmarks