Hi ! Both of my dispensers stopped working. So I thought of making a module with PIC. However, I encounter problems when implementing the function @Sleep in the program. I need your advice .... Thansk !
It's the first test ... simulating IR detector by resistor and reading the ADC.Code:@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_ON DEFINE OSCCAL_1K 1 DEFINE OSC 4 CMCON = 7 TRISIO = %00000001 INTCON = 0 IOC = 0 GPIO = 0 ANSEL = %00110001 GIE var intcon.7 ' global interrupt enable 1=on ; 0=off GPIE var intcon.3 ' port change interrupt enable 1=0n ; 0=off GPIF var intcon.0 ' port change interrupt flag bit DataW var word last_b_level var byte b_level var byte b_cnt var byte b_act var byte GIE=0 GPIE=1 IOC.0=1 ' int-on-change for GPIO.0 enabled Clear GPIO.2 = 0 ADCON0 = %10000001 Pauseus 100 ' Wait for channel to setup ;============================================================================ Main: ADCON0.1 = 1 ' Start conversion @ SLEEP While ADCON0.1=1:Wend ' Wait for conversion DataW.HighByte=ADRESH ' Read variable from ADC and save DataW.LowByte=ADRESL if DataW < 600 then b_level=1 if b_level=last_b_level then b_cnt=b_cnt+1 pauseus 50 if b_cnt > 10 then b_act = 1 'TO AVOID FALSE READING endif last_b_level=b_level endif if b_act = 1 then gosub comanda goto main ;============================================================================ comanda: GPIO.2 = 1 PAUSE 4000 GPIO.2 = 0 b_act=0 last_b_level=0 b_cnt=0 GPIF=0 'Clear or change interrupt flag Return END
Bookmarks