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 11-11-2009, 01:54 PM   #16
xalachxoan
Đệ tử 1 túi
 
Tham gia ngày: Jul 2008
Bài gửi: 11
:
Trích:
Nguyên văn bởi nhanh0112 View Post
Theo tui bạn thử sử dụng PWM với duty cycle thay đổi dần với tần số cố định (Một số cái còi "ngân" của ô tô cũng sử dụng phương pháp này... tiếng nhỏ dần).
Còn về nguyên lý hoạt động thì dutycle càng ngắn thì thời gian sáng của led càng ngắn (chớp nhanh) -> tối và ngược lại.
Như vậy khoảng thời gian để đèn từ tắt hẳn đến sáng hoàn toàn thì cũng chính là thời gian để duty cycle chạy từ 0 đến max.
Ví dụ:
Code:
void main()
	{
	setup_ccp1(CCP_PWM);
	setup_timer_2(T2_DIV_BY_1,25,1);
	set_pwm1_duty(0);
        while(true)
        {
	for(i=0;i<25;i++)
		{
		set_pwm1_duty(i);		
		delay_ms(200);
		}
        }
	}
Như vậy để từ tắt hẳn đến sáng nhất là 200x25=5000ms (5s).
Cái này tui chưa làm thử, nhưng đây là ý tưởng của tui... bạn tham khảo xem sao
Mình thử code của bạn, biên dịch và mô phỏng nhưng led ở chân CCP1 không có tín hiệu gì cả. Mình mô phỏng bằng proteus.
Mình thấy pic16f877a chỉ có 2 chân băm xung thôi nhưng mình muốn sử dụng 8 chân thì làm như thế nào mong được chỉ giáo!
Trân trọng cảm ơn!
xalachxoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 03:55 PM   #17
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Trích:
Nguyên văn bởi xalachxoan View Post
Mình thử code của bạn, biên dịch và mô phỏng nhưng led ở chân CCP1 không có tín hiệu gì cả. Mình mô phỏng bằng proteus.
Mình thấy pic16f877a chỉ có 2 chân băm xung thôi nhưng mình muốn sử dụng 8 chân thì làm như thế nào mong được chỉ giáo!
Trân trọng cảm ơn!
Nếu thử với Proteus thì mình đã thử với đoạn code này trên PIC12F683... và đèn led có nhấp nháy mà bạn
Code:
#include <12F683.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOCPD                    //No EE protection
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOPUT                    //No Power Up Timer
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled

#use delay(clock=4000000)

int i;

void main()
   {
   setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_1,25,1);
   set_pwm1_duty(0);
        while(true)
        {
   for(i=0;i<25;i++)
      {
      set_pwm1_duty(i);      
      delay_ms(200);
      }
        }
   }
Còn với việc làm PWM nhiều kênh thì theo mình ko thể sử dụng chân CCPX đc. Mà phải sử dụng phương pháp quét lần lượt theo chu kỳ thời gian thôi. Ai có cách hay hơn thì post lên cho anh em tham khảo với.
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-11-2009, 09:10 AM   #18
xalachxoan
Đệ tử 1 túi
 
Tham gia ngày: Jul 2008
Bài gửi: 11
:
Chào bạn Nhanh0112!
Mình đã thử mô phỏng lại với PIC2f683, led nhấp nháy rồi! Nếu mạch thực thì nó sáng dần phải không bạn? Mình đã thử lại với PiC6f877a nhưng vẫn không được. Bạn thử mô phỏng xem sao?
Còn giả sữ mình muốn điều khiển 8 led đơn cho nó sáng dần từ con 1 đến con thứ 8 thì không sử dụng chân CCPx được rồi! Vậy mình lập trình ra sao? Mong được anh em post lên cho y kiến với!
Trân trọng cảm ơn!
xalachxoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-11-2009, 08:32 PM   #19
xalachxoan
Đệ tử 1 túi
 
Tham gia ngày: Jul 2008
Bài gửi: 11
:
Các bạn xem thử sự lợi hại của PWM để điều khiển led nhé!
Xem xong cho ý kiến để làm nhé các bạn!
http://www.youtube.com/watch?v=SKe67xZG8Sg
Thân!
xalachxoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2009, 09:41 AM   #20
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
Trích:
Nguyên văn bởi xalachxoan View Post
Chào bạn Nhanh0112!
Mình đã thử mô phỏng lại với PIC2f683, led nhấp nháy rồi! Nếu mạch thực thì nó sáng dần phải không bạn? Mình đã thử lại với PiC6f877a nhưng vẫn không được. Bạn thử mô phỏng xem sao?
Còn giả sữ mình muốn điều khiển 8 led đơn cho nó sáng dần từ con 1 đến con thứ 8 thì không sử dụng chân CCPx được rồi! Vậy mình lập trình ra sao? Mong được anh em post lên cho y kiến với!
Trân trọng cảm ơn!
đây là đoạn code nhỏ đc viết trong ngắt timer (với khoảng thời gian tràn là 1 xung lấy mẫu)
Ở đây viết là xung mẫu là 500us, và chiều dài của 1 xung đc băm ra là 100 khoảng (là độ phân giải của nó ấy). Thời gian của 1 xung là T=500x100=50ms
Đoạn code đc viết cho 4 chân (bạn có thể mở rộng tùy thích)
Các giá trị độ rộng xung đc nạp 1 lần vào mảng Pulse[] từ phần tử 0 đến phần tử 3 tương ứng từ kênh 1 đến kênh 4, với giá trị:0-100
ví dụ
pulse[0]=20;//0=min,100=max
pulse[1]=45;
.....
Code:
#int_timer0 //overflow every 500us
void decode()
   {
	set_timer0(0);
	xung++;
	if(xung<pulse[0])//1
		{output_high(PIN_D0);}
	else
		{output_low(PIN_D0);}
	if(xung<pulse[1])//2
		{output_high(PIN_D1);}
	else
		{output_low(PIN_D1);}
	if(xung<pulse[2])//3
		{output_high(PIN_D2);}
	else
		{output_low(PIN_D2);}
	if(xung<pulse[3])//4
		{output_high(PIN_D3);}
	else
		{output_low(PIN_D3);}		
	if(xung>100){xung=0;}//end of pulse
   }
đoạn code này tui lấy từ một ứng dụng khác của tui, và đã sửa sang lại chút để phù hợp với đầu bài, nên chưa kịp test. Bạn nào có dịp làm thì test dùm luôn. Ai có ý tưởng nào hay về PWM nhiều kênh thì post lên tham khảo với nha
nhanh0112 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-11-2009, 02:35 PM   #21
zero07a
Đệ tử 1 túi
 
zero07a's Avatar
 
Tham gia ngày: Nov 2009
Bài gửi: 21
:
trang web hay thật.
__________________
Cùng nhau chia sẻ tri thức
zero07a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-11-2010, 03:12 PM   #22
Demostone
Nhập môn đệ tử
 
Tham gia ngày: Dec 2009
Bài gửi: 1
:
Mình đang học PIC và có 1 bài tập như thế này.Ai giúp mình..tham khảo với..
1.Cho LED sáng lần lượt từ Rb7-RD0 mà vẫn giữ cho các LED trước sáng và ngược lạo
2.Sử Dụng chức năng ngắt ngoài cho LED sáng lần lượt như câu 1
3.Tương tự câu 2 nhưng sử dụng ngắt Timer1
Demostone vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2010, 11:14 AM   #23
vinhphucbk08
Nhập môn đệ tử
 
Tham gia ngày: Nov 2010
Bài gửi: 1
:
có bạn nào có kit mô phỏng led chasing trên protues k? share cho mình với! mình đang cần! thanks mọi người nhiều!!
vinhphucbk08 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-12-2011, 10:15 PM   #24
cuongero2012
Nhập môn đệ tử
 
Tham gia ngày: Dec 2011
Bài gửi: 2
:
cho mình hỏi: mình muốn post B chạy riêng 5 kiểu có 8 con led đơn, đồng thời post C cũng chạy 3 kiểu có 8 con led đơn. 2 dãy chạy đồng thời. mình viết chương trình bằng CCS, mình viết cách: outputb,outputc,delay rất phúc tạp khi viết nhiều kiểu led chạy. bạn nào biết dùng lệnh gì để tách ra chạy riêng biệt 2 post ko
cuongero2012 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à 11:17 AM.


Đượ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