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 Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc 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   #1
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   #2
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
Trả lời

Ðiều Chỉnh
Xếp Bà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à 09:35 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