Capacitive sensing module on 16f1936


Closed Thread
Results 1 to 1 of 1
  1. #1
    Join Date
    May 2009
    Posts
    40

    Default Capacitive sensing module on 16f1936

    I am not sure weather I am doing something incorrectly or maybe there is a problem with the data sheet.

    Code:
    DEFINE OSC 4
    
    @  __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_ON & _BOREN_ON & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDTE_OFF & _FOSC_XT
    @  __CONFIG    _CONFIG2, _WRT_HALF & _BORV_25 & _PLLEN_OFF
    
    db0             VAR  PORTC.0          'o 0:3 digit data
    db1             VAR  PORTC.1          'o
    db2             VAR  PORTC.2          'o PIN13
    db3             VAR  PORTC.3          'o PIN14
    digitsel1       VAR  PORTC.4          'o PIN15
    digitsel2       VAR  PORTC.5          'o PIN16
    TX              VAR  PORTC.6          'o
    RX              VAR  PORTC.7          'i
    
    cs             VAR  PORTA.0           'o
    nu1            VAR  PORTA.1           'o
    nu2            VAR  PORTA.2           'o
                                                      'EXPECTED    ACTUAL
    BUT1           VAR  PORTB.0          'i   pin21    03A-O3B     03C-03D      
    UP             VAR  PORTB.1          'i   pin22    03C-03D     03E-03F
    BUT3           VAR  PORTB.2          'i   pin23    03E-03F     040-041
    ENTER          VAR  PORTB.3          'i   pin24    040-041     042-043
    DOWN           VAR  PORTB.4          'i   pin25    042-043     044-045
    BUT2           VAR  PORTB.5          'i   pin26    044-045     03A-03B
    nu3            VAR  PORTB.6          'o   pin27
    nu4            VAR  PORTB.7          'o   pin28
    
    INDEX            var  byte
    BASEVAL       VAR  byte[12]         'AFTER COMPILING BASEVAL=ADDRESS 03A
    
    
    GOTO  START:
    DEFINE INTHAND MYINT
    ASM      
    MYINT             CLRF    BSR                        ;SET PAGE=0
                      BTFSS   PIR1,TMR1GIF               ;TEST FOR TIMER1 GATE INTERRUPT 
                      BRA     TIMER0                     ;MUST BE TIMER0
                      BCF     T1CON,TMR1ON               ;STOP TIMER1
                      CLRF    FSR0H                      ;CLEAR FSR HIGH BYTE
                      MOVLW   _BASEVAL                   ;MOV BASEVAL TO FSR0 LOW
                      MOVWF   FSR0L
                      MOVLW   6                          ;MOVE 6 TO WREG
                      SUBWF   _INDEX,W                   ;SUBTRACT W FROM INDEX
                      BTFSC   STATUS,Z                   ;TEST FOR ZERO
                      CLRF    _INDEX                     ;IF ZERO THEN ZERO INDEX  
                      MOVF    _INDEX,w                   ;MOVE INDEX TO W 
                      MOVWF   CPSCON1                    ;MOV W TO CAPACITIVE SENSING CHANNEL
                      LSLF    WREG,W                     ;MULTIPY W BY 2
                      ADDWF   FSR0L,F                    ;ADD W  TO BASEVAL
                      MOVF    TMR1L,W                    ;MOVE TIMER1 LOW TO WREG
                      MOVWI   INDF0++                    ;SAVE WREG TO BASEVAL+INDEX*2 AND INC FSR0 
                      MOVF    TMR1H,w                    ;MOVE TIMER1 HIGH BYTE TO WREG
                      MOVWI   INDF0++                    ;SAVE WREG TO BASEVAL+INDEX*2+1
                      INCF    _INDEX,f                   ;INCREMENT INDEX
                      CLRF    TMR1L                      ;CLEAR TIMER1 LOW
                      CLRF    TMR1H                      ;CLEAR TIMER1 HIGH
                      BSF     T1CON,TMR1ON               ;TURN TIMER 1 ON
                      BCF     PIR1,TMR1GIF               ;CLEAR TIMER 1 GATE INTERRUPT FLAG
                      RETFIE                             ;RETURN FROM INTERRUPT
    TIMER0            BCF     INTCON,TMR0IF              ;CLEAR TIMER0 INTERRUPT FLAG 
                      RETFIE                             ;RETURN FROM INTERRUPT
    ENDASM
    
    
    START:
    ANSELA=$00
    TRISA=$00
    ANSELB=$3F
    TRISB=$3F
    PORTA=$01
    PORTB=$00
    PORTC=$30
    TRISC=$80
    CPSCON0=$8C                 'BITS 2,3=OSCILLATOR RANGE
    CPSCON1=$00                 'BITS 0-2 SELECT CHANNEL
    OPTION_REG=$C4
    T1CON=$C5
    T1GCON=$E1
    PIR1=$00
    PIE1=$80
    INDEX=0
    INTCON=$E0
    loop1:
    goto loop1
    When I compile the above code and run it with the ICD3 I appear to get valid timer1 values in sfr locations 03a-045. When I touch the touch pad connected to pin 26 (CPS5) the value in 03a,03b changes. All other locations appear to be offset by a vale of 2. See expected,actual addresses after the port definitions. Can anyone explain why this is like it is?

    Graham Guthrie
    Last edited by grahamg; - 25th April 2010 at 15:16. Reason: code tags

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts