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