chào các bác!!!
Các bác chỉ hộ em chỗ sai trong chương trinhf này với.
#include <16F887.h>
#include <def_887.h>
#device *=16 adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //chip hoat dong o tan so cao (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT //ma chuong trinh ko dc bao ve doc. co the doc chuong trinh tu chip ra
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=10000000)
#define stop RB1
//#define start RB2
#define left RB3
#define right RB4
int8 value; //khai bao bien luu tru ket qua ADC
void quay_trai(){
SET_PWM1_DUTY(0);
DELAY_MS(100);
value = read_adc();
SET_PWM2_DUTY(VALUE);
}
void quay_phai(){
set_pwm2_duty(0);
DELAY_MS(100);
value = read_adc();
set_pwm1_duty(value);
}
void stop_DC(){
set_pwm1_duty(0);
set_pwm2_duty(0);
}
//====================CHUONG TRINH CHINH========================//
void main(void)
{
//=================== KHOI TAO CHO ADC=========================//
setup_adc(adc_clock_internal); //chon xung xung clock cho bo ADC
setup_adc_ports(sAN0|VSS_VDD); //thiet lap cong AN0 la dau vao ADC
set_adc_channel(0); //chon chan AN0 cho lenh doc ADC tiep
delay_us(10);
//====================KHOI TAO CHO PWM=========================//
setup_ccp1(CCP_PWM); //cau hinh cho ccp1 lam dau ra PWM
setup_ccp2(CCP_PWM); //-------------ccp2---------------
setup_timer_2(T2_DIV_BY_1,255,1); //chon tan so dau ra cho bo PWM
set_tris_B(0x1E); //thiet lap cac chan RB1-RB4 la input (00011110b = 1Eh)
set_pwm1_duty(0); //tat dong co
set_pwm2_duty(0); //-----------
delay_ms(50);
while(1){ //TAO VONG LAP VO HAN
IF(stop == 0){
stop_DC();
}
ELSE IF(left == 0){
quay_trai();
}
ELSE IF(right==0){
quay_phai();
}
}
}
Em muốn thay đổi tốc độ động cơ bằng biến trở. Nhưng lạ thay khi vặn biến trở thì trên proteus vẫn ko cho ra xung có độ rộng thay đổi.
sơ đồ kết nối phần cứng ở bên dưới.
Mong các bác chỉ giáo
Các bác chỉ hộ em chỗ sai trong chương trinhf này với.
#include <16F887.h>
#include <def_887.h>
#device *=16 adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //chip hoat dong o tan so cao (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT //ma chuong trinh ko dc bao ve doc. co the doc chuong trinh tu chip ra
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(clock=10000000)
#define stop RB1
//#define start RB2
#define left RB3
#define right RB4
int8 value; //khai bao bien luu tru ket qua ADC
void quay_trai(){
SET_PWM1_DUTY(0);
DELAY_MS(100);
value = read_adc();
SET_PWM2_DUTY(VALUE);
}
void quay_phai(){
set_pwm2_duty(0);
DELAY_MS(100);
value = read_adc();
set_pwm1_duty(value);
}
void stop_DC(){
set_pwm1_duty(0);
set_pwm2_duty(0);
}
//====================CHUONG TRINH CHINH========================//
void main(void)
{
//=================== KHOI TAO CHO ADC=========================//
setup_adc(adc_clock_internal); //chon xung xung clock cho bo ADC
setup_adc_ports(sAN0|VSS_VDD); //thiet lap cong AN0 la dau vao ADC
set_adc_channel(0); //chon chan AN0 cho lenh doc ADC tiep
delay_us(10);
//====================KHOI TAO CHO PWM=========================//
setup_ccp1(CCP_PWM); //cau hinh cho ccp1 lam dau ra PWM
setup_ccp2(CCP_PWM); //-------------ccp2---------------
setup_timer_2(T2_DIV_BY_1,255,1); //chon tan so dau ra cho bo PWM
set_tris_B(0x1E); //thiet lap cac chan RB1-RB4 la input (00011110b = 1Eh)
set_pwm1_duty(0); //tat dong co
set_pwm2_duty(0); //-----------
delay_ms(50);
while(1){ //TAO VONG LAP VO HAN
IF(stop == 0){
stop_DC();
}
ELSE IF(left == 0){
quay_trai();
}
ELSE IF(right==0){
quay_phai();
}
}
}
Em muốn thay đổi tốc độ động cơ bằng biến trở. Nhưng lạ thay khi vặn biến trở thì trên proteus vẫn ko cho ra xung có độ rộng thay đổi.
sơ đồ kết nối phần cứng ở bên dưới.
Mong các bác chỉ giáo
Comment