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

help please servo controlled by potentiometer code

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



Joined: 29 May 2011
Posts: 3

View user's profile Send private message

help please servo controlled by potentiometer code
PostPosted: Sun May 29, 2011 7:40 am     Reply with quote

hello there guys
how is it going!!
I need help if you may help me please. I am building a robotic arm using multi servos and i need to control them through 1K potentiometers. 20KHz crystal, 16f877a pic.
Can you help me trouble-shooting my code ?
There it is
Code:

#include <16F877A.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=20000000)


Code:

 int16 value=0;
  int16 x1=0;

void main()
{
   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   
  set_adc_channel(1);
  delay_us(20);

  while (1)
   {
     value = read_adc();
   
     x1 = value+1000;
   
    output_high(PIN_b1);
    delaY_us(x1);
    output_low(PIN_b1);
    delay_ms(18);
    }

}
temtronic



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

View user's profile Send private message

PostPosted: Sun May 29, 2011 11:30 am     Reply with quote

Ok...looks like you're using the RC hobby type of servo...

Break your program down into 3 new programs..

1) use 'fixed' delays of 1000, 1500 and 2000 us as your x1 value( servo position) and see what happens.

2) if they work correctly( full left, center, full right) then you know you've wired up the protoboard correctly.

3) now add the 'read adc and send data to servo delay_us(x1)...

if that doesn't work, reread the ADC section or look at the examples in the CCS folder labelled 'examples' for your compiler....
Ttelmah



Joined: 11 Mar 2010
Posts: 19439

View user's profile Send private message

PostPosted: Sun May 29, 2011 2:37 pm     Reply with quote

Question - what compiler version?.
There have been three different 'versions' of the delay_us code.
Oldest wouldn't accept a variable (you obviously have not got this).
Then next allowed a constant from 0-65535, or a variable from 0-255. With this later you would only get a small amount of movement (1/4 travel), happening four times as you move up the pot range.
Current version allows 65535 for both variable and constant.

So your code has a problem if you have an old compiler....

Best Wishes
iam6me



Joined: 29 May 2011
Posts: 3

View user's profile Send private message

PostPosted: Mon May 30, 2011 11:57 am     Reply with quote

Hello and thanx for the replies. In fact i tried just what you said and used fixed values instead of the variables but still the servo didn't work.
While I am sure the connection is right cause i have a micro ship where it has a program that works almost right.
:s
So i tried even using 4MHZ clock but still the same problem ?
And am using version 4.105 so i guess it is suitable and up to date.
Ttelmah



Joined: 11 Mar 2010
Posts: 19439

View user's profile Send private message

PostPosted: Mon May 30, 2011 2:47 pm     Reply with quote

So have you actually proved the processor is running?.
Silly things like MCLR pin not pulled high, or wildly wrong loading capacitors on the crystal (had one guy who accidentally used 22nF, instead of 22pF).
A simple 'flash an LED at 1second intervals' test, will first prove the processor is running, and also allow you to check that it is running at the right speed (which is of course critical for time based things like running a servo....), is the first place to start.

Best Wishes
iam6me



Joined: 29 May 2011
Posts: 3

View user's profile Send private message

PostPosted: Mon May 30, 2011 6:01 pm     Reply with quote

Yea every thing you said is just right I've just checked :S
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