Sau đây là tiếp tục loạt bài hướng dẫn kỹ thuật giúp các bạn có thể dễ dàng tiếp cận với các kỹ thuật.
Như các bạn thấy Vi điều khiển chỉ làm việc với tín hiệu số trong khi đó các vật xung quanh muốn giao tiếp với VĐK là ko thể. Vì muốn giao tiếp với môi trường bên ngoài phải thông qua bộ cảm biến mà tín hiệu cảm biến là tương tự.
do đó ta sẽ dùng IC chuyển đổi tín hiệu tương tự thành số ADC0804 để giao tiếp với VĐK hình dạng và cách mắc của nó như sau:
Với chức năng cụ thể các chân như sau:
1. Chân CS( chip select) : Đây là chân chọn chíp, tích cực ở mức 0( ở mức 0 mới cho phép hoạt động)
2. Chân RD(read) là chân đọc Tín hiệu đầu vào tích cực mức thấp. Khi CS=0 và nếu có 1 xung từ cao xuống thấp ở chân RD thì dữ liệu 8 bit sẽ được đưa ra khỏi bộ đệm( Hiểu nôm na là khóa dữ liệu).
3. Chân WR(write) chân ghi. Chân này dùng để báo cho ADC bắt đầu quá trình chuyển đổi. khi CS=0 WR bắt đầu chuyển đổi với một tín hiệu từ thấp lên cao.
Lưu ý : lượng thời gian cần thiết để chuyển đổi phụ thuộc vào tần số đưa đến chân CLK IN và CLK R
4. Chân INT là chân ngắt báo cho VĐK biết khi chuyển đổi đến bít thứ 8( chuyển đổi xong dữ liệu.
======================================================
Các chân còn lại các bạn có thể tham khảo cách mắc như trên và datasheet của nó.
Còn con DAC chỉ đơn giản là lấy dữ liệu và lập trình ra nó thôi.ko phải lập trình gì cả.
Còn về lập trình mình sẽ hướng dẫn các bạn cụ thể như sau:
Đây là sơ đồ mạch:
Đây là mạch cứng. Còn lập trình nó như sau:
Nguyên lý điều khiển ADC0804 như sau:
khi chân CS=0 thì cho phep tích cực.
và khi có 1 xung từ thấp nên cao thì cho phép chuyển đổi.
Cứ chuyển đổi xong 1 bít thì ngắt ADC để kiểm tra bít thứ 7( chân INT) nếu chuyển đổi xong 8 bít thì chân INT=0;
từ đó ta có code[chuyển đổi như sau:
Tương tự để hiển thị mình sẽ dùng phương pháp quét led. nếu bạn nào chưa rõ về phương pháp quét led có thế tham khảo thêm trong Hướng dẫ kỹ thuật quét led đã có trong diễn đàn.
Còn đây là code mình viết để điều khiển cho cả mạch nhé.
Mạch có sơ đồ khối như sau:
Còn dưới đây là code của cả bài :
Như các bạn thấy Vi điều khiển chỉ làm việc với tín hiệu số trong khi đó các vật xung quanh muốn giao tiếp với VĐK là ko thể. Vì muốn giao tiếp với môi trường bên ngoài phải thông qua bộ cảm biến mà tín hiệu cảm biến là tương tự.
do đó ta sẽ dùng IC chuyển đổi tín hiệu tương tự thành số ADC0804 để giao tiếp với VĐK hình dạng và cách mắc của nó như sau:
Với chức năng cụ thể các chân như sau:
1. Chân CS( chip select) : Đây là chân chọn chíp, tích cực ở mức 0( ở mức 0 mới cho phép hoạt động)
2. Chân RD(read) là chân đọc Tín hiệu đầu vào tích cực mức thấp. Khi CS=0 và nếu có 1 xung từ cao xuống thấp ở chân RD thì dữ liệu 8 bit sẽ được đưa ra khỏi bộ đệm( Hiểu nôm na là khóa dữ liệu).
3. Chân WR(write) chân ghi. Chân này dùng để báo cho ADC bắt đầu quá trình chuyển đổi. khi CS=0 WR bắt đầu chuyển đổi với một tín hiệu từ thấp lên cao.
Lưu ý : lượng thời gian cần thiết để chuyển đổi phụ thuộc vào tần số đưa đến chân CLK IN và CLK R
4. Chân INT là chân ngắt báo cho VĐK biết khi chuyển đổi đến bít thứ 8( chuyển đổi xong dữ liệu.
======================================================
Các chân còn lại các bạn có thể tham khảo cách mắc như trên và datasheet của nó.
Còn con DAC chỉ đơn giản là lấy dữ liệu và lập trình ra nó thôi.ko phải lập trình gì cả.
Còn về lập trình mình sẽ hướng dẫn các bạn cụ thể như sau:
Đây là sơ đồ mạch:
Đây là mạch cứng. Còn lập trình nó như sau:
Nguyên lý điều khiển ADC0804 như sau:
khi chân CS=0 thì cho phep tích cực.
và khi có 1 xung từ thấp nên cao thì cho phép chuyển đổi.
Cứ chuyển đổi xong 1 bít thì ngắt ADC để kiểm tra bít thứ 7( chân INT) nếu chuyển đổi xong 8 bít thì chân INT=0;
từ đó ta có code[chuyển đổi như sau:
- Code:
// ham chuyen doi gia trij ADC
void conv(){
CS = 0; //CS muc 0 dc chon
viet = 0; //WR=0 bat dau chuyen doi
viet= 1; //Make WR high
CS = 1; //CS=1 ko cho phep
while(NGAT); //Bao la ket thuc chuyen doi du lieu
}
Tương tự để hiển thị mình sẽ dùng phương pháp quét led. nếu bạn nào chưa rõ về phương pháp quét led có thế tham khảo thêm trong Hướng dẫ kỹ thuật quét led đã có trong diễn đàn.
Còn đây là code mình viết để điều khiển cho cả mạch nhé.
Mạch có sơ đồ khối như sau:
Còn dưới đây là code của cả bài :
- Code:
//Hand in hand group
// DTVTk7a
--------------------------------------*/
/*-------khai bao thu vien----------------*/
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
/*--------Dinh danh cac cong--------------*/
#define adc_port P1
#define dac_port P0
//======================================
/* khai bao cac chan dieu khien ADC0804--*/
sbit doc = P3^0; // chan so2
sbit viet = P3^1; // chan so3
sbit NGAT = P3^2; //chan so 5
sbit CS = P3^3; // chan so 1
/*--------ma led 7 doan anot chung-------------------------------------*/
unsigned char M[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
/* mang dieu khien 74ls138-------------------*/
unsigned char dk[6]={0x80,0x90,0xA0,0xB0,0xC0,0xD0}; // dieu khien 138
unsigned char donvi,chuc,tram,adc_val;
long num,j;
void tre(void) // tre quet 6 led thoi gian quet la 6.6ms /1 led
{
TMOD=0x10;
TH1=58935/256;
TL1=58935%256;
TR1=1;
while(!TF1) ;
TF1=0;
TR1=0;
}
void hienthi(void) // chuong trinh quet led
{
P0=adc_val;
tram=(adc_val)/100;
chuc=(adc_val%100)/10;
donvi=(adc_val%100)%10;
P3=dk[0];
P2=0x88;// hien chu A
tre();
P3=~dk[0];
P2=0xFF;
P3=dk[1];
P2=M[tram];
tre();
P3=~dk[1];
P2=0xFF;
P3=dk[2];
P2=M[chuc];
tre();
P3=~dk[2];
P2=0xFF;
P3=dk[3];
P2=M[donvi];
tre();
P3=~dk[3];
P2=0xFF;
P3=dk[4];
P2=0x9C;
tre();
P3=~dk[4];
P2=0xFF;
P3=dk[5];
P2=0xC6;
tre();
P3=~dk[5];
P2=0xFF;
}
// ham chuyen doi gia trij ADC
void conv(){
CS = 0; //CS muc 0 dc chon
viet = 0; //WR=0 bat dau chuyen doi
viet= 1; //Make WR high
CS = 1; //CS=1 ko cho phep
while(NGAT); //Bao la ket thuc chuyen doi du lieu
}
void read(){
CS = 0;
doc = 0; //
adc_val = adc_port; //doc cong ra adc
dac_port=adc_val;
doc = 1; //xuat du lieu o cong ra vao vdk
CS = 1; //
}
// ham tao tre
void main(void)
{
while(1)
{
conv();
read() ;
hienthi();
}
}
/* ung voi moi xung tu cao xuong thap o chan WR,RD thi du lieu duoc chuyen doi
va xuat ra chan cua VDK-----------------------*/