Quote Originally Posted by mackrackit View Post
Hmmm,
The module is working.
You know how to use the ADC.

I guess we will have to see your code to spot the problem...
Hi, thanks for your time. Thought it is best if I give a little description to what I'm trying to achieve. I'm setting 3 buttons to navigate to some menus to display information for the accelerometer, ambient, Temp, Barometric pressure, battery level, RTC, GPS and GSM and Bluetooth connectivity on the 4x20 LCD. SdCard is used for data logging later on.
My codes mostly came from this forum(thanks to u all!), BTW currently I'm using the hyper terminal to navigate thru the menus...so here it is.
Code:
'****************************************************************
asm
    __CONFIG    _CONFIG1L, _PLLDIV_5_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
    __CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H & _FCMEN_OFF_1H & _IESO_OFF_1H
    __CONFIG    _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L  & _BORV_2_2L  & _VREGEN_ON_2L   
    __CONFIG    _CONFIG2H, _WDT_OFF_2H 
    __CONFIG    _CONFIG3H, _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_ON_3H 
    __CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _ICPRT_OFF_4L  & _XINST_OFF_4L & _DEBUG_OFF_4L 
endasm


           
DEFINE OSC 48       
DEFINE HSER_RCSTA 90h ' enable serial port, 
DEFINE HSER_TXSTA 20h  ' enable transmit,                  
DEFINE HSER_BAUD 9600
DEFINE HSER_CLOERR  1 ' automatic clear overrun error  

'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

INCLUDE "MODEDEFS.BAS"       ' Include Shiftin/out modes
INCLUDE "DT_INTS-18.bas"     ' Base Interrupt System
INCLUDE "ReEnterPBP-18.bas"  ' Include if using PBP interrupts
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    '   Variable definition
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
PortB = %00000000
TRISB = %00000000 
TRISC  = %10000000    ' PORTC.7 is the RX input, PORTC.6 is the TX output
       
RCIF       VAR     PIR1.5     ' Receive  interrupt flag (1=full , 0=empty)
TXIF       VAR     PIR1.4     ' Transmit interrupt flag (1=empty, 0=full)

led        var     PORTD.5
StatusLed        var     PORTD.6
StatusLed1        var     PORTD.7
holdoff    var     word
SerialData var     byte
SerialInput var    byte[50]
PortB = 0
c var byte  'counter1
cnt  var byte 'counter2
cnt1  var byte 'counter3
cnt1=0
i var byte
c = 0
OptionSel var byte[1]
OptionSel  = "0"
flag1 var byte 
flag1 = 0
'clear

        '((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))
ASM
    INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler   TMR1_INT,  _ToggleLED1,   PBP,  yes
        INT_Handler   RX_INT,    _Getbytes,    PBP,  no            
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM

@   INT_ENABLE  RX_INT     ; enable RX_INT interrupts
'*******Internal interrupt
T1CON = $31               ; Prescaler = 8, TMR1ON
@ INT_ENABLE  TMR1_INT     ; enable Timer 1 interrupts



'***LCD Definitions        
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50


' Alias PIC pins and registers for SD/MMC card
SD_WE		Var	PORTA.7	' SD card write protect  A4
SD_WE_TRIS	Var	TRISA.7	' SD card write protect direction
SDI		Var	PORTC.1	' SPI data in  PORTB.0
SDI_TRIS	Var	TRISC.1	' SPI data in direction TRISB.0
SCL		Var	PORTC.2	' SPI clock  PORTB.1
SCL_TRIS	Var	TRISC.2	' SPI clock direction  TRISB.1
SD_CS		Var	PORTC.3	' SD card chip select    PORTB.3
SD_CS_TRIS	Var	TRISC.3	' SD card chip select direction TRISB.3
SD_CD		Var	PORTB.6	' SD card detect  PORTB.4
SD_CD_TRIS	Var	TRISB.6	' SD card detect direction  TRISB.4
SDO		Var	PORTC.0	' SPI data out
SDO_TRIS	Var	TRISC.0	' SPI data out direction

    Include "SDFS.PBP"
    ;SDC_UseHardSPI = TRUE    ' Use hardware SSP port for SPI.
    SDC_UseHardSPI = FALSE    ' Use hardware SSP port for SPI.
    'ADCON1 = 15        ' All I/O pins digital
    '--Added Pic settings
    UCON.3 = 0        'USB module disabled
    UCFG.3 = 1        'USB transceiver disabled
    CCP1CON=0       '  Capture/Compare OFF
    CCP2CON=0       '
    'ADCON1 = 15        ' All I/O pins digital
    Pause 100 
;----------------------------------------------------------------------------
;--For ADC modules
define ADC_BITS  8
define ADC_CLOCK 3
define ADC_SAMPLEUS 50
ambval var byte
batval var byte
axval var byte
ayval var byte
azval var byte
TRISA  = %00111111
ADCON1 = %00001001 
;----------------------------------------------------------------------------
' FSInit initializes the card and reads all the preliminary information from it
    Gosub FSInit
    Hserout ["Init: ", Dec FAT_error, " ", Dec SDC_status, " ", Dec SDC_response, $d, $a]
    If (FAT_error != 0) Then Stop

' This section defines a specific short (8.3) filename
'  Note that spaces are use in empty elements and must be upper case for Windows
    FAT_FileName[0] = "R"
    FAT_FileName[1] = "E"
    FAT_FileName[2] = "C"
    FAT_FileName[3] = "O"
    FAT_FileName[4] = "R"
    FAT_FileName[5] = "D"
    FAT_FileName[6] = "S"
    FAT_FileName[7] = " "
    FAT_FileName[8] = "T"
    FAT_FileName[9] = "X"
    FAT_FileName[10] = "T"

' Set file time to 8:30:10 and date to 1/1/2008
    FAT_seconds = 5
    FAT_minutes = 30
    FAT_hours = 8
    FAT_day = 1
    FAT_month = 1
    FAT_year = 28

;-------------------------RTC--------------------------------------------------
'RTC pins on 4550
SDA	Var	PORTB.6
SCLA	Var	PORTB.7
'Try to change
;Led1 var PortB.2

' Allocate variables
RTCYear	Var	Byte
RTCMonth Var Byte
RTCDate	Var	Byte
RTCDay	Var	Byte
RTCHour	Var	Byte
RTCMin	Var	Byte
RTCSec	Var	Byte
RTCCtrl Var	Byte

;------------------------------------------------------------------------------
SEC_O VAR BYTE: SEC_T VAR BYTE: 
MIN_O VAR BYTE: MIN_T VAR BYTE
HR_O VAR BYTE:  HR_T VAR BYTE: 
MON_O VAR BYTE: MON_T VAR BYTE
DATE_O VAR BYTE: DATE_T VAR BYTE: 
DAY_O VAR BYTE: DAY_T VAR BYTE: 
YR_O VAR BYTE: YR_T VAR BYTE   


CMCON = %00000111                   ' Comparators = off


 '--------------------------Custom characters
   LCDOUT $FE,1:FLAGS=0:PAUSE 250:LCDOUT $FE,1:PAUSE 250
   LCDOUT  $FE,$40,$1F,$15,$11,$11,$15,$15,$15,$1F  ' Cust Char #0  
   LCDOUT  $FE,$48,$1F,$1F,$1F,$11,$15,$15,$11,$1F  ' Cust Char #1  
   LCDOUT  $FE,$50,$1F,$17,$17,$11,$15,$15,$11,$1F  ' Cust Char #2  
   LCDOUT  $FE,$58,$1F,$1F,$1F,$11,$15,$15,$11,$1F  ' Cust Char #3  
   LCDOUT  $FE,$60,$1F,$1B,$1B,$11,$1B,$1B,$19,$1F  ' Cust Char #4  
   LCDOUT  $FE,$68,$1F,$1F,$1F,$1F,$1F,$1F,$1F,$1F  ' Cust Char #5  
   LCDOUT  $FE,$70,$1F,$1F,$1F,$15,$15,$15,$1B,$1F  ' Cust Char #6  
   LCDOUT  $FE,$78,$1F,$13,$1B,$1B,$1B,$1B,$11,$1F  ' Cust Char #7  
   pause 300

' Initialize LCD
;LCDOUT $FE,1:FLAGS=0:PAUSE 250:LCDOUT $FE,1:PAUSE 250 

 'Set initial time                                                    ` 
	RTCYear = $12
	RTCMonth = $09
	RTCDate = $20
	RTCDay = $18
	RTCHour = $21
	RTCMin = $55
	RTCSec = 0
	RTCCtrl = 0
	

 goto mainloop

' Subroutine to write time to RTC
set:
I2CWrite SDA,SCLA,$D0,$00,[RTCSec,RTCMin,RTCHour,RTCDay,RTCDate,RTCMonth,RTCYear,RTCCtrl]
return	

' Subroutine to read time from RTC
gettime:
	I2CRead SDA,SCLA,$D0,$00,[RTCSec,RTCMin,RTCHour,RTCDay,RTCDate,RTCMonth,RTCYear,RTCCtrl]
	;--------------------------------------------------------------------------------------------
	; we prepare this for later use
	SEC_T = RTCSec & $70
    SEC_T = SEC_T>>4
    SEC_O = RTCSec & $0F

    MIN_T = RTCMin & $70
    MIN_T = MIN_T>>4
    MIN_O = RTCMin & $0F

    HR_T = RTCHour & $70
    HR_T = HR_T>>4
    HR_O = RTCHour & $0F

    MON_T = RTCMonth & $70
    MON_T = MON_T>>4
    MON_O = RTCMonth & $0F

    DATE_T = RTCDate & $70
    DATE_T = DATE_T>>4
    DATE_O = RTCDate & $0F
    
    DAY_T = RTCDay & $70
    DAY_T = DAY_T>>4
    DAY_O = RTCDay & $0F

    YR_T = RTCYear & $70
    YR_T = YR_T>>4
    YR_O = RTCYear & $0F
	pause 500
    ;-------------------------------------------------------------------------
     ' FSInit initializes the card and reads all the preliminary information from it
    ' Open a file for write
    FAT_mode = "a"        ' Write mode
    Gosub FSfopen        ' Open file pointed to by Byte array FAT_FileName
    hserout ["Open for write: ", Dec FAT_error, $d, $a]
    If (FAT_error != 0) Then Stop
    FAT_src[0] = ">"
    FAT_src[1] = "T"
    FAT_src[2] = "E"
    FAT_src[3] = "S"
    FAT_src[4] = "T"
    FAT_src[5] = "D"
    FAT_src[6] = "A"
    FAT_src[7] = "T"
    FAT_src[8] = "A"
    FAT_src[9] = 13
    FAT_src[10] = 10
   
    FAT_count = 11
    Gosub FSfwrite
    hserout [ "Write ", Dec FAT_error, $d, $a]
    If (FAT_error != 0) Then Stop   
' Close file
    Gosub FSfclose
    hserout [ "Close ", Dec FAT_error, $d, $a]
	;--------------------------------------------------------------------------
	Return



mainloop:
   
	'Gosub gettime		' Read the time from the RTC
      c = 0 ' counter
      Select case OptionSel
      case "0"
      gosub page0
      case "1"
      gosub page1
      case "2"
      gosub page2
      case "3"
      gosub page3
      case "4"
      gosub page4
      case "5"
      gosub page5
      case "6"
      gosub page6
      End select 
	  

	Goto mainloop


        '((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))
           'ISR for RX_int interrupt 
        '((((((((((((((((((((((((((((((((((((((()))))))))))))))))))))))))))))))))))))))

Getbytes:
       
       While RCIF = 1     ' clear the buffer
       c = c + 1
       HSERIN 100,error,[Serialdata] ' take it
       '--HSEROUT [Serialdata] ' take it out
       SerialInput[c] = Serialdata 
      
       LCDOUT     
       select case Serialdata          ' What to do with that data???                                
       case "0"
         Hserout ["Option 0",13]
         OptionSel = "0" 
         flag1 = 0
       case "1"
        Hserout ["Option 1",13]
        OptionSel = "1"
        flag1 = 0
       case "2"
        Hserout ["Option 2",13]
        OptionSel = "2"
        flag1 = 0
       case "3"
        Hserout ["Option 3",13]
        OptionSel = "3"
        flag1 = 0
       case "4"
        Hserout ["Option 4",13]
        OptionSel = "4"
        flag1 = 0
       case "5"
        Hserout ["Option 5",13]
        OptionSel = "5"
        flag1 = 0
       case "6"
        Hserout ["Option 5",13]
        OptionSel = "6"
        flag1 = 0
       End select         
       Wend

@ INT_RETURN


error:
      Toggle led
@ INT_RETURN
 end
 
 '---[TMR1 - interrupt handler]--------------------------------------------------
 ' We try to place the module reading process here
ToggleLED1:
cnt = cnt + 1
if cnt = 10 then
     TOGGLE StatusLed   ' slower process
cnt = 0
Endif  

cnt1 = cnt1 + 1
if cnt1 = 5 then
     TOGGLE StatusLed1  ' faster process
     ADCIN 0, ambval
     '-------------
     ADCIN 1, batval
     '-------------
     ADCIN 2, axval
     ADCIN 3, ayval
     ADCIN 5, azval
     hserout ["Light ", DEC ambval," Bat ", Dec batval, " X: ",Dec axval," Y: ",Dec ayval," Z: ",Dec azval, 13] ' just to see it on the hyperterminal
     
cnt1 = 0
Endif  

@ INT_RETURN

'---[TMR1 - interrupt handler]--------------------------------------------------



page0:
   if flag1 < 1 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   LCDOUT $fe,$80,0,1,2,3,4,5,6,7,5,5,5,5,5,5,5,5,5,"[1]"
   LCDOUT $fe, $C0, "School Demo" 
   LCDOUT $fe, $94, "Designer: Tacbanon" 
   LCDOUT $fe, $D4, "Command: "  
   PAUSE 100
   Return

page1:
   
   Gosub gettime		' Read the time from the RTC
   pause 100
   if flag1 < 1 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   LCDOUT $fe, $80, "RTC and BAT",5,5,5,5,5,5,"[2]" ' Display PULSVARs
   LCDOUT $fe, $C0, "Date:",HEX DATE_T, Hex DATE_O,"/",Hex MON_T,Hex MON_O,"/",Hex YR_T, Hex YR_O 
   LCDOUT $fe, $94, "Time:",hex2 RTCHour, ":", hex2 RTCMin, ":", hex2 RTCSec
   LCDOUT $fe, $D4, "Bat1:       "
   LCDOUT $fe, $D4, "Bat1: ", Dec batval 
   Pause 50
   Return

page2:
  if flag1 < 2 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   LCDOUT $fe, $80, "ACCELEROMETER",5,5,5,5,"[3]" 
   LCDOUT $fe, $C0, "x: ",Dec axval 
   LCDOUT $fe, $94, "y: ",Dec ayval 
   LCDOUT $fe, $D4, "z: ",Dec azval  
   PAUSE 50
   Return

page3:
   if flag1 < 2 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   LCDOUT $fe, $80, "MISC SENSORS",5,5,5,5,5,"[4]" 
   LCDOUT $fe, $C0, "Temp: " 
   LCDOUT $fe, $94, "Amb:        " 
   LCDOUT $fe, $94, "Amb:  ",Dec ambval 
   LCDOUT $fe, $D4, "Bmtr: "  
   PAUSE 50
   Return

page4:
   if flag1 < 2 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   LCDOUT $fe, $80, "POSITIONING",5,5,5,5,5,5,"[5]" 
   LCDOUT $fe, $C0, "Lat: " 
   LCDOUT $fe, $94, "Lng:  " 
   LCDOUT $fe, $D4, "Knot: " 
   PAUSE 50
   Return

page5:
   if flag1 < 2 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   'LCDout $Fe, 1
   LCDOUT $fe, $80, "GSM and BT",5,5,5,5,5,5,5,"[6]" 
   LCDOUT $fe, $C0, "Man: " 
   LCDOUT $fe, $94, "Sig:  " 
   LCDOUT $fe, $D4, "BT stat: "   
   PAUSE 50
   Return

page6:
   if flag1 < 2 then 
   gosub LcdClear
   flag1 = flag1+1
   endif
   LCDOUT $fe, $80, "SDCARD Info",5,5,5,5,5,5,"[7]" 
   LCDOUT $fe, $C0, "No. write: " 
   LCDOUT $fe, $94, "No. dump:  " 
   LCDOUT $fe, $D4, "Status: " 
   PAUSE 50
   Return

LcdClear: ' clear LCD
LCDOUT $fe, $80, "                    "
LCDOUT $fe, $C0, "                    " 
LCDOUT $fe, $94, "                    " 
LCDOUT $fe, $D4, "                    "
pause 400
return
/tacbanon