Điện thoại cố định: 028.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
Em sẽ khai báo ngắt Timer1 như sau:
Timer1 có tần số hoạt động là 15625Hz tức là nó sẽ đếm 15625 lần trong vòng 1s. Ở đây, nó cứ đếm từ 0 đến 0x25 = 37 thì ngắt Timer1 sẽ được gọi. Như vậy ngắt Timer1 sẽ được gọi với tần số là 15625/37=422 lần/s.
Chúng ta phải nhớ kích hoạt ngắt nhé:
Chương trình ngắt Timer1 được viết như sau:
Như vậy mỗi khi ngắt Timer1 được gọi thì một hàng sẽ được quét. Ta có tất cả 8 hàng. Do đó tần số quét sẽ là: 422/8=53Hz. Với tần số quét này màn hình led sẽ không bị chớp.
Các bác có thể thấy trong vòng lặp while (1) không còn câu lệnh nào cả. Việc quét led hoàn toàn thực hiện tự động nhờ Timer1.
Các bác nghỉ lấy sức, qua bài 4 chúng ta sẽ học cách tạo bộ font chữ bằng chương trình Microsoft Excel như thế nào.
Source code của bài 3 đây:
http://rapidshare.com/files/134768565/bai3.doc
3. Thay delay bang ngat Timer 1
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.8 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 7/27/2008
Author : Nguyen Hai Ha
Company : www.softviet.net
Comments:
Chip type : ATmega8515L
Program type : Application
Clock frequency : 16,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*****************************************************/
#include
#include
// SPI functions
#include
#define SCK PORTB.7
#define DATA PORTB.5
#define SCL PORTB.3
#define B PORTC.1;
#define C PORTC.2;
#define OE PORTC.3;
unsigned char r=0;
void LatchData(){
SCL=0;
SCL=1;
}
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{ if (r & 1){
spi(0b10101010);
spi(0b10101010);
spi(0b10101010);}
else {
spi(0b01010101);
spi(0b01010101);
spi(0b01010101);
}
LatchData();
PORTC=r+8;
r++;
if (r==8) r=0;
}
void main(void){
// 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;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x25; // Quyet dinh toc do quet
OCR1BH=0x00;
OCR1BL=0x00;
DDRB=0xFF;
DDRC=0xFF;
SCL=1;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x40;
// Global enable interrupts
#asm("sei")
while (1){
}
}
Bây giờ ta bắt đầu tạo chữ “CHAO” bằng chương trình Excel nhé.
Trước hết em nhắc lại một xíu về số nhị phân nhé. Một byte có 8 bit. Mỗi bit có thể biểu diễn được hai trạng thái 0 và 1. 0 ứng với led tắt, 1 ứng với led sáng. Chúng ta đang làm một bảng led ma trận gồm 3 panels led 8x8. Như vậy, một hàng led ma trận của chúng ta hiện nay có 24 cột. Rõ ràng ta sẽ tốn 3 bytes = 24 bits để biểu diễn dữ liệu cho một hàng. Ta sẽ truyền dữ liệu cho các IC dịch 74HC595 của chúng ta như sau:
- Muốn cho các led của một hàng sáng hết ta sẽ truyền 3 bytes đều mang giá trị là 0b1111111 (hệ nhị phân) = 255 (hệ cơ số 10).
- Muốn cho một hàng không có led nào sáng ta sẽ truyền 3 bytes đều mang giá trị là 0b00000000 = 255.
- Muốn cho một cột sáng xong lại đến một cột tắt ta truyền 3 bytes là 0b10101010 = 2^7 + 2^5 + 2^3 + 2^1 = 128 + 32 + 8 + 2 = 178;
Bác nào con lăn tăn về việc chuyển đối số nhị phân thì xem lại sách vở một chút nhé. Các bác chỉ cần nhớ là một byte có 8 bits: bit 7, bit 6, bit 5… và bit 0. Khi chuyển đổi từ nhị phân sang thập phân cứ hễ bit nào bằng 1 thì ta sẽ phải cộng thêm 2 lũy thừa của bit đó. Như ở ví dụ trên số nhị phân 0b10101010 có các bit số 7, 5, 3 và 1 bằng 1 nên ta sẽ phải cộng 128, 32, 8 và 2 lại với nhau.
Như vậy ta đã sẵn sàng mở Excel ra rồi nhỉ? Nhấn vào (1) để chọn toàn bộ các ô trong sheet sau đó chọn (2) Format - Column – Width nhập vào 2.2:
Hàng đầu tiên nhập vào các giá trị của các trọng số 0 đến 7 của 3 bytes ứng với 24 cột. 1 tức là 2 mũ 0, 2 là 2 mũ 1, 4= 2^2 … và 128=2^7
Bây giờ là lúc các bác có thể thỏa sức sáng tạo ra bộ font mà các bác muốn. Lưu ý là ta chỉ có 8 dòng để tạo bộ font thôi. Em thấy cần 7 dòng là sẽ được một bộ font cân đối. Vậy ta cứ để dư một dòng vậy. Ở chỗ nào sau này các bác muốn led sáng thì gõ số 1 vào. Chỗ nào led tắt thì để trống. Đây là sản phẩm của em sau 2 phút:
Em có hoa tay phết các bác nhỉ. Vậy 8 hàng tiếp theo em tính giá trị thập phân tại các bit 1 nhé:
Việc tiếp theo là em sẽ tính toán lại các byte (24 bytes) đại diện cho chữ “CHAO” này. Cũng rất rất đơn giản thôi. Ta cứ cộng mỗi 8 số lại với nhau như hình dưới.
Như vậy ta có được 24 bytes dùng để hiện chữ “CHAO” rồi. Các byte lần lượt là 156, 136, 112 (cho việc hiện hàng 1), 162, 72, 137 (hàng 2)… 156, 40, 114 (hàng 7), 0, 0, 0 (hàng 8).
Việc cuối cùng là ta đưa nó vào trong một mảng, mảng này sẽ được cất trên ROM của chú AVR khi nạp chương trình luôn.
XINCHAO[]={156,136,112,162,72,137,130,40,138,130,47,138,130,232,139,162,40,138,156,40,114,0,0,0};
Vậy là xong cái việc tạo font. Sau này các bác có thể tự tạo cho mình bất cứ font chữ hay hình ảnh nào rồi.
Bài tiếp theo em sẽ hướng dẫn các bác đưa cái sản phẩm tim óc nãy giờ của chúng ta lên màn hình led nhé.
(Nguồn: dientuvietnam.net)
Đị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