I have something strange with loockup command. I play with a RC transmitter...
If I turn on the pic with signal>185 then duty = 0 ; then I reduce the signal value under 185 , then duty=divf 
If I move quickly the transmitter-stick (signal from 150 ) to maximum (200) I obtain random different values for duty, like 250 ,191, 90, 223 and sometime 255.
If I move slow the transmitter-stick , then duty = divf all time, so work perfectly.
Can somebody explain me whats happen here , please ? I'm very confused..!!
	Code:
	#CONFIG
    __config _CONFIG1, _FOSC_INTOSC & _MCLRE_OFF & _CP_ON & _CLKOUTEN_OFF
    __config _CONFIG2, _PLLEN_OFF & _LVP_OFF
#ENDCONFIG
DEFINE OSC 4
OSCCON = %01101000
@ ERRORLEVEL -306   ; turn off crossing page boundary message
include "lcd.bas"
ADCON0 = %00000000   
ADCON1 = %00000000     
CM1CON0 = 0   ' COMPARATORS OFF
CM1CON1 = 0
CM2CON0 = 0   ' COMPARATORS OFF
CM2CON1 = 0    
CPSCON0 = 0   'CAPACTIVE SENSE MODULE OFF
RCSTA.7 = 0   'SERIAL PORT OFF
OPTION_REG.7 = 1 'DISABLE PULL UP
TRISA  = %00000000
TRISB  = %00000000
TRISC  = %00000000
ANSELA = %00000000
ANSELB = %00000000
PORTA  = %00000000
PORTB  = %00000000
PORTC  = %00000000
WPUB   = %00000000 
LATC   = 0
divf   var byte : divf = 0
signal var byte
value  var byte : value =0
duty   var byte : duty = 0
gosub lcdrst:pause 300
main:
pulsin portb.0 , 1 , signal
if signal > 185 then signal = 185
if signal > 160 then
    value = (signal - 160) ' value max 25  
    lookup value ,[0,30,40,50,65,80,90,100,117,136,153,168,180_
                 ,191,201,209,217,223,233,237,241,244,247,250,255],divf                            	                     
else                 
    divf  = 0
    value = 00
endif
if duty <> divf then duty = divf
     
lcdout $fe, $80 , "Value = " , dec3 value
lcdout $fe, $C0 , "DUTY =  " , dec3 DUTY
goto main
'-------------------------- LCD ----------------------------- 
lcdrst:
lcdout, $fe, 1
pause 10
return
 
				
			
Bookmarks