Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
774,06 KB
Nội dung
Chương 6: Hiệuứnghiểnthịbảngled Để tạo các hiệuứngthì ta phải quét ma trận led sao cho hình ảnh hiểnthị trên ma trận đạt được như mong muốn. 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ị. Mảng thứ 2 được xây dựng bằng cách xử lí lại dữ liệu của mảng thứ nhất. 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ểnthịthì ta lấy mẫu cho hình ảnh tiếp theo rồi cho hiểnthị 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ảngledhiểnthị Trước khi xây dựng các hiệuứnghiểnthị ta cần xác định xem bảngled cần điều khiển có kích thước như thế nào và phải xác định được bảngled được xây dựng như thế nào. Khi hiểu rõ cách xây dựng bảngled ta mới có thể điều khiển cấp nguồn cho bảng led. Trong đồ án này chúng em xây dựng một bảngled gồm 6 ma trận led 8x8 hai màu ( xanh, đỏ) anot chung được bố tí thành hai hàng mỗi hàng 3 ma trận : 72 Hình 6 - Bảngledhiểnthị Các ma trận được xoay sao cho các anot của led được nối chung theo từng cột. Mỗi cột có 8 led 2 màu, các catot của led xanh được nối với đầu ra của IC 74HC595 thứ nhất thông qua bộ dệm dòng ULN2803, còn các catot của led đỏ được nối với IC 74HC595 thứ hai. Hai IC 74HC595 được mắc nối tiếp nhau, đầu ra nối tiếp Q7’ của IC thứ nhất được nối với đầu vào của IC thứ 2. Đầu ra Q7’ của IC thứ 2 sẽ được nối với giắc cắm để mở rộng sang các led ma trận tiếp theo. Với cách bố trí như trên, đế của ma trận led mỗi ma trận led sẽ có 8 chân đầu vào cấp nguồn ( cho từng cột ), 2 chân đầu vào cấp nguồn cho các IC, 3 chân đầu vào nối với 74HC595 ( DS, SH_CP, ST_CP), và 5 chân đầu ra để nối với các ma trận led khác gồm 2 chân nguồn và 3 chân nối với 74HC595. Với cách tổ chức ma trận như trên phải cấp nguồn cho ma trận led theo từng cột. 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ứnghiểnthị cho bảngled gồm 3 ma trận led có cấu tạo như trên. Tuy nhiên ta có thể sử dụng các thuật toán này khi mở rộng ma trận với kích thước lớn hơn. 73 6.2) Dịch trái, phải Với cách tổ chức dữ liệu mã hóa kí tự theo từng cột thì việc điều khiển hiểnthị cho các ký tự dịch trái , phải trên led ma trận là khá đơn giản . Giả sử ta muốn hình ảnh dịch sang trái thì ta chỉ việc đưa dữ liệu của cột bên phải của hình ảnh trước ra để hiểnthị cho cột hiện tại của hình ảnh sau (cột 1 của hình ảnh mới là cột 2 của hình ảnh cũ … ) . 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). - Tại thời điểm đầu tiên thì hình ảnh tức thời sẽ lưu giá trị 0 cho tất cả các cột ( ma trận tắt ). Tại thời điểm thứ 2 ta gán giá trị của cột 1 của mảng thứ nhất và cột 24 của mảng thứ 2 . Tại thời điểm tiếp theo ta gán giá trị của cột 1,2 của mảng thứ nhất vào cột 23,24 của mảng thứ 2 . Cứ như thế khi lần lượt hiểnthị và lấy mẫu lại hình ảnh ta sẽ thấy hình ảnh trên ma trận led dịch từ trái sang phải. 74 Hình 6 - Mô phỏng hiệuứng dịch trái 75 Bắt đầu i<j i>23 Nạp giá trị cho M 1 Gán các phần tử M2 =0 Gán i=0 M2[23-j]=M1[j] j=j+1 Hiểnthị ma trận Gán j=0 i=i+1 F FT T Hình 6 - Lưu đồ thuật toán hiệuứng dịch trá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ểnthị hết toàn bộ các ký tự. 76 Ngoài ra ta cũng có thể xếp 2 mảng thành một, mảng ở sau, mảng 2 ở trước rồi cứ mỗi lần hiểnthị ta là phép gán dịch trái các dữ liệu trong mảng M[i]=M[i+1], bắt đầu với i=0, gán M[2n-1]=0 với n là số cột hiển thị. Dữ liệu đưa ra hiểnthị là n giá trị đầu của mảng. 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ểnthị 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ểnthị là n giá trị sau của mảng. 77 6.3) Dịch lên xuống Với cách tổ chức dữ liệu mã hóa kí tự theo từng cột thì việc điều khiển hiểnthị cho các ký tự dịch lên xuống có thể thực hiệnbằng cách dịch bit các dữ liệu mã hóa hình ả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). - Tại thời điểm đầu tiên thì hình ảnh tức thời sẽ lưu giá trị 0 cho tất cả các cột ( ma trận tắt ). Tại thời điểm thứ 2 ta cần gán bit mã hóa hàng trên cùng của mảng 1 ( MSB ) vào hàng dưới cùng của mảng 2 ( LSB ). Do đó ta cần phải dịch phải các bit trong từng byte dữ liệu của mảng 1 đi 7 bit rồi gán vào mảng 2. Tại thời điểm tiếp theo ta dịch phải 6 bit . Cứ như vậy hình ảnh sẽ dịch dần lên. Tuy nhiên nếu chi dịch như vậy thì thình ảnh chỉ dịch đến khi ra giữa ma trận. Để hình có thể tiếp tục dịch lên thì ta phải dịch trái dữ liệu đi từ 1 bit cho đến 7 bit . Sau khi dịch trái hết thì lại gán 0 cho tất cả các bit của ma trận . Hình 6 - Mô phỏng hiệuứng dịch lên 78 Bắt đầu J>23 i>7 Nạp giá trị cho M1 Gán các phần tử M2 =0 i=0 M2[j]=M1[j]>>(8-i) J=J+1 Hiểnthị J=0 i=i+1 F F T T Hiểnthị J=0 M2[j]=M1[j]<<(i-8) J=J+1 J>23 i=i+1 T i>15 F FT Hình 6 - Lưu đồ thuật toán hiệuứng dịch lên 79 Khi mở rộng ma trận chu trình gán giá trị hiểnthị 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ểnthị thành nhiều mảng với mỗi mảng đại diện cho 1 “ dòng ” của ma trận. Phần tử đầu tiên của mỗi mảng sẽ chứa dữ liệu cho 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]<<j ) | ( Md[i]>>(8-j) ). Với Mt là dòng trên, Md là dòng dưới . 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 . 80 6.4) Hiểnthị từng kí tự Với cách tổ chức dữ liệu mã hóa kí tự theo từng cột thì việc điều khiển cho các ký tự lần lượt hiện trên bảngled có thể thực hiệnbằng cách lấy mẫu lần lượt thêm từng ý tự một . Cụ thể với ma trận 8 hàng 24 cột cho hiểnthị tưng ký tự mộ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). - Tại thời điểm đầu tiên thì mảng lưu hình ảnh tức thời được gán 0 để tắt tất cả các led. Sau đó tại các thời điểm tiếp theo ta lần lượt gán từng 6 bytes của mảng 1 vào mảng 2 để đưa ra hiểnthị ( do cứ 6 bytes thì mã hóa 1 ký tự). Hình 6 - Mô phỏng hiệuứnghiểnthị từng chữ 81 [...]... trận led ( xoay 90 độ so với khi cấp nguồn theo cột ) 83 Kết luận Module điều khiển hiểnthị đã hoàn thành , và đạt được những kết quả sau: - Có khả năng điều khiển hiểnthị 2 chuỗi ký tự trên hai hàng ma trận, có khả năng điều khiển hiểnthị ma trận có đọ rộng lớn hơn - Có khả năng hiểnthị các dòng ký tự với ba màu xanh, đỏ và cam - Có khả năng điều khiển hiểnthị các ký tự với một số hiệuứng cơ... của dòng chữ hiểnthị nhưng lại chưa điều khiển được màu sắc của từng ký tự Vấn đề này có thể dễ dàng khắc phục khi hiểnthị các ký tự tĩnh, nhưng khi cần điều khiển các ký tự động thì sẽ khó khăn trong việc điều khiển màu sắc - Do quá trình điều khiển hiểnthị cần có giai đoạn lấy mẫu lại dữ liệu nên khi điều khiển hiểnthị ma trận có kích thước lớn có thể gây ảnh hưởng đến việc điều khiển tần số quét... các hiệuứng và điều khiển hiểnthị cần phải chú ý đến kích thước bộ nhớ Nếu cần có thể dùng thêm các bộ nhớ ngoài hoặc chọn các vi điều khiển có bộ nhớ đủ lớn để có thể tạo hiệuứng cần thiết Các bảng điện tử thông dụng thường chỉ hiểnthị một nội dung cố định nên ta có thể sử dụng bộ nhớ flash (có kích thước khá lớn ) để lưu giá trị của mảng thứ nhất, thậm chí có thể lưu toàn bộ các khung cần hiển thị. .. điều khiển hiểnthịhiệuứng có thể sử dụng khi mở rộng ma trận và có thể làm cơ sở để tạo các hiệuứng phức tạp hơn - Có khả năng thay đổi tần số quét ma trận Tuy nhiên module vẫn còn một số giới hạn : - Có thể hiểnthị các ký tự trên hai dòng nhưng lại độc lập với nhau Do đó khi gặp phải một số yêu cầu về việc hiểnthị 2 dòng chữ có độ tương quan nhất định thì cần phải thay đổi về việc điều khiển... Khi đó ta chỉ cần điều khiển việc xuất dữ liệu theo địa chỉ để hiểnthị Đối với phương pháp cấp nguồn theo từng cột thì việc tạo các hiệuứng dịch trái, dịch phải khá đơn giản và việc mở rộng ma trận không ảnh hưởng nhiều đến việc gán dữ liệu nhưng với các hiệuứng dịch lên xuống khá phức tạp khi mở rộng ma trận Tuy nhiên nếu chỉ sử dụng một hiệuứng cho ma trận thì với hiệuứng dịch lên, xuống ta có... M1 Gán các phần tử M2 =0 i=0 Hiểnthị j=0 M2[i*6+j]=M1[i*6+j] j=j+1 F j>5 T i=i+1 T F i>3 Hình 6 - Lưu đồ thuật toán hiệuứnghiểnthị tưng ký tự 82 6.5) Kết luận Việc sử dụng 2 mảng dữ liệu một mảng lưu toàn bộ khung hình, một mảng lưu hình ảnh tức thời sẽ giúp việc tạo các hiệuứng đơn giản hơn Xử lý các dữ liệu trên mảng thứ nhất rồi lưu vào mảng thứ 2 để đưa ra hiểnthị sẽ cần một lượng bộ nhớ lớn... khiển hiểnthị ma trận có kích thước lớn có thể gây ảnh hưởng đến việc điều khiển tần số quét Trong đề tài có thể có một số vấn đề hợp lý hay chưa tối ưu về các thuật toán điều khiển hiểnthị và sử dụng bộ nhớ của vi điều khiển Do đó em rất mong có sự góp ý của các thầy cô và các bạn để đồ án có thể hoàn thiện hơn 84 Tài liệu tham khảo [1] Steven F Barrett and Daniel J Pack, Atmel AVR Microcontroller... http://www.dientuvietnam.net/forums/showthread.php?t=21785, truy nhập cuối cùng ngày 26/5/2009 [9] http://www.dientuvietnam.net/forums/showthread.php?t=15613, truy nhập cuối cùng ngày 26/5/2009 85 Phụ lục A: Sơ đồ ghép nối hệ thống điều khiển led ma trận Hình A - Sơ đồ ghép nối hệ thống 86 U5 74HC595 MR OE ULN2803 COM 1C 2C 3C 4C 5C 6C 7C 8C 10 18 17 16 15 14 13 12 11 10 18 17 16 15 14 13 12 11 10 18 17 16 15 14 13 12 11 2 470uF 10 13 1B... U1 12 11 14 10 13 12 11 14 KHỐI CẤP NGUỒN: Khoi cap nguon cho IC TR1 7805 VI VO 3 33pF TRAN-2P5S Hình A - Khối cấp nguồn KHỐI CHỐT DỮ LIỆU CÁC HÀNG U3 ULN2803 U6 74HC595 SCK MOSI OC0 Khoi chon hang cho LED Hình A - Khối chốt dữ liệu các hàng 87 KHỐI GIAO TIẾP VỚI MÁY TÍNH: C 3 1nF 5 ERROR 6 2 RI DTR CTS TXD RTS RXD DSR DC D 9 4 8 3 7 2 6 1 4 C2- P1 C2+ VSVS+ 8 7 13 14 R2IN T UT 2O R1IN T UT 1O 9 10 12... ay Hình A - Khối giao tiếp máy tính C7 B1 A1 A2 A3 A4 A5 A6 A7 A8 A8 A7 C5 A6 C6 C[0 7] C4 A5 C3 A4 C2 A3 A2 A1 C0 C1 KHỐI KHUẾCH ĐẠI DÒNG CHO CỘT: Hình A - Khối khuếch đại dòng cho cột 88 KHỐI ĐIỀU KHIỂN TRUNG TÂM VÀ QUÉT CỘT: U8 E1 E2 E3 74HC138 6 4 5 1 2 3 A B C Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 15 14 13 12 11 10 9 7 C0 C1 C2 C3 C4 C5 C6 C7 C[0 7] C2 U7 9 33pF 13 12 C1 40 39 38 37 36 35 34 33 33pF OC0 KHoi . Chương 6: Hiệu ứng hiển thị bảng led Để tạo các hiệu ứng thì ta phải quét ma trận led sao cho hình ảnh hiển thị trên ma trận đạt được như. được lưu ở mảng thứ 2 ). 6.1) Bảng led hiển thị Trước khi xây dựng các hiệu ứng hiển thị ta cần xác định xem bảng led cần điều khiển có kích thước như thế