Well, After posting here a couple of days ago fishing for someone who has had success setting up the Cap Sense module on the 12F1822, and getting no response, I did some searching and was finally able to get it going.
I found a couple of threads where HankMcSpank had tackeled it... (thanks hank)
Which led to another thread where some correcttions reggarding the use of TMR0 vs TMR1.
(I can't find either of those threads now or I'd post a link)
Any way here is a little project I have wanted to do and CapSense seems to work and makes it a bit simpler.
See attached schematic.
This is the LED I am using... http://dx.com/p/g4-1-2w-108-lumen-35...b-dc-12v-51269
Which makes use of Darrel's Instant Interrupts (thanks Darrel!). You will have to go get those include files from his web site dt.cambs.net
here is the code...
Code:'**************************************************************** '* Name : UNTITLED.BAS * '* Author : Dwight and others * '* Notice : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 11/29/2013 * '* Version : 1.0 * '* Notes : PIC12F1822 * '* : * '**************************************************************** #CONFIG __CONFIG _CONFIG1, _FCMEN_OFF & _FOSC_INTOSC & _WDTE_SWDTEN & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _BOREN_OFF & _PWRTE_OFF __CONFIG _CONFIG2, _LVP_OFF #ENDCONFIG DEFINE OSC 8 'tell picbasic what speed the oscillator is INCLUDE "DT_INTS-14.bas" ' INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts OSCCON = %01110010 '0 = 4x PLL is disabled ' 1110 = 8 MHz ' 0 = unused ' 1X = Internal oscillator ANSELA = %00000100 'make port A.2 is analog TRISA = %00000100 'port A.2 is input WPUA = %00000000 'turn off weak pull ups APFCON = %00000001 'Alternate Pin Function Control Reg (default %00000000) 'move CCP to PortA.5 (for PWM output) OPTION_REG = %10000111 '1 = All weak pull-ups are disabled (except MCLR, if it is enabled) ' 0 = Interrupt on falling edge of RB0/INT pin ' 0 = Timer0 clock is internal cycle clock (Fosc/4) ' 0 = Increment on low-to-high transition on RA4/T0CKI pin ' 0 = Prescaler is assigned to the Timer0 module ' 111 = 1:256 Timer0 prescaler rate T1CON = %11000001 'enable timer 1 (bit 0) & source the clock from the CPS module (bit 6 & 7 =11 CPSCON0 = %10001100 'set the CPS module highest frequency availabe (for vcc mode) + timer0 clock sourced from CPS module. (BIT 1) '1 = CPS module is enabled ' 0 = CPS module is in the low range. Internal oscillator voltage references are used. ' 00 = unused ' 11 = Oscillator is in High Range. Charge/Discharge Current is nominally 18 µA ' 0 = Capacitive Sensing Oscillator Status bit (only readable) ' 0 = Timer0 clock source is controlled by the core/Timer0 module and is FOSC/4 CPSCON1 = %00000010 '0010 = channel 2, (CPS2) CM1CON0 = 0 ' COMPARATOR OFF CM1CON1 = 0 ' COMPARATOR OFF CPS2_PRESENT var WORD CPS2_THRESHOLD var WORD CPS2_LAST var WORD ' Software variables ' ================== Duty VAR WORD stepp var byte ' ----------------[ I/O Definitions ]----------------------------------- FET VAR PORTA.5 ' PWM output to control the FET switch ' Software/Hardware initialisation ' ================================ PAUSE 50 ' OSC settle delay Duty = 0 stepp = 5 hpwm 1,255,250 ' Start with Light full ON pause 1000 ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR0_INT, _Timer0_Int, pbp, yes endm INT_CREATE ; Creates the interrupt processor ENDASM TMR0 = 0 'clear TIMER0 @ INT_ENABLE TMR0_INT 'enable timer0 interrupts '*********************************************************************** '------------------------------< Main program >------------------------- Main: pause 100 ' not a whole lot going on here goto main '***************************************************************************** Timer0_Int: @ INT_DISABLE TMR0_INT ' stop timer0 interrupts while we're in here pause 25 CPS2_PRESENT = TMR1 ' take a snapshot of Timer1's present count. CPS2_THRESHOLD = CPS2_LAST - ((CPS2_LAST/10)*2) ' this sets the 'trigger' up for a 20% diversion (finger press) CPS2_LAST = CPS2_PRESENT ' store away the present timer0count for the next time we come into the interrupt routine if cps2_present < cps2_threshold then stepp = stepp +1 if stepp>6 then stepp=0 ' check for rollover lookup stepp, [0,1,16,64,128,255,255],duty 'choose level, 5 levels plus OFF if stepp=6 then hpwm 1,0,1000 'off ' arrive here when brightness is MAX pause 100 ' So blink to let user know. hpwm 1,255,1000 'on pause 100 hpwm 1,0,1000 'off pause 100 hpwm 1,255,1000 'on ' blink to show that you are at the highest level endif hpwm 1,duty,250 ' else set new level ' button pressed so increment stepp pause 100 endif pause 50 TMR0 = 0 ' clear TIMER0 TMR1 = 0 ' clear TIMER1 @ INT_ENABLE TMR0_INT ' re-enable timer0 interrupt @ INT_RETURN end
enjoy! and tell me what you think (good or bad)


) is that this type of power supply would limit the PIC's ability to provide a "high" output with any amount of current. So if you want to use those pins for something else you would want the active state to be a LOW or ground, or change the value of the 10K resistor to a lower value.



Bookmarks