1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Giáo trình Vi điều khiển: Phần 1 - Lâm Quang Chuyên

70 39 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 70
Dung lượng 3,05 MB

Nội dung

Giáo trình Vi điều khiển: Phần 1 cung cấp cho người học những kiến thức như: Giới thiệu về vi điều khiển; Hoạt động I/O; Hoạt động ngắt trong ATMEGA16; Hoạt động timer – counter; Hoạt động AC. Mời các bạn cùng tham khảo!

BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG CÔNG THƯƠNG TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ GIÁO TRÌNH VI ĐIỀU KHIỂN TÁC GIẢ: LÂM QUANG CHUYÊN 05 - 2014 MỤC LỤC Mục lục - i Lời mở đầu - v Danh mục hình vi Danh mục bảng x Bảng viết tắt - xi Thuật ngữ xii CHƯƠNG GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 1.1 Ôn tập cổng logic hệ thống đếm 1.1.1 Các cổng logic - 1.1.2 Các ký hiệu logic khác - 1.1.3 Các hệ thống số 1.1.4 Chuyển đổi hệ thống số 1.1.4.1 Đổi nhị phân 1.1.4.2 Đổi bát phân 1.1.4.3 Đổi thập phân - 1.14.4 Đổi thập lục phân 1.1.5 Bài tập ví dụ - 1.2 Khái niệm vi điều khiển 1.2.1 Khái niệm 1.2.1.1 Vi xử lý - 1.2.1.2 Vi điều khiển - 1.2.2 Chức vi điều khiển atmega16 1.2.2.1 Sơ đồ chân atmega16 1.2.2.2 Chức atmega16 - 1.2.3 Bài tập ví dụ - 1.3 Ngôn ngữ lập trình C phần mềm Codevision 1.3.1 Một số lưu ý viết chương trình Codevision - 1.3.2 Các loại biến khai báo 1.3.2.1 Khai báo biến i 1.3.2.2 Định nghĩa số - 1.3.2.3 Các loại biến - 1.3.3 Các hàm logic 1.3.4 Cấu trúc chương trình Codevision 10 1.3.5 Các từ khóa chương trình Codevision - 11 1.3.6 Câu lệnh lưu đồ giải thuật 11 1.3.7 Cấu trúc lưu đồ giải thuật 12 1.3.7.1 Các kí hiệu - 12 1.3.7.2 Bài tập ví dụ - 13 1.4 Câu hỏi ôn tập hết chương - 14 CHƯƠNG HOẠT ĐỘNG I/O 2.1 Giới thiệu - 18 2.2 Các ghi liên quan 18 2.2.1 Thanh ghi DDRxn - 18 2.2.2 Thanh ghi PORTxn - 18 2.2.3 Thanh ghi PINxn 18 2.2.4 Bài tập ví dụ - 19 2.3 Các chức khác PORT - 21 2.3.1 Chức khác PORTA - 21 2.3.2 Chức khác PORTB 21 2.3.3 Chức khác PORTC 22 2.3.4 Chức khác PORTD - 22 2.3.5 Bài tập ví dụ - 22 2.4 Xuất nhập liệu PORT - 23 2.4.1 Xuất liệu chân PORT 23 2.4.2 Xuất liệu PORT 23 2.4.3 Kiểm tra chân PORT - 23 2.4.4 Đọc liệu từ PORT - 24 2.4.5 Kiểm tra toàn PORT 24 2.4.6 Bài tập ví dụ - 24 2.5 Led đơn led đoạn 26 2.5.1 Led đơn - 26 ii 2.5.2 Led đoạn - 27 2.5.3 Led Ma trận 28 2.5.4 Bài tập ví dụ - 28 2.6 Câu hỏi ôn tập hết chương - 29 CHƯƠNG HOẠT ĐỘNG NGẮT TRONG ATMEGA16 3.1 Giới thiệu hoạt động ngắt 32 3.2 Các loại ngắt - 32 3.2.1 Ngắt 33 3.2.2 Ngắt timer 34 3.2.3 Ngắt ADC, SPI, TWI, AC - 34 3.2.4 Bài tập ví dụ - 34 3.3 Câu hỏi ôn tập hết chương - 37 CHƯƠNG HOẠT ĐỘNG TIMER – COUNTER 4.1 Giới thiệu - 39 4.2 Các ghi liên quan 40 4.2.1 Thanh ghi TCCRn - 40 4.2.2 Thanh ghi TCNTn - 42 4.2.3 Thanh ghi OCRn 42 4.2.4 Thanh ghi TIMSK - 42 4.2.5 Thanh ghi TIFR - 42 4.3 Các chế độ hoạt động TIMER/COUNTER - 43 4.3.1 Chế độ normal - 43 4.3.2 Chế độ CTC 45 4.3.3 Chế độ PWM, Phase correct - 46 4.3.4 Chế độ Fast PWM - 47 4.3.5 Bài tập ví dụ - 48 4.4 Câu hỏi ôn tập hết chương - 49 CHƯƠNG HOẠT ĐỘNG AC 5.1 Giới thiệu - 52 5.2 Các ghi liên quan 52 5.2.1 Thanh ghi SFIOR - 53 5.2.2 Thanh ghi ADCSRA 53 iii 5.2.3 Thanh ghi ACSR 54 5.2.4 Bài tập ví dụ - 55 5.3 Câu hỏi ôn tập hết chương - 56 CHƯƠNG HOẠT ĐỘNG ADC 6.1 Giới thiệu - 58 6.1.1 Giới thiệu - 58 6.1.2 Bài tập ví dụ - 59 6.2 Các ghi liên quan 60 6.2.1 Thanh ghi ADMUX - 60 6.2.2 Thanh ghi ADCSRA 63 6.2.3 Thanh ghi SFIOR - 65 6.3 Bài tập ví dụ - 66 6.4 Câu hỏi ôn tập hết chương - 68 CHƯƠNG HOẠT ĐỘNG USART 7.1 Giới thiệu - 72 7.1.1 Hoạt động đồng 72 7.1.2 Hoạt động bất đồng - 72 7.1.3 Đặc tính giao tiếp USART - 73 7.2 Các ghi liên quan 73 7.2.1 Thanh ghi UDR 73 7.2.2 Thanh ghi UCSRA 73 7.2.3 Thanh ghi UCSRB 74 7.2.4 Thanh ghi UCSRC 75 7.2.5 Thanh ghi UBRRL UBRRH - 77 7.3 Các bước thực cài đặc 79 7.3.1 Quá trình nhận liệu 80 7.3.2 Quá trình truyền liệu 80 7.3.3 Các thời điểm xảy ngắt USART - 81 7.4 Bài tập ví dụ - 81 7.5 Câu hỏi ôn tập hết chương - 87 CHƯƠNG HOẠT ĐỘNG SPI 8.1 Giới thiệu - 89 iv 8.1.1 Giới thiệu chung - 89 8.1.2 Chức chân hoạt động SPI 89 8.1.2.1 Chân SCK 89 8.1.2.2 Chân SS - 90 8.1.2.3 Chân MOSI 90 8.1.2.4 Chân MISO 90 8.2 Các ghi liên quan 90 8.2.1 Thanh ghi SPCR - 90 8.2.2 Thanh ghi SPSR - 91 8.2.3 Thanh ghi SPDR 92 8.3 Các chế độ hoạt động - 92 8.4 Bài tập ví dụ - 93 8.5 Câu hỏi ôn tập hết chương - 96 CHƯƠNG HOẠT ĐỘNG I2C 9.1 Giới thiệu - 98 9.1.1 Đặc tính - 98 9.1.2 Thuật ngữ - 98 9.2 Nguyên lý hoạt động 99 9.3 Cách ghi liên quan 101 9.3.1 Thanh ghi TWBR 101 9.3.2 Thanh ghi TWCR 101 9.3.3 Thanh ghi TWSR - 102 9.3.4 Thanh ghi TWDR 102 9.3.5 Thanh ghi TWAR 103 9.4 Bài tập ví dụ 103 9.5 Câu hỏi ôn tập hết chương 104 Phụ lục Các chuẩn giao tiếp - 106 Phụ lục IC thời gian thực DS1307 107 Phụ lục Điều khiển nhiều led ma trận 108 Tài liệu tham khảo - 114 v LỜI MỞ ĐẦU Hiện có nhiều tài liệu, giáo trình viết họ vi xử lý, vi điều khiển, nhiên giáo trình vi điều khiển cho họ AVR cụ thể Atmega16 chưa có Trường hay nhà xuất viết tài liệu Nội dung tài liệu trình bày cấu trúc bên atmega16, cách thiết lập nhớ, ghi cho module: timer/counter, ADC, I2C…, qua sinh viên dễ dàng đọc tài liệu kỹ thuật khác Nội dung chương trình trình bày đầy đủ với tập kèm theo chương giúp sinh viên tự học tự nghiên cứu tài liệu nhà, tập thể hầu hết chức vi điều khiển, đòi hỏi sinh viên phải hiểu lý thuyết làm tập Sau học xong giáo trình sinh viên viết chương trình điều khiển ngơn ngữ C, cài đặc thông số cho module, dễ dàng đọc tài liệu kỹ thuật khác… Đây lần tác giả viết giáo trình phục vụ giảng dạy, nên khơng thể tránh sai sót, mong nhận đóng góp q Thầy Cơ đồng nghiệp Xin chân thành cảm ơn vi DANH MỤC HÌNH Hình 1.1 Cổng NOT - Hình 1.2 Cổng OR - Hình 1.3 Cổng AND - Hình 1.4 Cổng NOR - Hình 1.5 Cổng NAND - Hình 1.6 Cổng XOR - Hình 1.7 Bộ khóa kênh Hình 1.8 Bộ chọn kênh Hình 1.9 Sơ đồ linh kiện đâm xuyên Hình 1.10 Sơ đồ linh kiện dán Hình 1.11 Cấu trúc chương trình Codevision - 10 Hình 1.12 Lưu đồ giải thuật lệnh while - 11 Hình 1.13 Lưu đồ giải thuật lệnh while not 11 Hình 1.14 Lưu đồ giải thuật lệnh while - 11 Hình 1.15 Lưu đồ giải thuật lệnh if 12 Hình 1.16 Lưu đồ giải thuật lệnh if… else - 12 Hình 1.17 Lưu đồ giải thuật lệnh switch… case - 12 Hình 1.18 Lưu đồ giải thuật đếm sản phẩm 13 Hình 1.19 Lưu đồ cộng từ đến x - 14 Hình 2.1 Khai báo vào PORTB 18 Hình 2.2 Chân 33 có điện trở kéo lên - 19 Hình 2.3 Chân 33 có nối mass - 19 Hình 2.4 Điều khiển led đơn trực tiếp - 26 Hình 2.5 Điều khiển led đơn có nguồn cung cấp - ` 27 Hình 2.6 Anot chung 27 Hình 2.7 Katot chung 27 Hình 2.8 Kiểu mắc Anot chung với LSB nối chân a 27 Hình 2.9 Kiểu mắc Anot chung với MSB nối chân a - 27 Hình 2.10 Kiểu mắc Katot chung với LSB nối chân a 28 Hình 2.11 Kiểu mắc Katot chung với MSB nối chân a - 28 vii Hình 2.12 Sơ đồ chân Led ma trận 8x8x2 (8 hàng, cột, màu) - 28 Hình 3.1 Chương trình chính, chương trình chương trình ngắt - 32 Hình 3.2 Dạng xung nút nhấn - 33 Hình 3.3 Sơ đồ nguyên lý mạch đếm sản phẩm sử dụng ngắt 34 Hình 4.1 Sơ đồ khối timer/ Counter 39 Hình 4.2 Thanh ghi TCCR0 40 Hình 4.3 Bộ chia chọn kênh cho hoạt động timer/counter 41 Hình 4.4 Thanh ghi TIMSK 41 Hình 4.5 Thanh ghi TIFR - 42 Hình 4.6 Giản đồ thời gian hoạt động NORMAL 43 Hình 4.7 Sơ đồ nguyên lý mạch định thời - 43 Hình 4.8 Giản đồ thời gian hoạt động CTC - 45 Hình 4.9 Giản đồ thời gian hoạt động PWM – PHASE CORRECT - 46 Hình 4.10 Giản đồ thời gian cho hoạt động FAST PWM 48 Hình 4.11 Dạng xung cho tần số 5Khz 49 Hình 5.1 Sơ đồ khối hoạt động so sánh 52 Hình 5.2 Thanh ghi SFIOR - 53 Hình 5.3 Thanh ghi ADCSRA - 53 Hình 5.4 Thanh ghi ACSR 54 Hình 5.5 Bài tập ví dụ - 55 Hình 6.1 Tín hiệu tương tự tín hiệu số 59 Hình 6.2 Thanh ghi ADMUX 60 Hình 6.3 Thanh ghi liệu ADC ADLAR = 60 Hình 6.4 Thanh ghi liệu ADC ADLAR = 60 Hình 6.5 Thanh ghi ADCSRA - 62 Hình 6.6 Bộ chia hoạt động ADC 63 Hình 6.7 Giản đồ thời gian cho lần biến đổi ADC 63 Hình 6.8 Giản đồ thời gian cho lần biến đổi ADC thứ - 63 Hình 6.9 Thanh ghi SFIOR - 64 Hình 6.10 Các tác nhân kích hoạt ADC - 64 Hình 7.1 Khung liệu giao tiếp nối tiếp 72 Hình 7.2 Thanh ghi UDR - 73 viii Hình 7.3 Thanh ghi UCSRA - 73 Hình 7.4 Thanh ghi UCSRB 74 Hình 7.5 Thanh ghi UCSRC 75 Hình 7.6 Dữ liệu thay đổi cạnh lên lấy mẫu cạnh xuống - 77 Hình 7.7 Dữ liệu thay đổi cạnh xuống lấy mẫu cạnh lên - 77 Hình 7.8 Thanh ghi UBRRL UBRRH - 77 Hình 7.9 Mạch giao tiếp vi điểu khiển theo kiểu nói tiếp 86 Hình 7.10 Bài tập ví dụ giao tiếp nối tiếp - 87 Hình 8.1 Sơ đồ giao tiếp Master Slave 89 Hình 8.2 Thanh ghi SPCR 90 Hình 8.3 Thanh ghi SPSR 91 Hình 8.4 Thanh ghi SPDR 92 Hình 8.5 Thời điểm lấy mẫu bit CPHA = 92 Hình 8.6 Thời điểm lấy mẫu bit CPHA = 93 Hình 9.1 Hình vẽ giao nghi thức I2C 98 Hình 9.2 Định dạng truyền liệu theo nghi thức I2C - 99 Hình 9.3 Định dạng Stop bit Start bit 99 Hình 9.4 Chuyển đổi liệu mức thấp chân SCL 99 Hình 9.5 Dạng sóng chân SDA SCL - 99 Hình 9.6 Lưu đồ giải thuật gởi liệu từ Master đến Slaver 100 Hình 9.7 Thanh ghi tạo tần số TWBR 101 Hình 9.8 Thanh ghi điều khiển TWCR - 101 Hình 9.9 Thanh ghi trạng thái TWSR - 102 Hình 9.10 Thanh ghi liệu TWDR 103 Hình 9.11 Thanh ghi địa TWAR 103 Hình 9.12 Sơ đồ giao tiếp I2C thiết bị - 104 Hình 10.1 Sơ đồ chân DS1307 - 107 Hình 10.2 Thanh ghi điều khiển Control Register 107 Hình 10.3 Sơ đồ nguyên lý kết nối DS1307 với LCD4x20 108 Hình 10.4 Sơ đồ chân IC NC6B595 - 109 Hình 10.5 Sơ đồ nguyên lý hoạt động IC NC6B595 110 Hình 10.6 Sơ đồ nguyên lý điều khiển led ma trận - 111 ix Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 Stt CS02 CS01 CS00 Description (mô tả) 0 Timer/counter không hoạt động 0 clkI/O (không chia tần số, chia = 1) clkI/O/8 (bộ chia = 8) 1 clkI/O/64 (bộ chia = 64) 0 clkI/O/256 (bộ chia = 256) 1 clkI/O/1024 (bộ chia = 1024) 1 Nhận xung từ chân T0, tác động cạnh xuống 1 Nhận xung từ chân T0, tác động cạnh lên Bảng 4.2 Chọn nguồn xung cho timer/counter Chú ý: Dựa vào hình vẽ 4.3 bảng 4.2 ta nhận thấy sử dụng timer/counter đếm chia ln Xem tập ví dụ 4.2.2 Thanh ghi TCNT: Lưu giá trị đếm ta gọi counter 4.2.3 Thanh ghi OCR: Lưu trữ giá trị mong muốn (giá trị đặt) 4.2.4 Thanh ghi TIMSK Bit OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0 Read/ Write RW RW RW RW RW RW RW RW Giá trị ban 0 0 0 0 đầu Hình 4.4 Thanh ghi TIMSK Bit7 – 2: không sử dụng Bit1 – OCIE0: bit kết hợp với bit I ghi trạng thái (status register) phép hoạt động ngắt giá trị ghi TCNT0 OCR0 Bit0 – TOIE0: bit kết hợp với bit I ghi trạng thái (status register) phép hoạt động ngắt tượng tràn xảy 4.2.5 Thanh ghi TIFR Bit OCF2 TOV2 ICF1 OCIF1A OCIF1B TOV1 OCF0 TOV0 Read/ Write RW RW RW RW RW RW RW RW Giá trị ban đầu 0 0 0 0 Hình 4.5 Thanh ghi TIFR Bit7 – 2: không sử dụng - 42/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 Bit1 – OCF0: (Cờ ngắt OCF0) cờ ngắt xảy counter với giá trị cài đặc OCR0, cờ tự động xóa phần cứng sử dụng ngắt xóa phần mềm viết logic cao vào cờ Bit0 – TOV0: (cờ tràn TOV0) cờ tràn mức cao counter tràn (từ MAX BOTTOM) tự động xóa phẩn cứng sử dụng ngắt xóa phần mềm viết logic cao vào cờ 4.3 CÁC CHẾ ĐỘ HOẠT ĐỘNG CỦA TIMER/COUNTER 4.3.1 CHẾ ĐỘ BÌNH THƯỜNG (NORMAL) Đây chế độ hoạt động đơn giản nhất, counter đếm từ BOTTOM (0x00) tới MAX (0xFF) lặp lại từ BOTTOM Cờ tràn TOV0 tự động bật lên counter đếm từ 255 0, muốn xóa cờ tràn ta phải viết logic vào nó, sử dụng ngắt cờ tràn tự động xóa 0, thời gian đếm phụ thuộc vào chia (prescaler) cài đặt ghi TCCR0, 1, 8, 64, 256 1024 Hình 4.6 Giản đồ thời gian hoạt động NORMAL Bài tập ví dụ: Viết chương trình định thời thời gian 10 giây, tần số thạch anh 2Mhz Hình 4.7 Sơ đồ nguyên lý mạch định thời - 43/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 Bài giải: Chu kì máy: = = = 0.5 Vậy số CKM để chạy 10 giây là: ∗ = ∗ 10 CKM Vậy ta phải chọn chia 1024 để có số xung tối thiểu, Số xung tối thiểu = ∗ = 19531 Vậy ta cần 19531 xung để có định thời 10 giây Nếu sử dụng định thời bit (timer0/timer2) ta có: = 76 Vậy cờ tràn TOV0 có 76 lần bật lên Vậy ta chọn biến đếm unsigned char Chương trình viết sau #include unsigned char index; bit key; // Timer overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here index++; PORTD++; if(index == 76) { PORTC.0 = 1; PORTD = 0; index = 0; key = 1; } } void main(void) { PORTA=0x00; DDRA=0x00; //PORTA ngõ vào PORTB=0x00; DDRB=0x00; //PORTB ngõ vào PORTC=0x00; DDRC=0xFF; //PORTC ngõ PORTD=0x00; DDRD=0xff; //PORTD ngõ TIMSK=0x01; //Cho phép ngắt tràn - 44/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter ACSR=0x80; Bài giảng vi điều khiển Atmega16 //Không sử dụng mode so sánh // Global enable interrupts #asm("sei") while (1) { // Place your code here TCCR0 = 0; while(PINA.0); TCCR0 = 0x05; //chế độ normal, chia 1024 PORTC.0 = 0; while(!PINA.0); //chờ nhã phím } } 4.3.2 Chế độ CTC: (xóa so sánh bằng) timer/counter đếm lên, giá trị ghi counter (TCNT0) với ghi OCR0 (đã cài đặc trước) counter bị xóa tiếp tục đếm lên, cờ ngắt OCF0 có xảy counter đạt giá trị Max (bằng với OCR0) Hình 4.8 Giản đồ thời gian hoạt động CTC Tín hiệu OC0 khơng xuất chân OC0 (PB3) ta không cài đặt chức Ouput cho chân (xem ghi DDRB), trạng thái OC0 mode mô tả bảng sau: COM01 COM00 Description (Mô tả) 0 Chân OC0 không kết nối, hoạt động chức I/O Chân OC0 đảo trạng thái TCNT0 = OCR0 (toggle) - 45/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 Chân OC0 = 1 Chân OC1 = Bảng 4.3 Ngõ OC0 hoạt động CTC Tần số chân OC0 tính cơng thức sau: = _ / (1 + 0) (3) Với N giá trị xác định ghi TCCR0 N = (1, 8, 64, 256 1024) Xem tập ví dụ 4.3.3 Chế độ PWM PHASE CORRECT Chu kỳ hoạt động counter hoạt động kép nghĩa counter đếm từ BOTTOM (0x00) đến MAX (0xFF) sau đếm từ MAX BOTTOM trình lặp lại bất chấp counter lớn hơn, nhỏ hay với OCR0 Đối với hoạt động ngõ không đảo: counter (thanh ghi TCNT0) với ghi OCR0 OC0 xóa 0, counter đếm lên, counter đếm xuống OC0 Đối với hoạt động đảo OC0 hoạt động ngược lại Hình 4.9 Giản đồ thời gian hoạt động PWM – PHASE CORRECT Tín hiệu OC0 khơng xuất chân OC0 (PB3) ta không cài đặt chức ouput cho chân (xem ghi DDRB), trạng thái OC0 mode mô tả bảng 4.1 - 46/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 COM01 COM00 Description (Mô tả) 0 Chân OC0 không kết nối, hoạt động chức I/O Không sử dụng 1 OC0 = TCNT0 = OC0 đếm lên OC0 = TCNT0 = OC0 đếm xuống OC0 = TCNT0 = OC0 đếm lên OC0 = TCNT0 = OC0 đếm xuống Bảng 4.4 Ngõ OC0 hoạt động PWM – PHASE CORRECT Tần số chân OC0 tính cơng thức sau: = _ / ∗ 510 (4) Với N giá trị xác định ghi TCCR0 N = (1, 8, 64, 256 1024) Bài tập ví dụ: cho biết ghi OCR0 = 145 ghi TCCR0 = 0x01100010 4.3.4 Chế độ Fast PWM Chu kỳ hoạt động counter hoạt động đơn, nghĩa counter đếm từ BOTTOM đến MAX sau reset BOTTOM đếm lên tiếp, trình lặp lại bất chấp counter lớn hơn, nhỏ hay với OCR0 Ở chế độ không đảo OC0 bị xóa counter trùng với OCR0, counter BOTTOM Ở chế độ đảo ngược lại - 47/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 Hình 4.10 Giản đồ thời gian cho hoạt động FAST PWM Tín hiệu OC0 không xuất chân OC0 (PB3) ta không cài đặt chức ouput cho chân (xem ghi DDRB), trạng thái OC0 mode mô tả table 40 COM01 COM00 Mô tả (Description) 0 Chân OC0 không kết nối, hoạt động chức I/O Không sử dụng 1 OC0 = TCNT0 OCR0, OC0 = TCNT0 = OC0 = TCNT0 OCR0, OC0 = TCNT0 = OC0 = TCNT0 OCR0, OC0 = TCNT0 = OC0 = TCNT0 OCR0, OC0 = TCNT0 = Bảng 4.5 Ngõ oc0 hoạt động FAST PWM Tần số chân OC0 tính cơng thức sau: = _ / ∗ 256 (5) Với N giá trị xác định ghi TCCR0 N = (1, 8, 64, 256 1024) - 48/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 4.4 Bài tập ví dụ Ví dụ 1: Trong chế độ Normal, tần số thạch anh Mhz, sử dụng chia 64, hỏi giây timer tràn lần Giải: Dựa vào hình vẽ 4.3 ta nhận thấy rằng, xung ngõ chia 64 chu kì máy (CKM) Ta có 1CKM = 1/fosc = (us) xung = 64 CKM = 64us Thời gian tràn 255 xung = 255.64 = 16.320 us Vậy số lần tràn giây là: 61 lần Ví dụ 2: Viết chương trình tạo tần số 5Khz chân PB.3, thạch anh 4Mhz Giải: Vì yêu cầu mạch thiết kế tần số nên ta chọn mode CTC, OC0 ngõ dạng toggle Mode CTC: WGM01 = 1; WGM00 = (xem bảng 4.1) Ngõ dạng toggle: COM00 = 1; COM01 = (xem bảng 4.3) Hình 4.11 Dạng xung cho tần số 5Khz Chu kì máy = = Để thực 100us ta phải 100CKM < 255 nên ta chọn chia = Vậy Thanh ghi TCCR0 = 0b00011001 = 0x19; Thanh ghi OCR0 = 100; Ví dụ 3: Hãy xác định ghi TCCR2, biết vi điều khiển sử dụng chia 64, chế độ hoạt động Fast PWM, ngõ OC2 = Giải: Sử dụng chia 64 nên: CS02, CS01, CS00: 011 (xem bảng 4.2) Chế độ hoạt động Fast PWM: WGM01,00 = 11 (xem bảng 4.1) Ngõ OC2 = bằng: COM00,01 = 01 (xem bảng 4.5) - 49/115- Biên soạn: Lâm Quang Chuyên Chương Hoạt động timer/ counter Bài giảng vi điều khiển Atmega16 4.4 CÂU HỎI ÔN TẬP HẾT CHƯƠNG Câu 1: Hãy nêu thời điểm xảy hoạt động ngắt (ngắt ngắt tràn) hoạt động Timer/Counter Câu 2: Vi điều khiển có chân điều xung, kể tên chân Câu 3: Khi sử dụng đếm kiện tín hiệu vào phải chân nào? Câu 4: Hãy cho biết khác giống mode Fast PWM Phase correct PWM Câu 5: Hãy viết chương trình tạo tần số 20 Khz chân OC0 (PB3) với duty cycle 50%, tần số thạch anh 2Mhz Câu 6: Viết chương trình tạo định thời xác 10 giây, tần số thạch anh 1Mhz (gợi ý: sử dụng chế độ CTC) Câu 7: Hãy viết chương trình tạo tần số Khz chân OC0 (PB3) với duty cycle 75% Câu 8: Hãy viết chương trình đếm sản phẩm chân T0 sử dụng chức timer/counter (tác động cạnh lên), đếm đến 100 sản phẩm xuất tín hiệu chân PORTD.7 = khoảng giây, sau lặp lại từ đầu Câu 9: Hãy viết chương trình điều khiển động từ tốc độ thấp đến cao nhất, từ cao đến thấp lặp lại Câu 10: Hãy viết chương trình đo tốc độ động - 50/115- Biên soạn: Lâm Quang Chuyên Chương Bộ so sánh tương tự Bài giảng vi điều khiển Atmega16 Chương BỘ SO SÁNH TÍN HIỆU TƯƠNG TỰ (ANALOG COMPARATOR) - 51/115- Biên soạn: Lâm Quang Chuyên Chương Bộ so sánh tương tự Bài giảng vi điều khiển Atmega16 5.1 GIỚI THIỆU Là so sánh mức điện áp chân AIN0 với mức điện áp chân AIN1, điện áp chân AIN0 lớn chân AIN1 bit ngõ ACO (Analog Comparator Ouput) ghi ACSR Kết so sánh kích hoạt chức đọc giá trị đếm counter timer/counter1, kích hoạt hoạt động ngắt 5.2 CÁC THANH GHI LIÊN QUAN  Thanh ghi SFIOR kết hợp với ghi ADCSRA dùng để chọn chân thay cho chân AIN1  Thanh ghi ACSR : Thanh ghi điều khiển hoạt động so sánh Hình 5.1 Sơ đồ khối hoạt động so sánh - 52/115- Biên soạn: Lâm Quang Chuyên Chương Bộ so sánh tương tự Bài giảng vi điều khiển Atmega16 V.2.1 THANH GHI SFIOR Bit Read/ Write Giá trị ban đầu ADTS2 ADTS1 ADTS0 ADHSM ACME RW RW RW RW RW 0 0 PUD RW PSR2 RW 0 PSR10 RW Hình 5.2 Thanh ghi SFIOR Bit ACME Analog Comparator Multiplexer Enable, cho phép chọn ngõ vào thay cho chân AIN1, dựa vào sơ đồ ta nhận thấy bit ADEN = (ADC bị ngưng hoạt động) bit ACME = 1, việc chọn ngõ vào thay cho chân AIN1 phụ thuộc vào bit MUX2 ghi ADMUX 5.2.2 Thanh ghi ADCSRA Bit Read/ Write Giá trị ban đầu ADEN ADSC ADATE RW RW RW 0 ADIF RW ADIE RW ADPS2 ADPS1 ADPS0 RW RW RW 0 Hình 5.3 Thanh ghi ADCSRA Bit ADEN kết hợp với bit ACME để chọn chân thay cho AIN1 ACME ADEN MUX2.0 Ngõ vào chân có điện áp âm 1 1 1 1 x 0 0 0 0 xxx xxx 000 001 010 011 100 101 110 111 AIN1 AIN1 ADC0 ADC1 ADC2 ADC3 ADC4 ADC5 ADC6 ADC7 Bảng 5.1 Chọn chân điện áp ngõ vào - 53/115- Biên soạn: Lâm Quang Chuyên Chương Bộ so sánh tương tự Bài giảng vi điều khiển Atmega16 5.2.3 Thanh ghi ACSR Bit Read/ Write Giá trị ban đầu ACD RW ACBG RW ACO R N/A ACI RW ACIE RW ACIC RW ACIS1 RW 0 ACIS0 RW Hình 5.4 Thanh ghi ACSR  Bit – ACD Analog Comparator Disable: bit so sánh khơng hoạt động, bit phép hoạt động Bit bật lên thời điểm điều giúp cho vi điều khiển tiết kiệm điện áp tiêu thụ hoạt động Idle  Bit – ACBG Analog Comparator Bandgap Select: Khi bit điện áp tham chiếu (1.15v – 1.35v) kết nối với chân dương so sánh, chân AIN0 kết nối với so sánh  Bit – ACO Analog Comparator Ouput: ngõ so sánh  Bit – ACI Analog Comparator Interrupt Flag: cờ ngắt so sánh phụ thuộc vào bit ACIS1 ACIS0 Cờ ngắt hoạt động so sánh thực bit ACIE bit I ghi SREG cài đặc lên Ở chế độ ngắt cờ tự động xóa 0, ngược lại cờ xóa viết mức logic vào  Bit – ACIE Analog Comparator Interrupt Enable: Bit cho phép ngắt =  Bit – ACIC Analog Comparator Input Capture Enable: bit = cho phép đọc giá trị counter timer/counter1  Bit 1,0 – ACIS1, ACIS0: Analog Comparator Interrupt Mode Select ACIS1 ACIS0 Các dạng ngắt 0 Ngắt có thay đổi ngõ Không sử dụng Ngắt xảy cạnh xuống 1 Ngắt xảy cạnh lên Bảng 5.2 Cài đặt ngắt hoạt động AC - 54/115- Biên soạn: Lâm Quang Chuyên Chương Bộ so sánh tương tự Bài giảng vi điều khiển Atmega16 5.2.4 Bài tập ví dụ Viết chương trình điện áp chân PB2 lớn chân PB3 PORD.0 = 1, ngược lại =0; Hình 5.5 Bài tập ví dụ Chương trình mơ /***************************************************** Project : Hoạt động AC Date : 15/02/2014 Author : LÂM QUANG CHUYÊN *****************************************************/ #include // Analog Comparator interrupt service routine interrupt [ANA_COMP] void ana_comp_isr(void) { PORTD.0 = ~PORTD.0; } void main(void) { PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xFF; - 55/115- Biên soạn: Lâm Quang Chuyên Chương Bộ so sánh tương tự Bài giảng vi điều khiển Atmega16 // Analog Comparator initialization // Analog Comparator: On // Interrupt on Output Toggle ACSR=0x08; SFIOR=0x00; // Global enable interrupts #asm("sei") while (1) { // Place your code here } } 5.3 CÂU HỎI ƠN TẬP HẾT CHƯƠNG Hãy phân tích hình vẽ 5.1 Hãy cài đặc chương trình để có ngõ AIN1 chân ADC5 Hãy viết chương trình điện áp chân PB.2 lớn điện áp chân PA.2 đèn chân PD.0 sáng, ngược lại đèn tắt - 56/115- Biên soạn: Lâm Quang Chuyên ... 0000 00 0 00 01 01 1 0 010 02 2 0 011 03 3 010 0 04 4 010 1 05 5 011 0 06 6 011 1 07 7 10 00 10 8 10 01 11 9 10 10 12 10 A 10 11 13 11 B 11 00 14 12 C 11 01 15 13 D 11 10 16 14 E 11 11 17 15 F Bảng 1. 1 Biến đổi... lục phân (AB4C )16 = (10 10 -1 0 1 1- 010 0 -1 1 00)2 = ( 1- 010 -1 0 1 -1 0 1 -1 1 0 -1 0 0)2 = (12 5564)2 1. 1.4.3 Đổi thập phân 1. 1.4.3 .1 Từ nhị phân: lấy số mũ theo số - 4 /11 5 - Biên soạn: Lâm Quang Chuyên Chương Giới... (10 .10 1. 011 .10 0 .11 1)2 1. 1.4 .1. 2 Từ thập phân: Chi cho lấy số dư lên (2 011 )10 = (11 111 011 011 )2 2 011 : = 10 05 dư 10 05 : = 502 dư 502 : = 2 51 dư 2 51 : = 12 5 dư 12 5 : = 62 dư 62 : = 31 dư 31 : = 15

Ngày đăng: 20/08/2021, 13:52

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w