PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   pwm của pic 16f877a bằng ccs (http://www.picvietnam.com/forum/showthread.php?t=7113)

canhtoantdh 04-10-2010 12:56 PM

pwm của pic 16f877a bằng ccs
 
1 Attachment(s)
anh em cho mình hỏi tại sao tại chân ra của rc1 và rc2 không có xung ra. mình xem mãi mà không bit mình sai đâu mong nhận dc sự chỉ giáo của anh em trên diễn đàn

pic_13 04-10-2010 06:00 PM

Trích:

Nguyên văn bởi canhtoantdh (Post 39084)
anh em cho mình hỏi tại sao tại chân ra của rc1 và rc2 không có xung ra. mình xem mãi mà không bit mình sai đâu mong nhận dc sự chỉ giáo của anh em trên diễn đàn

không vấn đề gì hết .đã kiểm tra cho bạn ,có xung đầu ra.
nhưng hình như chạy sai thì phải.

canhtoantdh 05-10-2010 10:30 PM

bạn ơi cho minhd hỏi luôn khi mình set_pwm3_duty(value),set_pwm4_duty(value),set_pwm5 _duty(value). sao không dc nhỉ? muốn dùng nó phải khởi tạo gì thêm?

otacon 23-10-2010 02:22 AM

Đã kiểm tra bằng Proteus,tình hình là không thấy có xung gì hết,không biết có phải tại Proteus không!.
@ canhtoantdh : datasheet 16f877 chỉ có 2 bộ PWM thôi

hongmta 23-10-2010 11:27 PM

bạn up file mô phỏng cho mọi người coi, có thể bạn chưa có trở kéo dương trên 2 chân RC1, RC2,
Cheers!!

hongmta 24-10-2010 02:51 AM

Re
 
Trích:

Nguyên văn bởi canhtoantdh (Post 39084)
anh em cho mình hỏi tại sao tại chân ra của rc1 và rc2 không có xung ra. mình xem mãi mà không bit mình sai đâu mong nhận dc sự chỉ giáo của anh em trên diễn đàn

code lại cho bạn nè:
#include "16f877a.h"
#include "def_877a.h"
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=16000000)
#use fast_io(c)
void init()
{
// cai PWM bo dieu che xung cho dong co
set_tris_c(0x00);
setup_ccp1(CCP_PWM); // Bat che do PWM cho RC1
setup_ccp2(CCP_PWM);
set_pwm1_duty(300);//100%
set_pwm2_duty(300);//80%// Bat che do PWM cho RC2
setup_timer_2(T2_DIV_BY_16,200,1);//Ta co PR2=199,prescale=1
//Tpwm=[PR2+1]*4*1/clock*prescale=[199+1]*4/20000000*1=40 us
//Fpwm=1/Tpwm=25 kHZ
// set_tris_c(0b00000000);

}

void main()
{
init();

while (true)
{


}
}

thangkho89 27-10-2010 12:01 PM

thanks anh nhiu nhiu.em kiem tra xung da ok.van de nay e da buc xuc bay lau nay da duoc giai dap ^^.thankss

thangkho89 27-10-2010 05:11 PM

1 Attachment(s)
hongmta cho mình hỏi được không?

mình đã có viết lại code thế này

#include "16f877a.h"
#include "def_877a.h"
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT ,PUT
#use fast_io(a)//khai bao nay trong ccs chi thuc hien dung 1 lenh cho viec i/o
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#use delay(clock=10000000)//thach anh 10 M
#define tien rd0
#define lui rd1
#define trai rd2
#define phai rd3
#define nang rd4
#define ha rd5
#define kep rd6
#define tha rd7
#define L1 ra1
#define R1 ra2
#define L2 ra3
#define R2 ra4
//khai bao cac chan ra cho dong co
#define pwm_dc_l rb6 //dong co trai
#define dir_l rb1 // dao chieu
#define pwm_dc_r rb7 //dong co phai
#define dir_r rb3 // dao chieu
#define dc_nang rb2 // dao chieu
#define dc_kep rb4 // dao chieu
//dinh nghia trang thai phim bam
#define bam 0
#define nha 1
//HAM CON
void setup_phim();
void retrai();
void rephai();
void cap1();
void cap2();
int duty1,duty2;

//khoi tao ngat timer0
void bamxung(int duty1,int duty2);

void main()
{
trise = trisb = trisc = 0x00;
trisd = trisa = 0xff;
portb = 0x00;
setup_ccp1(CCP_PWM); // Bat che do PWM cho RC1
setup_ccp2(CCP_PWM);
while(true)
{
setup_phim();
}
}
void setup_phim()
{

if((tien == bam))
{
bamxung(310,475);
}
else if((tien = lui = trai = phai = nang = ha = kep = tha == nha))
{
bamxung(0,0);
}

}

void bamxung(duty1,duty2)
{
set_pwm1_duty(duty1);
set_pwm2_duty(duty2);
setup_timer_2(T2_DIV_BY_16,154,1);//Ta co PR2=199,prescale=1
}

Theo như mình tính thì duty1 và duty2 = 620 thì chạy 100%
nhưng ở code này khi mình set 2 pwm thì xung ra lại không như thế.

giả sử mình muốn pwm1 là 50% và pwm2 là 75% thì không thể làm được,
nếu để duty1 = duty2 thì cả 2 cũng đều ko thể đặt được 50% như mong muốn.
mình nghĩ là nó thực hiện hết duty1 rồi mới thực hiện duty2 có phải ko nhỉ.

rất mong được giúp đỡ.để mình send mô phỏng của mình bạn xem hộ nha

trucanh2008 31-12-2010 12:31 PM

Điều khiển động cơ DC bằng PWM
 
1 Attachment(s)
Mình làm đồ án dùng PIC16F877A điều chế PWM để điều khiển động cơ DC quay thuận, nghịch và set các tốc độ cố định bằng các nút bấm. Mình viết đoạn code mà chưa biết nguyên nhân vì sao không có tín hiệu ra ở 2 chân CCP1, CCP2.
Anh em xem giùm nguyên nhân vì sao?
Mình gửi kèm sơ đồ nguyên lý mô phỏng bằng Proteus và đoạn code bên dưới. Mong mọi người chỉ giáo.

quangvanvo 02-02-2011 04:42 PM

các anh chị ơi em cũng viêt code cho pwm nhưng nó cũng không khi nào co xung hết. các anh chị có thể post lên cho em 1 chương trình cộng với protuse ma nó dã chạy tôt cho em với các anh chi. chương trình đơn giản thui chỉ càn thay đổi độ rộng của xung ra trên rc1 và rc2 thui

phuocduy137 22-02-2011 02:51 PM

May anh co chuong trinh proteus moi khong cho em xin voi.tren dien dan nay em tim mai ma kkhong thay

phuocduy137 22-02-2011 02:54 PM

may anh co nghien cuu ve pic 18f4550 ko\?neu cpo goi bai cho em voi.thank may anh nhieu


Múi giờ GMT. Hiện tại là 08:16 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam