Tải bản đầy đủ (.doc) (94 trang)

Thiết kế đồng hồ thời gian thực dùng vi điều khiển AT MEGA 16

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.89 MB, 94 trang )

MỤC LỤC
MỤC LỤC................................................................................................................1
LỜI NÓI ĐẦU..........................................................................................................3
CHƯƠNG I : SƠ LƯỢC VỀ ATMEGA16.............................................................4
Sơ đồ khối.................................................................................................................5
1.1 ĐẶC TRƯNG....................................................................................................6
1.2 AVR CPU...........................................................................................................8
1.2.1 ALU – Arithmetic Logic Unit..............................................................10
1.2.2. STATUS REGISTER..........................................................................10
1.2.3 Thanh ghi mục đích chung ..................................................................10
1.2.4 STACK POITER (con trỏ ngăn xếp )...................................................11
1.2.5 Reset và xử lý ngắt ...............................................................................12
1.2.6 Ngắt đáp ứng lại thời gian....................................................................14
1.3 BỘ NHỚ AVR ATMEGA16...........................................................................14
1.3.1 Hệ thống bộ nhớ lập trình lại flash.......................................................14
1.3.2 Bộ nhớ dữ liệu SRAM..........................................................................15
1.3.3 Bộ nhớ dữ liệu EEPROM.....................................................................16
1.4 CÁC VECTOR NGẮT VÀ CÁC CỔNG I/O ................................................16
1.4.1 CÁC VECTOR NGẮT CỦA ATMEGA16........................................16
1.4.2 CÁC PORT I/O.....................................................................................18
CHƯƠNG II : LẬP TRÌNH I2C – GIAO TIẾP 2 DÂY TRONG AVR..............19
2.1 GIAO TIẾP 2 DÂY..........................................................................................19
2.2 CHUYỂN GIAO DỮ LIỆU VÀ ĐỊNH DẠNG KHUNG..............................20
2.2.1 Điều kiện của START và STOP bit.....................................................20
2.2.2 Định dạng gói địa chỉ và định dạng gói dữ liệu...................................21
2.4 CÁC MODULO TWI......................................................................................21
2.4.1 Các chân SCL và SDA..........................................................................22
2.4.2 Bộ sinh tốc độ bit đơn vị.......................................................................22
2.4.3 Đơn vị ghép nối Bus.............................................................................23
2.4.4 Địa chỉ đơn vị phù hợp.........................................................................23
2.4.5 Đơn vị điều khiển..................................................................................24


2.5 CÁC CHẾ ĐỘ TRUYỀN................................................................................24

1


2.6.1 Chế độ truyền Master............................................................................25
2.6.2 Chế độ nhận Master..............................................................................27
2.6.3 Chế độ nhận Slave................................................................................29
2.6.4 Chế độ truyền Slave..............................................................................31
CHƯƠNG 3 : GIỚI THIỆU VỀ CÔNG CỤ LẬP TRÌNH CodeVisionAVR......34
3.1 Môi trường tích hợp phát triển CodeVisionAVR............................................35
3.2 Làm việc với Files............................................................................................35
3.3 Làm việc với Project........................................................................................40
3.4 Tạo một chương trình bằng cách tự sinh mã trong CodeVisionAVR............57
CHƯƠNG 4 PHÂN TÍCH VÀ THIẾT KẾ MẠCH..............................................60
Sơ đồ khối...............................................................................................................60
4.1.Khối Reset:.......................................................................................................60
4.2.Khối điều khiển:...............................................................................................61
4.3 Khối tạo xung giao động..................................................................................62
4.4.Khối tạo thời gian thực:...................................................................................63
4.4.1Giới thiệu chung về DS1307:................................................................64
4.4.2Cơ chế hoạt động và chức năng của DS1307: ......................................64
4.4.3Sơ đồ địa chỉ RAM và RTC: ................................................................67
4.4.4Sự truyền nhận dữ liệu trên chuỗi bus 2 dây :.......................................69
4.4.5Chế độ hoạt động của DS1307..............................................................70
4.5 KHỐI HIỂN THỊ LCD....................................................................................72
4.5.1 ĐẶC TẢ................................................................................................72
4.5.2.1 Sơ đồ khối của chip HD44780......................................................74
4.5.2.2 Các thanh ghi ................................................................................74
4.5.2.3 Cờ báo bận BF ..............................................................................75

4.5.2.4 Bộ đếm địa chỉ AC ........................................................................75
4.5.2.5 Hiển thị dữ liệu DDRAM .............................................................76
4.5.2.6 ROM chứa kí tự CGROM ( Character Generator ROM).............77
4.5.3 Giới thiệu tập lệnh “LCD.h” ................................................................78
4.5.3.1 Các hàm lcd có mức thấp...............................................................78
4.5.3.2 Các hàm LCD mức cao..................................................................79

2


4.6.THIẾT KẾ MẠCH...........................................................................................80
4.6.1SƠ ĐỒ MẠCH.......................................................................................80
4.6.2 LƯU ĐỒ THUẬT TOÁN ...................................................................81
KẾT QUẢ ĐẠT ĐƯỢC........................................................................................90

LỜI NÓI ĐẦU

3


Ngày nay nhân loại đang trải qua những sự phát triển vượt về mọi
mặt.Trong đó điện tử, tự động hoá đóng một vai trò không nhỏ. Điện tử góp phần
vào quá trình tự động hoá mọi thứ giúp con người hiện đại hoá cuộc sống.
Vận dụng những kiến thức đã được học trong quá trình học tập ở
trường,em thực hiện đề tài Thiết kế đồng hồ thời gian thực. Đề tài này được áp
dụng chủ yếu dựa vào vi điều khiển ATMEGA16, nhằm mục đích giúp em hiểu
một cách tường tận hơn về những gì về vi điều khiển, cách đọc, viết va nhận biết
về các chân IC mà em đã được học từ thầy cô trong trường, tìm hiểu và nghiên
cứu qua sách cũng như cách thức vận dụng nó trong thực tế.
Trong thực tế, các ứng dụng của vi điều khiển rất đa dạng và phong

phú.Từ những ứng dụng đơn giản chỉ có vài thiết bị ngoại vi cho đến những hệ
thống điều khiển phức tạp .Tuy nhiên do pham vi trình độ của em còn hạn chế,
nên việc nghiên cứu và tìm hiểu về vi điều khiển còn nhiều điều chưa biết. Trong
bài viết của em, em xin giới thiêu ứng dụng vi điều khiển ATMEGA16 để hiển
thị bộ đếm GIỜ-PHÚT-GIÂY hiển thị trên LCD

CHƯƠNG I : SƠ LƯỢC VỀ ATMEGA16

4


Atmega16 là bộ vi điều khiển CMOS 8 bit tiêu thụ điện năng thấp dựa
trên kiến trúc RISC (Reduced Intruction Set Computer). Vào ra Analog – digital
và ngược lại. Với công nghệ này cho phép các lệnh thực thi chỉ trong một chu kì
xung nhịp, vì thế tốc độ xử lý dữ liệu có thể đạt đến 1 triệu lệnh trên giây ở tần số
1 Mhz. 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í
Sơ đồ khối

Atmega16 có tập lệnh phong phú về số lượng với 32 thanh ghi làm việc đa
năng. Toàn bộ 32 thanh ghi đều được nối trực tiếp với ALU (Arithmetic Logic
Unit), cho phép truy cập 2 thanh ghi độc lập bằng một chu kì xung nhịp. Kiến
trúc đạt được có tốc độ xử lý nhanh gấp 10 lần vi điều khiển dạng CISC
(Complex Intruction Set Computer) thông thường.
Khi sử dụng vi điều khiển Atmega16, có rất nhiều phần mềm được dùng
để lập trình bằng nhiều ngôn ngữ khác nhau đó là: Trình dịch Assembly như

5



AVR studio của Atmel, Trình dịch C như win AVR, CodeVisionAVR C,
ICCAVR. C - CMPPILER của GNU… Trình dịch C đã được nhiều người dụng
và đánh giá tương đối mạnh, dễ tiếp cận đối với những người bắt đầu tìm hiểu
AVR, đó là trình dịch CodeVisionAVR C. Phần mềm này hỗ trợ nhiều ứng dụng
và có nhiều hàm có sẵn nên việc lập trình tốt hơn
1.1 ĐẶC TRƯNG
- Được chế tạo theo kiến trúc RISC, hiệu suất cao và điện năng tiêu thụ thấp.
Bộ lệnh gồm 131 lệnh, hầu hết đều thực thi chỉ trong một chu kì xung nhịp.
Bộ nhân 2 chu kỳ.
32x8 thanh ghi làm việc đa dụng.
Hoạt động tĩnh.
16MIPS với thông lượng 16 MHz.
8KB Flash ROM lập trình được ngay trên hệ thống.
+ Giao diện nối tiếp SPI enable lập trình ngay trên hệ thống.
+ Enable 1000 lần ghi/xoá.
Bộ EEPROM 512 byte. Cho phép 100.000 ghi/xoá.
16 K Byte bộ nhớ chương trình in-System Self-programmable Flash.
Chu kỳ 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ộ nhớ SRAM 512 byte.
Bộ biến đổi ADC 8 kênh, 10 bit.
32 ngõ I/O lập trình được.
Bộ truyền nối tiếp bất đồng bộ vạn năng UART.
Vcc=2.7V đến 5.5V.
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


6


-

4 kênh điều chế độ rộng xung PWM.
Có đến 13 interrupt ngoài và trong.
Bộ so sánh Analog.
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

a

b
Hình 1.1 a,b cấu trúc Atmega16

-

VCC: Điện áp nguồn nuôi.
GND: Nối mass.
PortA (PA7…PA0): PortA nhận vào tín hiệu Analog và chuyển đổi qua tín

hiệu Digital. Ngoài ra PortA có thể được tách ra làm vào ra 2 hướng 2 bit nếu bộ
chuyển đổi A/D không được sử dụng. Khi các chân PA0 đến PA7 là các lối vào và
được đặt xuống chế độ thấp từ bên ngoài, chúng sẽ là nguồn dòng nếu các điện trở
nối lên nguồn dương được kích hoạt. Các chân của Port A ở vào trạng thái có điện
trở cao khi tín hiệu Reset ở chế độ tích cực hoặc ngay cả khi không có tín hiệu

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.

7


-

PortC (PC7…PC0): tương tự như PortA. Nhưng nếu enable giao diện

JTAG, thì các chân PC5, PC3, PC2 sẽ hoạt động ngay cả khi Reset lại tín hiệu.
Reset: Lối vào đặt lại. Bộ vi điều khiển sẽ được đặt lại khi chân này ở chế
độ thấp trong hơn 50ns, các xung ngắn hơn không tạo ra tín hiệu đặt lại.
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.
XTAL2: Lối ra bộ khuếch đại đảo. XTAL1 và XTAL2 lần lượt là lối vào và
lối ra của một bộ khuếch đại đảo. Bộ khuếch đại này được bố trí để làm bộ tạo dao
động trên chip. Một bộ tinh thể thạch anh hoặc một bộ cộng hưởng gốm có thể
được sử dụng. Để điều khiển bộ vi điều khiển từ một nguồn xung nhịp bên ngoài,
chân XTAL2 để trống, còn chân XTAL1 được nối với bộ dao động bên ngoài.
-

AREF: Là chân chuyển đổi tín hiệu analog cho bộ chuyển đổi A/D.

-

AVCC : là chân nguồn cho PortA và cho bộ chuyển đổi A/D. Nó có thể tự


kết nối với nguồn chính ngay cả khi ADC không được sử dụng.
1.2 AVR CPU
Kiến trúc AVR nói chung, các chức năng chính của CPU đảm bảo sự thực
thi chính xác process. CPU phải có khả năng truy xuất bộ nhớ, thực hiện tính
toán, điều khiển thiết bị ngoại vi và các kênh ngắt.
Trong thứ tự thực hiện song song, AVR sử dụng kiến trúc Harvard với bộ
nhớ tách rời giữa hai luồng process và dữ liệu. Các chỉ lệnh trong bộ nhớ process
được thực hiện với những mức đơn pipeline. Trong khi một lệnh dang thực thi,
lênh tiếp theo sẽ được tìm nạp trước từ bộ nhớ process. Khái niệm này enable các
lệnh sẽ được thực hiện trong mọi chu kỳ xung. Bộ nhớ process là hệ thống bộ
nhớ Flash lập trình lại được. Truy xuất nhanh thanh ghi File chứa 32*8 bit thanh
ghi làm việc đa năng với một chu kỳ xung đơn truy xuất thời gian. Điều này
enable bộ tính toán ALU làm việc đơn chu kỳ.
6 trong 32 thanh ghi có thể sử dụng như 3 địa chỉ gián tiếp thanh ghi con
trỏ cho không gian địa chỉ dữ liệu. Nó cũng có thể được sử dụng như con trỏ của
bộ nhớ process Flash.
Một lệnh AVR có 16 bit đơn định dạng word.

8


Mỗi địa chỉ bộ nhớ process chứa 16 hoặc 32 lệnh.
Bộ nhớ process Flash được chia ra làm 2 khu vực, khu vực khởi động
process và khu vực ứng dụng process. Cả hai khu vực được thiết kế bảo vệ các
bit ghi và đọc/ghi.
Trong khi các ngắt và process con được gọi, địa chỉ trả về của Counter
process (PC) được lưu trữ trong Stack. Stack được định phần trong dữ liệu tổng
quát SRAM, vì vậy kích thước STACK được hạn chế bởi kích thước SRAM tổng
và cách sử dụng của nó. Tất cả các process sử dụng phải khởi tạo giá trị đầu cho
Stack Poiter trước khi process con hoặc ngắt được gọi. Stack Poiter được đọc/ghi

được sử dụng trong không gian I/O. Dữ liệu SRAM có thể dễ dàng được truy
xuất qua 5 cách đánh địa chỉ khác nhau hộ trợ trong kiến trúc AVR. Không gian
bộ nhớ trong kiến trúc AVR là tất cả những bản đồ bộ nhớ phổ biến tuyến tính.
Một mô đun ngắt linh hoạt có những thanh ghi điều khiển trong không gian I/O
với một ngắt toàn cục enable ngắt trong thanh ghi trạng thái. Tất cả các ngắt đều
có vector ngắt riêng biệt trong bảng vector ngắt. Địa chỉ vector ngắt càng thấp
quyền ưu tiên ngắt càng cao.
Không gian bộ nhớ I/O chứa 64 địa chỉ cho các chức năng ngoại vi CPU
như thanh ghi điều khiển,SPI, và một số chức năng I/O khác.

9


Hình 1.2: Lược đồ khối kiến trúc AVR MCU
1.2.1 ALU – Arithmetic Logic Unit
Thực thi cao AVR ALU hoạt động trong sự kết nối 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
1.2.2. STATUS REGISTER
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-I : enable ngắt toàn cục. Không enable 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ớ
1.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.

10


Hình 1.2.3: Các thanh ghi hỗ trợ làm việc AVR CPU
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

1.2.4 STACK POITER (con trỏ ngăn xếp )

11


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.

1.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 enable ngắt phụ thuộc giá trị Counter process.
Các ngắt có thể tự động bị disable 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 enable I-bit xóa và tất cả các ngắt còn
lại bị disable. Sử dụng phần mềm có thể ghi logic 1 cho I-bit enable ngắt. Tất cả
các ngắt được enable 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í

12


bit cờ để xóa. Nếu điều kiện một ngắt xuất hiện trong khi enable ngắt
bit bị xóa thì cờ ngắt sẽ được lập và nhớ đến khi ngăt enable 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 enable 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 để disable các ngắt thì ngắt sẽ không trực tiếp bị disable.
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 enable ngắt
• Ghi bằng Assembly


13


• Ghi bằng C

1.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
1.3 BỘ NHỚ AVR ATMEGA16
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
1.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.

14


Hình 1.3.1 : Sơ đồ bộ nhớ process.


1.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 1.3.2.1 : Sơ đồ bộ nhớ dữ liệu

15


Hình 1.3.2.2 : những chu kỳ truy xuất SRAM trong dữ liệu chip
1.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

1.4 CÁC VECTOR NGẮT VÀ CÁC CỔNG I/O
1.4.1 CÁC VECTOR NGẮT CỦA ATMEGA16

16


Bảng 1.4.1: bảng vector ngắt của Atmega16
Ngắt ngoài được khởi tạo bởi các trạng thái INT0, INT1, INT2. Quan sát thấy
rằng khi được enable, các ngắt sẽ được khởi tạo nếu các trạng thái INT0, INT1,
INT2 được cấu hình là ngõ ra. Chức năng này thường được cung cấp bởi các
phần mềm sinh mã tự động. Các ngắt ngoài này được khởi tạo là kéo lên hay kéo
xuống hoặc là mức thấp (INT2 chỉ giới hạn 1 mức ngắt). Điều này được thiết lập

bởi thanh ghi điều khiển đặc biệt MCUCR và thanh ghi điều khiển trạng thái
MCUCSR. Khi được enable và được cấu hình bởi các trạng thái bắt đầu (chỉ
dành cho INT0, INT1), các ngắt sẽ có hiệu lực với các chân được giữ mức thấp.
Chú ý rằng để có sự nhận biết kéo lên hay kéo xuống của ngắt cần có sự hiện
diện I/O clock. Trạng thái mức thấp của INT0, INT1 và mức kích cạnh của INT2
đều là không đồng bộ. Tóm lại các ngắt này dùng để đánh thức các chế độ đang ở
trạng thái sleep hơn là để chạy không. Xung I/O được chia đôi trong tất cả các
trạng thái sleep và chạy không

17


Thanh ghi điều khiển vector ngắt GICR

• Bit 1 – IVSEL: Interrupt Vector Select
Khi bit IVSEL được xóa về 0 thì những vector ngắt được đặt tại điểm
bắt đầu của bộ nhớ Flash. Khi được đưa lên 1 thì những vector này sẽ
được đưa về điểm bắt đầu của đoạn khởi động bộ nhớ Flash.
• Bit 0 – IVCE: Interrupt Vector Change Enable

Bit IVCE phải ghi bởi logic 1 enable sự thay đổi IVSEL bit.IVCE được
xóa bởi phần cứng 4 chu trình sau nó được ghi hoặc bởi IVSEL được ghi.
Thiết lập bit IVCE sẽ ngăn chặn ngắt

1.4.2 CÁC PORT I/O
Tất cả các Port của AVR đều có các hàm Read- Modify- Write khi sử
dụng các Port I/O thông thường. Điều này có nghĩa trực tiếp đến một Port có thể
thay đổi không lường trước, thay đổi trực tiếp của bất kỳ chân nào với những chỉ
dẫn SBI và CBI. Cùng ứng dụng khi thay đổi điều khiển (nếu định cấu hình
tương tự đầu ra) hay enable / disable sự tăng giá trị trên những điện trở (nếu định

cấu hình tương tự như đầu vào). Trình điều khiển chân đủ mạnh để điều khiển
hiển thị led trực tiếp. Tất cả các chân có thể được chọn lựa riêng lẻ tăng điện trở
lên với chế độ điện áp không đổi cho điện trở 3 địa chỉ bộ nhớ I/O được cấp phát
cho mỗi Port, mỗi từng cái cho bộ thanh ghi dữ liệu Portx, thanh ghi điều khiển
dữ liệu DDRx và chân Port vào PINx. Những chân ngõ nhập được định vị I/O chỉ
đọc , trong khi thanh ghi dữ liệu và thanh ghi điều khiển dữ liệu là đọc/ ghi.

18


CHƯƠNG II : LẬP TRÌNH I2C – GIAO TIẾP 2 DÂY
TRONG AVR
Chức năng :
• Nguồn đơn giản và linh hoạt trong giao diện truyền thông ,chỉ cần có 2
đường Bus .
• Hoạt động Master và slave đều được hỗ trợ.
• Thiết bị này có thể hoạt động truyền và nhận.
• 7 bit không gian địa chỉ cho phép up lên thành 128 địa chỉ khác nhau
• Nhiều chủ được hỗ trợ
• Đưa lên tới 400kHz tốc độ truyền dữ liệu.
• Định mức quay giới hạn cơ cấu truyền động
• Loại bỏ nhiễu trên mạch do đột biến điện trên đường Bus.
• Có process đầy đủ tớ với những lời gọi thông thường.
Có các địa chỉ đánh thức AVR khi AVR ở chế độ nghỉ.

2.1 GIAO TIẾP 2 DÂY
- Serial Data(SDA) : đường truyền dữ liệu 2 hướng.
- Serial Clock (SCL) : đường truyền xung đồng hồ 1 hướng.
Mỗi dây SDA hay SCL đều được nối với điện áp dương của nguồn cấp thông qua
một điện trở kéo lên. Sự cần thiết của các điện trở kéo lên này là do chân giao

tiếp I2C của các thiết bị ngoại vi thường là máng cực hở. Giá trị của các điện trở
kéo lên tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động từ 1 KΩ đến
4.7 KΩ

19


Hình 2.1 : Bus nối liền TWI.

2.2 CHUYỂN GIAO DỮ LIỆU VÀ ĐỊNH DẠNG KHUNG
2.2.1 Điều kiện của START và STOP bit

Lưu chuyển được bắt đầu khi Master đưa ra điều kiện START trên bus, và
kết thúc khi đưa ra một điều kiện STOP. Giữa điều kiện START và STOP,
không có Master khác chiếm hữu bus khi đang có dữ liệu được truyền. Khi một
điều kiện START mới được đưa ra giữa một điều kiện START và STOP thì nó sẽ
được tham chiếu như một điều kiện REPEATED START

20


2.2.2 Định dạng gói địa chỉ và định dạng gói dữ liệu
-

Start : Chân SDA có cạnh từ cao xuống thấp và chân SCL đang ở mức cao.
Stop : Chân SDA có cạnh từ thấp lên cao và chân SCL đang ở mức cao.
SLA+R/W: 7 bit địa chỉ ( 2^7=128 có thể giao tiếp với 128 thiêt bị khách
khác) và bit cuối R/W cho biết là chủ muốn đọc hay ghi lên khách ( 1 là đọc

-


và 0 là ghi ).
ACK : nếu dịa chỉ tới đúng khách thì chủ sẽ nhận được tín hiệu ACK từ

-

khách.
Data byte : khi nhận được ACK chủ sẽ truyền 8 bit dữ liệu xuống khách .Khi
khách nhận xong 8 bít nó sẽ kéo đường ACK xuống thấp , để báo chủ biết
khách đã nhận đủ 8 bit.
Chú ý : giá trị dữ liệu được thay đổi khi xung kéo xuống thấp.

Hình 2.2.2.1 : định dạng gói địa chỉ.

Hình 2.2.2.2 : Định dạng gói dữ liệu.
2.4 CÁC MODULO TWI

21


Hình 2.4 : Tổng quan về Module của TWI.
2.4.1 Các chân SCL và SDA
Những chân này là giao diện AVR TWI với phần còn lại của vi điều
khiển. Quá trình xuất điều khiển chứa đựng tốc độ quay giới hạn để mà làm phù
hợp với các đặc điểm của TWI. Quá trình nhập chứa đơn vị lọc nhiễu, làm cho
lọc nhiễu nhỏ hơn 50ns
2.4.2 Bộ sinh tốc độ bit đơn vị
Trong giai đoạn SCL được điều khiển bởi lập thanh ghi tốc độ bit TWI
(TWBR) và các bit Prescaler trong thanh ghi trạng thái TWI (TWSR). Slave hoạt
động không phụ thuộc tốc độ bit hay việc lập Prescaler nhưng tần số xung CPU

trong Slave ít nhất phải cao hơn hơn 16 thời gian so bới tần số SCL. Chú ý trong
Slave có thể gia hạn thêm giai đoạn thấp SCL

22




TWBR = Giá trị của thanh ghi TWI Bit Rate.

TWPS = Giá trị prescaler các bit ở trong thanh ghi TWI Status .
2.4.3 Đơn vị ghép nối Bus
Đơn vị này chứa đựng dữ liệu và địa chỉ của thanh ghi dịch (TWDR), sự
điều khiển Start/Stop và sự phân xử được nhận ra bởi phần cứng. Thanh ghi
TWDR chứa đựng địa chỉ và dữ liệu để truyền đi và chứa đựng địa chỉ, dữ liệu
được nhận. Để thêm 8 bit vào thanh ghi TWDR, đơn vị ghét nối bus (Bus
interface Unit) cũng chứa thanh ghi có nội dung bit N (ACK) để truyền và nhận.
Thanh ghi N (ACK) không được truy cập trực tiếp bởi phần mềm của ứng dụng.
Tuy nhiên, khi nhận nó có thể đặt hoặc xóa bởi thanh ghi điều khiển TWI
(TWCR). Trong chế độ truyền, giá trị này được định nghĩa bởi thanh ghi TWSR.
Sự điều khiển START/STOP có trách nhiệm phát ra và nhận ra các điều kiện
START, REPEATED START và STOP. Sự điều khiển START/STOP có thể
nhận ra các điều kiện START/STOP khi vi điều khiển AVR nằm ở chế độ nghỉ,
khởi động vi điều khiển AVR được đánh thức nếu địa chỉ là chủ.
2.4.4 Địa chỉ đơn vị phù hợp
Đơn vị này kiểm tra nếu bên nhận có địa chỉ byte phù hợp 7-bit địa chỉ ở
thanh ghi địa chỉ TWI(TWAR). Nếu bit TWGCE (TWI General Call Recognition
Enable) ở thanh ghi TWAR được ghi là 1, tất cả địa chỉ đến sẽ so sánh lại với địa
chỉ General Call. Để làm phù hợp địa chỉ bên trên, đơn vị điều khiển được báo
cáo lên, để làm hoạt động cho đúng. TWI có thể nhận biết hoặc không thể nhận

biết được địa chỉ của nó, phụ thuộc vào sự khởi tạo ở trong TWCR. Đơn vị địa

23


chỉ phù hợp có thể so sánh với địa chỉ sự kiện khi vi điều khiển AVR đang ngủ,
có thể đánh thức vi điều khiển nếu địa chỉ này được gọi bởi Master.
2.4.5 Đơn vị điều khiển
Đơn vị điều khiển giám sát bus TWI và phát ra đáp ứng đúng với quá
trình khởi tạo ở thanh ghi điều khiển TWI (TWCR). Khi sự kiện đáp ứng sự chú
ý của các ứng dụng xảy ra trong bus TWI, cờ ngắt TWI(TWINT) được xác nhận.
Trong những chu kỳ xung tiếp theo, thanh ghi trạng thái (TWSR) được cập nhập
với các mã trạng thái nhận dạng cho mỗi sự kiện. Thanh ghi TWSR chỉ chứa
thông tin trạng thái thích đáng khi cờ ngắt TWI được xác nhận. Trong tất cả thời
gian khác, TWSR chứa mã trạng thái đặc biệt.
Cờ ngắt TWINT được lập trong các tình huống như sau:


Sau khi TWI đã truyền các điều kiện START/REPEATED START.



Sau khi TWI đã truyền SLA+R/W.



Sau khi TWI đã truyền địa chỉ byte .




Sau khi TWI đánh mất sự giám định



Sau khi TWI đã được đánh địa chỉ bởi địa chỉ tớ riêng hoặc lời gọi thông
thường.



Sau khi TWI đã nhận byte dữ liệu .



Sau khi STOP/REPEATED START đã được nhận trong khi vẫn đánh địa
chỉ bên tớ .

Khi lỗi bus xảy ra sự chậm trễ để sai các điều kiện START/STOP

2.5 CÁC CHẾ ĐỘ TRUYỀN

24


TWI hoạt động 1 trong 4 chế độ chính. Có tên là Master Transmitter (MT),
Master Receiver (MR), Slave Transmitter (ST) và Slave Receiver (SR).
Các ký tự chính của mỗi chế độ.
S : điều kiện START.
Rs : điều kiện REPEATED START
R : đọc bit (mức cao tại SDA)
W : ghi bit (mức thấp tại SDA)

A : chấp nhận bit (mức thấp tại SDA)
A : không chấp nhận bit (mức cao tại SDA)
Data : 8-bit dữ liệu byte
P : điều kiện STOP
SLA : Slave Address

2.6.1 Chế độ truyền Master

Hình 2.6.1 : Dữ liệu được truyền trong chế độ truyền Master.
Điều kiện START gửi để ghi các giá trị đến TWCR như sau :

TWEN phải được lập để khởi tạo đường truyền 2 dây, TWSTA phải được
ghi lên 1 để truyền điều kiện START và TWINT phải ghi lên 1 để xóa cờ
TWINT. TWI sẽ kiểm tra sau trên đường truyền 2 dây và phát ra điều kiện
START càng sớm càng tốt lúc bus đang còn rảnh. Sau khi điều kiện START

25


×