PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 17-10-2008, 01:24 AM   #1
kyo
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
Unhappy Giúp mình băm xung điều khiển độ sáng đèn led

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
}
kyo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2008, 07:26 AM   #2
love_ac
Đệ 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
love_ac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2008, 09:33 AM   #3
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
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
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2008, 08:06 PM   #4
kyo
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
Question

Trích:
Nguyên văn bởi love_ac View Post
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
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?
kyo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2008, 08:13 PM   #5
kyo
Đệ tử 1 túi
 
Tham gia ngày: Feb 2008
Bài gửi: 13
:
Question

Trích:
Nguyên văn bởi hopeman View Post
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
Theo mình thì lệnh setup_timer_2(t2_div_by_16,249,1) là để khởi tạo cho timer2, ở đây mình dùng thạch anh 4Mhz, bộ chia tần số là 1:16, như vậy timer2 sẽ bị tràn sau 4ms. Còn lệnh led(255,255) là để băm với độ rông xung là 100%. Theo mình không có gì không hợp lí cả, mong bạn giải thích hộ mình lần nữa.
kyo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-10-2008, 10:49 PM   #6
love_ac
Đệ 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)
Hình Kèm Theo
File Type: jpg hinh.jpg (35.6 KB, 47 lần tải)
love_ac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-10-2008, 12:42 AM   #7
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
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
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-10-2008, 07:59 AM   #8
love_ac
Đệ 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
love_ac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-11-2011, 08:57 PM   #9
anhthao10
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à
anhthao10 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam