banner_2__resize
Giỏ hàng

Điện thoại cố định028.6264.1482
Bán hàng
: 0965.605.840 - 0868.532.813

Địa chỉ: 565/19 Bình Thới, P.10, Q.11, TP.HCM

+ Bán hàng trực tiếp: Từ Thứ 2 - Thứ 7: 8h00' sáng - 6h00' tối
                                    Riêng Chủ nhật: 8h00' sáng - 2h00' chiều
+ Bán hàng online: từ Thứ 2 - Thứ 7: 8h00' sáng - 5h00' chiều
+ Hỗ trợ kỹ thuật: từ Thứ 2 - Thứ 7: 8h00' sáng - 5h00' chiều

DANH MỤC SẢN PHẨM
Thống kê truy cập
Đang truy cập: 36
Trong ngày: 349
Trong tuần: 1890
Lượt truy cập: 487404

Bài 1 - Hướng dẫn lập trình Led ma trận

Có nhiều bác gọi điện thoại hỏi em về việc thiết kế led ma trận, sơ đồ mạch thiết kế như thế nào, dùng những IC nào, quét theo hàng hay theo cột, làm sao hiển thị được chữ A, bộ font chữ tạo ra như thế nào…
Để bớt phải đóng góp tiền cho VNPT trong thời buổi lạm phát này, em viết một tutorial tạm gọi là chi tiết. Hi vọng tutorial này sẽ giúp đỡ các bác đang nghiên cứu về led ma trận tiết kiệm được thời gian và công sức hơn.Có nhiều bác gọi điện thoại hỏi em về việc thiết kế led ma trận, sơ đồ mạch thiết kế như thế nào, dùng những IC nào, quét theo hàng hay theo cột, làm sao hiển thị được chữ A, bộ font chữ tạo ra như thế nào…
Để bớt phải đóng góp tiền cho VNPT trong thời buổi lạm phát này, em viết một tutorial tạm gọi là chi tiết. Hi vọng tutorial này sẽ giúp đỡ các bác đang nghiên cứu về led ma trận tiết kiệm được thời gian và công sức hơn.

Chúng ta bắt đầu làm việc ngay bây giờ. Trước tiên hướng tới thành quả cuối cùng để lấy hứng thú làm việc.


Em cũng đưa vào một hiệu ứng đơn giản là chữ “CHAO” sẽ cuộn tròn. Các bác có thể xem hiệu ứng này ở file avi download ở link sau:
http://rapidshare.com/files/133093020/Picture_028.rar

Chúng ta sẽ cần 02 miếng breadboard màu trắng để cắm 3 led ma trận 2 màu 8x8 vào. Các bác cắm sát vào phía bên trái của breadboard nhé. Khi cắm vào sẽ trông như sau:

 Phù vậy là xong được 30% công việc rồi. 30% nữa là cắm dây để kết nối mạch và 30% là để viết chương trình. 10% để gọi ai đó đến xem thành quả của chúng ta.
Ta sẽ đánh dấu các chân của led ma trận nhỉ? Các bác quay cái phía có chữ của led ma trận lên trên nhé. Lưu ý led ma trận của chúng ta là 2 màu có anot chung, một đầu cathot là của led màu xanh và đầu kia màu đỏ. 24 chân của led ma trận 2 màu 8x8 này em đánh dấu như sau:


Từ trái sang phải, trên xuống dưới thứ tự chân các led ma trận là:
- H1 Đ1 X1 H2 Đ2 X2 H3 Đ3 X3 H4 Đ4 X4
- H5 Đ5 X5 H6 Đ6 X6 H7 Đ7 X7 H8 Đ8 X8
Để các led đơn trên led ma trận sáng lên ta sẽ cấp dương nguồn vào các chân H1 – H8 và âm nguồn vào các chân Đ1 - Đ8, X1 - X8 tương ứng. Ví dụ ta muốn sáng led đỏ ở hàng thứ 5 và cột thứ 3 thì ta làm sao đó để cấp dương nguồn vào chân H5 và âm nguồn vào chân Đ3.
Chúng ta sẽ dùng nguyên lý quét theo hàng, tức là đầu tiên sẽ cấp nguồn vào chân H1, cùng lúc đó dữ liệu ta sẽ đưa ra các chân Đ1 – Đ8 và X1 – X8. Sau đó không cấp nguồn cho chân H1 nữa mà cấp nguồn cho chân H2 và dữ liệu tương ứng tiếp theo sẽ đưa ra các chân Đ1 – Đ8, X1 – X8. Cứ tiếp tục như thế cho đến chân H8 rồi quay trở lại chân H1.
Ta sẽ nối các chân H1 của tất cả các led ma trận lại với nhau nhé. Nối như thế này, rất đơn giản:

Sau đó các bác kiên nhẫn nối các chân H2, H3…H8 lại với nhau. Bây giờ ta nói đến chuyện làm cách nào để cấp nguồn tuần tự từng hàng nhé.

Ta sẽ sử dụng 8 transitor B564, nối các chân C của 8 transitor này với các chân H1-H8, chân E nối lên dương nguồn 5V, chân B là chân điều khiển. Khi chân B ở mức 1, transitor B562 không dẫn, H1 không có dương nguồn. Khi B được kéo xuống mức 0, transitor B562 sẽ dẫn, lúc đó H1 sẽ được nối với nguồn 5V.

Ta có 8 chân cần cấp nguồn lần lượt H1 – H8 tức là có 8 chân nối với các chân B (qua điện trở 1k) của transitor B562 CH1-CH8. Ta có thể nối thẳng các chân điều khiển này vào vi xử lý (ở đây em sẽ dùng con có sẵn là ATMEGA8518). Nhưng như vậy thì phí chân MCU quá, để chân MCU còn làm việc khác khi mở rộng mạch sau này. Do đó em em sẽ nối các chân CH1 - CH8 với con 74HC138. Qua con IC giải mã 3 ra 8 này em chỉ tốn 4 chân, 3 chân điều khiển tín hiệu A, B, C và một chân điều khiển tín hiệu cho phép cho nó. Nguyên lý làm việc của con này bác nào chưa hiểu thì xem thêm datasheet nhé. 
Rồi cắm 8 chú B562 này vào breadboard, mỗi chú có thêm 2 em điện trở đi kèm. Em bám vào chân B 1k, còn em lên dương nguồn thì 10k. Cắm cũng chẳng lâu đâu, xíu xiu thôi mà:

Cả chú 74HC138 luôn, nhưng hết chỗ cho chú rồi, cho chú sang board khác vậy

Và dưới đây là schematic của tutorial này nhé:
(em đang không vào được mạng qua đường chính thống, phải đi qua proxy nên không xài chức năng upload file của diễn đàn được, các bác chịu khó down rapidshare

http://rapidshare.com/files/133103844/Orcad.rar

Vậy ta đã giải quyết xong vấn đề cấp nguồn, giờ còn việc đưa data ra các chân Đ1 - Đ8, X1 – X8 của 3 con led ma trận. Ta sẽ cần 6 con IC dịch 74HC595. Nguyên lý làm việc của con này mong các bác tham khảo ở datasheet. Em chỉ tóm tắt thế này. Chân DATA_IN là đường dữ liệu vào (bit dữ liệu nối tiếp). Một xung SCK sẽ làm bit này đi vào thanh ghi dịch trong bụng con 74HC595. Sau 8 bit liên tục thì thanh ghi dịch này sẽ đầy. Tiếp tục đưa bit thứ 9 vào thì bit đầu tiên sẽ bị lòi ra chân số 9 và bit này lại là bit đầu tiên của IC 74HC595 tiếp theo (chân 9 của IC trước nối chân 14 của IC sau). Ta sẽ phải đưa liên tục 8 x 6 = 48 bit để xuất đủ dữ liệu cho 2 màu xanh và đỏ.

Tuy nhiên cần lưu ý là thanh ghi dịch mới chỉ thay đổi trong bụng con 74HC595 thôi chứ chưa đưa ra các chân. Muốn đưa dữ liệu từ các thanh ghi dịch này ra các chân 74HC595 thì cần đưa một xung vào chân RCK (chân số 12).



Các bác để ý là 6 chân SCK của 6 IC 74HC595 nối nhau và đưa về MCU, 6 chân RCK cũng tương tự. Chân G (enable) được nối mass và chân MR (chân reset) nối lên nguồn.

Trong tutorial này, để tiết kiệm thời gian cho em và cho các bác, em chỉ cắm 3 con 74HC595 phục vụ cho việc sáng các led đỏ. Các bác có thể làm với cả 6 IC dịch để sáng được cả các led xanh nếu muốn.
Các bác xem hình ảnh khi cắm xong 3 con 74HC595 này, hơi rối một chút nhưng bác sỹ bảo không sao:



Rồi, đưa cả con MCU vào luôn nhé, ở đây em dùng ATMEGA8515. Schematic các bác xem ở bài trước. Bác nào xài PIC thông cảm nhé, bữa nào em rảnh em làm lại cái này với PIC vậy



Oái, sao tự nhiên nó sáng mấy cái led vậy, chắc con ATMEGA8515 của em đang chạy chương trình cũ của nó. Các bác đừng quan tâm nhé.

Vậy là phần cứng đã xong, em để 1,2 ngày để các bác viết thử phần mềm. Các bác cần lưu ý là em không sử dụng điện trở hạn dòng nhé. Thông thường người ta sẽ hạn dòng bằng điện trở 220-330 ohm ở các chân Đ1 - Đ8 trước khi nối vào IC 74HC595. Vì em sử dụng phương pháp quét hàng, mỗi hàng chỉ sáng trong thời gian rất ngắn nên sẽ không ảnh hưởng gì đến tuổi thọ của led. Tuy nhiên khi lần đầu tiên làm với led ma trận các bác sẽ không tránh khỏi việc ngâm điện 5V giữa 2 đầu của led. Em mách các bác một chiêu nho nhỏ, thay vì nối thẳng chân E của các transistor B562 lên nguồn, các bác hãy nối qua một điện trở khoảng 330 ohm. Sau khi chương trình của ta tốt rồi, ta sẽ bỏ các điện trở này đi.

Các bài viết tiếp theo của em sẽ viết về cách hiển thị dữ liệu lên led ma trận, cách tạo phông chữ bằng phần mềm Microsoft Excel, cách tạo các hiệu ứng dịch chữ, tăng giảm độ sáng, cách làm chữ hiện lên, biến mất... Các bác từ từ đón xem.

Hôm nay ta bắt đầu viết những chương trình đầu tiên, từ cái dễ đến cái khó. Không thể nào có thể viết một phát mà có ngay một dòng chữ chuyển động ngay được. Giống như ta tập đi, từng bước một.
Ban đầu ta sẽ làm sao để bảng led ma trận của ta hiển thị được cứ một điểm sáng lại có một điểm tắt như sau:


Chương trình em sẽ viết rất đơn giản như sau:

 
#include <mega8515.h>
#include <delay.h>
#define SCK PORTB.7 //Chân cấp xung để đưa data vào trong thanh ghi dịch
#define DATA PORTB.5 //Chân đưa data vào thanh ghi dịch
#define SCL PORTB.3 //Khi data đã vào trong thanh ghi dịch, đưa một xung ra chân này để đưa data từ thanh ghi dịch ra các chân của IC74HC595

//Bốn chân sau đây điều khiển việc cấp nguồn ra các hàng của led ma trận
#define A PORTC.0;
#define B PORTC.1;
#define C PORTC.2;
#define OE1 PORTC.3;

unsigned char i,j;
void Data_in(unsigned char k){ // k là bit dữ liệu vào có giá trị là 0 hoặc 1;
DATA=k; // DATA đưa dữ liệu vào thanh ghi dịch
SCK=0; // Tạo ra một xung ở chân SCK
SCK=1; 
}
void LatchData(){
SCL=0; // Sau khi đưa đủ dữ liệu vào các thanh ghi dịch
SCL=1; // ta tạo một xung để đưa dữ liệu từ thanh ghi dịch ra các chân của 74HC595
}
void main(void){
DDRB=0xFF; // Cho PORTB, PORTC là output hết
DDRC=0xFF;
SCK=1; // Ban đầu đưa các chân này lên 1
SCL=1; // Để tạo xung ta sẽ cho nó băng 0 rồi lại bằng 1
while (1){
for (i=0;i<=7;i++){ // 8 hàng, từ hàng 0 đến hàng 7 (H1 - H8)
// Ta có tất cả 8 hàng và 24 cột. Do đó phải đưa 24 bit dữ liệu ra các thanh ghi dịch (vòng lặp for gọi 12 lần, mỗi lần đưa ra 1 bit 1, 1 bit 0)
for (j=1;j<=12;j++){
Data_in(0);
Data_in(1);
}
// Đưa ra thanh ghi dịch xong rồi, đưa data ra các chân của 74HC595
LatchData();
// PortC sẽ đưa ra các số từ 0 đến 7 ở các chân PORTC.0, PORTC.1,.PORTC.2,... Ta cộng thêm 8 để muốn chân PORTC.3 sẽ luôn bằng 1. Con 74HC138 sẽ ở trạng thái tích cực để giải mã từ 3 ra 8.
PORTC=i+8;
// Delay một chút để tạo hiện tượng lưu ảnh của mắt. Các bác hãy thay đổi giá trị này để thấy rõ hiệu ứng quét hàng. Thay số 3 bằng 50 chẳng hạn.
delay_ms(3);

};
}

Vậy là xong bài lập trình đầu tiên. Dễ như ăn cháo các bác nhỉ?

 

 

(Nguồn: dientuvietnam.net)

LIÊN HỆ

Địa chỉ: 565/19 Bình Thới, P.10, Q.11, TP.HCM

Giờ làm việc:
+ Bán hàng trực tiếp: Từ Thứ 2 - Thứ 7 (8h00' sáng - 6h00' tối) - Chủ nhật (8h00' sáng - 2h00' chiều)
+ Bán hàng online: từ Thứ 2 - Thứ 7 (8h00' sáng - 5h00' chiều)

☎ Điện thoại cố định: 028.6264.1482
☎ 
Bán hàng:
0965.605.840 (Zalo) - 0868.532.813 (Zalo)

✉ Email: sale@chipn24.com

Design by Thiết kế WEB