4.1.1.1.1 Giới thiệu
ATmega16L là vi điều khiển thuộc họ AVR do hãng Atmel sản xuất. Đây là chip vi điều khiển 8 bit khá mạnh, có nhiều tính năng, độ ổn định, khả năng tích hợp, sự mềm dẻo trong việc lập trình và rất tiện lợi.
Các tính năng của ATmega16L :
- Bộ nhớ Flash 16KB, 512 byte EEPROM, 1 KB SRAM cho phép nạp xóa 10000 Flash/100000 EEPROM
- Có 32 chân vào ra dữ liệu chia làm 4 port : PORT A,B,C,D và cả 4 Port đều có điện trở kéo lên.
- Giao tiếp SPI – Giao tiếp I2C – Có 8 kênh ADC 10 bit - 2 bộ Timer/Couter 8 bit, 1 bộ Timer/Couter 16 bit - 1 bộ USART
4.1.1.1.2 Khảo sát sơ đồ chân
Hình 1.1 trình bày sơ đồ chân ATmega16L
- Các PORT A, B, C, D là các Port xuất nhập của ATmega16L
- VCC, GND là các chân cấp nguồn cho vi điều khiển với điện áp hoạt động là 5V - RESET là chân reset của ATmega16L, tín hiệu reset này tích cực mức thấp. - XTAL1, XTAL2 là 2 chân tạo bộ dao động ngoài cho vi điều khiển. Tần số thạch
Giảng viên – Thạc sỹ : Hoàng Quang Huy 28 - AREF là chân lấy điện áp chuẩn khi sử dụng bộ ADC.
- AVCC là chân ổn định điện áp cho bộ biến đổi khi sử dụng bộ ADC.
Hình 4.1 Sơ đồ chân của ATmega16L
4.1.1.1.3 Cấu trúc của ATmega16L
ATmega16L có cấu trúc Havard, trong đó đường truyền cho bộ nhớ dữ liệu và đường truyền cho bộ nhớ chương trình được tách riêng.
* Bộ nhớ chương trình : là bộ nhớ Flash lập trình được gồm 2 phần : phần đầu chứa các vector ngắt và phần mã lệnh nằm ngay sau đó.
Giảng viên – Thạc sỹ : Hoàng Quang Huy 29 16 bits $028 0000 $029 $1FFF Program Memory Các vetor ngắt Mã lệnh Hình 4.2 Bộ nhớ chương trình * Bộ nhớ dữ liệu : Chia thành 5 phần Hình 4.3 Bộ nhớ dữ liệu
Giảng viên – Thạc sỹ : Hoàng Quang Huy 30 - Phần 1 : Là phần đầu tiên trong bộ nhớ dữ liệu gồm 32 thanh ghi 8 bit có tên là
Register File (RF). Các thanh ghi này được đặt tên theo thứ tự từ R0 đến R31. Chúng là nguồn chứa các số hạng trong phép toán và cũng là đích chứa kết quả trả lại của phép toán
- Phần 2 : nằm ngay sau Register File, gồm 64 thanh ghi nhập/xuất (64 I/O Register) hay còn gọi là vùng nhớ I/O (I/O Memory). Tất cả các thanh ghi điều khiển, trạng thái… của thiết bị đều nằm ở đây. Việc điều khiển các Port có liên quan đến 3 thanh ghi DDRx, PORTx và PINx (x là tên của Port), tất cả 3 thanh ghi này đều nằm trong vùng nhớ I/O.
o Thanh ghi DDRx : thanh ghi điều khiển hướng dữ liệu vào/ra cho các chân của cổng. Viết giá trị 1 vào một bit trong thanh ghi DDRx thì chân tương ứng của PORTx sẽ là chân xuất, ngược lại giá trị 0 thì chân tương ứng sẽ là ngõ nhập.
o Thanh ghi PORTx : thanh ghi xác lập điện trở kéo lên.
o Thanh ghi PINx : dùng để đọc giá trị logic trên các chân của PORTx - Phần 3 : RAM tĩnh, nội (Internal SRAM), là vùng chứa các biến tạm thời trong
lúc thực thi chương trình.
- Phần 4 : RAM ngoại, chỉ tồn tại khi gắn thêm bộ nhớ ngoài
- Phần 5 : EEPROM, bộ nhớ này không bị xóa ngay cả khi mất điện, thích hợp cho việc lưu dữ liệu. Phần bộ nhớ EEPROM được tách riêng và có địa chỉ tính từ 0x0000.
4.1.1.1.4 Truyền thông nối tiếp đồng bộ và không đồng bộ (USART)
Vi điều khiển ATmega16L có 1 bộ USART. Có 3 chân liên quan đến module này là chân xung nhịp (XCK), chân truyền dữ liệu (TXD), chân nhận dữ liệu (RXD).
Có 5 thanh ghi liên quan đến việc điều khiển và hoạt động của USART là:
* UDR : là thanh ghi dữ liệu, là thanh ghi 8 bit có chức năng chứa giá trị nhận được và phát đi của USART.
Giảng viên – Thạc sỹ : Hoàng Quang Huy 31
*
UCSRA : là 1 trong 3 thanh ghi điều khiển hoạt động của USART, thanh ghi này chủ yếu chứa các bit trạng thái
Bảng 4.3 Thanh ghi UCSRA - RXC : báo quá trình nhận kết thúc
- TXC : báo quá trình truyền kết thúc. - UDRE : báo thanh ghi dữ liệu đang trống. - FE : khung truyền có lỗi
- DOR : dữ liệu tràn.
- PE : kiểm tra Parity có lỗi.
- U2X : bit chỉ định gấp đôi tốc độ truyền - MPCM : bit chọn chế độ hoạt động đa xử lý.
* UCSRB : thanh ghi quan trọng điều khiển USART
Bảng 4.4 Thanh ghi UCSRB - RXCIE : bit cho phép ngắt khi quá trình nhận kết thúc. - TXCIE : bit cho phép ngắt khi quá trình truyền kết thúc. - UDRIE : bit cho phép ngắt khi thanh ghi UDR trống.
- RXEN : bit điều khiển bộ nhận của USART, để kích hoạt chức năng nhận dữ liệu phải set bit này lên 1.
- TXEN : bit điều khiển bộ truyền phát
Giảng viên – Thạc sỹ : Hoàng Quang Huy 32 - UCSZ2 : bit này kết hợp với 2 bit khác trong thanh ghi UCSRC quy định độ dài
của dữ liệu truyền nhận.
- RXB8 : đóng vai trò là bit nhận thứ 9 trong chế độ truyền thông 9 bit, 8 bit đầu được chứa trong UDR.
- TXB8 : đóng vai trò là bit truyền thứ 9 trong chế độ truyền thồng 9 bit, 8 bit đầu được chứa trong UDR.
* UCSRC : thanh ghi quy định khung truyền và chế độ truyền
Hình 4.4 Thanh ghi UCSRC
Thanh ghi này có địa chỉ trùng với thanh ghi UBRRH (thanh ghi chứa byte cao dùng để xác lập tốc độ baud). Vì thế bit thứ 7 trong thanh ghi này, tức bit URSEL là bit chọn thanh ghi. Khi URSEL=1 thì thanh ghi UCSRC được chọn, nếu URSEL=0 thì thanh ghi UBRRH được chọn.
- UMSEL : bit chọn chế độ truyền thông đồng bộ và không đồng bộ. Nếu
UMSEL=1 thì chế độ đồng bộ được kích hoạt, nếu UMSEL=0 thì chế độ không đồng bộ được sử dụng.
- UPM1 và UPM0 : hai bit được dùng để quy định kiểm tra Parity. Nếu UPM1:0=00 thì Parity không được sử dụng, nếu UPM1:0=10 thì Parity chẵn được dùng, nếu UPM1:0=11 thì Parity lẻ được dùng.
- USBS : bit Stop trong khung truyền, nếu USBS=1 thì sẽ có 2 Stop bit, nếu USBS=0 thì sẽ có 1 Stop bit.
- UCSZ1 và UCSZ0 : hai bit này kết hợp với bit UCSZ2 trong thanh ghi UCSRB quy định độ dài dữ liệu truyền. Bảng 1.1 tóm tắt các giá trị có thể của tổ hợp 3 bit này và độ dài truyền dữ liệu tương ứng.
Giảng viên – Thạc sỹ : Hoàng Quang Huy 33 Bảng 5.5 Độ dài dữ liệu truyền
- UCPOL : bit chỉ chế độ xung kích trong chế độ truyền thông đồng bộ. Nếu UCPOL=0 thì dữ liệu thay đổi ở cạnh lên của xung, nếu UCPOL=1 thì dữ liệu thay đổi ở cạnh xuống của xung.
* UBRRH và UBRRL : hai thanh ghi thấp và cao quy định tốc độ baud
Hình 4.5 Thanh ghi UBRRH và UBRRL
Như trong hình trên, chỉ có 4 bit thấp của UBRRH được dùng, 4 bit này kết hợp với 8 bit trong thanh ghi UBRRL tạo thành 12 bit quy định tốc độ baud. Nếu ghi vào thanh ghi UBRRL thì tốc độ baud sẽ tức thì được cập nhật. Vì thế phải ghi vào UBRRH trước sau đó mới ghi vào UBRRL.
Bảng 1.2 trình bày cách tính tốc độ baud dựa vào giá trị của thanh ghi UBRR và ngược lại, cách tính giá trị cần thiết cho thanh ghi UBRR khi đã biết tốc độ baud.
Giảng viên – Thạc sỹ : Hoàng Quang Huy 34 Bảng 4.6 Tính tốc độ Baud