PIC 16F18877 at 32MHz with FOSC/128 (as per table 23-1 on p. 331) and right-justified results.

I'd like to use E0:

Name:  ADCIN channel.png
Views: 122
Size:  48.3 KB


HPWM backlight to LCD does work, I see it briefly on start-up using default value.

Code:
#CONFIG
    __config _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_OFF & _CSWEN_OFF & _FCMEN_ON
    __config _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
    __config _CONFIG3, _WDTCPS_WDTCPS_11 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
    __config _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_OFF
    __config _CONFIG5, _CP_OFF & _CPD_OFF
#ENDCONFIG

DEFINE OSC 32

DEFINE  ADC_BITS 10                 ' 10-bit Analog to digital
                                        
DEFINE  LCD_DREG      PORTD         ' Set LCD data port
DEFINE  LCD_DBIT      4             ' Set starting data bit
DEFINE  LCD_RSREG     PORTB         ' Set LCD register select port
DEFINE  LCD_RSBIT     4             ' Set LCD register select bit
DEFINE  LCD_EREG      PORTB         ' Set LCD enable port
DEFINE  LCD_EBIT      0             ' Set LCD enable bit
DEFINE  LCD_BITS      4             ' Set LCD bus size
DEFINE  LCD_LINES     4             ' Set number of lines on LCD
DEFINE  LCD_COMMANDUS 1000          ' Set command delay time in microseconds
DEFINE  LCD_DATAUS    50            ' Set data delay time in microseconds

define  CCP1_REG     0              ' Must clear unused CCP pins or else unpredictable results
DEFINE  CCP1_BIT     0
define  CCP2_REG     0
DEFINE  CCP2_BIT     0
define  CCP3_REG     PORTD          ' PWM Pulse out to LCD backlight
DEFINE  CCP3_BIT     1
define  CCP4_REG     0              ' Must clear unused CCP pins or else unpredictable results
DEFINE  CCP4_BIT     0
define  CCP5_REG     0
DEFINE  CCP5_BIT     0

RB5PPS = 0                          ' Disable CCP3

ADCON0 = %10000100                  ' ADC CONTROL REGISTER 0
'   bit 7   ADON: ADC Enable bit
'        --->   1 = ADC is enabled
'               0 = ADC is disabled
'   bit 6   ADCONT: ADC Continuous Operation Enable bit
'               1 = ADGO is retriggered upon completion of each conversion trigger until ADTIF is set (if ADSOI is
'                   set) or until ADGO is cleared (regardless of the value of ADSOI)
'               0 = ADGO is cleared upon completion of each conversion trigger
'   bit 5   Unimplemented: Read as ‘0’
'   bit 4   ADCS: ADC Clock Selection bit
'               1 = Clock supplied from FRC dedicated oscillator
'               0 = Clock supplied by FOSC, divided according to ADCLK register
'   bit 3   Unimplemented: Read as ‘0’
'   bit 2   ADFRM0: ADC results Format/alignment Selection
'        --->   1 = ADRES and ADPREV data are right-justified
'               0 = ADRES and ADPREV data are left-justified, zero-filled
'   bit 1   Unimplemented: Read as ‘0’
'   bit 0   ADGO: ADC Conversion Status bit
'               1 = ADC conversion cycle in progress. Setting this bit starts an ADC conversion cycle. The bit is
'                   cleared by hardware as determined by the ADCONT bit
'               0 = ADC conversion completed/not in progress

ADCLK = %00111111                   ' ADC CLOCK SELECTION REGISTER
'   bit 7-6 Unimplemented: Read as ‘0’
'   bit 5-0 ADCCS<5:0>: ADC Conversion Clock Select bits
'        --->   111111 = FOSC/128
'               111110 = FOSC/126
'               111101 = FOSC/124
'                  •
'               000000 = FOSC/2

ADPCH = %00100000                   ' ADC POSITIVE CHANNEL SELECTION REGISTER
'   bit 7-6 Unimplemented: Read as ‘0’
'   bit 5-0 ADPCH<5:0>: ADC Positive Input Channel Selection bits
'               111111 = Fixed Voltage Reference (FVR)
'               111110 = DAC1 output
'               111101 = Temperature Indicator
'               111100 = AVSS (Analog Ground)
'               111011 = Reserved. No channel connected.
'               •
'               •
'               •
'               100010 = ANE2       * 16F18877 only
'               100001 = ANE1       * 16F18877 only
'        --->   100000 = ANE0       * 16F18877 only
'               011111 = AND7       * 16F18877 only
'               011110 = AND6       * 16F18877 only
'               011101 = AND5       * 16F18877 only
'               011100 = AND4       * 16F18877 only
'               011011 = AND3       * 16F18877 only
'               011010 = AND2       * 16F18877 only
'               011001 = AND1       * 16F18877 only
'               011000 = AND0       * 16F18877 only
'               010111 = ANC7
'               010110 = ANC6
'               010101 = ANC5
'               010100 = ANC4
'               010011 = ANC3
'               010010 = ANC2
'               010001 = ANC1
'               010000 = ANC0
'               001111 = ANB7
'               001110 = ANB6
'               001101 = ANB5
'               001100 = ANB4
'               001011 = ANB3
'               001010 = ANB2
'               001001 = ANB1
'               001000 = ANB0
'               000111 = ANA7
'               000110 = ANA6
'               000101 = ANA5
'               000100 = ANA4
'               000011 = ANA3
'               000010 = ANA2
'               000001 = ANA1
'               000000 = ANA0

ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00000000
ANSELE = %00000001                      ' Pin E0 = ADC input

TRISA = %00000000
TRISB = %00000000
TRISC = %10011000
TRISD = %00001100
TRISE = %00001001

DefaultBacklight    CON 150

LCD1pin             VAR PORTD.2
LCD2pin             VAR PORTD.3
LCD3pin             VAR PORTC.4
LCD4pin             VAR PORTC.5

ADCinput            var WORD

HPWMbacklight       var BYTE

    Pause 200                           ' Let PIC and LCD stabilize
    ADCinput = 0
    HPWMbacklight = 0

    HPWM 3,DefaultBacklight,1953
    INPUT LCD1pin : INPUT LCD2pin : INPUT LCD3pin : INPUT LCD4pin
    LCDOUT $FE, 1 : Pauseus 1
    LCDOUT $FE, $80, "ADC test" : Pauseus 1

Mainloop:
    adcin 7, ADCinput
    HPWMbacklight = (1023 - ADCinput) / 4       ' Inverse, then reduce from 0-1023 to 0-255
    HPWM 3,HPWMbacklight,1953
  GOTO Mainloop
end

I tried several:

ADCIN 2, ADCinput ' started counting from 0 at E2
ADCIN 3, ADCinput ' started counting from 1 at E2
ADCIN 7, ADCinput ' started counting from 0 at the top
ADCIN 8, ADCinput ' started counting from 1 at the top