Thiết kế bảng quảng cáo LED sử dụng vi điều khiển Atmega 16 và module hiển thị

MỤC LỤC

1.2) Bảng led quảng báo

Đèn LED có những ứng dụng rất phong phú và rộng rãi : làm bộ phận hiển thị trong các thiết bị điện, điện tử, trang trí, làm đèn giao thông, các đèn LED phát ra tia hồng ngoại được dùng trong các thiết bị điều khiển từ xa trong điện tử dân dụng… thậm chí ngày nay người ta đã và đang nghiên cứu đèn LED phát ánh sáng trắng để thay thế cho các thiết bị chiếu sáng thông thường như đèn sợi đốt, đèn neon, đèn compact…Điều này là hoàn toàn có thể và có lẽ là sẽ thành hiện thực trong một tương lai không xa. Tuy nhiên, do hạn chế về nhiều mặt cũng như ảnh hưởng của suy thoái kinh tế toàn cầu nên hiện nay ở Việt Nam xuất hiện không nhiều các bảng, biển quảng cáo hiển thị video, nhưng các bảng quảng cáo hiển thị dạng text dùng để giới thiệu, quảng bá thương hiệu hay để hiển thị thông tin về các loại hình dịch vụ, sản phẩm (mức lãi xuất ở ngân hàng, thông tin tại sàn giao dịch chứng khoán, thông tin về thời gian biểu tại sân bay, kết quả các trận bóng …) … thì vẫn đang phát triển mạnh mẽ.

1.3) Giới thiệu chung về hệ thống

2.1) Giới thiệu về vi điều khiển họ AVR

Bộ nhớ chương trình được truy cập trong mỗi chu kỳ xung Clock và một lệnh chứa trong Program memory được load vào thanh ghi lệnh (instruction Register), thanh ghi lệnh tác động cũng như lựa chọn tệp thanh ghi cũng như RAM cho ALU thực thi. AVR có ưu điểm là hầu hết các lệnh đều được thực thi trong một chu kỳ xung nhịp, vì thế mà trong một số trường hợp dù nguồn clock của AVR nhỏ hơn một số loại vi điều khiển khác (như PIC) nhưng thời gian thực thi vẫn nhanh hơn.

Hình 2 -  Cấu trúc bên trong của AVR
Hình 2 - Cấu trúc bên trong của AVR

3.1) Cấu trúc và nguyên lý cấp nguồn cho led ma trận

Ta phải để cho từng hàng (cột) của kí tự lần lượt kiện thị trên led ma trận với tần số cao. Trước tiên ta phải xác định mức logic cần cấp cho từng hàng (cột) của led ma trận để hiển thị ký tự rồi lưu các giá trị logic này lại. Sau đó khi cần hiển thị ký tự thì ta lần lượt đưa các giá trị này ra các chân cấp nguồn cho hàng (cột) đồng thời cấp nguồn cho cột (hàng) tương ứng với nó.

3.2) Nguyên tắc tạo font chữ hiển thị

Các giá trị này cần được lưu lại trong bộ nhớ của vi điều khiển để khi cần ta có thể lấy ra. Ta có thể lưu các giá trị này thành từng byte trong bộ nhớ theo trật tự từ hàng 1 tới hàng 8 hay ngược lại. Nếu ta cấp nguồn cho từng cột của ma trận led sáng lần lượt thì font chữ phải lưu các giá trị logic mã hóa cách cập nguồn cho tất cả các led trong cột đó.

3.3) Điều khiển hiển thị led ma trận

Điều khiển cấp nguồn cho led ma trận

Chương này sẽ trình bày về cách điều khiển cấp nguồn cho ma trận sử dụng phương pháp cấp nguồn theo từng cột. Việc điều khiển cấp nguồn cho các cột được thực hiện bằng cách sử dụng IC 74HC138. Các dữ liệu mã hóa font được truyền nối tiếp từ vi điều khiển tới bộ ghi dịch bằng cách sử dụng SPI.

4.1) Điều khiển cấp nguồn cho cột dùng 74HC138

Theo nguyên tắc quét ma trận led thì tại mỗi thời điểm ta chỉ cấp nguồn cho một cột của ma trận do đó có thể dung 74HC138 để cấp nguồn cho các cột của ma trận. Khi mở rộng ma trận ta tăng thêm số lượng IC để cấp nguồn cho tất cả các cột, các IC này có thể cùng nối chung hoặc riêng chân điều khiển. Hoặc chỉ sử dụng một IC nhưng cấp nguồn đồng thời cho tất cả các ma trận, khi đó một chân của IC sẽ được nối với các cột của các ma trận khác nhau.

Hình 4 -  Ghép nối 74HC138 với vi diều khiển dể cấp nguồn cho cột của ma trận
Hình 4 - Ghép nối 74HC138 với vi diều khiển dể cấp nguồn cho cột của ma trận

4.2) Điều khiển cấp nguồn cho hàng dùng 74HC595

Dịch chuyển nội dung của thanh ghi dịch đồng thời nội dung của thanh ghi dịch cũ được chuyển vào thanh ghi chứa và các đầu ra song song. Sau khi truyền xong hết dữ liệu, để các led trên cột sáng thì ta phải chuyển dữ liệu trong thanh ghi dịch vào các đầu ra của 74HC595 bằng cách cấp 1 xung sườn dương vào chân ST_TP. Khi mở rộng ma trận led ta ghép nhiều 74HC595 nối tiếp nhau: các chân SH_CP được nối chung với 1 nguồn cấp xung, các chân ST_CP cũng được nối chung với nhau, đầu ra Q7’ của IC phía trước được nối với đầu vào DS của IC tiếp theo.

Hình 4 -  Ghép nối 74HC595 với vi điều khiển để cấp nguồn cho hàng của ma  trận
Hình 4 - Ghép nối 74HC595 với vi điều khiển để cấp nguồn cho hàng của ma trận

4.3) Truyền dữ liệu cấp nguồn cho hàng sử dụng SPI

Khi DORD ở mức cao thì bit LSB được truyền trước Khi DORD ở mức thấp thì bit MSB được truyền trước. Nếu chân SS được đặt làm đầu vào thì khi chân này bị kéo xuống mức thấp thì MSTR sẽ bị xóa và SPIF được thiết lập mức cao. Do việc giao tiếp giữa vi điều khiển và 74HC595 chỉ là quá trình truyền dữ liệu từ vi điều khiển đến 74HC595 nên ta có thể thiết lập cho SPI ở chế độ master với cách sắp xếp dữ liệu theo trật tự bit có trọng số cao thì mã hóa cho hàng ở trên và các đầu ra của 74HC595 cũng được nối với các chân của ma trận led theo trật tự trên thì ta đặt bit DORD=0.

5.1) Timer1 Atmega16

Khối bắt tín hiệu đầu vào khá dễ sử dụng ở chế độ thường nhưng cần phải chú ý tới khoảng thời gian lớn nhất giữa các sự kiện ngoài, khoảng thời gian này phải không vượt quá độ phân giải của bộ đếm. Để có thể tạo sóng đầu ra trong chế độ CTC, đầu ra OC1A có thể lật mức logic của nó mỗi khi bắt gặp giá trị top bằng cách thiết lập các bit chọn chế độ so sánh đầu ra COM1A1:0. Do chỉ dùng sườn đơn nên tần số hoạt động của fast PWM cao gấp 2 lần so với các chế độ Phase correct và Phase and Frequency corect PWM ( các chế độ này khi hoạt động dùng 2 sườn).

Hình 5 -  Giản đồ thời gian chế độ CTC
Hình 5 - Giản đồ thời gian chế độ CTC

R = TOP +

Chế độ này hoạt động dựa trên hai sườn lên xuống.Bộ đếm sẽ đếm liên tục từ giá trị BOTTOM đến giá trị MAX và sau đó từ giá trị MAX đến giá trị BOTTOM.Trong chế độ so sánh không đảo chân so sánh (OCx) sẽ bị xóa khi giá trị TCNTx bằng giá trị OCRx trong quá trình đếm lên và sẽ được thiết lập bằng 1 khi giá trị so sánh xuất hiện trong quá trình đếm xuống.Chế độ so sánh đảo thì các giá trị là ngược lại.Với hoạt động hai sườn xung này thì chế độ này không tạo ra được tần số nhỏ như chế độ một sườn xung. Bit4 - OCIE1A : Khi bit này được thiết lập thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt so sánh đầu ra 1A (Timer/Counter1 Output Compare A Match Interrupt) được cho phép. Bit3 - OCIE1B : Khi bit này được set thành 1 và ngắt toàn cục (global interrupt) được cho phép thì ngắt so sánh đầu ra 1B (Timer/Counter1 Output Compare B Match Interrupt) được cho phép.

Hình 5 -  Giản đồ thời gian chế độ Fast PWM
Hình 5 - Giản đồ thời gian chế độ Fast PWM

5.2) Tạo tần số quét ma trận

Khi thanh ghi ICR1 (InputCapture Register) được thiết lập bởi các bit WGMn3:0 để sử dụng như một giá trị đỉnh thìcờ ICF1 sẽ được thiết lập khi bộ đếm đạt tới giá trị đỉnh. Cờ OCF1A sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay thiết lập bằng cách ghi một giá trị logic vào vị trí của nó. Cờ OCF1B sẽ tự động xóa khi ngắt tương ứng được thực thi, hoặc có thể xóa hay thiết lập bằng cách ghi một giá trị logic vào vị trí của nó.

5.3) Kết luận

Hiệu ứng hiển thị bảng led

Do đó ta chỉ cần điều khiển việc đưa dữ liệu vào các chân của ma trận một cách hơp lý là có thể tạo ra được hiệu ứng mong muốn. Để thực hiện điều này ta có thể dùng 2 mảng dữ liệu, 1 mảng để lưu dữ liệu của hình ảnh ( chưa có hiệu ứng ), 1 mảng lưu dữ liệu của hình ảnh tức thời để đưa ra hiển thị. Nguyên tắc chung cho việc điều khiển led ma trận tạo hiệu ứng là sau khi 1 hình ảnh được hiển thị thì ta lấy mẫu cho hình ảnh tiếp theo rồi cho hiển thị hình ảnh đó ( dữ liệu mã hóa các hình ảnh này được lưu ở mảng thứ 2 ).

6.1) Bảng led hiển thị

Dữ liệu cấp nguồn cho các hàng khi gửi nối tiếp thông qua SPI cần phải gửi theo thứ tự: dữ liệu cho ma trận led phía sau được gửi ra trước và sau khi đã gửi hết dữ liệu cho tất cả các ma trận thì mới chốt dữ liệu tại đầu ra của các IC 74HC595. Mỗi ma trận cần dữ liệu của 2 màu, IC chứa dữ liệu màu xanh ở phía trước nên ta sẽ phải truyền dữ liệu cho màu đỏ trước rồi mới đến màu xanh. Các phần tiếp theo của chương này sẽ tình bày về cách tạo các hiệu ứng hiển thị cho bảng led gồm 3 ma trận led có cấu tạo như trên.

Hình 6 -  Bảng led hiển thị
Hình 6 - Bảng led hiển thị

6.2) Dịch trái, phải

Khi mở rộng kích thước của ma trận hay số lượng các ký tự làm vượt quá kích thước của ma trận thì ta vẫn có thể sử dụng phương pháp trên nhưng với giá trị giới hạn không phải là 23 mà là số cột của ma trận hay số cột cần để hiển thị hết toàn bộ các ký tự. Hiệu ứng dịch phải cũng tương tự như dịch trái nhưng phải thay phép gán trong vòng lặp j thành M2[j]=M1[n-j].

Hình 6 -  Mô phỏng hiệu ứng dịch trái
Hình 6 - Mô phỏng hiệu ứng dịch trái

6.3) Dịch lên xuống

Khi mở rộng ma trận chu trình gán giá trị hiển thị sẽ phứa tạp hơn do kích thước dữ liệu cần gán cho một cột của ma trận tăng lên. Khi đó ta có thể chia dữ liệu đem ra hiển thị thành nhiều mảng với mỗi mảng đại diện cho 1 “ dòng ” của ma trận. Hiệu ứng dịch xuống cũng tương tự như dịch lên nhưng khác ở chiều của phép dịch bit và số lần dịch bit ta có thể thay chiều của phép dịch và số bit dịch đổi từ (8-i) thành i.