Thiết kế bảng quảng cáo led sử dụng vi điều khiển atmega 16 module điều khiển hiển thị.
Giới thiệu chung
Quảng cáo hiện diện khắp nơi, từ truyền hình, radio, internet đến băng rôn, biển quảng cáo và tờ rơi Vậy, quảng cáo là gì và tại sao nó lại cần thiết?
Quảng cáo là hoạt động truyền thông nhằm giới thiệu sản phẩm/dịch vụ, tác động hành vi mua hàng của khách hàng thông qua thông điệp thuyết phục Doanh nghiệp quảng cáo để quảng bá hình ảnh, thu hút khách hàng tiềm năng, tăng cạnh tranh và lợi nhuận Một chiến dịch quảng cáo hiệu quả đóng vai trò quan trọng trong sự phát triển doanh nghiệp và xã hội.
Quảng cáo thế giới phát triển vượt bậc, nhưng tại Việt Nam còn nhiều hạn chế, dẫn đến chất lượng quảng cáo đa phần còn thấp Việc tiếp cận khách hàng tiềm năng đòi hỏi tận dụng hiệu quả các phương tiện truyền thông như báo in, tạp chí, đài phát thanh, truyền hình và báo điện tử.
Các loại hình quảng cáo phổ biến hiện nay :
Quảng cáo qua bưu điện.
Quảng cáo trên các phương tiện vận chuyển.
Quảng cáo qua các trang vàng.
Quảng cáo trên tờ rơi, áp phích, pano hay băng rôn.
Quảng cáo trên bao bì sản phẩm.
Quảng cáo qua các thư gửi trực tiếp.
Quảng cáo bằng đèn LED.
Quảng cáo LED được ưa chuộng nhờ tính đơn giản, hiện đại và hiệu quả Bài viết này sẽ tìm hiểu khái niệm, nguyên lý hoạt động, ứng dụng quảng cáo và xu hướng phát triển của đèn LED quảng cáo.
LED (Light Emitting Diode) là điốt bán dẫn phát ra ánh sáng hoặc tia hồng ngoại, tử ngoại, được tạo thành từ sự ghép nối hai khối bán dẫn loại P và N.
Đèn LED hoạt động dựa trên nguyên lý dẫn điện của chất bán dẫn P và N, tạo ra sự kết hợp điện tử và lỗ trống giải phóng năng lượng dưới dạng ánh sáng Màu sắc ánh sáng phụ thuộc vào cấu trúc năng lượng của chất bán dẫn Ứng dụng của đèn LED rất đa dạng, từ thiết bị điện tử, đèn giao thông đến chiếu sáng, đặc biệt là trong quảng cáo Đèn LED trắng có tuổi thọ cao (50.000 giờ), tiết kiệm điện năng và an toàn, hứa hẹn thay thế các nguồn sáng truyền thống.
Quảng cáo LED, với công nghệ tiên tiến, tạo ra các bảng hiệu, panel quảng cáo bền bỉ, tiết kiệm năng lượng và an toàn Độ bền cao gấp nhiều lần đèn thường, chống rung, sáng rõ cả ngày lẫn đêm, phù hợp cả trong nhà và ngoài trời, thu hút sự chú ý và truyền tải thông tin hiệu quả.
Bảng điện tử, hay còn gọi là bảng quang báo hoặc màn hình LED, sở hữu nhiều màu sắc và hiệu ứng hiển thị sống động, thu hút sự chú ý Tính năng dễ dàng cập nhật thông tin khiến bảng điện tử trở thành phương tiện truyền đạt thông tin hiện đại và nhanh chóng.
Bảng LED quảng cáo được sử dụng cả indoor, outdoor và semi-outdoor :
Bảng indoor sử dụng tốt trong nhà, không sử dụng ngoài trời được vì không đủ độ sáng và không chịu được mưa nắng.
Bảng outdoor có độ sáng cao, kết cấu chắc chắn, chịu được mưa nắng.
Bảng hiệu semi-outdoor có độ sáng cao, lý tưởng cho quảng cáo ngoài trời nhưng cần che chắn mưa nắng, thường được lắp đặt dưới mái hiên.
Trong lĩnh vực quảng cáo, ứng dụng của đèn LED được thể hiện dưới nhiều hình thức khác nhau như :
Bảng thông tin điện tử chữ chạy
Bảng thông tin điện tử (bảng quang báo, bảng điện tử, bảng LED) là sản phẩm công nghệ cao, cho phép thay đổi thông tin linh hoạt, thu hút sự chú ý và ứng dụng hiệu quả trong quảng cáo, chứng khoán, tài chính và nhiều lĩnh vực khác Tính năng nổi bật này giúp nó trở thành công cụ đắc lực trong truyền tải thông tin hiện đại.
Bảng thông tin điện tử được ứng dụng rộng rãi tại nhiều địa điểm như khách sạn, nhà hàng, trung tâm thương mại và các cơ sở khác nhờ tính tiện lợi Thiết kế khoa học giúp bảng dễ sử dụng, điều khiển đa dạng qua bàn phím, nút bấm, điều khiển từ xa hoặc máy tính, và thuận tiện trong sản xuất, lắp đặt.
Bảng thông tin điện tử sở hữu nhiều ưu điểm vượt trội: điện áp thấp, độ ổn định cao, cường độ sáng mạnh, khả năng thay đổi nội dung nhanh chóng và dễ dàng, cùng hiệu ứng hiển thị đa dạng.
Biển hiệu, biển vẫy gây chú ý cho khách đi đường.
Biển quảng cáo LED sử dụng đèn LED siêu sáng, lập trình bằng vi điều khiển tạo hiệu ứng hiển thị ấn tượng, thu hút sự chú ý người đi đường.
Bảng thông tin và hình ảnh đồ họa:
Màn hình LED công nghệ cao, ứng dụng rộng rãi, hiển thị đa dạng hình ảnh, chữ viết, logo và đồ họa với tùy chỉnh màu sắc và tốc độ Đây là phương thức quảng cáo hiệu quả, thể hiện thông tin sản phẩm cô đọng, súc tích.
Các loại bảng tỷ giá: bảng giá vàng, bảng giá ngoại tệ, bảng tỷ giá ngân hàng…
Bảng thông tin điện tử chuyên dụng cho ngành ngân hàng, ứng dụng rộng rãi tại các điểm giao dịch, hỗ trợ cập nhật tỷ giá nhanh chóng, tiện lợi Sản phẩm tích hợp nhiều tính năng thân thiện, dễ dàng điều khiển và cập nhật thông tin qua máy tính.
Bảng quảng cáo màn hình Full Colour :
Giới thiệu về vi điều khiển AVR Atmega16
2.1) Giới thiệu về vi điều khiển họ AVR
2.1.1) Một số đặc trưng Đây là loại vi điều khiển 8 bit, xử lý nhanh, tiêu thụ năng lượng thấp.
AVR [6] có cấu trúc RISC với :
131 lệnh, hầu hết các lệnh thực thi trong một chu kỳ xung nhịp.
Tốc độ làm việc 16MPIS, với thạch anh 16 MHz.
ISP Flash với khả năng 10.000 lần ghi xóa.
Khả năng quét toàn diện theo chuẩn JTAG.
Hỗ trợ khả năng Debug onchip
Hỗ trợ lập trình Flash, EEROM, fuse…
Lock bit qua giao tiếp JTAG
Timer/ counter 8 bit với các chế độ : so sánh và chia tần số.
Timer/counter 16 bit với các chế độ : so sánh, chia tần số, capture, PWM.
Timer thời gian thực (Real time Clock) với bộ dao động riêng biệt.
Kênh biến đổi ADC 10 bit.
Bộ giao tiếp nối tiếp lập trình được USART.
Watch_dog timer với bộ dao động on_chip riêng biệt.
Những thuộc tính đặc biệt :
Power on reset và Brown-out detection.
Chế độ hiệu chỉnh bộ sai số cho bộ dao động RC on chip
Các chế độ ngắt ngoài và trong đa dạng.
6 mode sleep : Idle, ADC noise reduction, tiết kiệm năng lượng, power-down, standby, extended standby.
Các phần mềm lập trình cho AVR :
AVRStudio, Code Vision Các phần mềm này có hỗ trợ phần nạp và Debug on chip.
Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic800 …
AVR sử dụng kiến trúc Harvard với bus nhớ dữ liệu 8-bit kết nối các thiết bị ngoại vi và thanh ghi, riêng biệt với bus nhớ chương trình 16-bit dành cho thanh ghi lệnh.
Bộ nhớ chương trình AVR (Flash memory) chứa các lệnh điều khiển, chủ yếu là Application Flash Section, các AVR mới hơn có thêm Boot Flash Section Việc lập trình viên tương tác trực tiếp với bộ nhớ chương trình rất hạn chế, vì vậy nó thường không được chú trọng bằng bộ nhớ dữ liệu chứa các thanh ghi quan trọng.
Hình 2 - Cấu trúc bộ nhớ AVR
Bộ nhớ dữ liệu (data memory) trên chip AVR chứa các thanh ghi quan trọng, dung lượng khác nhau tùy từng chip và được chia thành các phần riêng biệt.
Bộ vi xử lý sở hữu tập lệnh thanh ghi (register file) gồm 32 thanh ghi 8-bit, được đánh địa chỉ tuyệt đối từ 0x0000 đến 0x001F và đặt tên từ R0 đến R31.
• Được truy cập trực tiếp trong các instruction.
• Các toán tử, phép toán thực hiện trên các thanh ghi này chỉ cần một xung Clock.
• Tệp thanh ghi được kết nối trực tiếp với bộ xử lý trung tâm, CPU chip.
• Chúng là nguồn chứa các số hạng trong các phép toán và cũng là đích chứa kết quả
Thanh ghi vào/ra (I/O) là cổng giao tiếp giữa CPU và thiết bị ngoại vi, chứa các thanh ghi điều khiển và trạng thái của thiết bị.
Chip AVR cho phép mở rộng RAM ngoài, tăng dung lượng lưu trữ biến Vùng nhớ này chỉ hoạt động khi RAM ngoài được kết nối.
EEPROM (Electrically Erasable Programmable Read-Only Memory) là bộ nhớ không bay hơi quan trọng trong chip AVR, lưu trữ dữ liệu vĩnh viễn ngay cả khi mất nguồn, lý tưởng cho các ứng dụng cần lưu trữ thông tin.
Hình 2 - Cấu trúc bên trong của AVR
Bộ vi xử lý thực thi các lệnh 16-bit từ bộ nhớ chương trình Flash Mỗi xung clock, một lệnh được load vào thanh ghi lệnh, điều khiển ALU xử lý dữ liệu trong thanh ghi và RAM Bộ đếm chương trình (PC) xác định địa chỉ lệnh đang thực thi.
AVR nổi bật với tốc độ thực thi lệnh nhanh, thường chỉ mất một chu kỳ xung nhịp, dẫn đến hiệu suất vượt trội so với các vi điều khiển khác như PIC, ngay cả khi tần số xung nhịp thấp hơn.
2.1.4) Một số họ vi diều khiển AVR
Vi điều khiển AVR rất phong phú và đa dạng, bao gồm nhiều họ khác nhau :
Họ ATUC30xxxx (xxxx thể hiện dung lượng Flash của vi điều khiển, ví dụ : ATUC30512 có 512 kB Flash).
Dòng vi điều khiển MEGA AVR.
2.2) Sơ bộ về vi điều khiển Atmega16
ATmega16 là vi điều khiển CMOS 8-bit tiết kiệm năng lượng, dựa trên kiến trúc RISC, hỗ trợ chuyển đổi tín hiệu Analog-Digital và ngược lại Khả năng thực thi lệnh trong một chu kỳ xung nhịp giúp đạt tốc độ xử lý lên đến 1 MIPS ở tần số 1MHz.
Vi điều khiển này cho phép người thiết kế có thể tối ưu hoá chế độ độ tiêu thụ năng lượng mà vẫn đảm bảo tốc độ xử lí.
Hình 2 - Sơ đồ khối của Atmega16
Atmega16 sở hữu 32 thanh ghi đa năng, kết nối trực tiếp với ALU, cho phép truy cập 2 thanh ghi chỉ trong một chu kì xung nhịp Kiến trúc này giúp Atmega16 đạt tốc độ xử lý nhanh gấp 10 lần vi điều khiển CISC thông thường.
Atmega16 hỗ trợ lập trình bằng nhiều phần mềm và ngôn ngữ, bao gồm trình dịch Assembly (AVR Studio) và C (WinAVR, CodeVisionAVR C, ICCAVR, GCC) CodeVisionAVR C được ưa chuộng nhờ tính dễ sử dụng, nhiều thư viện hỗ trợ và hàm có sẵn, rất phù hợp cho người mới bắt đầu lập trình AVR.
Được chế tạo theo kiến trúc RISC hiệu suất cao mà điện năng tiêu thụ thấp
Tập lệnh gồm 131 lệnh, hầu hết đều chỉ thực thi trong 1 chu kì xung nhịp.
Bộ nhân hai chu kì.
32 x 8 thanh ghi làm việc đa dụng.
16 MIPS với thông lượng 16MHz
8KB Flash ROM lập trình được ngay trên hệ thống :
Giao diện nối tiếp SPI có thể lập trình ngay trên hệ thống.
Cho phép 1000 lần ghi/xóa.
Bộ EEPROM 512 byte, cho phép 100.000 lần ghi/xóa
16 Kbyte bộ nhớ chương trình in-System Self-programmable Flash.
Chu kì ghi/xóa (Write/Erase) :10.000 Flash/ 100.000 EEPROM.
Độ bền dữ liệu 20 năm ở 85°C và 100 năm ở 25°C
Bộ biến đổi ADC 8 kênh, 10 bit.
Bộ truyền nối tiếp bất đồng bộ vạn năng UART.
Tốc độ làm việc: 8 MHz đối với Atmega16L, 16MHz đối với Atmega16 tối đa
Tốc độ xử lí lệnh đến 8 MIPS ở 8 MHz nghĩa là 8 triệu lệnh trên giây.
Bộ định thời gian thực (RTC) với bộ dao động và chế độ đếm tách biệt
2 bộ Timer 8 bit và 1 bộ Timer 16 bit với chế độ so sánh và chia tần số tách biệt và chế độ bắt mẫu.
4 kênh điều chế độ rộng xung PWM.
Có đến 13 interrupt ngoài và trong.
Bộ lập trình Watch dog timer.
6 chế độ ngủ : Idle, ADC Noise Reduction, Power-save, Power- down, Standby và Extended Standby.
Giao tiếp nối tiếp Master/Slave SPI.
Hình 2 - Sơ đồ chân Atmega16
VCC: Điện áp nguồn nuôi.
PortA (PA7…PA0) chuyển đổi tín hiệu analog thành tín hiệu digital Nếu không dùng bộ chuyển đổi A/D, PortA có thể hoạt động như 2 cổng vào/ra 2 bit Khi PA0-PA7 là đầu vào và được kéo xuống mức thấp, chúng hoạt động như nguồn dòng nếu điện trở nối với nguồn dương được kích hoạt Các chân PortA có trở kháng cao khi reset tích cực hoặc khi không có xung đồng hồ.
Port A cung cấp các đường địa chỉ/dữ liệu vào/ra hoạt động theo kiểu đa hợp kênh khi dùng bộ nhớ SRAM ở bên ngoài.
PortB,D : tương tự như PortA.
PortC (PC7…PC0) tương tự PortA Tuy nhiên, khi kích hoạt giao diện JTAG, PC5, PC3 và PC2 vẫn hoạt động ngay cả sau khi reset.
Chân Reset hoạt động như lối vào đặt lại bộ vi điều khiển Để thực hiện đặt lại, chân này cần duy trì ở mức thấp trong hơn 50ns; các xung ngắn hơn sẽ bị bỏ qua.
XTAL1: Lối vào bộ khuếch đại đảo và lối vào mạch tạo xung nhịp bên trong.
Nguyên tắc điều khiển led ma trận
3.1) Cấu trúc và nguyên lý cấp nguồn cho led ma trận
Ma trận LED cấu tạo từ các LED đơn sắp xếp thành hàng và cột, cùng hàng nối chung anot (catot), cùng cột nối chung catot (anot) Điều khiển LED sáng bằng cách cấp mức cao (thấp) cho hàng và mức thấp (cao) cho cột.
Hình 3 - Led ma trận chung anot
Để hiển thị ký tự trên ma trận LED, cần tận dụng hiện tượng lưu ảnh trên võng mạc bằng cách quét từng hàng (cột) với tần số cao Quá trình này bao gồm xác định mức logic cho từng hàng (cột) để tạo ký tự, lưu trữ các giá trị này, rồi lần lượt cấp nguồn cho hàng (cột) và cột (hàng) tương ứng để hiển thị ký tự hoàn chỉnh Việc sắp xếp không cho phép hiển thị đồng thời nhiều ký tự trên ma trận.
Để hiển thị ký tự trên ma trận LED 8x8, ví dụ chữ "R", cần xác định mức logic cho từng cột khi quét tuần tự Với cấu trúc anot chung cho hàng và catot chung cho cột, LED sáng khi cấp điện áp cao vào hàng tương ứng.
Bảng 3 - Tạo font chữ cho kí tự
Nhìn vào bảng trên ta thấy muốn hiển thị chữ
R phải cấp nguồn cho các led trong từng cột như sau :
Các led trong các cột khác được cấp điện áp mức thấp
Vi điều khiển lưu trữ dữ liệu theo từng byte, ví dụ cột dữ liệu có thể được lưu từ hàng 1 đến 8 (0F8H) hoặc ngược lại (7FH), tùy thuộc vào cách sắp xếp Việc lưu trữ này cho phép truy xuất dữ liệu khi cần thiết.
Mã hóa font chữ cho ma trận LED phụ thuộc phương thức cấp nguồn Với cấp nguồn từng cột, dữ liệu font lưu giá trị logic điều khiển LED mỗi cột Ví dụ, font 6 cột 8 hàng (5 cột hiển thị, 1 cột khoảng cách) cần 6 byte/ký tự.
Để hiển thị LED ma trận hiệu quả, dữ liệu được lưu trữ trong Flash của ATmega16 dưới dạng mảng Khoảng cách giữa dữ liệu mã hóa hai ký tự liền kề là 6 byte Việc biết vị trí ký tự trong font cho phép xác định địa chỉ dữ liệu và hiển thị ký tự đó dễ dàng.
Điều khiển ma trận LED cần xác định mức logic trước khi cấp nguồn Cấp nguồn phụ thuộc vào phương pháp mã hóa dữ liệu (theo hàng hoặc cột) Với mã hóa hàng/cột, chỉ một hàng/cột được cấp nguồn tại mỗi thời điểm Điều khiển ma trận 8x8 theo cột (hoặc hàng) gồm nhiều bước.
- B1: Lấy mẫu dữ liệu : lấy các dữ liệu về mức logic cần cấp cho các cột (hàng) của ma trận
- B4: Xuất dữ liệu tương ứng với cột đó ( đã được lấy mẫu từ trước) để cấp nguồn cho các hàng của ma trận
- B5: i=i+1 ; quay lại bước 2 nếu i>8 ,nếu không thì quay lại bước 3
Xuất dữ liệu của cả cột i ra 74HC595 i=i+1
Hình 3 - Lưu đồ thuật toán cấp nguồn cho ma trận led
Điều khiển LED ma trận nhỏ trực tiếp bằng chân vi điều khiển; ma trận lớn hơn cần bộ ghi dịch Tần số quét LED ma trận, điều khiển bằng bộ định thời vi điều khiển, đảm bảo hiển thị rõ nét, không bị nháy.
Điều khiển LED ma trận cần xác định phương pháp cấp nguồn (theo cột hoặc hàng), xây dựng font chữ tương thích, rồi cấp nguồn chính xác để hiển thị nội dung mong muốn.
Điều khiển cấp nguồn cho led ma trận
Bài viết trình bày phương pháp điều khiển cấp nguồn ma trận LED theo cột bằng IC 74HC138 và cấp nguồn hàng bằng bộ ghi dịch 74HC595 Dữ liệu mã hóa font chữ được truyền từ vi điều khiển đến bộ ghi dịch qua giao tiếp SPI.
4.1) Điều khiển cấp nguồn cho cột dùng 74HC138
Sơ đồ chân của 74HC138 [4] :
Hình 4 - Sơ đồ chân 74HC138
IC 74HC138 là bộ giải mã 3-to-8 với 3 đầu vào địa chỉ (A0, A1, A2) và 8 đầu ra phủ định (Y0-Y7) Hoạt động khi E1, E2 mức thấp và E3 mức cao; các đầu ra sẽ được kích hoạt theo mã địa chỉ Ngược lại, tất cả đầu ra ở mức cao.
Bảng 4 - Chức nămg hoạt động của 74HC138 Đầu vào Đầu ra
4.1.2) Sử dụng 74HC138 để cấp nguồn cho các cột ma trận
Quét ma trận LED chỉ cấp nguồn cho một cột tại mỗi thời điểm IC 74HC138 điều khiển cấp nguồn cho các cột, với A0-A2 nối vi điều khiển, đầu ra nối cột LED qua cổng phủ định/bộ đệm, E1, E2 nối đất, E3 nối dương Vi điều khiển điều khiển 74HC138 để chọn cột cần cấp nguồ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
Mở rộng ma trận LED đòi hỏi tăng số lượng IC nguồn, có thể nối chung hoặc riêng chân điều khiển Tuy nhiên, cũng có thể dùng một IC duy nhất cấp nguồn cho tất cả ma trận, mỗi chân IC kết nối với cột của các ma trận khác nhau.
4.2) Điều khiển cấp nguồn cho hàng dùng 74HC595
74HC595 [5] là bộ ghi dịch 8 bít gồm có :
1 đầu vào cho phép (OE)
1 đầu vào chọn thanh ghi dịch (MR)
1 đầu vào dữ liệu nối tiếp (DS)
1 đầu vào cấp xung cho thanh ghi dịch (SH_CP)
1 đầu vào cấp xung cho thanh ghi chứa (ST_CP)
8 đầu ra 3 trạng thái ( Q1 đến Q7 và Q7’)
Hình 4 - Sơ đồ chân 74HC595
Bảng 4 - Chức năng hoạt động của 74HC595 Đầu vào Đầu ra Chức năng
SH_CP ST_CP OE MR DS Q7’ Qn
MR mức thấp dữ liệu chỉ dịch trong thanh ghi dịch đầu ra không đổi trạng thái
X ↑ L L X L L Xóa thanh ghi dich nạp dữ liệu vào thanh ghi chứa
X X H L X L Z Xóa thanh ghi dịch đầu ra ở trạng thái trở kháng cao
Dịch chuyển trạng thái cao vào thanh ghi dịch, giá trị trước đó của bít thứ 6 trong thanh ghi dịch được chuyển sang đầu ra Q7’
Nội dụng của thanh ghi dịch được chuyển sang thanh ghi chứa và chuyển sang đầu ra
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
4.2.2) Sử dụng 74HC595để cấp nguồn cho các hàng của ma trận
Để điều khiển ma trận LED bằng 74HC595, cần nối song song các đầu ra của 74HC595 với các hàng ma trận và sử dụng 3 chân vi điều khiển cho DS, SH_CP, ST_CP của 74HC595 Dữ liệu điều khiển hàng LED được truyền tuần tự qua chân DS, đồng bộ bằng xung dương tại SH_CP Sau khi truyền đủ dữ liệu, xung dương tại ST_CP đẩy dữ liệu ra LED Cuối cùng, OE nối đất và MR nối nguồn dương để 74HC595 hoạt động.
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
Mở rộng ma trận LED cần nối tiếp nhiều IC 74HC595: chân SH_CP và ST_CP được nối chung, Q7' của IC trước nối với DS của IC sau Dữ liệu dịch đồng bộ giữa các IC.
IC cũng được chốt đồng bộ.
Hình 4 - Ghép nối tiếp các IC 74HC595
4.3) Truyền dữ liệu cấp nguồn cho hàng sử dụng SPI
Vi điều khiển Atmega16 có thể truyền dữ liệu đến bộ ghi dịch bằng phần mềm, tuy nhiên, khả năng truyền dữ liệu nối tiếp qua giao tiếp SPI phần cứng giúp tối ưu hiệu suất Atmega16 hỗ trợ các chế độ SPI khác nhau.
Hình 4 - Sơ đồ khối của SPI
SPI hoạt động ở hai chế độ: Master và Slave Chế độ Slave cần chân Slave Select (SS) là đầu vào; kéo SS xuống thấp kích hoạt SPI, MISO làm đầu ra, các chân còn lại làm đầu vào Kéo SS lên cao dừng nhận dữ liệu và tái lập mức logic, xóa dữ liệu trong thanh ghi dịch Chế độ Master cho phép SS là đầu vào hoặc đầu ra.
Đặt SS làm đầu ra không ảnh hưởng đến SPI; nó chỉ điều khiển mức logic chân SS của thiết bị slave SPI.
Để đảm bảo hoạt động ổn định của SPI master, tín hiệu SS (Slave Select) cần được giữ ở mức cao Nếu thiết bị ngoại vi kéo SS xuống thấp, SPI sẽ tự động chuyển sang chế độ Slave, gây xung đột dữ liệu Vì vậy, SPI thực hiện các thủ tục cụ thể để tránh xung đột này.
- Xóa bit MSTR trong thanh ghi SPCR để SPI ở chế độ Slave Do đó các chân MOSI và SCK trở thành đầu vào.
Thiết lập cờ SPIF trong thanh ghi SPCR ở mức cao kích hoạt ngắt SPI nếu ngắt SPI và ngắt toàn cục đã được bật Các thanh ghi SPI điều khiển quá trình này.
* Thanh ghi diều khiển - SPCR :
Bit 7 - SPIE : SPI Interupt Enable
Ngắt SPI sẽ được thực hiện nếu cờ SPIF trong SPSR được thiết lập và ngắt toàn cục được cho phép.
Bit này phải được đặt ở mức cao để SPI có thể hoạt động
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
SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
Bit 4 - MSTR : Master/Slave Select
Chân Bit điều khiển chế độ SPI: mức cao là Master, mức thấp là Slave Kéo chân SS xuống thấp khi cấu hình chân SS là đầu vào sẽ xóa MSTR và thiết lập SPIF cao, yêu cầu người dùng đặt lại MSTR về cao để tiếp tục chế độ Master.
Khi bit này được ghi 1 thì SCK ở mức cao khi rỗi, ngược lại thì SCK ở mức thấp khi rỗi
Bảng 4 - Chức năng của bit CPOL
CPOL Leading Edge Trailing Edge
Xác định việc lấy mẫu dữ liệu trên sườn trước hay sau của SCK :
Bảng 4 - Chức năng của bit CPHA
CPHA Leading Edge Trailing Edge
Bit1,0 (SPR1, SPR0) in SPI mode controls the SCK clock rate in master mode The SCK frequency is determined by the oscillator frequency (fosc).
Bảng 4 - Quan hệ giữa tần số SCK và tần số giao động
SPI2X SPR1 SPR0 Tần số SCK
* Thanh ghi trạng thái – SPSR :
Bit 7 – SPIF: SPI Interrupt Flag
Sau khi kết thúc việc dữ liệu, cờ SPIF được thiết lập Ngắt sẽ xảy ra nếu ngắt SPI và ngắt toàn cục được cho phép
Bit 6 (WCOL: Write COLision flag) được đặt nếu ghi vào SPDR trong khi truyền dữ liệu, tự động xóa sau khi đọc thanh ghi trạng thái.
Bit 5 1 : Không được dùng trong Atmega16
Bit 0: SPI2X: Double SPI Speed Bit
Sử dụng kèm với SPR1, SPR0 để xác định tần số của SCK
* Thanh ghi dữ liệu – SPDR :
Chứa dữ liệu cần truyền và nhận
Để kết nối SPI giữa Atmega16 và 74HC595, cần nối chân SCK của Atmega16 với chân SH_CP của 74HC595 và chân MOSI của Atmega16 với chân DS của 74HC595 Việc này thiết lập đường truyền dữ liệu SPI cho 74HC595.
DS của 74HC595 Ngoài ra còn phải dùng 1 chân của vi điều khiển nối với chân ST_CP của 74HC595 để chốt dữ liệu tại đầu ra của 74HC595.
Hình 4 - Ghép nối vi điều khiển với 74HC595 sử dụng SPI
Hiệu ứng hiển thị bảng led
Tạo hiệu ứng trên ma trận LED cần điều khiển dữ liệu vào chân ma trận hợp lý Hai mảng dữ liệu được sử dụng: một mảng lưu dữ liệu hình ảnh gốc và một mảng lưu dữ liệu hình ảnh đã xử lý để hiển thị hiệu ứng Mảng thứ hai được tạo bằng cách xử lý mảng đầu tiên Nguyên tắc là hiển thị tuần tự các hình ảnh, lấy mẫu từ mảng thứ hai để tạo hiệu ứng động.
Thiết kế hiệu ứng hiển thị trên bảng LED cần xác định kích thước và cấu trúc bảng LED gồm 6 ma trận LED 8x8 hai màu (xanh, đỏ) anot chung, bố trí thành hai hàng, mỗi hàng 3 ma trận Hiểu rõ cấu trúc giúp điều khiển cấp nguồn hiệu quả.
Hình 6 - Bảng led hiển thị
Ma trận LED được thiết kế với anot chung theo cột, mỗi cột gồm 8 LED 2 màu Catot LED xanh và đỏ được điều khiển bởi hai IC 74HC595 thông qua bộ dệm ULN2803, kết nối nối tiếp nhau qua chân Q7’.
Mỗi ma trận LED có 8 chân cấp nguồn cho cột, 2 chân cấp nguồn IC, 3 chân kết nối với 74HC595 (DS, SH_CP, ST_CP), và 5 chân ra (2 chân nguồn, 3 chân nối 74HC595) để kết nối với các ma trận khác; chân 2 dùng để mở rộng sang các ma trận LED tiếp theo.
Cấp nguồn cho ma trận LED theo từng cột Dữ liệu SPI cho các hàng được truyền nối tiếp, ưu tiên ma trận phía sau trước Chỉ sau khi gửi đủ dữ liệu cho tất cả ma trận mới chốt dữ liệu tại 74HC595 Mỗi ma trận cần dữ liệu 2 màu (đỏ trước, xanh sau) do IC xanh đặt trước.
Chương này trình bày cách tạo hiệu ứng hiển thị trên bảng LED 3 ma trận, áp dụng được cho ma trận kích thước lớn hơn.
Tổ chức dữ liệu mã hóa kí tự theo cột đơn giản hóa việc điều khiển hiển thị ký tự dịch trái/phải trên LED ma trận.
Để dịch chuyển ảnh sang trái, dữ liệu cột bên phải của ảnh gốc sẽ được hiển thị tại cột hiện tại của ảnh mới (cột 1 của ảnh mới là cột 2 của ảnh cũ, và cứ tiếp tục như vậy).
Cụ thể với ma trận 8 hàng 24 cột ta có thể làm như sau :
- Dùng một mảng để lưu dữ liệu của toàn bộ hình ảnh khi không dịch chuyển Mảng này cần có kích thước 24 bytes ( lưu dữ liệu của 24 cột ).
- Dùng một mảng khác để lưu dữ liệu của các hình ảnh tức thời , hình ảnh này có kích thước bằng với hình ảnh trên (24 bytes).
Ban đầu, ma trận LED hiển thị toàn bộ giá trị 0 Sau đó, dữ liệu từ cột 1 của mảng 1 được gán vào cột 24 của mảng 2, rồi cột 1 và 2 của mảng 1 vào cột 23 và 24 của mảng 2, và cứ tiếp tục như vậy Kết quả là hình ảnh trên ma trận LED dịch chuyển từ trái sang phải.
Hình 6 - Mô phỏng hiệu ứng dịch trái
Gán các phần tử M2 =0 Gán i=0
Hiển thị ma trận Gán j=0 i=i+1
Hình 6 - Lưu đồ thuật toán hiệu ứng dịch trái
Phương pháp này vẫn áp dụng được khi kích thước dữ liệu vượt quá kích thước ma trận, nhưng giới hạn sẽ là số cột của ma trận hoặc số cột cần thiết để hiển thị toàn bộ dữ liệu, thay vì 23.
Thuật toán hiển thị dữ liệu tuần hoàn sử dụng hai mảng: mảng thứ hai được đặt trước mảng thứ nhất Mỗi lần hiển thị, dữ liệu dịch trái (M[i]=M[i+1], i=0 2n-2), M[2n-1] được gán bằng 0 (n là số cột hiển thị) n giá trị đầu mảng được hiển thị.
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] Ta cũng có thể gom 2 mang làm một, mảng
1 ở trước mảng 2 ở sau, cứ mỗi lần hiển thị ta gán M[i] = M[i-1] nhưng bắt đầu với i = 2n-1và gán M[0]=0 ; dữ liệu đưa ra hiển thị là n giá trị sau của mảng.
Hiển thị ký tự lên xuống trong dữ liệu mã hóa cột được thực hiện bằng cách dịch bit dữ liệu ảnh của từng cột.
Cụ thể với ma trận 8 hàng 24 cột cho hình ảnh dịch lên ta có thể làm như sau:
- Dùng một mảng để lưu dữ liệu của toàn bộ hình ảnh khi không dịch chuyển Mảng này cần có kích thước 24 bytes ( lưu dữ liệu của 24 cột ).
- Dùng một mảng khác để lưu dữ liệu của các hình ảnh tức thời , hình ảnh này có kích thước bằng với hình ảnh trên (24 bytes).
Hình ảnh ban đầu có giá trị 0 Quá trình mã hóa dịch phải bit dữ liệu mảng 1 sang mảng 2, lần lượt 7, 6,…, 1 bit Sau khi dịch phải hết, dữ liệu dịch trái từ 1 đến 7 bit rồi lại gán 0 cho ma trận, tạo hiệu ứng hình ảnh dịch chuyển liên tục.
Hình 6 - Mô phỏng hiệu ứng dịch lên
Nạp giá trị cho M1 Gán các phần tử M2 =0 i=0
Hình 6 - Lưu đồ thuật toán hiệu ứng dịch lên
Mở rộng ma trận chu trình gán giá trị hiển thị phức tạp hơn do kích thước dữ liệu tăng Để giải quyết, dữ liệu hiển thị được chia thành nhiều mảng, mỗi mảng đại diện cho một dòng ma trận, phần tử đầu tiên chứa dữ liệu cột đầu tiên của mỗi dòng.
Cứ mỗi lần dịch ta có thể gán Mt[i] = ( Mt[i](8-j) ) Với Mt là dòng trên, Md là dòng dưới
Hiệu ứng dịch xuống tương tự hiệu ứng dịch lên, chỉ khác chiều dịch bit và số bit dịch Có thể đảo chiều và số bit dịch từ (8-i) thành i.
6.4) Hiển thị từng kí tự