Tổng quan atmega 8.
SRAM: 1Kbytes.
EPPROM: 512bytes. Có thể ghi/đọc được 10.000 lần. Hai bộ Timer/counter 8 bit (T/C0 và T/C2).
Một bộ Timer/counter 16 bit (T/C 1). Ba kênh PWM.
Sáu kênh ADC 10 bit.
Tích hợp sẵn 1 bộ USART lập trình được. Khối truyền nhận nối tiếp SPI Master/Slave. 23 đường I/O.
Điện áp hoạt động: 2.7v - 5.5v với Atmega8L. 4.5v - 5.5v với Atmega8.
Bộ tạo dao động nội RC cho phép tạo được 1MHz, 2MHz, 4MHz, 8MHz. Ngoài ra atmega 8 có thể chạy dao động ngoài với tần số tối đa 16 MHz với atmega8 và 8 MHz với atmega 8L.
Hình 3.6. Sơ đồ chân atmega 8
Cấu trúc atmega8
Bộ nhớ AVR được chia thành 2 thành phần chính là bộ nhớ chương trình và bộ nhớ dữ liệu:
- Bộ Nhớ Chương Trình:Bộ nhớ chương trình củaAVR là bộ nhớ Flash có dung lượng 8 Kbyte.Bộ nhớ chương trình có độ rộng bus là 16 bit.
- Bộ nhớ dữ liệu: Bộ nhớ dữ liệucủaAVR chia làm 2 phần chính là bộ nhớ SRAM và bộ nhớ EEPROM.
Cổng vào ra
Cổng vào ra là một trong số các phương tiện để vi điều khiển giao tiếp với các thiết bị ngoại vi. Atmega8 có 2 cổng (PORT) vào ra 8 bit là: PORTB, PORTD, và một PORT 6 bit là PORTC. Các cổng vào ra của AVR là cổng vào ra hai chiều có thể định hướng, tức có thể chọn hướng của cổng hướng vào (input) hay hướng ra (output).Tất các các cổng vào ra của AVR điều có
tínhnăng đọc - chỉnh sửa – ghi khi sử dụng chúng như là các cổng vào ra số thông thường. Điều này có nghĩa là khi ta thay đổi hướng của một chân nào đó thì nó không. Tất cả các chân của các cổng điều có điện trở (1k đến 5k) kéo lên riêng (pull up),ta có thể cho phép hay không cho phép điện trở kéo lên này hoạt động.
Việc định chiều vào/ra cho các PORT được quyết định bằng thanh ghi DDRx (x có thể là B, C, D).
Ngoài chức năng vào/ra, các PORT này còn có thêm các chức năng thứ hai nữa (như đầu ra bộ so sánh, giao tiếp UART, ADC, ngắt…)
PORT B
Port B gồm các chân 9,10 và 14 đến 19, ngoài chức năng là cổng vào ra các chân trên port B còn có nhiệm vụ khác. 2 chân PB.6 và PB.7 còn là 2 chân nối với mạch dao động ngoài. Khi sử dụng dao động thạch anh ngoài thì 2 chân này ko được dùng làm cổng xuất nhập. Trên Porb còn có các chân để giao tiếp với mạch nạp, chân băm xung PWM.
PORTC
PortC có 7 đường I/O. ngoài chức năng vào ra cơ bản thì các chân PortC còn có nhiệm vụ như. Từ PC.0 đến Pc.5 là 6 chân bộ ADC 10 bit. Đặc biệt chân PC. 6 còn là chân Reset. Nếu sử dụng chân này làm nhiệm vụ I/O thì atmega 8 sẽ không nạp được bằng mạch nạp ISP, để sử dụng chân này t phải fuse bit RSTDISTL, nếu không thực sự cần thiết thì chúng ta không nên sử dụng chế độ
này.
PORTD
Tương tự với hai PORT trên thì PORTD cũng có 2 chức năng, ngoài vào ra cơ bản thì nó còn là các chân ngắt ngoài, chân giao tiếp chuẩn nối tiếp TXD,RXD, chân xung ngoài cho chế độ counter của timer…
Hình 3.7. Sơ đồ một cổng vào ra
Thanh ghi
Thanh ghi DDRx: Đây là thanh ghi 8 bit (có thể đọc ghi) có chức năng điều khiển hướng của cổng (là lối ra hay lối vào). Khi một bit của thanh ghi này được set lên 1 thì chân tương ứng với nó được cấu hình thành ngõ ra. Ngược lại, nếu bit của thanh ghi DDRx là 0 thì chân tương ứngvới nó được thiếtlập thành ngõ vào. Lấy ví dụ: khi ta set tất cả 8 bitcủa thanh ghi DDRB đều là1, thì8 chân tương ứng của PORTA là PB1, PB2, … PB7 được thiết lập thành ngõ ra..
Thanh ghi PORTx: Là thanh ghi 8 bit có thể đọc ghi. Đây là thanh ghi dữ liệu của PORTx. Nếu thanh ghi DDRx thiết lập cổng là lối ra, khi đó giá trị của thanh ghi PORTx cũng là giá trị của các chân tương ứngcủa PORTx, nói cách khác, khi ta ghi một giá trị logic lên 1 bit của thanh ghi này thì chân tương ứng với bit đó cũng có cùng mức logic. Khi thanh ghi DDRx thiết lập cổng thành lối vào thì thanh ghi PORTx đóng vai trò như một thanh ghi điều khiển cổng.Cụ thể,nếu một bit của thanh ghi này được ghi thành 1 thì điện trở treo
(pull - up resistor) ở chân tương ứng với nó sẽ được kích hoạt, ngược lại nếu bit được ghi thành 0 thì điện trở treo ở chân tương ứng sẽ không được kích hoạt, cổng ở trạng thái cao trở (Hi - Z).
Thanh ghi PINx: PINx không phải là một thanh ghi thực sự, đây là địa chỉ trong bộ nhớ I/O kết nối trực tiếp tới các chân của cổng. Khi ta đọc PORTx tức ta đọc dữ liệu được chốt trong PORTx, còn khi đọc PINx thì giá trị logic hiện thời ở chân của cổng tương ứng được đọc. Vì thế đối với thanh ghi PINx ta chỉ có thể đọc mà không thể ghi.
System Clock and Clock Options
Dòng vi điều khiển atmega của atmel tích hợp sẵn bên trong bộ tạo dao động với các tần số mặc định là 1MHz, 2MHz và cao nhất là 8MHz. Ngoài ra AVR còn có thể chạy với dao động ngoài (dao động thạch anh, RC..).
Để sử dụng các chế độ khác nhau này, ta phải cài đặt 1 số bit tương ứng cụ thể như sau
Hình 3.8. Các chế độ xung nhịp của avr
Device Clocking Option CKSEL3..0
External Crystal/Ceramic Resonator 1111 - 1010 External Low-frequency Crystal 1001
External RC Oscillator 1000- 0101
Calibrated Internal RC Oscillator 0100 - 0001
External Clock 0000
Có đến 7 Fuse bits tham gia vào việc này đó là 4 bits CKSEL3:0, 2 bis SUT1:0 và bit CKOPT. Trong đó 2 bit SUT1:0 chủ yếu dùng để chọn thời gian khởi động, phần này không ảnh hưởng nhiều trong hầu hết các trường hợp vì thế ta sẽ bỏ qua, chúng ta để 2 fuse bits như mặc định. Nếu start-up time thật sự ảnh hưởng đến chương trình của bạn, bạn hãy tham khảo thêm phần “System Clock and Clock Option” trong datasheet của chip. Phần này chủ yếu trình bày cách chọn nguồn xung giữ nhịp cho chip.
Có tất cả 5 loại nguồn xung giữ nhịp chính cho chip nhưng để đơn giản chúng ta chỉ xét 2 trường hợp là dùng nguồn thạch anh ngoài và dùng xung giữ nhịp được tạo bởi mạch RC trong chip.
Xung giữ nhịp trong chip (xung nội)
Hầu hết các chip AVR được trang bị 1 mạch tạo xung giữ nhịp RC bên trong, nếu sử dụng nguồn xung giự nhịp này chúng ta có thể bỏ qua mạch tạo xung bên ngoài. Nguồn xung giữ nhịp được tạo ra bên trong chip được cố định ở 1 trong 4 mức : 1MHz, 2 MHz, 4 Mhz và 8 MHz. Các Fuse bits CKSEL3:0 quyết định việc chọn nguồn xung này. Bảng 4 tóm tắt cách phối hợp các Fuse bits CKSEL để chọn nguồn xung nội. Với atmega 8 sau khi xuất xưởng thì nguồn xung 1MHz nội được chọn mặc định.
CKSEL3..0 Nominal frequency(MHz)
0001 1.0
0010 2.0
0011 4.0
0100 8.0
(Chọn xung giữ nhịp nội bằng các Fuse bits CKSEL)
Xung giữ nhịp từ mạch thạch anh bên ngoài (Crystal)
Hình 3.9. Mạch tạo xung băng thạch anh
Dùng xung nội có nhược điểm là tấn số xung đã được giữ cố định trong 4 mức và tấn số cao nhất có thể đạt là 8MHz trong khi AVR cho phép làm việc ở 16Mhz, mặc khác sai số cũng tương đối lớn khi xùng xung nội. Dùng thạch anh để tạo xung giữ nhịp là một giải pháp tốt, có thể tạo một mạch thạch anh đơn
Để “báo” cho AVR biết là chúng ta muốn sử dụng thạch anh ngoài làm mạch tạo xung, hãy set các Fuse bits CKSEL3:0 thành 1 trong 2 giá trị: 1111 hoặc 1010 (nhị phân). Trong trường hợp này, Fuse bit CKOPT có tác dụng chọn giữa 2 chế độ khuyếch đại, chế độ CKOPT = 0 (programmed) thích hợp với thạch anh có tần số lớn nhất là 16MHz và CKOPT=1 (unprorgammed) khi tần số thạch anh nhỏ hơn hoặc bằng 8MHz. Các hình 9 và 10 gợi ý cách set Fuse bits để chọn nguồn xung nhịp là mạch thạch anh ngoài với các tần số lớn nhất 8MHz và lớn nhất 16MHz.