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

Lời nói đầu 1

Tóm tắt đồ án 2

Danh sách các hình vẽ 5

Danh sách các bảng 6

Danh sách các công thức 7

Phần mở đầu 8

Chương 1 : Giới thiệu chung 10

1.1) Quảng cáo 10

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

1.2.1) Một số đặc trưng 11

1.1.2) Quảng cáo bằng led 12

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

Chương 2 : Giới thiệu về vi điều khiển AVR Atmega16 19

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

2.1.1) Một số đặc trưng 19

2.1.2) Một số đặc trưng 20

2.1.3) Một số đặc trưng 22

2.1.4) Một số họ vi diều khiển AVR 23

2.2) Sơ bộ về vi điều khiển Atmega16 23

2.2.1) Đặc trưng 25

2.2.2) CPU 27

2.2.3) Bộ nhớ 34

Chương 3 : Nguyên tắc điều khiển led ma trận 39

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

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

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

Chương 4: Điều khiển cấp nguồn cho led ma trận 44

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

4.1.1) Chức năng của 74HC138 44

4.1.2) Sử dụng 74HC138 để cấp nguồn cho các cột ma trận 45

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

4.2.1) Chức năng của 74HC595 47

4.2.2) Sử dụng 74HC595để cấp nguồn cho các hàng của ma trận 49

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

4.3.1) Atmega16 SPI 51

4.3.2) Thiết lập SPI truyền dữ liệu cho 74HC595 55

4.3) Kết luận 56

Chương5: Tạo tần số quét cho ma trận 57

5.1) Timer1 Atmega16 57

5.1.1) Một số chế độ hoạt động 57

5.1.2) Các thanh ghi 62

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

5.3) Kết luận 68

Chương 6: Hiệu ứng hiển thị bảng led 69

6.1) Bảng led hiển thị 69

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

6.3) Dịch lên xuống 74

6.4) Hiển thị từng kí tự 77

6.5) Kết luận 79

Kết luận 80

Tài liệu tham khảo 81

Phụ lục A: Sơ đồ ghép nối hệ thống điều khiển led ma trận 82

Phụ lục B: Mã chương trình nạp cho vi điều khiển 86

 

 

doc102 trang | Chia sẻ: lethao | Lượt xem: 8568 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế bảng quảng cáo LED sử dụng vi điều khiển ATMEGA16 Module điều khiển hiển thị, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
trực tiếp với tất cả 32 thanh ghi hỗ trợ làm việc. Hoạt động trong ALU được chia thành 3 chức năng chính: số học, logic và chức năng bit. 2.2.2.2 Thanh ghi trạng thái (Status Registers) : Chứa thông tin về kết quả của các tính toán được thực thi gần nhất. Chú ý Status Register được thay đổi sau tất cả các phép tính toán trong ALU. Bit 7 6 5 4 3 2 1 0 I T H S V N Z C Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Khởi tạo 0 0 0 0 0 0 0 0 Bit 7-I : cho phép ngắt toàn cục. Không cho phép người sử dụng tự ý xóa. Chỉ bị xóa khi có ngắt mới xuất hiện và được chỉ dẫn bởi RETI cho những ngắt kế tiếp. Có thể được đặt hoặc được xóa bởi SEI và CLI. Bit 6-T : bit lưu trữ. Có thể chép từ BST sang BLD và ngược lại. Bit 5-H : Cờ nhớ nửa H sử dụng để nhớ nửa hữu ích trong phép tính số BCD. Bit 4-S : tín hiêu bit S = N V Bit 3-D : 2 cờ tràn Bit 2-N : cờ phủ định. Bit 1-Z : cờ zero Bit 0-C : cờ nhớ. 2.2.2.3 Thanh ghi mục đích chung: Thanh ghi file được tối ưu hóa cho AVR tăng cường lập tập tin. Trong mệnh lệnh để đạt được sự thực hiện đòi hỏi và tính tối ưu hóa những sơ đồ vào ra đây được hỗ trợ : Một toán hạng ngõ ra 8 bit và một kết quả ngõ vào 8 bit. Hai toán hạng ngõ ra 8 bit và một kết quả ngõ vào 8 bit. Hai toán hạng ngõ ra 8 bit và một kết quả ngõ vào 16 bit. Một toán hạng ngõ ra 16 bit và một kết quả ngõ vào 16 bit. Hình 2 - 6 Các thanh ghi hỗ trợ làm việc AVR CPU 2.2.2.4 Con trỏ ngăn xếp (Stack pointer): Bit 15 14 13 12 11 10 9 8 SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8 SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0 Bit 7 6 5 4 3 2 1 0 Read/Write R/W R/W R /W R/W R/W R/W R/W R/W R/W R/W R /W R/W R/W R/W R/W R/W Khởi tạo 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Thanh ghi Stack Poiter luôn trỏ đến đỉnh của ngăn xếp. Stack Poiter trỏ đến ngăn xếp dữ liệu SRAM lưu trữ những process con và những ngắt cục bộ. Khoảng trống trong SRAM phải được định nghĩa bởi process trước bất kỳ process con nào gọi nó thực thi hoặc ngắt nào được hoạt động. Stack Poiter giảm đi 1 khi dữ liệu được đẩy lên trên Stack với lệnh PUSH, và giảm đi 2 khi trả về địa chỉ được đẩy lên trên Stack với sự gọi process con hoặc ngắt được gọi. Stack Poiter tăng lên 1 khi dữ liệu được đưa ra khỏi Stack với lệnh POP, và tăng lên 2 khi dữ liệu được đưa ra khỏi Stack trả về từ process con RET hoặc trả về từ ngắt RETI. Stack Poiter AVR được bổ xung như 2 thanh ghi 8 bit trong không gian I/O. Số lượng các bít được sử dụng là sự thi hành phụ thuộc. Chú ý không gian dữ liệu trong bổ xung của kiến trúc AVR nhỏ nên chỉ sử dụng thanh ghi SPL, trong trường hợp này không có thanh ghi SPH. 2.2.2.5 Reset và xử lý ngắt. AVR cung cấp vài nguồn ngắt khác nhau. Các ngắt này có vector Reset riêng biệt với vector process. Tất cả các ngắt ghi ở mức logic 1 cùng với ngăt toàn cục. Trong thanh ghi trạng thái các bit cho phép ngắt phụ thuộc giá trị Counter process. Các ngắt có thể tự động bị cấm khi khởi động khóa bit BLB02 hoặc BLB12. Khi một ngắt xuất hiện, ngắt toàn cục cho phép I-bit xóa và tất cả các ngắt còn lại bị cấm. Sử dụng phần mềm có thể ghi logic 1 cho I-bit cho phép ngắt. Tất cả các ngắt được cho phép có thể ngắt thường trình. I-bit tự động được lập khi một lệnh ngắt trở lại thực thi từ RETI. Có hai kiểu ngắt cơ bản. Kiểu 1 : hoạt động bởi 1 sự kiện lập bởi cờ ngắt. Với mỗi ngắt Counter process là một vector tới vector ngắt hiện tại trong thứ tự thực thi, phần cứng sẽ xóa cờ ngắt. Các cờ ngắt có thể bị xóa bởi ghi logic 1 tới vị trí bit cờ để xóa. Nếu điều kiện một ngắt xuất hiện trong khi cho phép ngắt bit bị xóa thì cờ ngắt sẽ được lập và nhớ đến khi ngắt cho phép hoặc cờ ngắt bị xóa bởi phần mềm. Tương tự, điều kiện để các ngắt xuất hiện trong khi bit GIE(Global Interrupt Enable) bị xóa thì cờ nhớ sẽ lập và nhớ đến khi bit GIE được lập. Kiểu 2 : các ngắt sẽ được hoạt động nếu điều kiện để ngắt có mặt. Những ngắt này không cần có cờ ngắt. Nếu điều kiện ngắt không xuất hiện trước khi ngắt cho phép ngắt sẽ không được hoạt động. Khi AVR thoát khỏi 1 ngắt, nó sẽ luôn trả về process chính và thực thi hơn một lệnh trước khi tạm dừng ngắt. Chú ý thanh ghi trạng thái không tự động lưu trữ khi vào một thủ tục ngắt và cũng không tự phục hồi khi thoát ra khỏi thủ tục. Khi sử dụng lệnh CLI để cấm các ngắt thì ngắt sẽ không trực tiếp bị cấm. Không có ngắt được thực thi sau lệnh CLI ngay cả khi xuất hiện đồng thời với lệnh. Xem ví dụ sau : Ghi bằng Assembly Ghi bằng C Khi sử dụng lệnh SEI cho phép ngắt: Ghi bằng Assembly Ghi bằng C 2.2.2.6 Ngắt đáp ứng lại thời gian Ngắt thực thi đáp ứng cho tất cả các ngắt cho phép của AVR là 4 chu kỳ xung tối thiểu. Sau 4 chu kỳ xung vector process thêm địa chỉ cho ngắt đang hoạt động trong process con thực thi. Trong khoảng thời gian này bộ nhớ process sẽ đẩy lên trên Stack. Vector ngắt nhảy đến ngắt trong process con và lệnh ngắt này sẽ đưa ra 3 chu kỳ xung. Nếu một ngắt xuất hiện trong khi thực thi nhiều chu trình lệnh, thì lệnh sẽ được trước khi ngắt được thực hiện. Nếu một ngắt xuất hiện khi MCU ở chế độ ngủ, ngắt thực thi yêu cầu thời gian tăng bởi 4 chu kỳ xung. Trở về từ ngắt process con đưa rad 4 chu kỳ xung bộ đếm chương trình sẽ được đưa ra từ Stack, Stack Poiter tăng thêm 2 và I-bit trong SREG được lập. 2.2.3) Bộ nhớ Phần này mô tả các bộ nhớ khác nhau trong Atmega16. Kiến trúc AVR có 2 bộ nhớ chính : bộ nhớ dữ liệu và bộ nhớ process. Bổ xung thêm vào đặc tính AVR một bộ nhớ EEPROM lưu trữ dữ liệu. 2.2.3.1 Hệ thống bộ nhớ lập trình lại Flash Atmega16 chứa 16 K bytes On-Chip trong hệ thống bộ nhớ lập trình lại Flash để lưu trữ process. Cho AVR 16 hoặc 32 bit thì bộ nhớ flash là 8K*16. Bộ nhớ Flash có khả năng ghi/ xóa 1000 lần cho mỗi vòng. Atmega16 có Counter 13 bit cùng với 8K địa chỉ process. Hình 2 - 7 Sơ đồ bộ nhớ process 2.2.3.2 Bộ nhớ dữ liệu SRAM Có tới 1120 địa chỉ ô nhớ cho bộ nhớ nhập xuất, thanh ghi file và SRAM nội. 96 đường địa chỉ đầu tiên dành riêng cho thanh ghi file và bộ nhớ vào ra và còn 1024 đường địa chỉ còn lại cho SRAM nội. Hình 2 - 8 Sơ đồ bộ nhớ dữ liệu Hình 2 - 9 Những chu kỳ truy xuất SRAM 2.2.3.3 Bộ nhớ dữ liệu EEPROM Atmega16 chứa 512 byte bộ nhớ dữ liệu EEPROM. Nó được tổ chức như một không gian dữ liệu riêng biệt, mỗi byte đơn có thể đọc và ghi. EEPRAM có khả năng thực hiện 100.000 chu kỳ ghi/xóa. Truy xuất giữa EEPRAM và CPU được mô tả theo đặc tả thanh ghi địa chỉ, thanh ghi dữ liệu và thanh ghi điều khiển EEPROM. Thanh ghi địa chỉ EEPROM :EEARH và EEARL Bit 15 14 13 12 11 10 9 8 - - - - - - - EEAR8 EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 Bit 7 6 5 4 3 2 1 0 Read/Write R R R R R R R R/W R/W R/W R/W R/W R/W R/W R/W R/W Khởi tạo 0 0 0 0 0 0 0 X X X X X X X X X Bit 15…9 – Res : các bit đã đăng ký trước. Các bit này sẽ luôn được đọc là 0. Bit 8…0 – EER8…0 : địa chỉ EEPROM. Thanh ghi địa chỉ EEPROM – EEARH và EEARL mô tả địa chỉ EEPROM trong 512 byte không gian EEPROM. Các byte dữ liệu EEPROM được thêm vào tuyến tính giữa 0 và 511. Giá trị đầu của EEAR là không xác định. Một giá trị riêng phải được ghi trước. 2.2.3.3.2 Thanh ghi dữ liệu EEPROM : EEDR Bit 7 6 5 4 3 2 1 0 MSB LSB Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Khởi tạo 0 0 0 0 0 0 0 0 Bit 7…0 – EEDR7…0 : EEPROM dữ liệu EEPROM ghi hoạt đọng, thanh ghi EEDR chứa dữ liệu ghi tới EEPROM trong địa chỉ đưa bởi thanh ghi EEAR. Cho hoạt động đọc EEPROM, EEDR chứa dữ liệu đọc ngoài từ EEPROM tại địa chỉ đưa bởi EEAR. 2.2.3.3.3 Thanh ghi điều khiển EEPROM :EECR Bit 7 6 5 4 3 2 1 0 - - - - EERIE EEMWE EEWE EERE Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Khởi tạo 0 0 0 0 0 0 0 0 Bit 7…4 – Res : các bit đăng ký trước Các bit này đã được đăng ký trước trong Atmega16 và luôn được đọc là 0. Bit 3 – EERIE : EEPROM sẵn sàng cho phép ngắt Ghi EERIE lên 1 cho phép EEPROM sẵn sàng ngắt nếu I-bit trong SREG được lập. Ghi EERIE về 0 sẽ cấm ngắt. Khi EEWE bị xóa EEPROM sẵn sàng phát ra ngắt là một hằng số ngắt. Bit 2 – EEMWE : EEPROM chỉ cho phép ghi Khi Bit EEMWE được lập, lập EEWE với 4 chu kỳ xung sẽ ghi dữ liệu tới EEPROM tại địa chỉ được chọn. Nếu EEMWE = 0, lập EEWE sẽ không có ảnh hưởng. Khi EEMWE được ghi lên 1 bởi phần mềm, phần cứng xóa bit về 0 sau 4 chu kỳ xung. Bit 1 – EEWE : EEPROM cho phép ghi EEPROM cho phép ghi tín hiệu EEWE được ghi tín hiệu tra cứu tới EEPROM. Khi địa chỉ và dữ liệu đưa lên chính xác, bit EEWE phải ghi lên 1. Bit EEMWE phải ghi lên 1 trước khi logic 1 được ghi cho EEWE. Các bước cần làm khi ghi EEPROM. (bước 3 và 4 có thể bỏ qua). Đợi đến khi EEWE trở về 0. Đợi đến khi SPMEN trong SPMCR trở về 0. Ghi địa chỉ mới EEPROM tới EEAR (tùy chọn). Ghi dữ liệu mới EEPROM tới EEAR (tùy chọn). Ghi logic 1 tới bit EEMWE trong khi ghi EEWE trong EECR về 0. Trong 4 chu kỳ xung đồng hồ sau khi lập EEMWE ghi logic 1 cho EEWE. Bit 0 – EERE : EEPROM cho phép đọc Tín hiệu cho phép đọc EERE đọc tín hiệu tra cứu tới EEPROM. Khi địa chỉ đúng thì lập lên thanh ghi EEAR, bit EERE phải ghi ở logic 1 để khởi động EEPROM đọc. Sự truy xuất EEPROM đọc cần 1 lệnh và yêu cầu dữ liệu có giá trị trực tiếp. Khi EEPROM được đọc CPU bị dừng trong 4 chu kỳ trước khi lệnh tiếp được thực thi. Người sử dụng cần phải kiểm tra bit EEWE trước thao tác đọc. Nếu ghi hoạt động trong tiến trình thì không cái nào có thể đọc EEPROM, cũng không thể thay đổi thanh ghi EEAR. Bộ dao động chuẩn được sử dụng để lấy thời gian truy xuất EEPROM. 2.2.3.4 Bộ nhớ I/O : Tất cả các Atmega16 I/O và các thiết bị ngoại vi trong không gian I/O. Vị trí I/O được truy xuất bởi lệnh IN và OUT, sự chuyển dữ liệu giữa 32 thanh ghi hỗ trợ làm việc và không gian I/O. Những thanh ghi I/O thuộc phạm vi địa chỉ 00$ - $1F là bít truy xuất trực tiếp sử dụng các lệnh SBI và CBI. Trong các thanh ghi giá trị các bit đơn được kiểm tra bởi các lệnh SBI và CBI. Chương 3 : 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 Led ma trận bao gồm các led đơn được xếp thành hàng và cột . Các led đơn trong cùng một hàng thì được nối chung anot (catot) còn trong cùng một cột thì được nối chung catot (anot). Do đó để các led có thể sáng ta phải cấp nguồn cho led như sau : cấp mức cao (thấp) cho hàng và mức thấp (cao) cho cột. Hình 3 - 1 Led ma trận chung anot Với cách sắp xếp như trên tại một thời điểm ta không thể hiển thị một kí tự (với trên 2 hàng 2 cột) trên ma trận. Do đó để có thể hiển thị một kí tự trên led ma trận thì ta phải lợi dụng hiện tượng lưu ảnh trên võng mạc. 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ụ thể hơn ta xét ví dụ hiển thị chữ R trên led ma trận 8x8 theo cách quét lần lượt từng cột ma trận. Do quét theo từng cột nên ta sẽ phải xác định mức logic cần cấp cho tất cả các led trong từng cột. Giả thiết các led cùng hàng mắc chung anot, các led trong cùng một cột mắc chung catot. Khi đó nếu muốn một led nào đó trong cột sáng thì ta phải cấp điện áp mức cao vào hàng tương ứng. Bảng 3 - 1 Tạo font chữ cho kí tự H H H H H H H H H H H H H H H H H H 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ột 5: L , H , H , L , L , L , H , L Cột 4: H , L , L , H , L , H , L , L Cột 3: H , L , L , H , H , L , L , L Cột 2: H , L , L , H , L , L , L , L Cột 1: H , H , H , H , H , H , H , L Các led trong các cột khác được cấp điện áp mức thấp . 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. Ví dụ cột 1 ta lưu theo thứ tự từ hàng một tới 8 thì lưu giá trị 0F8H còn nếu ngược lại thì là 7FH . Việc mã hóa font phụ thuộc vào cách cấp nguồn cho ma trận led. 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 đó. Giả sử ta mã hóa font 6 cột 8 hàng ( 5 cột mã hóa chữ 1 cột tạo khoảng cách 2 chữ kế tiếp) như đã nêu trong nguyên tắc điều khiển led thì mỗi kí tự cần 6 byte dữ liệu để lưu. 3.3) Điều khiển hiển thị led ma trận Để tiện cho việc truy xuất dữ liệu ta có thể khai báo 1 mảng trong bộ nhớ Flash của Atmega16 lưu các dữ liệu này. Khi đó địa chỉ đầu của dữ liệu mã hóa 2 ký tự gần nhau thì cách nhau cách nhau 6. Vì vậy khi biết được vị trí của 1 kí tự trong font thì ta có thể xác định địa chỉ của dữ liệu mã hóa kí tự đó. Trên cơ sở đó ta có thể dễ dàng xuất dữ liệu của kí tự cần hiển thị ra . Sau khi xác định được các mức logic cần cấp cho ma trận led thì ta có thể tiến hành điều khiển quá trình cấp nguồn cho led ma trận để có được hình ảnh như ý muốn. Việc cấp nguồn cho led ma trận phụ thuộc vào cách mã hóa dữ liệu (theo từng hàng hay theo từng cột của ma trận). Nếu dữ liệu mã hóa là các hàng trong 1 cột (hàng) thì tại một thời điểm ta chỉ cấp nguồn cho một cột (hàng . Quá trình điều khiển hiển thị led ma trận 8x8 theo từng cột (hàng) bao gồm các bước sau : 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 B2: Bắt đầu với cột i=1. B3: Cấp nguồn cho cột i 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 Hình 3 - 2 Lưu đồ thuật toán cấp nguồn cho ma trận led Nếu chỉ điều khiển 1 số lượng led ma trận nhỏ thì ta có thể dùng trực tiếp các chân của vi điều khiển để điều khiển việc cấp nguồn cho led ma trận. Nếu ma trận lớn hơn thì ta phải dùng các bộ ghi dịch để cấp nguồn cho led ma trận. Để hình ảnh trên led ma trận hiển thị rõ ràng không bị nháy ta cần phải điều khiển tần số quét led ma trận. Có thể dùng các bộ định thời của vi điều khiển để điều khiển thời điểm cấp nguồn cho led ma trận tạo tần số quét. Tóm lại để điều khiển led ma trận ta đầu tiên ta cần phải xác định được phương pháp cấp nguồn cho ma trận ( cấp nguồn theo từng cột hay từng hàng ). Sau khi đã xác định được phương pháp cấp nguồn ta cần phải xây dựng font chữ cho phù hợp với cách cấp nguồn. Từ đây ta có thể tiến hành điều khiển việc cấp nguồn cho ma trận để dòng chữ trên ma trận hiển thị như mong muốn. Chương 4: Đ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 hàng của ma trận sẽ được cập nguồn bằng cách sử dụng bộ ghi dịch 74HC595. 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 4.1.1) Chức năng của 74HC138 Sơ đồ chân của 74HC138 [4] : Hình 4 - 1 Sơ đồ chân 74HC138 IC 74HC138 là bộ giả mã 3 đầu vào ( A0,A1,A2) 8 đầu ra phủ định (Y0 đến Y7 ). Nó có 3 đầu vào cho phép : 2 đầu vào tích cực thấp (,) và một đầu vào tích cực mức cao (E3). Tất cả các đầu ra của 74HC138 sẽ ở mức cao trừ khi , ở mức thấp và E3 ở mức cao. Khi các đầu vào , ở mức thấp và E3 ở mức cao thì đầu ra của 74HC138 sẽ được quyết định bởi đầu vào . Bảng 4 - 1 Chức nămg hoạt động của 74HC138 Đầu vào Đầu ra E3 A0 A1 A2 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 H X X X H X X X X X X X X X X X X X H H H H H H H H H H H H H H H H H H H H H H H H L L L L L L L L L L L L L L L L H H H H H H H H L L L L H H H H L L H H L L H H L H L H L H L H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L H H H H H H H H L 4.1.2) Sử dụng 74HC138 để cấp nguồn cho các cột ma trận 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 . Các đầu vào ( A0,A1,A2) của 74HC138 sẽ được nối với các chân của vi điều khiển, các đầu ra của 74HC138 được nối với các cột của ma trận led thông qua một cổng phủ định ( hoặc các bộ đệm dòng cấp nguồn cho cột ), còn các chân , được nối đất, E3 nối dương nguồn .Thông qua việc gửi tín hiệu từ vi điều khiển tới các chân đầu vào của 74HC138 ta có thể chọn được cột cần cấp nguồn . Hình 4 - 2 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 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 . 4.2) Điều khiển cấp nguồn cho hàng dùng 74HC595 4.2.1) Chức năng của 74HC595 74HC595 [5] là bộ ghi dịch 8 bít gồm có : 1 đầu vào cho phép () 1 đầu vào chọn thanh ghi dịch () 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 - 3 Sơ đồ chân 74HC595 Bảng 4 - 2 Chức năng hoạt động của 74HC595 Đầu vào Đầu ra Chức năng SH_CP ST_CP DS Q7’ Qn X X L L X L kđ 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 ­ X L H H Q6’ kđ 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’ X ­ L H X kđ Qn’ Nội dụng của thanh ghi dịch được chuyển sang thanh ghi chứa và chuyển sang đầu ra ­ ­ L H X Q6’ Qn’ 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 Khi dùng 74HC595 để cấp nguồn cho ma trận led ta nối các đầu ra song song của 74HC595 với các chân cấp nguồn cho hàng của ma trận. Đồng thời phải sử dụng 3 chân của vi điều khiển để nối với các chân DS,SH_CP,ST_CP của 74HC595. Các bit dữ liệu mã hóa mức logic cần cấp cho các hàng của 1 cột ma trận sẽ được truyền liên tiếp DS của 74HC595. Để đồng bộ bit thì vi điều khiển mỗi khi xuất 1 bit tới chân DS sẽ phát một xung có sườn dương vào chân SH_CP. 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. Chú ý để IC có thể hoạt động và đẩy dữ liệu ra các chân đầu ra thì chân phải nối đất, chân nối dương nguồn. Hình 4 - 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 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. Khi đó dữ liệu sẽ được dịch đồng bộ từ IC này sang IC khác và đầu ra của các IC cũng được chốt đồng bộ. Hình 4 - 5 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 4.3.1) Atmega16 SPI Để truyền dữ liệu từ vi điều khiển vào bộ ghi dịch ta có thể dùng một đoạn chương trình phần mềm lập trình cho vi điều khiển truyền từng bit của dữ liệu. Tuy nhiên Atmega16 có phần cứng hỗ trợ việc truyền dữ liệu nối tiếp với các thiết bị ngoại vi (SPI). a) Sơ đồ khối và các chế độ SPI [3] : Hình 4 - 6 Sơ đồ khối của SPI Ta có thể thiết lập SPI ở 2 chế độ Master và Slave : Ở chế độ Slave, chân Slave Select ( SS ) phải đặt là đầu vào .Khi chân này bị kéo xuống mức thấp thì SPI sẽ hoạt động, chân MISO có thể đặt làm đầu ra, các chân khác là đầu vào. Khi chân SS được kéo lên mức cao ở mức cao SPI ngừng nhận dữ liệu từ bên ngoài vào. Chân SS có tác dụng đồng bộ byte, gói giúp cho bộ đếm bit của slave đồng bộ với bộ phát xung của master. Khi SS bị kéo lên mức cao thì SPI slave sẽ tái lập lại mức logic truyền và nhận, đồng thời xóa dữ liệu đã nhận trong thanh ghi dịch. Ở chế độ Master, ta có thể đặt SS làm đầu ra hay vào tùy ý : Nếu SS được đặt làm đầu ra thì nó không làm ảnh hưởng tói SPI , nó chỉ có tác dụng điều khiển mức logic cho chân SS của SPI slave. Nếu SS được đặt làm đầu vào thì nó phải được giữ ở mức cao để đảm bảo các hoạt động của SPI master. Nếu SPI bị kéo xuống mức thấp bởi thiết bị ngoại vi thì nó sẽ hiểu đó là một Master khác nên sẽ đặt lại SPI ở chế độ Slave và bắt đầu truyền dữ liệu. Để tránh xung đột trong quá trình này SPI tiến hành các thủ tục sau: - 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 mức cao cho cờ SPIF trong thanh ghi SPCR. Nếu ngắt SPI và ngắt toàn cục được cho phép thì quá trình ngắt sẽ được thực hiện. b) Các thanh ghi SPI: * Thanh ghi diều khiển - SPCR : Bit 7 6 5 4 3 2 1 0 SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0 Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Khởi tạo 0 0 0 0 0 0 0 0 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 6 - SPE : SPI Enable Bit này phải được đặt ở mức cao để SPI có thể hoạt động Bit 5 - DORD : Data Order 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 Bit 4 - MSTR : Master/Slave Select Bit có tác dụng chọn chế độ cho SPI : Master nếu ở mức cao, Slave nếu ở mức thấp. 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 dó người dùng sẽ phải đặt MSTR trở lại mức cao nếu muốn tiếp tục sử dụng chế độ Master. Bit 3 – CPOL :Clock Polarity: 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 - 3 Chức năng của bit CPOL CPOL Leading Edge Trailing Edge 0 Rising Failing 1 Failing Rising Bit 2 – CPHA : Clock Phase 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 - 4 Chức năng của bit CPHA CPHA Leading Edge Trailing Edge 0 Sample Setup 1 Setup Sample Bit1,0 – SPR1,SPR0 :SPI Clock Rate Select 1 and 0 Điều khiển tốc độ của SCK ở chế độ Master . Quan hệ giữa SCK và tần số giao động (fosc) được thể hiện như sau: Bảng 4 - 5 Quan hệ giữa tần số SCK và tần số giao động SPI2X SPR1 SPR0 Tần số SCK 0 0 0 fosc/4 0 0 1 fosc/16 0 1 0 fosc/64 0 1 1 fosc/128 1 0 0 fosc/2 1 0 1 fosc/8 1 1 0 fosc/32 1 1 1 fosc/64 * Thanh ghi trạng thái – SPSR : Bit 7 6 5 4 3 2 1 0 SPIF WCOL - - - - - SPI2X Read/Write R R R R R R R R/W Khởi tạo 0 0 0 0 0 0 0 0 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 thiết lập nếu SPDR được ghi dữ liệu khi đang truyền dữ liệu. Sẽ được xóa sau khi thanh ghi trạng thái được kiểm tra. 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 : Bit 7 6 5 4 3 2 1 0 MSB LSB Read/Write R/W R/W R/W R/W R/W R/W R/W R/W Khởi tạo X X X X X X X X Chứa dữ liệu cần truyền và nhận . 4.3.2) Thiết lập SPI truyền dữ liệu cho 74HC595 Để kết nối SPI giữa Atmega16 và 74HC595 ta cần nối chân SCK của vi điều khiển với chân SH_CP của 74HC595, nối chân MOSI của vi điều khiển với chân 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 - 7 Ghép nối vi điều khiển với 74HC595 sử dụng SPI 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 . Các giá trị cần nạp cho thanh ghi : SPCR=0x50 SPSR=0x00 Sau đó trong chương trình mỗi khi muốn gửi 1 byte nào đó ra ta có thể dùng lệnh trong CodeVisionAVR : spi(byte) ; Lệnh này cho phép gửi 1 byte từ vi điều khiển qua chân MOSI tới thiết bị ngoại vi.Sau đó nếu muốn chốt dữ liệu ta cần phải sử dụng 1 thủ tục để gửi 1 sườn dương tới chân ST_CP của 74HC595 thông : void latchdata( ) { PORTB.3=0; PORTB.3=1; } 4.3) Kết luận Khi cấp nguồn cho ma trận tùy theo kích thước của ma trận mà ta có thể sử dụng nhiều phương pháp khác nhau. Với các ma trận đủ nhỏ ta có thể sử dụng các chân của vi điều khiển để trực tiếp điều khiển việc cấp nguồn cho

Các file đính kèm theo tài liệu này:

  • docThiết kế bảng quảng cáo LED sử dụng vi điều khiển ATMEGA16 Module điều khiển hiển thị (ĐH BK HN).doc