CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Measure touch sensor according to Microchip

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
ran2rg



Joined: 02 Aug 2011
Posts: 6

View user's profile Send private message

Measure touch sensor according to Microchip
PostPosted: Tue Aug 02, 2011 9:34 am     Reply with quote

Hi
I am trying to implement a touch sensor according to a Microchip document attached here.

I need to output 1 at a certain pin and then "direct" the ADC channel to that pin so the internal capacitor Chold will be charged.

I can't understand how can I do that.
It seems that I need to "direct" (sample) the adc to that port in order to charge its internal capacitor.
So adc is sample its port to get "1" ?
If I output 1 in a port and then set it to be adc and sample that port, will I get 1 ??

How can I do that ??
Can someone direct me on how to do that ?

The article :
http://ww1.microchip.com/downloads/en/AppNotes/01298A.pdf

I am using pic16f690.
Thanks a lot.
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Tue Aug 02, 2011 1:16 pm     Reply with quote

Microchip has sample code for AN1298 that you can download here:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en545264
Look at the cmtouch.c file. This could could be translated to CCS.
You could also cut it down so it only tests one pin.

It appears to use this board set, which uses the 16F727:
http://ww1.microchip.com/downloads/en/DeviceDoc/mTouch_Cap_Eval_Kit_Users_Guide_DS41385A.pdf
ran2rg



Joined: 02 Aug 2011
Posts: 6

View user's profile Send private message

thanks
PostPosted: Tue Aug 02, 2011 1:54 pm     Reply with quote

Thanks a lot.

How can I translate to CCS the cmtouch.c file??
I couldn't understand it so I have to convert it.

ALSO what are the rest of the files there such as main.c ?
Why is it so big ? It should be done in 10 rows of code as I understand.

How would I convert that and what should I convert from it ?

Thanks a lot.
temtronic



Joined: 01 Jul 2010
Posts: 9125
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Aug 02, 2011 2:24 pm     Reply with quote

You'll have to read, read and re-read the code that PCM programmer found for you. It is well commented.Also read the CCS help files/ onscreen info as well.
Most here do not have the time or desire to translate the code for you but will help after you try and show us your code.
The best way to actually learn is by doing it yourself.Yes, it may take you a few hours ,days or weeks..Heck I've got over 25 years using PICs and I'm still learning,every day !!
ran2rg



Joined: 02 Aug 2011
Posts: 6

View user's profile Send private message

another thing
PostPosted: Tue Aug 02, 2011 2:33 pm     Reply with quote

How can i charge the capacitor Chold with outputing 1 in a pin ?

Does this pin connected hardware to the ADC CAPACITOR ?

Or they connected in software ?

Anyone has a ccs c example?

It should be simple.
temtronic



Joined: 01 Jul 2010
Posts: 9125
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Aug 02, 2011 5:55 pm     Reply with quote

If it was simple you'ld have cut the driver code and posted it by now.
Really, you have to READ the manuals, datasheets, etc., cut code, try it, learn from doing !!
There are examples all over the net and you've been shown one of the better examples ( it does work...)
I rather doubt anyone here will just cut the driver for you, or convert the Microchip C code into CCS C code. Frankly, that kind of work is what I used to get paid to do (now it's just a mindgame).
That being said, if you supply 6 complete systems, and a detailed explanation of what you expect, I might take on the challenge.
ran2rg



Joined: 02 Aug 2011
Posts: 6

View user's profile Send private message

temptronic
PostPosted: Wed Aug 03, 2011 1:32 am     Reply with quote

Please relax. Don't take it too seriously, I have just asked question.
I also have years of experience in pic's and other engineering issues.
I was thinking that there is some kind of software that convert it.
I was tried a lot before I got here, so don't make wrong assumption about people.

The code I already wrote was : (sensor is in b4)
Code:

output_high(pin_b5); //b5 is vdd
setup_adc_ports(sAN11);
set_adc_channel(11);      //charge the adc capacitor to vdd
read_adc();

output_low(pin_b4); // initialize touch capacitor
setup_adc_ports(sAN10);
set_adc_channel(10); //connect internal capacitor to external so they equal
delay_ms(10);   //to let it charge???
adc_value1=read_adc();   //get the voltage is is the output capacitor voltage

while(1)
{
delay_ms(10);
adc_value2=read_adc(); //check if output capacitor was changed so internal votage is changed
if(  (adc_value1-adc_value2) >10)
{
output_high(pin_c2);
delay_ms(300);
output_low(pin_c2);
}
msantang



Joined: 04 Mar 2012
Posts: 1

View user's profile Send private message

PostPosted: Sun Mar 04, 2012 8:41 am     Reply with quote

You find the solution?

Im trying to do the same for capacitive touch sensing
Mike Walne



Joined: 19 Feb 2004
Posts: 1785
Location: Boston Spa UK

View user's profile Send private message

AN1298
PostPosted: Sun Mar 04, 2012 1:42 pm     Reply with quote

I'm with temtronic again on this one. Neither of us is going to write code for you.

YOU have to do the work, read the manuals etc.

In this particular case, you also have to think outside the box a touch.

I've not seen AN1298 before today, but this is my take on it.

When you do ADC in the normal way, you follow the set procedure. In CCS most of the work is done for you.

In this case it's a bit different.


Assuming a 5V VDD.

The ADC converter does not 'know' how you have set up the drivers to the outside world.

If A1 is a digital output set to 1, and you tell the ADC to select channel 1, Chold will charge to 5V.

Equally if A1 output is set to 0, Chold will charge to 0v.

I ran the program below on a PICDEM 2 PLUS. (It's complete and compilable.)

I used A1 because I'm lazy and did not want to remove the hardware connected to A0.

Code:

#include <16f877.h>


#device adc=8     //
#FUSES HS         // High speed ocillator
#FUSES NOWDT      // no WDT
#FUSES PUT        // power Up Timer
#FUSES NOPROTECT  // no write protec
#FUSES NODEBUG    // no debug ICD
#FUSES NOBROWNOUT // no brownout reset
#FUSES NOLVP      // No low voltage prgming
#FUSES NOCPD      // no eeprom protect
#use delay(clock = 4000000) // oscillator 4 MHz
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)

int temp=0;

void main()
{

   SETUP_ADC_PORTS(A_ANALOG);               
   setup_adc(ADC_CLOCK_INTERNAL); //configuring  ADC

   while(true)                    //forever
   {
      output_high(pin_A1);   // force a1 high
      set_adc_channel(1);      // should set Chold to 5V
      delay_us(20);         // Chold settle
      temp = read_adc();      // get adc value
      printf("adc_value high= %u ", temp);

      delay_ms(200);          // slow things down a bit
         
      output_low(pin_A1);   // force a1 low
      set_adc_channel(1);      // should set Chold to 0V
      delay_us(20);         // Chold settle
      temp = read_adc();      // get adc value
      printf("adc_value low= %u \r", temp);
      
      delay_ms(200);          // slow things down a bit
   }
}


The output to the PC alternated between 255 and 0.

This ought be enough of a guide.

There should be no need to convert from microchip 'C' code to CCS.

[If you can't get the CCS commands to do the job, you may have to operate some of the registers directly.]

Oh, by the way, re your code:-
Quote:

delay_ms(10);
adc_value2=read_adc(); //check if output capacitor was changed so internal votage is changed
if( (adc_value1-adc_value2) >10)


AN1298 suggests that the conversion is done with minimal delay after setting sensor as I/P.

Mike
temtronic



Joined: 01 Jul 2010
Posts: 9125
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Sun Mar 04, 2012 3:50 pm     Reply with quote

If you really must use the Microchip C code. Don't know why as Mike's pointed you to CCS code that's a good start....then it's fairly easy to cut a 'translation program' to convert Microchip C into the equivalent CCS C codes.

Just don't ask me for that program as I wrote it 20 years ago for the then 'new' 16F877..sigh, PICs were simpler, I was younger...
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group