to answer your questions from the other thread
different chip different osc speed @4mHz the tmr0 int is every 65mS the tmr1 conter may overflow , the actual free run count needs to be established and the timebase adjusted to suitOkay. But if the timer0 source works for Heckler, why won't it work in mine?
no the count occurs during gate interval produced by tmr0I thought the 100mS pause was the period that the count from timer 1 is occurring?
i had used chs 2 and 3 2^1=3 3^1=2 an easy way to toggle between chsWhat is happening with CPSCON1 =CPSCON1 ^ 1?
yes its derived by experiment and measurement ,don't you just love magic numbersIs the THRESH a fixed value predetermined? Just wondering where the THRESH CON 4000 comes from. Thanks.
using 10 bit pwm thats how to set the 2 low order bitsIt does appear to be simpler when you know what you are doing! What is happening in the ccp1con=12|((PW&3)<<4) statement?
PIC16F722A has no latch registers so just use portbAnother one...in your example (PIC12F1822) with the LATA and LATA.0 references, is there a way that I can implement the same function, still using the PIC16F722A device, uisng the B port instead?
try something like this
Code:'**************************************************************** '* Name : CAPSENSE.BAS * '* Author : RICHARD * '* Notice : Copyright (c) 2011 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 10/20/2011 * '* Version : 1.0 * '* Notes : * '* : 16LF722A * ' * '**************************************************************** '#DEFINE DBUG 1 #CONFIG __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDTE_OFF & _BOR_OFF & _PLLEN_ON #ENDCONFIG define OSC 4 include "dt_ints-14.bas" include "REENTERPBP.bas" ' variables used by interrupt handler, comment out as per assembler wsave VAR BYTE $20 SYSTEM ' location for W if in bank0 'wsave VAR BYTE $70 SYSTEM ' alternate save location for W ' if using $70, comment wsave1-3 ' --- IF any of these three lines cause an error ?? ------------------------ ' Comment them out to fix the problem ---- ' -- Which variables are needed, depends on the Chip you are using -- wsave1 VAR BYTE $A0 SYSTEM ' location for W if in bank1 'wsave2 VAR BYTE $120 SYSTEM ' location for W if in bank2 'wsave3 VAR BYTE $1A0 SYSTEM ' location for W if in bank3 asm INT_LIST macro INT_HANDLER T1GATE_INT, _TB1, PBP,YES endm INT_CREATE ENDASM THRESH CON 8000 'needs to be established FLG VAR BYTE 'GOT A KEY KP VAR BYTE 'WHICH KEY pressed key_inx var byte ;key index PW VAR WORD ; PULSEWIDTH DEFINE DEBUG_REG PORTB DEFINE DEBUG_BIT 7 ;pgd DEFINE DEBUG_BAUD 9600 DEFINE DEBUG_MODE 0 OSCCON = %00010000 CPSCON0 = %10001100 'high range CPSCON1 = 0 'cps ch 0 ANSELB = %00000111 'SETS INPUTS B0-B2 AS ANALOG TRISB = %01111111 'SETS INPUTS B0-B5 AS INPUTS b7 output WPUB = %00000000 'DISABLES WEAK PULL-UP BITS TRISC = %11111011 'ccp1 output portc.2 OPTION_REG=$86 'edge int. prescale 1:128 PIE1.7=1 'timer1 gate interrupt T1GCON=$f9 ' single shot timer0 overflow as input T1CON=%11000101 'capsense as input no prescale no sync INTCON= $C0 'peripheral interrupts PW=512 t2con=7 LED VAR portc.2 ;up down off ;key0=portb.0=ch0, key1=portb.1=ch1, key2=portb.2=ch2 #IFDEF DBUG portb.7=1 LED=1 pause 2000 Debug "Start",13 ,10 LED=0 pause 500 #ENDIF ccp1con=12 CCPR1L=128 FLG=0 key_inx=0 MAIN: IF FLG=1 THEN IF KP = 0 THEN PW= (PW+64) MIN 1023 ELSEif KP = 1 THEN PW = PW-64 IF PW.15 THEN PW=0 else 'MUST BE THE OTHER ONE ccp1con=0 ;kill it led=0 ENDIF CCPR1L = PW>>2; ccp1con=12|((PW&3)<<4); #IFDEF DBUG debug "KEY ",#KP,13,10 debug #PW,13,10 #ENDIF PAUSE 300 FLG=0 'clr key pressed flag ENDIF GOTO MAIN TB1: #IFDEF DBUG debug #TMR1,13,10 #ENDIF IF TMR1 < THRESH THEN ' KEY DETECTED if !flg then KP=key_inx FLG=1 'set key pressed flag endif ENDIF key_inx=key_inx+1 ;check next key if key_inx > 2 then key_inx=0 CPSCON1 = key_inx TMR1=0 T1GCON.3= 1 ;single shot reset @ INT_RETURN




Bookmarks