Menu

Adskeeper - header widge

728x90

Search This Blog

468x60

Navbar

AdsKeeper - IAB Display Standard Ad Unit

Saturday, May 2, 2020

Controlling multi servo motor with PIC16F716

In the previous example, I show a simple method to rotate the angle of a servo motor using delay() function in CCS PICC.

Controlling a servo motor with PIC16F84A

In this example I use three potentiometers to adjust the three corresponding servo motor simultaneously.


various types of Pots
A simple pot can generate variable analog voltage output,
fed to the MCU analog input.

The overall process is to convert the 8-bit analog value reading from pot to PIC16F716. Then converting the 8-bit analog data to time value in microseconds.

The 8-bit data have 256 value. This 256 value map the 1000 microsecond high time.


The PIC16F716 CPU clocks at 20 Mhz, giving a precise timing for delay() function.
Three pots connect to RA0, RA1 and RA3.
Three servo output connect to RB0, RB1 and RB2.

Source code is written in CCS PICC, and could be download here:


#include<16F716.h>
#fuses HS
#use delay(clock=20M)

void main(){
   int32 adcResult_1;
   int32 adcResult_2;
   int32 adcResult_3;
   
   int32 _h_1=0,_l_1=0;
   int32 _h_2=0,_l_2=0;
   int32 _h_3=0,_l_3=0;
   
   output_B(0x00);
   set_tris_a(0xFF);
   set_tris_b(0x00);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(AN0_AN1_AN3);
   
   delay_ms(2000);
   
   while(1){
   //Servo 1
      set_adc_channel(0);
      adcResult_1=read_adc();
      while(!adc_done());
      
      _h_1=1000+((1000*adcResult_1)/255);
      _l_1=20000-_h_1;
          
      output_high(pin_b0);
      delay_us(_h_1);
      output_low(pin_b0);
      delay_us(_l_1);
      
      //Servo 2
      set_adc_channel(1);
      adcResult_2=read_adc();
      while(!adc_done());
      
      _h_2=1000+((1000*adcResult_2)/255);
      _l_2=20000-_h_2;
          
      output_high(pin_b1);
      delay_us(_h_2);
      output_low(pin_b1);
      delay_us(_l_2);
      
       //Servo 3
      set_adc_channel(3);
      adcResult_3=read_adc();
      while(!adc_done());
      
      _h_3=1000+((1000*adcResult_3)/255);
      _l_3=20000-_h_3;
          
      output_high(pin_b2);
      delay_us(_h_3);
      output_low(pin_b2);
      delay_us(_l_3);
   }
}

No comments:

Post a Comment

Adskeep- Standard Ads

Electronics and Programming Tutorials

336x280

DIY Electronic Projects And Instruments

AdsKeeper - 2091654

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (40) Analog Comparator (1) Arduino (16) ARM (32) AT89C52 (7) ATMega32 (59) ATMega644P (27) AVR (88) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (5) Display (157) Distance Sensor (3) dot matrix (1) ds1307 (10) DS18B20 (6) ds3231 (2) ds3232 (2) dsPIC (16) dsPIC30F1010 (3) dsPIC30F2010 (15) EEPROM (5) Environment Sensor (6) ESP32 (1) esp8266 (1) Graphical LCD (3) HD44780 (12) I2C (40) ILI9341 (1) Input/Output (84) Interrupt (22) IoT PCB (1) Keil (5) Keypad (16) KS0108 (3) LCD (87) LM35 (4) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) MikroC ARM (1) MikroC dsPIC (11) MikroC PIC (1) Module PCB (2) Motor (15) MPLABX (73) Nokia 5110 LCD (5) OLED (2) One-Wire (7) Oscillator (8) PCB (13) PCD8544 (3) PCF8574 (13) PIC (121) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (13) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PLL (1) PWM (12) RTC (13) SBN0064G (1) Sensor (15) SH1106 (3) Shift Register (15) Shift Registers (19) SN74HC595N (9) Software SPI (1) Software TWI (3) SPI (44) sprinf (3) ST7735 (1) STM32 (29) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (23) STM32CubeIDE (32) STM32F103C8T6 (9) STM32F103R6 (18) STM32F401CCU6 (1) SysTick (7) temperature sensor (15) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (10) UART (11) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (96)