Hi there,
I'm trying to read a 13 bits MCP3301 A/D converter who's output value should go from 0 to 8191.
Unfortunately, even if I can read something, it looks to be only the "upper half" of the expected full value.
Could I have a hardware (wiring) issue or is there something in my code that would be wrong?
Code:
' ====== DESCRIPTION ===============================================================================
' MCP3301: SPI 13Bits ADC
' ====== FUSES =====================================================================================
' PIC 16F690 Fuses - Internal oscillator (activate OSCCON register)
'@ __config _FCMEN_OFF &_IESO_OFF &_CPD_OFF &_WDT_OFF &_INTRC_OSC_NOCLKOUT &_BOR_OFF &_CP_OFF &_PWRTE_OFF &_MCLRE_OFF
#CONFIG
__config _FCMEN_OFF &_IESO_OFF &_CPD_OFF &_WDT_OFF &_INTRC_OSC_NOCLKOUT &_BOR_OFF &_CP_OFF &_PWRTE_OFF &_MCLRE_OFF
#ENDCONFIG
@ ERRORLEVEL -306
@ ERRORLEVEL -202
' ====== REGISTERS =================================================================================
' 76543210
OPTION_REG = %10000000 'PORT A&B Pull-Ups disabled (see WPUA & WPUB)
OSCCON = %01100000 'Internal RC set to 4MHZ
ANSEL = %00010100 'Select analog inputs Channels 0 to 7 (AN2 + AN4 selected)
ANSELH = %00000000 'Select analog inputs Channels 8 to 11
ADCON0 = %10000000 'A/D Module (Bit5:2 select channels 0:11)
ADCON1 = %00000000 'A/D control register
CM1CON0 = %00000000 'Comparator1 Module is OFF
CM2CON0 = %00000000 'Comparator2 Module is OFF
INTCON = %00000000 'INTerrupts CONtrol (TMR0 OFF)
TRISA = %00000100 'Set Input/Output (0 to 5)
PORTA = %00000000 'Ports High/Low (0 to 5)
TRISB = %00000000 'Set Input/Output (4 to 7)
PORTB = %00000000 'Ports High/Low (4 to 7)
TRISC = %00000001 'Set Input/Output (0 to 7)
PORTC = %00000000 'Ports High/Low (0 to 7)
' ====== DEFINES ===================================================================================
DEFINE OSC 4
DEFINE NO_CLRWDT 1 'Don't waste cycles clearing WDT
DEFINE HSER_CLOERR 1 'Automatic clear overrun error
DEFINE SHIFT_PAUSEUS 100
' ====== VARIABLES =================================================================================
SD var PORTB.4 'SPI Data pin
CS var PORTB.5 'SPI Chip Select
SCK var PORTB.6 'SPI Clock pin
Serial_Out VAR PORTB.7
Mode Var WORD
MCP3301 Var WORD
' ====== INITIALIZE VARIABLES ======================================================================
CS = 1
Mode = 84 'serial com
MCP3301 = 0
' ====== PROGRAM ===================================================================================
MAIN:
CS = 0 'initiate 3301 comm
SHIFTIN SD,SCK,1,[MCP3301\13] 'shift 13 bits of data in, lowest bit first
CS = 1 'stop 3301 comm
Serout2 Serial_Out,Mode,["MCP3301: ", BIN13 MCP3301," - ", DEC4 MCP3301,13,10]
PAUSE 1000
GOTO MAIN
END
Bookmarks