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 26-06-2009, 08:25 AM   #1
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Smile Rất Cần Giúp Đỡ Về Code Làm Cho Led Sáng Dần Và Tắt Dần !!!!

Mình muốn viết 1 chương trình làm cho led sáng dần và tắt dần với pic16f877A (viết bằng CCS).Mình cũng đã thử coi qua mấy luồng trong diễn đàn về điều chế độ rộng xung ,nhưng chưa hiểu được (củ chuối quá!!!)
Vậy,Nhờ các Anh/Bạn nào làm về vấn đề này rồi chỉ cho em với !!!
Em cảm ơn mọi người trước nha !!!!
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-06-2009, 08:53 AM   #2
jackiele
Đệ tử 3 túi
 
Tham gia ngày: Jun 2008
Bài gửi: 51
:
Trích:
Nguyên văn bởi tienchuan View Post
Mình muốn viết 1 chương trình làm cho led sáng dần và tắt dần với pic16f877A (viết bằng CCS).Mình cũng đã thử coi qua mấy luồng trong diễn đàn về điều chế độ rộng xung ,nhưng chưa hiểu được (củ chuối quá!!!)
Vậy,Nhờ các Anh/Bạn nào làm về vấn đề này rồi chỉ cho em với !!!
Em cảm ơn mọi người trước nha !!!!
Nếu bạn điều khiển 2 con led thì bạn còn dùng CCP1 và CCP2 nhưng số led nhiều hơn thì sao.

Đơn giản bạn tạo điện áp trung bình cho từng chân (giả lập PWM cho nhiều chân);
jackiele vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-06-2009, 12:37 PM   #3
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Bạn có thể nói nói rõ hơn về phần này ko ? Mình chưa hiểu lắm !
Mình định làm cái mạch dùng led cho nó sáng đủ kiểu,thấy kiểu sáng dần ,tắt dàn cũng hay nên mình muốn làm về phần này !
Nếu có tài liệu về phần này thì bạn send cho mình với nhé !
Mail to: tienchuanct@gmail.com
Cảm ơn Bạn nhiều !
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-06-2009, 05:33 PM   #4
tuan1007
Nhập môn đệ tử
 
tuan1007's Avatar
 
Tham gia ngày: Jun 2009
Bài gửi: 5
:
Arrow Led sang dồn

Chiều nay cuối tuần nên được rảnh tí,Viết thử đoạn chương trình bạn yêu cầu.
20 phút sau cũng biên dịch ra được File .hex
Lấy cái EasyPIC ra nạp thử.

Kết quả OK.


#INCLUDE<16F877A.H>
#INCLUDE<KhaiBaoTGhi_16F877A.h>

#FUSES HS,NOWDT,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20000000)
#DEFINE Led PORTB
#use fast_io(b)
int8 sck,slx,bx,bl,gt;

main()
{
trisb=0;
while(true)
{
sck=8;
bl=0;
portb=0;
delay_ms(100);
while(sck>0)
{
bx=1;
slx=sck;
while(slx>0)
{
gt=bl|bx;
portb=gt;
delay_ms(100);
bx=bx<<1;
slx--;
}
bl=gt;
sck--;
}

}

}


----------------------------------------------------------------------------------------

Trong File đính kèm có File .c và .hex anh nhé!
Cuối tuần rồi,Em có hẹn nên đi đây.
File Kèm Theo
File Type: rar led sang don.rar (14.1 KB, 322 lần tải)
__________________
Thien Minh Electronic Solutions Co,ltd
226 Tan Phuoc, Ward 6, District 10, HCM City
Website: www.tme.vn
tuan1007 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2009, 12:22 AM   #5
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Trích:
Nguyên văn bởi tuan1007 View Post
Chiều nay cuối tuần nên được rảnh tí,Viết thử đoạn chương trình bạn yêu cầu.
20 phút sau cũng biên dịch ra được File .hex
Lấy cái EasyPIC ra nạp thử.

Kết quả OK.


#INCLUDE<16F877A.H>
#INCLUDE<KhaiBaoTGhi_16F877A.h>

#FUSES HS,NOWDT,NOPROTECT,NOLVP
#USE DELAY(CLOCK=20000000)
#DEFINE Led PORTB
#use fast_io(b)
int8 sck,slx,bx,bl,gt;

main()
{
trisb=0;
while(true)
{
sck=8;
bl=0;
portb=0;
delay_ms(100);
while(sck>0)
{
bx=1;
slx=sck;
while(slx>0)
{
gt=bl|bx;
portb=gt;
delay_ms(100);
bx=bx<<1;
slx--;
}
bl=gt;
sck--;
}

}

}


----------------------------------------------------------------------------------------

Trong File đính kèm có File .c và .hex anh nhé!
Cuối tuần rồi,Em có hẹn nên đi đây.
Cảm ơn bạn,nhưng ở đây mình muốn làm cho led có độ sáng thay đổi từ mạnh dần đến yếu dần và ngược lại (led sáng dần lên rồi tắt từ từ)
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-06-2009, 06:04 PM   #6
jackiele
Đệ tử 3 túi
 
Tham gia ngày: Jun 2008
Bài gửi: 51
:
Trích:
Nguyên văn bởi tienchuan View Post
Bạn có thể nói nói rõ hơn về phần này ko ? Mình chưa hiểu lắm !
Mình định làm cái mạch dùng led cho nó sáng đủ kiểu,thấy kiểu sáng dần ,tắt dàn cũng hay nên mình muốn làm về phần này !
Nếu có tài liệu về phần này thì bạn send cho mình với nhé !
Mail to: tienchuanct@gmail.com
Cảm ơn Bạn nhiều !
Bạn muốn mỗi led sáng từ từ lên (tắt->sáng mờ mờ->sáng mờ->sáng) hay 1 dãy led sáng từng con con tăng lên?
Bạn phải nói rõ.
Chào bạn!
jackiele vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2009, 12:27 AM   #7
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
Trích:
Nguyên văn bởi jackiele View Post
Bạn muốn mỗi led sáng từ từ lên (tắt->sáng mờ mờ->sáng mờ->sáng) hay 1 dãy led sáng từng con con tăng lên?
Bạn phải nói rõ.
Chào bạn!
mình muốn làm cho một dãy led sáng từ từ lên và tắt dần,nếu dược bạn chỉ giúp mình lam tên một led dơn trước di, còn dãy led hay một số led bất kì thì mình nghĩ từ từ làm sau.
Cảm ơn bạn trước nha !
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2009, 08:34 PM   #8
socola
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 18
:
int8 sck,slx,bx,bl,gt;
Mấy từ khai báo này viết tắt bởi chữ nào vậy anh Tuấn, anh giải thích cụ thể được ko anh
socola vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2009, 10:49 PM   #9
tuan1007
Nhập môn đệ tử
 
tuan1007's Avatar
 
Tham gia ngày: Jun 2009
Bài gửi: 5
:
Lệnh khai báo & Kiểu dữ liệu.

+ Int ( Viết tắc của chử integer ) : là lệnh khai báo,Kiểu dữ liệu là số nguyên.
- Miền giá trị từ -32,768 đến +32,767.
+ int8 sck,slx,bx,bl,gt: Là tên biến ,Do người lập trình chọn(Chú ý :Không trùng với lệnh,).
-Biến là một vị trí trong bộ nhớ dùng lưu trữ giá trị nào đó mà chương trình sẽ lấy sử dụng
-Mổi biến phải thuộc một kiểu dữ liệu. Thường có các kiểu dữ liệu :char,int,float,double.

+Bạn có thể khai báo các tên biến tùy bạn thích,bạn thấy dể kiển soát khi viết chương trinh,..............miển sao hợp cú pháp.

Ví Dụ :Chường trình Led PORTB sáng dịch sau đây vẩn chạy ok.

#include<16f877A.h>
#fuses HS,NOLVP,NOWDT,PUT
#use delay(clock=8000000) // defind crystal = 8MHz
//******************************
// main program start here
//******************************
void main()
{
int THIEN,MINH;

while(TRUE)
{
MINH=1;
for (THIEN=0;THIEN<=8;THIEN++)
{
output_b(MINH);
delay_ms(100);
MINH=MINH<<1;
}

}}

Chúc vui!!!
-------------------------------------------------------------------------

File đính kèm có file .c và file .hex.
File Kèm Theo
File Type: rar LED PortB.rar (8.6 KB, 116 lần tải)
__________________
Thien Minh Electronic Solutions Co,ltd
226 Tan Phuoc, Ward 6, District 10, HCM City
Website: www.tme.vn
tuan1007 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-06-2009, 11:11 PM   #10
socola
Đệ tử 1 túi
 
Tham gia ngày: Jun 2009
Bài gửi: 18
:
+ int8 sck,slx,bx,bl,gt: Là tên biến ,Do người lập trình chọn(Chú ý :Không trùng với lệnh,).

Ý e hỏi là tên biến đó anh viết tắt cũng phải có ý nghĩa gì ấy
VD: TMe : Thiên Minh e
Theo e hiểu mấy từ anh viết tắt như vầy:
gt: giá trị
bx: biến xoay
bl: biến lưu
sck và slx nhờ anh giải nghĩa dùm
Thank
socola vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-07-2009, 03:44 PM   #11
ketxanh
Đệ tử 3 túi
 
ketxanh's Avatar
 
Tham gia ngày: Aug 2008
Bài gửi: 53
:
Trích:
Nguyên văn bởi socola View Post
+ int8 sck,slx,bx,bl,gt: Là tên biến ,Do người lập trình chọn(Chú ý :Không trùng với lệnh,).

Ý e hỏi là tên biến đó anh viết tắt cũng phải có ý nghĩa gì ấy
VD: TMe : Thiên Minh e
Theo e hiểu mấy từ anh viết tắt như vầy:
gt: giá trị
bx: biến xoay
bl: biến lưu
sck và slx nhờ anh giải nghĩa dùm
Thank
sck: số chu kỳ
slx: số lần xoay
__________________
Hãy cho trước khi nhận
ketxanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-06-2009, 09:49 AM   #12
cuongthinh
Đệ tử 2 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 34
:
muốn nó sáng dần rồi tắt dần bạn chỉ việc dùng một timer đếm, đồng thời tạo ngắt. Trong chương trình xử lý ngắt ban tăng dần giá trị thanh ghi duty cycle, đồn thời tạo một biến đếm, khi nào đếm đủ số lượng rồi thì giảm dần duty cycle và tạo biến đếm lùi. Cái này có khó mấy đâu. đấy chỉ là một trong nhiều thuật toán thôi.
Tốt nhất bạn nên vẽ lưu đồ thuật toán ra rồi hãy lập trình. Mơi làm quen thì phải đi từng bước thôi
cuongthinh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2009, 10:35 AM   #13
thanhnam
Đệ tử 1 túi
 
Tham gia ngày: Aug 2006
Bài gửi: 24
:
Trích:
Nguyên văn bởi tienchuan View Post
Mình muốn viết 1 chương trình làm cho led sáng dần và tắt dần với pic16f877A (viết bằng CCS).Mình cũng đã thử coi qua mấy luồng trong diễn đàn về điều chế độ rộng xung ,nhưng chưa hiểu được (củ chuối quá!!!)
Vậy,Nhờ các Anh/Bạn nào làm về vấn đề này rồi chỉ cho em với !!!
Em cảm ơn mọi người trước nha !!!!
Chào bạn!
Bạn có thể viết CT dịch ngỏ ra RB0-RB7 xong dịch ngược lại từ RB7-RB0(cái này đã có trong diễn đàn), các ngỏ ra được gắng với các giá trị điện trở khác nhau (thứ tự tăng dần có kèm theo diod) để thay đổi điện áp điều khiển (vd điều khiển chân B của transistor) từ đó điều khiển được dòng điện ra tải làm cho đèn sáng dần hoặc tối dần. Nếu cần mịn hơn thì có thể dùng thêm Port khác.
Chúc bạn thành công.
thanhnam vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2009, 04:42 PM   #14
tienchuan
Đệ tử 4 túi
 
tienchuan's Avatar
 
Tham gia ngày: Oct 2008
Bài gửi: 71
:
chà,ý tưởng của bạn đơn giản nhưng cũng đã giải quyết được vấn đề của mình.
Nhưng ở đây,mình muốn thay đổi bằng phần mềm,
mình đang đọc datasheet về PWM của Pic877a,với lại mấy ngày nay đi suốt nên ko theo dõi được.

Cảm ơn tất cả mọi người !
tienchuan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-07-2009, 12:43 AM   #15
nhanh0112
Đệ tử 4 túi
 
Tham gia ngày: May 2007
Bài gửi: 81
:
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
nhanh0112 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:42 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