GIỚI THIỆU VI XỬ LÝ ATMEGA8

Một phần của tài liệu Nghiên cứu thiết kế và chế tạo thiết bị đo và giám sát nồng độ bụi thông minh có tích hợp truyền thông không dây (Trang 31)

3.2.1. Đặc điểm

* Atmega8 là một bộ vi điều khiển 8 bit công suất thấp có cấu trúc RISC, thanh ghi làm việc đa năng với khả năng thực hiện đƣợc 16 triệu lệnh/giây tại tần số 16Mhz.

* Bộ nhớ chƣơng trình dữ liệu không đổi:

- Chƣơng trình hệ thống dựa trên chƣơng trình khởi động trên chip - Điều khiển việc đọc trong khi ghi

- 512 byte EEPROM

- 512 byte SRAM bên trong

- Có thể mở rộng bộ nhớ bên ngoài lên đến 64 Kbyte - Có chƣơng trình khóa dành cho phần mềm bảo mật

* Đặc tính thiết bị ngoại vi

- Có ba kênh điều biến độ rộng xung PWM - Giao tiếp nối tiếp loại chủ tớ SPI

- Bộ thu phát tổng hợp đồng bộ và không đồng bộ

- Bộ định thời giám sát lập trình với bộ tạo dao động riêng biệt trên chip - Bộ so sánh tƣơng tự trên chip

* Chức năng đặc biệt của vi điều khiển

- Có trình tự khởi động và khả năng tự dò tìm khi nguồn yếu - Bộ tạo dao động RC bên trong đƣợc hiệu chỉnh

- Có nguồn ngắt bên trong và bên ngoài

- Ba chế độ chờ: không hoạt động, giảm nguồn, chế độ nghỉ

3.2.2. Cấu trúc bộ nhớ của ATmega8.

Trong phần này sẽ mô tả những vùng nhớ khác nhau trong ATmega8515.Cấu trúc của AVR gồm 2 vùng nhớ chính, bộ nhớ dữ liệu và bộ nhớ chƣơng trình.Thêm vào đó,bộ nhớ EEPROM đặc trƣng của Atmega8515 là lƣu giữ dữ liệu.Ba vùng nhớ trên thì tuyến tính và bình thƣờng.

a. Bộ nhớ chương trình được lập trình bằng đi

AT mega 8515 có bộ nhớ chƣơng trình chứa 8Kbyte trên chip.Vùng nhớ chƣơng trình đƣợc chia làm 2 vùng:vùng chƣơng trình khởi động và vùng chƣơng trình ứng dụng. Họat động của bộ chƣơng trình khởi động đƣợc miêu tả trong phần sau.

Hình 3.3. Sơ đồ bộ nhớ chƣơng trình của ATmega8

b. Bộ nhớ dữ liệu SRAM

Bộ nhớ dữ liệu SRAM có chức năng định địa chỉ cho thanh ghi, bộ nhớ xuất/nhập và dữ liệu bên trong SRAM

Dữ liệu bên ngoài SRAM đƣợc tùy chọn để có thể sử dụng với Atmega 8515 Khi mà địa chỉ truy cập vào vùng nhớ SRAM vƣợt quá vùng nhớ dữ liệu bên trong thì vùng dữ liệu bên ngoài SRAM đƣợc truy xuất sử dụng các lệnh giống nhƣ

Sự hoạt động của SRAM đƣợc kích hoạt bên ngoài bởi bit SRE bên trong thanh ghi MCUCR

Hình 3.4. Sơ đồ bộ nhớ chƣơng trình của ATmega8

c. Bộ nhớ dữ liệu EEPROM

Atmega 8515 gồm 512 byte bộ nhớ dữ liệu EEPROM, nó đƣợc tổ chức độc lập trên các vùng dữ liệu mà tại đó các byte đơn có thể đƣợc đọc và ghi. EEPROM có độ bền khoảng 100000 vòng ghi/xóa

d. Truy xuất việc đọc ghi cho EEPROM

Khi EEPROM đọc, CPU dừng khoảng 4 chu kỳ xung clock trƣớc khi các lệnh kế tiếp đƣợc thực hiện

Khi EEPROM đƣợc ghi, CPU dừng hai chu kỳ xung clock trƣớc khi các lệnh kế tiếp đƣợc thực hiện

3.2.3. Vào ra dữ liệu cho các thiết bị ngoại vi (adsbygoogle = window.adsbygoogle || []).push({});

Một vi điều khiển thì nhƣ ta đã biết nó bao gồm CPU là bộ não trung tâm của nó.Nhƣng nó không thể đứng độc lập đƣợc và để xử lý đƣợc dữ liệu thì tất nhiên nó phải lấy dữ liệu từ một nguồn dữ liệu nào đó. Các thiết bị ngoại vi trên nó và các port chính là các thiết bị trung gian đƣa dữ liệu vào cho CPU và chuyển dữ liệu đã xử lý ra các cơ cấu chấp hành và lên mạng thông tin…Quá trình vào ra dữ liệu là quá trình điều khiển các port các thiết bị ngoại vi sao cho CPU có thể nhập hay xuất dữ liệu một cách đồng bộ.

Có 3 phƣơng pháp vào ra dữ liệu đó là: vào ra dữ liệu bằng chƣơng trình vào ra dữ liệu bằng ngắt và vào ra dẽ liệu bằng DMA. Ở đây vi điều khiển AVR chỉ có hai phƣơng pháp đầu.

3.1.3.1. Vào ra dữ liệu bằng chƣơng trình

Đây là phƣơng pháp mà CPU hỏi thiết bị ngoại vi về khả năng sẵn sàng trao đổi dữ liệu. Phƣơng pháp này có hai chế độ đó là chế độ ƣu tiên và chế độ bình đẳng.

Chế độ ƣu tiên: thiết bị đƣợc quyền ƣu tiên sẽ trao đổi dữ liệu xong mới tới thiết bị có mức ƣu tiên thấp hơn.

Chế độ bình đẳng: từng thiết bị một sẽ đƣợc hỏi nếu nhƣ không có nhu cầu trao đổi dữ liệu thì CPU sẽ hỏi thiết bị khác.

Ƣu điểm của phƣơng pháp này là: CPU chủ động và phân đƣợc quyền ƣu tiên. Nhƣng nhƣợc điểm của phƣơng pháp này là: Không đáp ứng đƣợc các sự kiện tức thời xảy ra (Ví nhƣ có một thiết bị có yêu cầu trao đổi dữ liệu khẩn cấp mà vẫn chƣa tới lƣợt đƣợc hỏi) và trong thời gian hỏi trạng thái của các thiết bị thì CPU không thể làm việc khác.

Trên VĐK có 32 đƣờng vào ra gồm nhiều chức năng có thể sử dụng làm cổng vào ra số, cho các thiết bị ngoại vi tƣơng tự. Sau đây ta sẽ tìm hiểu từng thiết bị ngoại vi và các cổng vào ra

3.2.3.3. Cổng vào ra

Vi điều khiển AT90S8535 có 32 đƣờng vào ra chia làm bốn nhóm mỗi nhóm 8bit. Các đƣờng vào ra này có rất nhiều tính năng và có thể lập trình đƣợc.Ở đây chúng ta sẽ xét chúng là các cổng vào ra số. Nếu xét trên mặt này thì các cổng vào ra này là cổng vào ra hai chiều có thể định hƣớng theo từng bit. Và chứa cả điện trở pull-up (có thể lập trình đƣợc).Mặc dù mỗi port có các đặc điểm riêng nhƣng khi xét chúng là các cổng vào ra số thì dƣờng nhƣ điều khiển vào ra dữ liệu thì hoàn toàn nhƣ nhau. Chúng ta có thanh ghi và một địa chỉ cổng đối với mỗi cổng, đó là: thanh ghi dữ liệu cổng (PORTA, PORTB, PORTC), thanh ghi dữ liệu điều khiển cổng (DDRA, DDRB, DDRC)và cuối cùng là địa chỉ chân vào của cổng (PINA, PINB, PINC).

a.Thanh ghi DDRA

Đây là thanh ghi 8 bit (ta có thể đọc và ghi các bit ở thanh ghi này) và có tác dụng điều khiển hƣớng cổng PA (tức là cổng ra hay cổng vào). Nếu nhƣ một bit trong thanh ghi này đƣợc set thì bit tƣơng ứng đó trên PA đƣợc định nghĩa nhƣ một cổng ra. Ngƣợc lại nếu nhƣ bit đó không đƣợc set thì bit tƣơng ứng trên PA đƣợc định nghĩa là cổng vào.

b. Thanh ghi PORTA

Đây cũng là thanh ghi 8 bit (các bit có thể đọc và ghi đƣợc) nó là thanh ghi dữ liệu của cổng PA và trong trƣờng hợp nếu cổng đƣợc định nghĩa là cổng ra thì khi ta ghi một bit lên thanh ghi này thì chân tƣơng ứng trên port đó cũng có cùng mức logic. Trong trƣờng hợp mà cổng đƣợc định nghĩa là cổng vào thì thanh ghi này lại mang dữ liệu điều khiển cổng. Cụ thể nếu bit nào đó của thanh ghi này đƣợc set (đƣa lên mức 1) thì điện trở kéo lên (pull-up) của chân tƣơng ứng của port đó sẽ đƣợc kích hoạt. Ngƣợc lại nó sẽ ở trạng thái hi-Z.Thanh ghi này sau khi khởi động VĐK sẽ có giá trị là 0x00.

c. Thanh ghi PINA

Đây là địa chỉ cho phép truy nhập trức tiếp ra các chân vật lý của vi điều khiển.Tất nhiên vì thế mà với địa chỉ này ta chỉ có thể đọc mà thôi (Không thể ghi đƣợc!!!), ta có bảng tóm tắt sau:

Bảng 3.1. Định nghĩa các chân vào ra

DDAn PORTAn I/O Pull-up Chú thích

0 0 Cổng vào Không Cao trở 0 1 Cổng vào Có

1 0 Cổng ra Không Đầu ra đẩy kéo 1 1 Cổng ra Không Đầu ra đẩy kéo

Trong đó DDAn là bit thứ n trong thanh ghi DDA

Bảng 3.2. Bảng các thanh ghi và địa chỉ của chúng cho từng PORT

PORT Tên Địa chỉ thanh ghi/Địa chỉ trong SRAM

A PORTA 0x1B/0x3B A DDRA 0x1A/0x3A A PINA 0x19/0x39 B PORTB 0x18/0x38 B DDRB 0x17/0x37 B PINB 0x16/0x36 C PORTC 0x15/0x35 C DDRC 0x14/0x34 C PINC 0x13/0x33 D PORTD 0x12/0x32 D DDRD 0x11/0x31 D PIND 0x10/0x30

* Tóm lại để đọc dữ liệu từ ngoài thì ta phải thực hiện các bƣớc sau:

- Đƣa dữ liệu ra thanh ghi điều khiển DDRxn để đặt cho PORT (hoặc bit trong port) đó là đầu vào (xóa thanh ghi ddr hoặc bit).

- Sau đó kích hoạt điện trở pull-up bằng cách set thanh ghi PORT (bit). - Cuối cùng đọc dữ liệu từ địa chỉ PINxn (trong đó x: là cổng và n là bit).

3.2.4. Ngắt

Ngắt là một cơ chế cho phép thiết bị ngoại vi báo cho CPU biết về tình trạng sẵn xàng cho đổi dữ liệu của mình.Ví dụ:Khi bộ truyền nhận UART nhận đƣợc một byte nó sẽ báo cho CPU biết thông qua cờ RXChoặc khi nó đã truyền đƣợc một byte thì cờ TX đƣợc thiết lập…

Phục vụ ngắt (adsbygoogle = window.adsbygoogle || []).push({});

Nếu nhƣ ngắt đó đƣợc cho phép thực hiện thì:

Khi có tín hiệu báo ngắt CPU sẽ tạm dừng công việc đạng thực hiện lại và lƣu vị trí đang thực hiên chƣơng trình (con trỏ PC) vào ngăn xếp sau đó trỏ tới vector phuc vụ ngắt và thức hiện chƣơng trình phục vụ ngắt đó cho tới khi gặp lệnh RETI (return from interrup) thì CPU lại lấy PC từ ngăn xếp ra và tiếp tục thực hiện chƣơng trình mà trƣớc khi có ngắt nó đang thực hiện. Trong trƣờng hợp mà có nhiều ngắt yêu cầu cùng một lúc thì CPU sẽ lƣu các cờ báo ngắt đó lại và thực hiện lần lƣợt các ngắt theo mức ƣu tiên.Trong khi đang thực hiện ngắt mà xuất hiện ngắt mới thì sẽ xảy ra hai trƣờng hợp.Trƣờng hợp này, ngắt có mức ƣu tiên cao hơn thì nó sẽ đƣợc phục vụ.Còn nó mà có mức ƣu tiên thấp hơn thì nó sẽ bị bỏ qua.

Trong tài liệu của hãng sản xuất không thấy nói tới bộ nhớ ngăn xếp, nó là vùng bất kì trong SRAM từ địa chỉ 0x60 trở lên. Để truy nhập vào SRAM thông thƣờng thì ta dùng con trỏ X,Y,Z và để truy nhập vào SRAM theo kiểu ngăn xếp thì ta dùng con trỏ SP.Con trỏ này là một thanh ghi 16 bit và đƣợc truy nhập nhƣ hai thanh ghi 8 bit chung có địa chỉ: SPL:0x3D/0x5D(IO/SRAM) và SPH:0x3E/0x5E.

Khi chƣơng trình phục vu ngắt hoặc chƣơng trình con thì con trỏ PC đƣợc lƣu vào ngăn xếp trong khi con trỏ ngăn xếp giảm hai vị trí.Và con trỏ ngăn xếp sẽ giảm 1 khi thực hiện lệnh push. Ngƣợc lại khi thực hiện lệnh POP thì con trỏ ngăn

xếp sẽ tăng 1 và khi thực hiện lệnh RET hoặc RETI thì con trỏ ngăn xếp sẽ tăng 2. Nhƣ vậy con trỏ ngăn xếp cần đƣợc chƣơng trình đặt trƣớc giá trị khởi tạo ngăn xếp trƣớc khi một chƣơng trình con đƣợc gọi hoặc các ngắt đƣợc cho phép phục vụ và giá trị ngăn xếp ít nhất cũng phải lơn hơn 60H (0x60) vì 5FH trỏ lại là vùng các thanh ghi.

Để thay đổi giá trị của SP ta có hai cách:

- Sử dụng địa chỉ trực tiếp trên các thanh ghi I/O. - Sử dụng địa chỉ gián tiếp của chúng qua SRAM.

3.2.5. Chế độ truyền thông SPI

SPI là một giao diện thực hiện việc trao đổi dữ liệu giữa các thiết bị tƣơng thích với khung dữ liệu 8bit và đƣợc truyền đồng bộ (cùng xung nhịp đồng hồ). SPI cho phép truyền dữ liệu nối tiếp đồng bộ giữa thiết bị ngoại vi và vi điều khiển AVR hoặc giữa các vi điều khiển AVR. SPI của AT90S8535 có các đặc điểm đặc biệt sau:

- Chế độ song công, truyền dữ liệu đồng bộ 3 dây. - Có thể giữ vai trò Master hoặc Slave.

- Bit MSB hoặc LSB có thể đƣợc truyền trƣớc tùy vào ngƣời lập trình. - Bốn tốc độ truyền có thể lập trình thông qua hai bit.

- Cờ ngắt báo kết thúc truyền.

Hình 3.5. Sơ đồ cấu trúc của khối truyền thông SPI

Để điều khiển khối giao tiếp SPI thì chúng ta có 3 thanh ghi.Đó là 1 thanh ghi điều khiển SPCR (SPI control Register), thanh ghi trang thái SPSR (SPI status Register) và cuối cùng là thanh ghi dữ liệu SPDR (SPI Data Register).

1.Thanh ghi SPCR:

Đây là thanh ghi 8 bit có địa chỉ trong các thanh I/O là 0x0D và trong SRAM là 0x2D, các bit trong thanh ghi này đều có thể đọc hoặc ghi.

Bit 7-SPIE: SPI interrupt enable

Bit này cho phép ngắt của bộ truyền tin SPI (nếu ngắt toàn cục và ngắt này đƣợc cho phép thì nếu cờ SPIF đƣợc bật thì ngắt đó sẽ đƣợc phục vụ.)

Bit 6-SPE: SPI Enable

Nếu bit này đƣợc set thì khối SPI sẽ đƣợc hoạt động và nó phải đƣợc set trong suốt quá trình SPI hoạt động

Bit 5-DORD: Data order

Khi mà DORD đƣợc set thì LSB của byte dữ liệu sẽ đƣợc truyền trƣớc và ngƣợc lại.

Bit 4-MSTR: Master/Slave select

Đây là bit dùng để lựa chọn chế độ master hay slave.Nếu bit này đƣợc set thì bộ SPI này có vai trò là Master và ngƣợc lại.Nếu nhƣ SS đƣợc cấu hình là lối vào và đƣợc đặt xuống mức thấp thì MSTR bị xóa về 0và SPIF và SPSR bị đặt lên 1 khi đó ta sẽ phải đặt lại MSTR về 1.

Bit 3-CPOL: Clock polarity

Khi bit này đƣợc set thì SCK ở mức cao trong trang thái ngủ và ngƣợc lai.

Bit 2-CPHA:Clock Phase

Quy định pha kích hoạt của xung nhip.

Bit 1,0-SPR1,SPR0:Clock rate select:

Đây là hai bit điều khiển tốc độ xung nhịp truyền của kết nối và đƣợc thiết lập trên Master. Nó không có tác dụng gì nếu nhƣ ta thiết lập trên slave. (adsbygoogle = window.adsbygoogle || []).push({});

Và giá trị của chúng ứng theo tổ hợp các bit nhƣ sau:

Bảng 3.3. Bảng giá trị theo tổ hợp các bit nhƣ sau

SPR1 SPR0 Tần số SCK

0 0 Fcl/4 0 1 Fcl/16 1 0 Fcl/64 1 1 Fcl/128

Nhƣ vậy đây là thanh ghi điều khiển toàn bộ khối SPI từ vai trò (Master/slave đến tốc độ truyền,cho phép ngắt,cho phép hoạt động,mức logic trong trang thái ngủ và pha kích hoạt xung nhịp.

Bit 7-SPIF: SPI interrupt Flag

Khi truyền xong một byte dữ liệu thì bit này đƣợc set và một ngắt đƣợc tạo ra.Nếu bit cho phép ngắt SPIE trong thanh ghi SPCR đƣợc set và ngắt toàn cục đƣợc cho phép thì ngắt đó đƣợc thi hành.Nếu không nó sẽ bị bỏ qua.Khi mà chân ss của Master đƣợc định nghĩa là cổng vào lài đƣợc thiết lập mức thấp thì cờ này cũng đƣợc set.Nó đƣợc xóa bởi phần cứng hi ngắt đƣợc phục vụ.

Bit 6-WCOL: wite collision flag

Cờ báo xung đột khi ghi:Cờ này đƣợc set lên 1 nếu nhƣ dữ liệu đƣợc ghi lên thanh ghi dữ liệu SPI khi đang diễn ra một cuộc truyền và nó đƣợc xóa cùng với cờ SPIF khi đọc thanh ghi trạng thái và truy nhập vào thanh ghi dữ liệu.

Để bắt đàu một cuộc truyền thì ta cần cho phép bộ truyền nhận hoạt động.Khi truyền ta chỉ cần ghi byte dữ liệu cần truyền lên thanh ghi dữ liệu và đợi cho tới khi có cờ SPIF bật lên rồi tiếp tục truyền byte mới.

Để bắt đầu nhận dữ liệu cũng vậy.PI đã đƣợc khởi động,chờ khi nào cờ SPIF bật lên thì ta đọc dữ liệu (cờ tự xóa khi ta đọc thanh ghi trạng thái).

3. Thanh ghi SPDR:

Đây cũng là thanh ghi 8 bit (0x0f/0x2f) có thể đọc và ghi đƣợc.Nó đƣợc sử dụng để truyền dữ liệu giữa hai bôn truyền nhận SPI.Ghi dữ liệu vào thanh ghi này có nghĩa là ta bắt đầu cuộc truyền và đọc dữ liệu từ thanh ghi này là đọc dữ liệu đƣợc nhận.

4. Nguyên lý hoạt động:

Hình 3.6. Truyền thông SPI

Đối với VĐK AVR thì các chân SCK (Serial clock) là chân PB7,đây là chân xung nhịp ra trong trƣờng hợp nó là Master và là chân xung nhịp vào nếu nó là Slave. Khi ghi dữ liệu lên thanh ghi dữ liệu SPDR của khối Master sẽ khởi động bộ tạo xung và dữ liệu đƣợc dịch và đƣa ra chân MOSI (PB5) và vào chân MOSI của slave (PB5 đối với AVR).Sau khi dịch hết một byte bộ tạo xung ngừng hoạt động và cờ SPIF đƣợc phất báo kết thúc truyền.Nếu nhƣ ngắt này đƣợc phép thì chƣơng trình phục vu ngắt sẽ đƣợc phục vụ và khi đó cờ sẽ bị xóa.Đầu vào lựa chọn slave (SS và là chân PB4) đƣợc set mức tích cực thấp để lựa chọn thiết bị SPI slave và

Một phần của tài liệu Nghiên cứu thiết kế và chế tạo thiết bị đo và giám sát nồng độ bụi thông minh có tích hợp truyền thông không dây (Trang 31)