![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
![]() Mình viết một chương trinh băm xung cho pic16f877a để điều khiển độ sáng của đèn led. Nhưng không hiểu tại sao hai con led cứ nhấp nháy liên tục. Mong mọi người giúp mình vấn đề này. Sau đây là code của chương trinh, mạch mình có gửi file ảnh kèm theo.
#include <16f877a.h> #fuses nowdt,noprotect,put,xt #use fast_io(c) #use delay(clock=4000000) void led(int8 v1,int8 v2) { set_pwm1_duty(v1); set_pwm2_duty(v2); } void main() { set_tris_c(0); // portc output. output_c(0x00); setup_timer_2(t2_div_by_16,249,1); setup_ccp1(ccp_pwm); //2 chan ccp1 va ccp2 la 2 chan bam xung setup_ccp2(ccp_pwm); led(0,0);// hai led gan vao 2 chan 16,17 deu tat led(125,125);//sang trong 1s delay_ms(1000); led(200,200);//sang hon 1 chut delay_ms(1000); led(255,255); delay_ms(1000);// sang han } |
![]() |
![]() |
![]() |
#2 |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
: |
Theo mình phải hiệu chỉnh lại bước mô phỏng trong proteus.code của bạn mình thấy thế này
-led(0,0) nếu không có một độ trễ thì nó không có ý nghĩa gì -code này sau 3s nó sẽ luôn tồn tại ở trạng thái cuối(led(255,255) Nếu code này chạy mạch thực thì ok bạn ah |
![]() |
![]() |
![]() |
#3 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 146
: |
setup_timer_2(t2_div_by_16,249,1);
led(255,255); hai dòng này không hợp lý này, bạn set tối đa là ở mức 249, nhưng lại dùng ở mức 255 bạn nên sửa lại - thêm vòng while để lặp lại trạng thái sáng tối nhiều lần - giảm trị số cho led hoặc tăng biên độ cho PWM bằng các setup lại timer ![]()
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com |
![]() |
![]() |
![]() |
#4 |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
![]() Cám ơn bạn đã trả lời. Như vậy theo như bạn nói thì proteus mô phỏng không chính xác phải không? Vậy có phần mềm nào mô phỏng chính xác hơn không?
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 1 túi
Tham gia ngày: Feb 2008
Bài gửi: 13
: |
![]() Trích:
|
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
: |
--"Như vậy theo như bạn nói thì proteus mô phỏng không chính xác phải không".Không đúng bạn ạ.Nó chính xác đó,nhưng do nó chạy trên hệ điều hành window nên nó không phải là hệ thời gian thực ,do đó bạn mô phỏng nó nhấp nháy thôi(dĩ nhiên là có cách chỉnh lại phần mềm này cho nó không nhấp nháy nữa).Bạn có thể quan sát thời gian băm xung nhờ oscilloscope ngay trong phần mềm có đó
--Thứ hai câu lệnh setup_timer_2 (mode,period,postscale) mode bạn biết rồi period :xác định giá trị mà tại đó bắt đầu đếm lại (dải 0-255) postscale sẽ xác định sau bao nhiêu lần bắt đầu đếm lại bên trên mà nó xảy ra ngắt. với set(t2_div_by_16,249,1) sẽ cho ta cycle time là :4ms hay tần số 250Hz --Tôi tạm gọi giá trị V(cycle)=period+1(tương ứng với Tcycle=4ms) và V(duty)=v1--tương ứng thời gian mà pwm ở mức cao trong 4ms đó bạn.Thế giờ áp dụng cho bài của bạn : ---->V(cycle)=249+1=250----tương ứng với Tcycle=4ms ---->V(v1=125)----->Tduty=4/2=2ms đúng không.Điều này nói lên độ sáng so với cao nhất là =1/2 đúng không Và cũng từ giá trị Vcycle bạn thấy bạn chỉ cần gọi đến led(250,250)đã cho bạn 100% rộng xung rồi . Bạn xem thêm hình tôi gửi kèm phía dưới cho led(125,125) |
![]() |
![]() |
![]() |
#7 |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 146
: |
thế này nhé, bạn set timer 2 chính là timer điều khiển PWM của bạn
vì thế nên con số 249 tức là bạn có thể để độ rộng xung từ 0-249 tương ứng độ đầy xung là từ 0-100% vì thế nên khi bạn set ở 255 tức là ngoài vùng này rồi bạn xem thêm file ex_pwm.c của ccs để hiểu thêm nhé ![]()
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com |
![]() |
![]() |
![]() |
#8 |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
: |
Tôi đảm bảo bạn gọi led(249,249) sẽ không được đầy xung 100%.Nếu bạn gọi Led(a,a) mà a>period+1 thì đầu ra sẽ cho ở sóng ra chu kì T=2*4ms=8ms,mà Tduty=4ms
|
![]() |
![]() |
![]() |
#9 |
Nhập môn đệ tử
Tham gia ngày: Sep 2010
Bài gửi: 2
: |
pro nào giúp E 1 ví dụ về băm xung điều khiển độ sáng led dùng VDK họ 89. e định làm led sao băng. hoac điều chỉnh sáng tối của cái biển LED ý mà
|
![]() |
![]() |
![]() |
|
|