Fredrick
- 30th November 2014, 18:07
Hello
The PBP manual says this about ADCIN
Before ADCIN can be used, the appropriate TRIS register must be set to
make the desired pins inputs. The ADCON, ANCON and/or ANSEL
registers must also be set to assign the desired pins to analog inputs
I want a value between 0-255 depending on the voltage (0-5V) on RA2 and was trying to set the registers without success and then I just tested the code below with Darrel Taylors ALLDIGITAL included and no additional register configurations and it works?
But I wonder why it works without setting the registers, and should I set them even if the code works and why?
Maybe a dumb question but I want to know :confused:
The PIC is an 16F886.
DEFINE OSC 4
include "ALLDIGITAL.pbp" ; Darrel Taylors ALLDIGITAL
DEFINE SHOWDIGITAL 1
;----[16F886 Hardware Configuration]--------------------------------------------
ASM
cfg1 = _INTRC_OSC_NOCLKOUT ; INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
cfg1&= _WDT_OFF ; WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
cfg1&= _PWRTE_ON ; PWRT enabled
cfg1&= _MCLRE_OFF ; RE3/MCLR pin function is digital input, MCLR internally tied to VDD
cfg1&= _CP_OFF ; Program memory code protection is disabled
cfg1&= _CPD_OFF ; Data memory code protection is disabled
cfg1&= _BOR_ON ; BOR enabled
cfg1&= _IESO_OFF ; Internal/External Switchover mode is disabled
cfg1&= _FCMEN_ON ; Fail-Safe Clock Monitor is enabled
cfg1&= _LVP_OFF ; RB3 pin has digital I/O, HV on MCLR must be used for programming
cfg1&= _DEBUG_OFF ; In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
__CONFIG _CONFIG1, cfg1
cfg2 = _BOR21V ; Brown-out Reset set to 2.1V
cfg2&= _WRT_OFF ; Write protection off
__CONFIG _CONFIG2, cfg2
ENDASM
;===LCD Defines for EasyPIC5========================================== ==========
DEFINE LCD_DREG PORTB ; Set LCD Data port
DEFINE LCD_DBIT 0 ; Set starting Data bit (0 or 4) if 4-bit bus
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 5 ; Set LCD Enable bit
DEFINE LCD_BITS 4 ; Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2 ; Set number of lines on LCD
'DEFINE LCD_COMMANDUS 1500 ; Set command delay time in us
'DEFINE LCD_DATAUS 44 ; Set data delay time in us
;-------------------------------------------------------------------------------
Level var byte
Main:
ADCIN 2, Level
LCDOUT $FE,1
LCDOUT $FE,1, "Level:", #Level
pause 200
goto main
The PBP manual says this about ADCIN
Before ADCIN can be used, the appropriate TRIS register must be set to
make the desired pins inputs. The ADCON, ANCON and/or ANSEL
registers must also be set to assign the desired pins to analog inputs
I want a value between 0-255 depending on the voltage (0-5V) on RA2 and was trying to set the registers without success and then I just tested the code below with Darrel Taylors ALLDIGITAL included and no additional register configurations and it works?
But I wonder why it works without setting the registers, and should I set them even if the code works and why?
Maybe a dumb question but I want to know :confused:
The PIC is an 16F886.
DEFINE OSC 4
include "ALLDIGITAL.pbp" ; Darrel Taylors ALLDIGITAL
DEFINE SHOWDIGITAL 1
;----[16F886 Hardware Configuration]--------------------------------------------
ASM
cfg1 = _INTRC_OSC_NOCLKOUT ; INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
cfg1&= _WDT_OFF ; WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
cfg1&= _PWRTE_ON ; PWRT enabled
cfg1&= _MCLRE_OFF ; RE3/MCLR pin function is digital input, MCLR internally tied to VDD
cfg1&= _CP_OFF ; Program memory code protection is disabled
cfg1&= _CPD_OFF ; Data memory code protection is disabled
cfg1&= _BOR_ON ; BOR enabled
cfg1&= _IESO_OFF ; Internal/External Switchover mode is disabled
cfg1&= _FCMEN_ON ; Fail-Safe Clock Monitor is enabled
cfg1&= _LVP_OFF ; RB3 pin has digital I/O, HV on MCLR must be used for programming
cfg1&= _DEBUG_OFF ; In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
__CONFIG _CONFIG1, cfg1
cfg2 = _BOR21V ; Brown-out Reset set to 2.1V
cfg2&= _WRT_OFF ; Write protection off
__CONFIG _CONFIG2, cfg2
ENDASM
;===LCD Defines for EasyPIC5========================================== ==========
DEFINE LCD_DREG PORTB ; Set LCD Data port
DEFINE LCD_DBIT 0 ; Set starting Data bit (0 or 4) if 4-bit bus
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 5 ; Set LCD Enable bit
DEFINE LCD_BITS 4 ; Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2 ; Set number of lines on LCD
'DEFINE LCD_COMMANDUS 1500 ; Set command delay time in us
'DEFINE LCD_DATAUS 44 ; Set data delay time in us
;-------------------------------------------------------------------------------
Level var byte
Main:
ADCIN 2, Level
LCDOUT $FE,1
LCDOUT $FE,1, "Level:", #Level
pause 200
goto main