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: 40
Trong ngày: 270
Trong tuần: 2981
Lượt truy cập: 393664

Bài 2 - Hướng dẫn lập trình Led ma trận (tt), dùng hàm spi

Vậy là qua bài đầu, các bác đã nắm được một phần nguyên lý quét led rồi nhỉ? Rất đơn giản ta đưa data vào một hàng qua cơ chế thanh ghi dịch và ngay sau khi đưa data vào ta cấp nguồn vào cho hàng đó. Cứ tuần tự như thế, với một tốc độ quét hợp lý hình ảnh sẽ được hiện ra.

Bài vừa rồi ta đã dùng cơ chế truyền dữ liệu SPI từ ATMEGA8515 ra các thanh ghi dịch bằng phần mềm. Tức là ta phải làm tuần tự 2 việc: 1. đưa data vào ngõ vào của thanh ghi dịch, 2. Cấp cho nó một xung clock.

MCU ATMEGA8515 có sẵn phần cứng SPI, mỗi lần đưa ra ngoài được 8 bit. Có 4 chân được dành cho giao tiếp SPI là PORTB.7 (chân cấp xung clock). PORTB.6 (nhận data về). PORTB.5 (xuất data ra). PORTB.4 (tích cực mức thấp để chọn chip). Ở đây vì chỉ xuất data ra và đám IC dịch luôn sẵn sàng để nhận dữ liệu nên ta chỉ cần 2 chân. PORTB.7 (chân clock) và PORTB.5 (chân data out).

Chương trình đầu ta sẽ chỉnh sửa/bổ sung một chút như sau:

 
// SPI functions, khai báo thêm hàm spi.h
#include
//trong hàm main, khai báo thêm phần SPI
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 4000,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;
while (1){
for (i=0;i<=7;i++){ //có 8 hàng
if (i&1){ //nếu là hàng lẻ 1,3,5,7 thì sáng trước, tắt sau
spi(0b10101010); //mỗi hàm spi đưa ra được 8 bit
spi(0b10101010); //do đó sẽ gọi 3 lần
spi(0b10101010); 
} else {//nếu là hàng chẵn 0,2,4,6 thì sáng sau, tắt trước
spi(0b01010101); 
spi(0b01010101); 
spi(0b01010101); 

LatchData();
PORTC=i+8;
delay_ms(2);
}

Vậy là xong bài 2, sử dụng spi bằng phần cứng của MCU.

Các bác có để ý em sửa lại delay là 2ms không? Các bác sẽ thấy hiện tượng hơi chớp ở bài 1 không còn nữa.
Bác nào tính cho em tần số quét ở bài 1 và bài 2 nào. Đây là công việc quan trọng trước khi ta vào bài 3. Thay vì dùng hàm delay, ta sẽ dùng timer để quét led.

 

Chưa có ai tính giúp em tần số quét nhỉ? em tính thử xem nhé. Nếu em delay 3ms, tính thêm các câu lệnh rườm rà nữa là khoảng 3.5 ms. Như vậy để quét hết 8 hàng ta sẽ cần 3.5 x 8 = 28ms. Như vậy tần số quét là 1s = 1000 ms / 28 = 35.7. Tức là 1 giây màn hình led của ta sẽ được quét khoảng 36 lần. Ta sẽ cảm thấy hiện tượng chớp chớp trên màn hình led.

Nếu delay là 2 ms, các câu lệnh nữa là 2.5. Quét hết 8 hàng cần 2.5 x 8 =20 ms. Tần số quét sẽ là 1000 / 20 = 50 Hz. Hiện tượng chớp không còn nữa.

Điều em muốn nói ở đây là các bác phải phân biệt tần số quét và khái niệm số hình trên giây ví dụ 24 hình /s. Tần số quét của ta phải từ 50 Hz trở lên thì ta mới không thấy hiện tượng chớp tắt. Các bác có thể kiểm tra điều này bằng cách chuột phải lên destop (màn hình nền windows) ->properties -> settings -> advanced -> Monitor -> Screen refresh rate bác sẽ thấy windows cho phép ta chọn tốc độ quét của màn hình trong khoảng 60 đến 120 Hz. Các bác hãy để thử tốc độ quét thấp nhất 60Hz (hiện cao hơn tần số 50 Hz của ta) thì sẽ thấy màn hình máy tính rung rung...





Vậy ta chuẩn bị sang bài 3 được rồi nhỉ? Sử dụng timer để quét led thay cho hàm delay.

 

(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