PDA

View Full Version : PICPIC_16F877A_hoi_dap


0509592
27-08-2008, 01:12 AM
/*chào các bác!
em viết đoạn code pwm này nhưng gặp một vấn đề là em thử đưa ra led thì chỉ thấy led ở kênh hai sáng dần lên, còn led ở kênh một thì vẫn sáng mà không hề tối dần. Em hiển thị lên lcd thì thấy giá trị hiển thị đúng! không hiểu tại sao?? hay là em làm sai??? các bác giúp em với???
thanks!
/truongtv0510@gmail.com/
*/

Code:
#include <16f877a.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=8000000)
#include <lcd_lib_4bit.c>
#bit TMR2ON =0x12.2
int16 i,j;
int16 n;
int a1,b1,c1,a2,b2,c2;
void main()
{
trisc=0x00;
lcd_init();
LCD_PutCmd (0x82 );
lcd_putchar("DKH_4X");
LCD_PutCmd (0xC3 );
lcd_putchar("robocon");
delay_ms(500);
LCD_PutCmd (0x01 );

n=0;
while(n<300)
{
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(299 - n);
set_pwm2_duty(n);

a1=n/100;
b1=(n-100*a1)/10;
c1=n%10;
a2=(299-n)/100;
b2=((299-n)-100*a2)/10;
c2=(299-n)%10;
lcd_init();

LCD_PutCmd (0x80);
lcd_putchar(a1+48);
LCD_PutCmd (0x81);
lcd_putchar(b1+48);
LCD_PutCmd (0x82);
lcd_putchar(c1+48);
LCD_PutCmd (0xC0 );
lcd_putchar(a2+48);
LCD_PutCmd (0xC1 );
lcd_putchar(b2+48);
LCD_PutCmd (0xC2);
lcd_putchar(c2+48);
delay_ms(200);
LCD_PutCmd (0x01 );
n++;

if(n==300)
goto thoat;
}
thoat:
TMR2ON=0;
setup_ccp1 (CCP_OFF);
setup_ccp2 (CCP_OFF);
}

namqn
27-08-2008, 02:03 AM
Tài liệu hướng dẫn của CCS C cho biết giá trị tham số của hàm set_pwm1_duty() là hằng số hoặc biến. Bạn đang dùng một biểu thức. Bạn thử khai báo thêm một biến (m chẳng hạn), cùng kiểu với n, và gán biểu thức (299 - n) cho biến đó, rồi dùng biến đó trong hàm set_pwm1_duty(), xem thế nào.

Thân,

0509592
28-08-2008, 08:23 AM
vâng! cảm ơn bác! để em thử xem sao?????

cong1810
07-09-2008, 10:20 AM
các anh cho em hỏi?!! các chân ADC có cần thiết phải có điện trở kéo nguồn để nó ổn định ko??

picpen
07-09-2008, 06:23 PM
Các chân chuyển đổi ADC. nếu bạn dùng nó với chức năng I/O thì hoang toàn có thể kéo lên Vcc hoặc kéo xuống MASS .Nhưng nếu dùng làm đầu vào chuyển đổi ADC thì tuyệt đối ko được kéo trở lên Vcc làm như vậy thì tín hiệu đầu vào ADC của bạn sẽ bị sai hoàn toàn. bạn thử vẽ mạch phần cứng ra rồi ngồi nghiên cứu ,phân tích là sẽ biết vì sao ngay ........

********* Chúc thành công