20-08-2008, 12:44 AM | #1 |
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
Pic6f877a
--------------------------------------------------------------------------------
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! |
20-08-2008, 12:30 PM | #2 |
Đệ tử 5 túi
Tham gia ngày: Jun 2008
Bài gửi: 112
: |
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 ***********
__________________
** xin hãy cho tôi là tượng đá ** Để muôn đời không nhớ thương ai ..!! |
20-08-2008, 02:26 PM | #3 |
Đệ tử 5 túi
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
: |
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!
__________________
------------------------------------------------------------------- Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo. Mời tham quan: https://www.facebook.com/eshop1109 Cung cấp dịch vụ order hàng từ Aliexpress Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/ |
20-08-2008, 04:09 PM | #4 | |
Đệ tử 1 túi
Tham gia ngày: Aug 2008
Bài gửi: 12
: |
Trích:
Code:
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) } } |
|
20-08-2008, 08:32 PM | #5 |
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
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! |
20-08-2008, 10:02 PM | #6 |
Đệ tử 1 túi
Tham gia ngày: Aug 2008
Bài gửi: 12
: |
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?
|
20-08-2008, 10:23 PM | #7 |
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
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! |
20-08-2008, 10:47 PM | #8 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
24-08-2008, 12:12 AM | #9 |
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
/*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==500) goto thoat; } thoat: TMR2ON=0; setup_ccp1 (CCP_OFF); setup_ccp2 (CCP_OFF); } thay đổi nội dung bởi: namqn, 24-08-2008 lúc 01:27 AM. |
24-08-2008, 01:34 AM | #10 |
Đệ tử 2 túi
|
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/.
|
24-08-2008, 11:04 PM | #11 |
Đệ tử 3 túi
Tham gia ngày: Jul 2008
Bài gửi: 58
: |
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! |
|
|