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 12-01-2010, 06:26 PM   #1
Option
Nhập môn đệ tử
 
Tham gia ngày: Dec 2009
Bài gửi: 9
:
cho em hỏi về giá trị sau khi đọc adc để chuyển sang led 7 đoạn !

em thấy khi viết xong code và chạy thì giả sử giá trị (read adc) em cho xuất ra portc của 16f877, thì giá trị đó là nhị phân thì phải. vậy khi đó em phải làm thế nà để chuyển giá trị đó ra mã led 7 đoạn đây ạ. hic. giúp em cái này với.
Option vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2010, 04:02 PM   #2
trungduc
Đệ tử 2 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 44
:
Chào bạn, theo mình bạn nên dùng IC giải mã 74LS47 và như vậy bạn phải chuyển sang mã BCD, ra 4 đường.
Chúc thành công
trungduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2010, 05:57 PM   #3
thieutuoc
Nhập môn đệ tử
 
Tham gia ngày: Apr 2009
Bài gửi: 7
:
trong code bạn phải viết thêm chương trình chuyển hex sang bcd.
chúc vui.!
thieutuoc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2010, 06:57 PM   #4
Option
Nhập môn đệ tử
 
Tham gia ngày: Dec 2009
Bài gửi: 9
:
Vậy kết quả đọc về bằng lệnh read(adc) ở dạng hex sao anh?
Option vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-01-2010, 10:20 PM   #5
thieutuoc
Nhập môn đệ tử
 
Tham gia ngày: Apr 2009
Bài gửi: 7
:
giá trị xuất ra nhị phân bạn ạ! bạn có thể tham khảo thêm tài liệu về pic bằng tiếng việt có trên diễn đàn đó, bạn dùng con giải mã cũng được.
http://www.mediafire.com/?nzh2o4wnnnt
bạn có thể tham khảo bài này, dùng con 74595
chúc vui!

thay đổi nội dung bởi: thieutuoc, 13-01-2010 lúc 10:32 PM.
thieutuoc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-01-2010, 09:12 PM   #6
chungcb86
Đệ tử 1 túi
 
chungcb86's Avatar
 
Tham gia ngày: Dec 2009
Bài gửi: 24
:
Nếu bạn dùng 74247 hoặc 7447 để giải mã led 7 thanh thì bạn chỉ cần tách các số bạn đọc được từ adc là song mà. VD nhé:
Bạn đọc được từ adc một số là: "123" vậy bạn chỉ cần xuất ra 7 thanh số 1,2,3 là được.
123=1*100+2*10+3*1
chungcb86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-01-2010, 10:03 PM   #7
vu son
Nhập môn đệ tử
 
Tham gia ngày: Aug 2009
Bài gửi: 5
:
Nếu không có ý định tiết kiệm chân IC thì không nhất thiết phải dùng IC dịch. Bạn đặt một biến là: ''value = read(adc)'', vấn đề của bạn chỉ là viết chương trình hiển thị giá trị ''value'' đó ra led 7 đoạn thôi mà.
vu son vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-01-2010, 03:17 PM   #8
lamvantruong
Nhập môn đệ tử
 
lamvantruong's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: HCM City
Bài gửi: 5
:
Giải đáp!

Trích:
Nguyên văn bởi Option View Post
em thấy khi viết xong code và chạy thì giả sử giá trị (read adc) em cho xuất ra portc của 16f877, thì giá trị đó là nhị phân thì phải. vậy khi đó em phải làm thế nà để chuyển giá trị đó ra mã led 7 đoạn đây ạ. hic. giúp em cái này với.
Như thế này nhé!

Nếu ADC của bạn 10 bit (tương tự cũng làm được trên ADC 8bit)
Như vậy, led 7 đoạn anod chung ta có mã
dp g f e d c b a mã thập phân
1 1 1 1 1 1 0 0 1 --> 249
2 1 0 1 0 0 1 0 0 --> 164
3 .............
4 .............
5 .............
6 .............
7 .............
8 .............
9 .............
////////////////////////////////////////////////////////////////////////////////////////////////////
PORTD ---------> du lieu cho led 7 doan (D.0 --> D.7 tương ứng với a --> dp)
PORTC ---------> Quet cot (C.3 --> C0 tương ứng với led từ led 7 đoạn từ trái qua phải)

Tham khảo đoạn code nha: (chỉ viết thuật toán tính, không viết đoạn cấu hình)

unsigned char DATA[10]={249,164,...,...,...,...,...,...,...,...};
unsigned char ng, tr, ch, dv;
unsigned int temp;
....
....

temp = read_ADC(1);// Đọc ADC kênh 1

ng = temp/1000;
tr = (temp - 1000*ng)/100;
ch = (temp - (1000*ng + 100*tr))/10;
dv = temp - (1000*ng + 100*tr + 10*ch);

//////////////////////////////////////////////////////

Dùng biến ng,tr,ch,dv làm tham số truy xuất vào mảng DATA[] lấy dữ liệu xuất ra Led.

PORTC = 0b1000; PORTD = DATA[ng]; delay_ms(10);
PORTC = 0b0100; PORTD = DATA[tr]; delay_ms(10);
PORTC = 0b0010; PORTD = DATA[ch]; delay_ms(10);
PORTC = 0b0001; PORTD = DATA[dv]; delay_ms(10);

Thế là xong.

Lưu ý: Cách này đòi hỏi phải hiểu nguyên lý, và làm tạm thôi. Chạy tốt đã thử rồi, nhưng theo đánh giá thì không được tối ưu lắm. Nếu bạn có thời gian, trên cơ sở đó mà làm cái cho riêng mình nhé.

Thân!
__________________
"Có bầu có bạn can chi tuổi,
Cùng gió cùng mây thế mới vui"

Lâm Văn Trường
lamvantruong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-02-2010, 10:12 AM   #9
balion
Nhập môn đệ tử
 
Tham gia ngày: Jan 2010
Bài gửi: 1
:
cac anh em co the tham khao cai nay di,bo qua phan khai bao thiet bi.
no van con loi chua chay duoc nmhung de anh em con tham khao cach hien thi len led 7 ma khong can ket noi them thiet bi ngoi vi nao khac nua .
tien the sua giup em luon doan ma con thieu.he
------------------------------------------------------------------------------------
int8 led[4]={0b00000001,0b00000010,0b00000100,0b00001000};//khai bao quet led
int8 font[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//khai bao du lieu xuat ra led a-f

void hienthi (int16 x)
{
signed int8 m;
int8 n;
int8 a[4];
n=0;
while (x!=0)
{
a[n]=x%10;
x=x/10;
n++;
}
for(m=0;m<n;m++)
{
portb=led[m];
portd=font[a[m]];
delay_ms(2);
}
}

void main()
{
int8 adc;
set_tris_b(0x00);
set_tris_d(0x00);
setup_adc(adc_clock_internal);//su dung thoi gian lay may ADC=0,2-0,6
setup_adc_ports(AN0);//su PortA0 lam chan vao ADC
set_adc_channel(0);
while(true)
{
adc=read_adc();//doc gia tri ADC
hienthi(adc);
delay_ms(1000);

}
}
//chy y cai nay van con loi em cung chua sau dc nhung cho cac anh em tham khao
//ve cach hien thi truc tiep ra led 7 thui khong can them linh kien j khac.
//neu co ai sua dc doan xuat adc ra thi port len cho em xem voi nhe !e cung dang tim hieu.
balion vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
ta ta ta


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à 07:25 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