PDA

View Full Version : Pic6f877a


0509592
20-08-2008, 12:44 AM
--------------------------------------------------------------------------------

em dung pic 16F877A !
em bam xung PWM de dieu khien den led.
nhưng em chưa làm được!
bác nào có đoạn code CCS C về pwm thì cho em xin!
thanks!

picpen
20-08-2008, 12:30 PM
Bạn dùng pwm để điều khiển đèn led thì rất khó quan sát bằng mắt thường.
bạn vào vào thư mục cài phần mềm ccs có một ví dụ rất chi tiết về pwm .vi dụ đó là :EX_PWM.C
********** CHÚC BẠN HỌC TỐT ***********

tallht
20-08-2008, 02:26 PM
Nếu dùng pwm thì bạn chỉ có thể dùng oscilloscope để xem ouput thôi,chứ led thì bó tay vì chu kì xung pwm rất ngắn!

LTD_LEO
20-08-2008, 04:09 PM
--------------------------------------------------------------------------------

em dung pic 16F877A !
em bam xung PWM de dieu khien den led.
nhưng em chưa làm được!
bác nào có đoạn code CCS C về pwm thì cho em xin!
thanks!

bạn muốn điều khiển độ sáng của led ?

void led(int value,int value1)
{
set_pwm1_duty(value);
set_pwm2_duty(value1);

}
void main()
{
set_tris_c(0); // portc output.

ouput_c(0);

setup_timer_2(t2_div_by_16,249,1); //PWM Period = 2ms, ứng với thạch anh 8M
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
while(1)
{
led(a,b); // a,b giá trị tư 0 ->255,ứng với từng chân ccp1(rc2),ccp2(rc1)
}
}

chỉ đơn giản vậy thôi . Kô biết có đúng ý bạn ko ?

0509592
20-08-2008, 08:32 PM
vâng đúng là nếu dùng pwm thì với led là không quan sát được!
trước em cũng dùng Micro C làm rồi!
bây giờ chuyển sang CCS C nhưng không làm được!
cảm ơn bác đã cho đoạn code!
em thử xem sao!
thanks!

LTD_LEO
20-08-2008, 10:02 PM
vâng đúng là nếu dùng pwm thì với led là không quan sát được!
trước em cũng dùng Micro C làm rồi!
bây giờ chuyển sang CCS C nhưng không làm được!
cảm ơn bác đã cho đoạn code!
em thử xem sao!
thanks!

dùng pwm thì với led vẫn nhìn thấy được chứ bạn . Mình sử dụng các khối pwm để điều chỉnh độ sáng của led , hoặc bạn cũng có thể dùng để pha màu được mà ... ko biết bạn làm thế nào mà ko quan sát được ? bạn có thể đưa phần cứng và code của bạn lên đề xem ko?

0509592
20-08-2008, 10:23 PM
vâng thì đúng vẫn quan sát được!
nhưng chỉ quan sát được độ sáng tối của led! hoặc thay đổi màu!
còn chớp tắt giống như trong chu kì xung của nó thì không quan sát được!
vậy có đúng không bác!
bác đoạn code nào đơn giản về pwm bằng CCS C thì post lên cho em xin!
thanks!

namqn
20-08-2008, 10:47 PM
vâng thì đúng vẫn quan sát được!
nhưng chỉ quan sát được độ sáng tối của led! hoặc thay đổi màu!
còn chớp tắt giống như trong chu kì xung của nó thì không quan sát được!
vậy có đúng không bác!
bác đoạn code nào đơn giản về pwm bằng CCS C thì post lên cho em xin!
thanks!
Nếu bạn muốn làm cho LED nhấp nháy thì không cần sử dụng PWM, bạn chỉ cần chờ đủ lâu (từ 100 ms trở lên) rồi lật trạng thái LED. Có thể dùng delay, timer (kiểu hỏi vòng hay ngắt) để định thời gian chờ.

Thân,

0509592
24-08-2008, 12: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/
*/
#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==500)
goto thoat;
}
thoat:
TMR2ON=0;
setup_ccp1 (CCP_OFF);
setup_ccp2 (CCP_OFF);
}

popeye_ts22
24-08-2008, 01:34 AM
Em mới làm về CCS.Cũng đang gặp rắc rối gần giống như trên.Mô phỏng được 2 kênh nhưng làm ra mạch thật chỉ được 1 kênh thay đổi duty.Không biết làm sao.Ah,trong lệnh setup_timer_2(T2_DIV_BY_16,255,1);số 1 ở đây thấy help ghi là số lần tràn trước khi ngắt,có giá trị từ 1 đến 16.Em không hiểu chỗ này,bác nào giúp em với/.

0509592
24-08-2008, 11:04 PM
sao không thấy bác nào quan tâm đến mục này vậy??
các bác nghé thăm giúp em với!
thanks!