📄 weldrobot.c
字号:
#device PIC16F877 *=16 ADC=10
#include <16F877.h>
#include <math.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES BROWNOUT //Reset when brownout detected
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#use delay(clock=20000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7)
//--- global definitions ------------------------------------------------------
#define SAMPLING_TIME 10
#define SPOT_TIME 2
#define MENU_MODE 111
#define MENU_SPEED 119
#define MENU_AMP 123
#define MENU_GAP 125
#define MENU_SEG 126
#define MAX_MODE 5
#define MAX_SPEED 30
#define MAX_AMP 100
#define MAX_GAP 999
#define MAX_SEG 999
#define MIN_MODE 1
#define MIN_SPEED 3
#define MIN_AMP 1
#define MIN_GAP 1
#define MIN_SEG 1
#define WELDING PIN_E0
#define DIRECTION PIN_D0
//--- global variables declaration --------------------------------------------
// input values
int inMode = 1; // 1: continuous, 2: intermitted, 3: spot
int inSpeed = 6; // mm/s
int16 inAmp = 10; // mm
int16 inGap = 100; // mm
int16 inSeg = 100; // mm
int16 inWeaveSpeed = 200; // pwm duty value
// flow control variables
int menu = 0;
int1 run = 0;
int1 useWeaver = 1;
//--- modules import ----------------------------------------------------------
#include <rom.c>
#include <led.c>
#include <key.c>
#include <motor.c>
#include <weaver.c>
#include <process.c>
//--- programme start here -----------------------------------------------------
void main () {
// initialize
output_low(WELDING); // turn off welding machine
output_low(ENA); // turn off robot motor
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(t1_external | t1_div_by_1); // encoder counter
setup_timer_2(t2_div_by_1,255,1); // pwm frequency
setup_ccp1(ccp_pwm);
set_pwm1_duty(0);
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
setup_adc_ports(an0_an1_an3);
setup_adc(adc_clock_internal);
set_tris_b(0xF1);
loadParams(); // load saved parameters
detectWeaver(); // check weaver availability
enable_interrupts(int_rb); // keypad interrupt
enable_interrupts(int_rtcc);
enable_interrupts(global);
set_timer0(60);
while (1) {
if (run) {
// get weave speed
set_adc_channel(0);
delay_us(10);
inWeaveSpeed = read_adc();
set_adc_channel(1);
set_pwm2_duty(inWeaveSpeed);
// start
set_timer1(0);
loadParams(); // avoid unsaved parameters
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
switch (inMode) {
case 1:
//set_pwm2_duty(0);
runCont();
break;
case 2:
runInt();
break;
case 3:
runSpot();
break;
case 4:
runTrapezoid();
break;
case 5:
runSquare();
break;
}
}else {
menu = input_d();
menu = menu >> 1;
switch (menu) {
case MENU_MODE:
display(inMode);
break;
case MENU_SPEED:
display(inSpeed);
break;
case MENU_AMP:
display(inAmp);
break;
case MENU_GAP:
display(inGap);
break;
case MENU_SEG:
display(inSeg);
break;
}
delay_ms(50);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -