Hey Group,

Below is a bit of code for the 12F1822 that currently relies on a push button for input.
I would like to use one of the Capacitive inputs instead.

I have done some searching here and found some old threads but it is way over my head.
It seams you have to use timers and oscillators and the setup is very confusing.

If anyone has had success setting up the Capacitive Sensing (CPS) module and might share a bit of code that I could drop in, in place of the pushbutton (Btn) code in my program I would greatly appreciate it.

This code will PWM (pulse width modulate) an FET on PortA.2 to adjust the brightness of a 12V LED module connected to a battery. For example it would make a great camping or emergency light and allow one to adjust the brightness from very dim to full on in 5 steps. I would like to simplify the circutry and eliminate the push button.

Thanks in advance


Code:
'****************************************************************
'*  Name    : 12F1822 HPWM button                               *
'*  Author  : [dwight]                                          *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 8/04/2010                                         *
'*  Version : 1.0                                               *
'*  Notes   : this program steps through 5 pwm levels to run    *
'*          : a cheap Horbor Freight 17 LED worklight.          *
'*          :                                                   *
'****************************************************************
'
        '       Pic Configuration
        '       =================
#CONFIG
   __CONFIG _CONFIG1, _FCMEN_OFF & _IESO_OFF & _BOREN_OFF & _FOSC_INTOSC & _WDTE_OFF & _MCLRE_OFF & _PWRTE_OFF
   __CONFIG _CONFIG2, _LVP_OFF
#ENDCONFIG

INCLUDE "ALLDIGITAL.pbp"
DEFINE  SHOWDIGITAL 1  'this directive shows the registers that were changed for "alldigital" in the results window

 
        DEFINE OSC 4
        OSCCON = %01101010
        TRISA = %001000                    ' PortA.3 is button input
        PORTA = 0                          ' all outputs zero
        CM1CON0.7=0                        ' Disable comparator                   
        CCP1CON = %00001100                ' CCP in PWM mode
        '   
        '       Software variables
        '       ==================
        Duty    VAR WORD
        stepp   var byte
        ' ----------------[ I/O Definitions ]-----------------------------------
        FET VAR PORTA.2                    ' output to control the FET switch
        Btn var PORTA.3                    ' push button input
        '
        '       Software/Hardware initialisation
        '       ================================
        PAUSE 50                           ' OSC settle delay
        Duty = 0
        stepp = 6
        hpwm 1,255,250                     ' Start with Light full ON

        '------------------------------< Main program >-------------------------
        
Start:  do While Btn = 1 : loop            ' loop here while Btn not pressed
        
        stepp = stepp +1                   ' button pressed so increment stepp
        if stepp>6 then stepp=0            ' check for rollover
        if stepp=6 then blink              ' blink to show that you are at the highest level
        lookup stepp, [0,1,16,64,128,255,255],duty  'choose level, 5 levels plus OFF
        hpwm 1,duty,250                    ' else set new level
        do while btn = 0 : loop            ' wait for Btn to be released
        pause 100
        goto start                    
        
blink:  hpwm 1,0,1000    'off              ' arrive here when brightness is at its 
        pause 100                          ' highest. So blink to incicate to user.
        hpwm 1,255,1000  'on
        pause 100
        hpwm 1,0,1000    'off
        pause 100
        hpwm 1,255,1000  'on
        
        do while btn = 0 : loop            ' wait for Btn to be released
        pause 100
        goto start