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

Một phần của tài liệu 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Ị (Trang 50)

1. Nội dung thiết kế tốt nghiệp:

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 (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’)

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

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 OE phải nối đất, chân MR nối dương nguồ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

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ộ.

4.3) Truyền dữ liệu cấp nguồn cho hàng sử dụng SPI 4.3.1) Atmega16 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 - 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. (adsbygoogle = window.adsbygoogle || []).push({});

Ở 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

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 - 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 - Chức năng của bit CPHA

CPHA Leading Edge Trailing Edge

0 Sample Setup

1 Setup Sample (adsbygoogle = window.adsbygoogle || []).push({});

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:

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

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

SPIF WCOL - - - SPI2X

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 - 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 .

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; (adsbygoogle = window.adsbygoogle || []).push({});

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 ma trận. Với ma trận lớn thì cần phải dùng các IC hỗ trợ cho việc điều khiển cấp nguồn cho ma trận. Khi cấp nguồn cho ma trận theo từng cột thì ta có thể sử dụng các IC có tác dụng chọn kênh để cấp nguồn cho ma trận, tại mỗi thời điểm mỗi IC này chỉ cấp nguồn cho 1 cột của ma trận . Đối với các hàng trong cột thì ta có thể dùng các bộ ghi dịch để cấp nguồn. Khi cấp nguồn thì ta cần chú ý việc cấp phát dữ liệu của các hàng phải tương ứng với cột được cấp nguồn.

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

Để đảm bảo cho hình ảnh hiển thị rõ nét thì ta cần phải điều chỉnh tần số hiển thị cho phù hợp . Tần số hiển thị càng cao thì hình ảnh càng rõ nét . Dùng bộ định thời của vi điều khiển giúp ta có thể điều khiển tần số hiển thị của ma trận led. Mỗi khi ngắt định thời được thực hiện thì ta sẽ cho một cột của ma trận sáng . Qua đó ta có thể tính được tần số hiển thị của ma trận bằng 1/8 tần số ngắt. Chương sẽ giới thiệu về một số chế độ của Timer1 và các thanh ghi dùng để thiết lập chế độ , sau đó sẽ trình bày về cách thiết lập thanh ghi dùng cho việc điều khiển tần số quét led ma trận.

5.1) Timer1 Atmega16 5.1.1) Một số chế độ hoạt động 5.1.1) Một số chế độ hoạt động

Trước tiên ta cần chú ý các định nghĩa sau:

• BOTTOM : Counter tới BOTTOM khi nó có dạng 0x0000.

• MAX : Counter tới MAX khi nó có dạng 0xFFFF.

• TOP : khi Counter tới TOP khi giá trị của nó bằng giá trị cao nhất trong hàng đếm. Giá trị TOP có thể được gán là 1 trong các giá trị cố định khác sau : 0x00FF, 0x01FF, 0x03FF hoặc là giá trị lưu trong OCR1A hoặc thanh ghi ICR1. Việc gán giá trị TOP phụ thuộc vào chế độ hoạt động.

a) Chế độ thông thường :

Chế độ hoạt động đơn giản nhất của Timer là chế độ thường (WGM13:0 = 0). Trong chế độ này bộ đếm luôn đếm lên và không được xóa. Bộ đếm tràn khi đếm qua giá trị max (MAX= 0xFFF) và trở lại BOTTOM (0x0000). Trong chế độ này Timer/Counter Overflow Flag (TOV1) sẽ được thiết lập ngay khi TCNT1 trở về 0. Trong trường hợp này cờ TOV1 hoạt dộng như bit thứ 17 của bộ đếm nên nó không tự xóa. Tuy nhiên khi kết hợp với ngắt tràn Timer cờ này có thể tự động xóa, độ phân giải của Timer có thể tăng lên bởi phần mềm.

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. Nếu khoảng thời gian giữa các sự kiện quá dài ta có thể dùng ngắt tràn hay tăng độ rộng xung đếm để có thể mở rộng độ phân giải cho khối này .

b) Chế độ CTC ( clear timer on compare) :

Trong chế độ CTC (WGM13:0 = 4 hoặc 12), thanh ghi ICR1 hoặc OCR1A được sử dụng tạo độ phân giải cho bộ đếm. Trong chế độ CTC bộ đếm bị xóa về 0 khi giá trị bộ đếm (TCTN1) trùng với giá trị của thanh ghi OCR1A (WGM13:0 = 4) hoặc ICR1 (WGM13:0 = 12). Thanh ghi OCR1A hoặc ICR1 định nghĩa giá trị đỉnh cho bộ đếm.

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

Một ngắt có thể phát ra khi giá trị bộ đếm đạt tới giá trị TOP bởi cùng sử dụng cờ OCF1A hoặc ICF1. Nếu ngắt được cho phép, thủ tục điều khiển ngắt có thể được sử dụng để cập nhập lại giá trị TOP. Thay đổi TOP bằng giá trị gần với BOTTOM khi bộ đếm đang chạy với độ rộng xung lớn phải thực hiện cẩn thận . Nếu giá trị mới ghi cho OCR1A hoặc ICR1 thấp hơn so với giá trị của TCNT, bộ đếm sẽ không bắt được thời điểm đạt giá trị TOP. Do đó nó sẽ đếm tới giá trị MAX (0xFFF) rồi quay về 0x0000 trước khi có thể có thể gặp đượcgiá trị TOP. Để 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

= 01. Giá trị của chân OC1A sẽ không được cập nhật nếu ta không thiết lập nó là đầu ra (DDR_OC1A=1). Sóng phát ra từ chân OCA1 sẽ có tần số cực đại của fOC A1

= fclk I O_ / khi OCR1A được lập về 0x0000. Tần số của sóng được tính như sau:

Công thức 5 - Quan hệ giữa tần số đầu ra với tần số timer ở chế dộ CTC

_ / 2. .(1 ) clk I O OCnA f N OCRnA f = +

N thể hiện độ chia tần ,có thể là các giá trị sau : 1, 8, 64, 256, 1024 c) Chế độ fast PWM :

Fast Pulse Width Modulation hoặc chế độ fast PWM ( WGM13:0 = 5,6,7,14,15) có chức năng tạo ra nhiều dạng sóng tần số cao. Fast PWM khác với chức năng PWM bởi nó chế độ hoạt động sườn đơn. Bộ đếm đếm từ BOTTOM tới TOP sau đó lập tức quay về BOTTOM. Trong chế độ so sánh không đảo đầu ra thì đầu ra OC1x được thiết lập khi TCNT1 và OCR1x bằng nhau, và xóa khi đạt giá trị TOP. Trong chế độ so sánh đảo đầu ra thì chân OC1x được xóa khi ICNT1 và OCR1x bằng nhau, và được thiết lập khi đạt giá trị TOP. 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). Tần số cao làm chế độ fast PWM phù hợp với điều chỉnh công suất, chỉnh lưu và ứng dụng DAC. Độ phân giải cho fast PWM có thể cố định 8, 9 hoặc 10 bit, hoặc định nghĩa bởi ICR1 hoặc OCR1A. Độ phân giải nhỏ nhất cho phép là 2 bit (ICR1, OCR1A lập lên 0x0003), lớn nhất là 16 bit (ICR1 hoặc OCR1A khi được gán giá trị MAX). Độ phân giải PWM trong các bit có thể tính theo hàm :

Công thức 5 - Độ phân giải PWM

log( 1)

log(2)

FPWM

TOP

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

Cờ tràn Timer/Counter (TOV1) được lập mỗi khi Counter tới giá trị TOP. Ngoài ra chân OC1A hoặc ICF1 được thiết lập trong cùng một chu kỳ xung với thời điểm TOV1 được thiết lập. Nếu ngắt được cho phép, thủ tục điều khiển ngắt có thể được sử dụng để cập nhập lại TOP và các giá trị so sánh. Khi thay đổi các giá trị TOP ta phải chắc chắn giá trị TOP mới lớn hơn hoặc bằng giá trị của tất cả các thanh ghi so sánh nếu không sẽ không có sự gặp nhau giữa TCNT1 và OCR1x . (adsbygoogle = window.adsbygoogle || []).push({});

Thủ tục cập để nhập lại ICR1 khác với 0CR1A khi sử dụng để định nghĩa giá

Một phần của tài liệu 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Ị (Trang 50)