1. Trang chủ
  2. » Giáo án - Bài giảng

Cac bai labs KIT AVR

90 66 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 90
Dung lượng 3,08 MB

Nội dung

Bài 1: KIT AVR VÀ TRÌNH BIÊN DỊCH CODEVISIONAVR I Mục đích Đưa nhìn tổng qt thành phần cấu trúc KIT thực tập KIT mà sinh viên thực tập suốt trình học mơn Sử dụng phần mềm CodeVisionAVR để soạn thảo, tổ chức project cho chip họ AVR II Yêu cầu 1.Nắm rõ cấu trúc vi điều khiển Atmega32 2.Hiểu module schematic KIT VAR 3.Các bước để soạn thảo project (source code) cho chip AVR III Cơ sở lý thuyết III.1 Vi điều khiển Atmega32 Một số đặc điểm Atmega32 • Kiến trúc RISC mở rộng - Tập lệnh với 131 lệnh, hầu hết lệnh thực thi chu kỳ xung clock - Một tập ghi với 32 ghi bit, tất chip thuộc họ AVR có tập ghi - Tần số tối đa lên tới 16Mhz • Bộ nhớ chương trình nhớ liệu - 32 Kbyte nhớ lập trình được(flash), nạp lại 10.000 lần - 1024 Byte EEPROM, nạp lai 100.000 lần - Kbyte SRAM nội • Giao tiếp chuẩn JTAG(IEEE) - Hỗ trợ chế độ Debug mở rộng chip - Lập trình cho Flash, EEPROM, set Fuse bit lock bit thông qua chuẩn giao tiếp JTAG • Đặc điểm thiết bị ngoại vi - Timer/Counter bit hoat động riêng biệt - Timer/Counter 16 bit với Compare mode Capture mode - Bộ đếm thời gian thực với tạo dao động riêng biệt - kênh PWM (Pulse Width Modulator) - kênh 10 bit ADC - Giao tiếp chuẩn nối tiếp dây - Lập trình truyền thơng nối tiếp USART - Bộ WatchDog Timer khả trình với tạo dao động riêng biệt chip • Những điểm đặc biệt vi điều khiển - Bao gồm ngắt nội lẫn ngắt ngoại - chế độ Sleep: Idle, ADC noise reduction, Power-save, Power-down, Standby, Extended Standby • I/O hình thức đóng gói - 32 đường I/O lập trình - 40 pin –PDIP, 44 lead-TQFP, 44 pad MLF • Điện hoạt động - 2.7 – 5.5V cho ATmega32L - 4.5- 5.5V cho ATmega32 Hình P3_2.1: Sơ đồ chân ATMega32 Hình P3_2.2: Sơ khối bên ATMega32 Lưu ý: Chi tiết cấu trúc vi điều khiển Atmega32 xem datasheet III.2 Giới thiệu KIT AVR KIT AVR thiết kế với mục tiêu phục vụ cho việc giảng dạy nghiên cứu vi điều khiển phát triển ứng dụng nhúng vi điều khiển KIT AVR bao gồm môđun sau: III.2.1.Môđun xử lý trung tâm thiết kế gồm: - Vi điều khiển Atmega32 - Bộ tạo dao động (thạch anh 16MHz) - Các công tắc nhấn nối với chân vi điều khiển sau: Bảng P3_2.1: Bảng sơ đồ chân Atmega32 kết nối Switch Số Chân Atmega32 Ký hiệu thiết bị RESET SW1 INT0 SW3 INT1 SW2 TT VCC 10 30 32 RST VCC AVCC AREF RESET 104 13 XT1 20P1 20P2 12 11 31 XT2 GND GND (XCK/T0)PB0 (T1)PB1 (INT2/AIN0)PB2 (OC0/AIN1)PB3 (SS)PB4 (MOSI)PB5 (MISO)PB6 (SCK)PB7 (ADC0)PA0 (ADC1)PA1 (ADC2)PA2 (ADC3)PA3 (ADC4)PA4 (ADC5)PA5 (ADC6)PA6 (ADC7)PA7 (SCL)PC0 (SDA)PC1 (TCK)PC2 (TMS)PC3 (TDO)PC4 (TDI)PC5 (TOSC1)PC6 (TOSC2)PC7 (OC2)PD7 (ICP)PD6 (OC1A)PD5 (OC1B)PD4 (INT1)PD3 (INT0)PD2 (TXD)PD1 (RXD)PD0 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 40 39 38 37 36 35 34 33 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PC0 PC1 PC2(TCK) PC3(TMS) PC4(TDO) PC5(TDI) PC6 PC7 22 23 24 25 26 27 28 29 21 20 19 18 17 16 15 14 PD7 PD6 PD5 PD4 PD3 PD2 TxD RxD Hình P3_2.3: Module xử lý trung tâm VCC R24 10k R22 10k III.2.2 Các môđun giao tiếp vào/ra (I/O) III.2.2.1 Các port vi điều khiển Atmega32 Bảng P3_2.2:Bảng ký hiệu PORT Atmega32 Số Port Atmega32 Ký hiệu thiết bị PORTA (PA) J13 PORTB (PB) J10 PORTC (PC) J11 PORTD (PD) J12 TT J11 J12 J10 PC0 PC1 PC2(TCK) PC3(TMS) PC4(TDO) PC5(TDI) PC6 PC7 PORTC RxD TxD PD2 PD3 PD4 PD5 PD6 PD7 PORTD J13 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PORTB PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PORTA Hình P3_2.4: Các port vi điều khiển Atmega32 III.2.2.2 Màn hình hiển thị-LCD 16x2 Bảng P3_2.3:Bảng kỳ hiệu PORT LCD Số Port LCD 16x2 Ký hiệu thiết bị LCD 16x2 J2 LCD PORT J20 VCC 10 15 16 11 12 13 14 J20 LCD2 LCD0 LCD1 LCD4 LCD5 LCD6 LCD7 J2 LCD0 LCD1 LCD2 R99 LCD4 330 LCD5 LCD6 LCD7 TT LCD LCD16x2 Hình P3_2.5:Mơđun hình hiển thị-LCD 16x2 III.2.2.3 Led đơn: có led đơn Bảng P3_2.4: Bảng ký hiệu LED đơn Số LED đơn Ký hiệu thiết bị LED0 D4 LED1 D5 LED2 D6 LED3 D7 LED4 D8 LED5 D9 LED6 D10 LED7 D11 TT LED R3 D6 D7 D8 D9 D10 D11 LED LED LED LED LED LED LED R4 R5 R6 R7 R9 R10 R11 Hình P3_2.6:Mơđun LED đơn III.2.2.4 Led đoạn (7-SEGMENT LED) Bảng P3_2.4: Bảng ký hiệu LED đoạn Số LED đoạn Ký hiệu thiết bị LED7SEG0 J21 LED7SEG1 J22 LED7SEG2 J23 LED7SEG3 J24 TT VCC D5 D0 D1 D2 D3 D4 D5 D6 D7 LE OE 10 D4 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 GND U11 12 15 16 19 20 VCC 13 14 17 18 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 11 PB0 74LS373 VCC R59 R60 R61 R62 300 300 300 300 A B C 10 D R63 R64 R65 R66 300 300 300 300 E F G DP A B C D E F G DP 10 A B C D E F G DP LED LED 10 J23 A B C D E F G DP LED Hình P3_2.7:Môđun Led đoạn III.2.2.5 Switch DIP-8: kết nối hình sau, có ký hiệu SW10 VCC PB2 SW DIP-8 11 D0 D1 D2 D3 D4 D5 D6 D7 LE OE 74LS373 U16 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 12 15 16 19 PC0 PC1 PC2(TCK) PC3(TMS) PC4(TDO) PC5(TDI) PC6 PC7 GND 13 14 17 18 VCC 20 VCC 10 SW10 Hình P3_2.8:Mơđun Switch DIP-8 III.2.2.6 Ma trận LED 5x7: kết nối hình sau, có ký hiệu U6 U6 PC0 18 PC1 PC2(TCK)4 PC3(TMS)7 PC4(TDO) 11 13 12 10 18 11 13 12 10 16 15 17 14 16 15 17 14 R13 R14 R15 R16 R17 R18 R19 PA0 PA1 PA2 PA3 PA4 PA5 PA6 MATRIX 5x7 (2 COLORs) Hình P3_2.9:Mơđun Ma trận LED 5x7 10 J24 LED 74LS373 R39 R40 R49 R50 R51 4.7K R52 4.7K R53 4.7K R58 4.7K 4.7K 4.7K 4.7K 4.7K Q9 PNP J22 8 J21 12 15 16 19 Q8 PNP LE OE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q7 PNP 11 VCC PB1 D0 D1 D2 D3 D4 D5 D6 D7 R44 1K 10 13 14 17 18 GND U13 PB4 R43 1K Q6 PNP 20 VCC PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 PB5 R42 1K PB6 R41 1K PB7 III.2.3 Môđun giao chuẩn UART Môđun thiết kế để truyền thơng máy tính với vi điều khiển thơng qua chuẩn UART Mơđun kết nối hình sau, có ký hiệu DB9 13 T1O 15 DB9 C1 104 VCC C3 104 R1O R1I 14 16 T1I GND C1+ T2O T2I Vs- C1- Vs+ C2+ R2I R2O VCC C2- 12 RxD 11 TxD C2 104 10 C4 104 Hình P3_2.10:Môđun UART/ISP III.2.4 Môđun điều khiển động DC động bước (STEP MOTOR) Dưới sơ đồ mạch thiết kế để ghép nối động DC động bước với Vi điều khiển J1 +12V DK1A VCC C9 DK1B 104 GND VCC DK2A VCC DK2B OUT2A OUT2B 15 VCC U6 LM7805 VI C10 100u GND OUT1A OUT1B VO 2 10 11 12 13 14 15 L298 Hình P3_2.11:Mơđun động DC VCC C11 104 C12 100u GND U1 J7 4 J8 J9 GND 18 17 16 15 14 13 12 11 10 18 17 16 15 14 13 12 11 10 4 J10 ULN2803 +12V J11 Hình P3_2.12:Mơđun động bước III.2.5 Môđun giao chuẩn I2C Môđun thiết kế để giao tiếp vi điều khiển với chip ngoại vi như: EEPROM, Real Time Clock(RTC), thông qua chuẩn giao tiếp I2C VCC J4 R2 4K7 R12 4K7 U9 SDA SCL VCC X1 CONG TAC Y2 SQW X2 GND VBAT D12 LED DS1307 U7 PIN 3V U10 VCC A2 A1 A0 SCL SDA WP GND 6 24C64 Hình P3_2.13:Mơđun I2C R1 300R PC0 PC1 III.2.6 Mơđun bàn phím Hình P3_2.14:Mơđun bàn phím III.2.7 Các mơđun khác - Mơđun cấp nguồn: VCC D3 J3 POWER C6 C5 104 100uF/16V VCC LED 1k R8 U8 D- D+ VCC GND USB_B Hình P3_2.15:Mơđun cấp nguồn -Mơđun debugger dùng để chạy debugger chương trình VCC PC2(TCK) PC4(TDO) PC3(TMS) PC5(TDI) J1 10 DEBUGGER Hình P3_2.16:Mơđun debugger 10 động chế tạo từ đến cuộn dây (hay gọi bối dây) đặt đối diện rãnh stator Đối với động có hai cuộn dây dùng cho điều khiển lưỡng cực (cuộn dây có cực tính thay đổi), với cuộn dây dùng cho hai chế độ điều khiển lưỡng cực đơn cực Hình P3_2.53: Phân biệt động thường động bước Hình P3_2.54: Cấu tạo bên động bước Động bước thiết bị sử dụng rộng rãi dùng để chuyển xung điện thành chuyển động học Ở số ứng dụng như: điều khiển đĩa, máy in, máy quét, robot…thì động bước dùng để điều khiển chuyển động 76 Hình P3_2.55:Hình dáng bên ngồi động bước Khi kết hợp với mạch điều khiển bên ngồi, chúng quay đến quay lui dừng lại vị trí xác định cách xác III.2 Nguyên lý hoạt động loại động bước Dựa vào cấu tạo, ta có ba loại động bước : Động bước nam châm vĩnh cửu, động bước biến từ trở động bước hỗn hợp (động lai) Ngoài có cách phân loại dựa vào mạch điều khiển động bước đơn cực, lưỡng cực Để vận hành động bước, từ trường stator tạo phải thay đổi liên tục thành chuỗi Để thực điều này, ta thay đổi chiều dòng điện chạy cuộn dây theo chuỗi có thứ tự Nếu cuộn dây động kích, rotor (ở khơng tải) nhảy đến góc cố định sau giữ nguyên momen xoắn tác động vào trục động vượt qua giá trị momen xoắn giữ tĩnh Động biến từ trở: Động bước biến từ trở (hay gọi động bước phản kháng) không dùng nam châm vĩnh cửu để làm rotor mà dùng khối có làm vật liệu nhẹ có từ tính Phần stator đến cuộn dây nối chung với 77 Hình P3_2.56: Động biến từ trở * Vận hành: Thông thường đầu dây chung C mắc với nguồn dương, đầu dây lại kích theo chuỗi Bảng P3_2.17: Chuỗi xung điều khiển động Động nam châm vĩnh cửu Động bước nam châm vĩnh cửu có rotor nam châm vĩnh cửu, khơng chia thành nhiều răng, có nhiều cuộn dây loại biến từ trở Có hai loại thơng dụng động bước đơn cực (còn gọi độc cực – unipolar) lưỡng cực (bipolar) Hình P3_2.57: Động bước đơn cực 78 Hình P3_2.58: Động bước lưỡng cực Điều khiển động đơn cực lưỡng cực Bảng sau mô tả trạng thái quay hai loại động Bảng P3_2.18: Bảng xung điều khiển mô tả trạng thái quay động 79 III.2.3 Động bước hỗn hợp Động bước hỗn hợp (hay gọi động bước cảm ứng) kết hợp ưu điểm củahai loại động trên, nghĩa chúng có rotor nam châm vĩnh cửu, có nhiều răng, stator cuộn dây Động hỗn hợp thơng dụng loại có 200 có bước 1,80 Động hỗn hợp chủ yếu sử dụng cơng nghiệp Hình P3_2.59: Động bước hỗn hợp Trong hình trên, rotor động bước gồm hai đĩa bố trí so le Mỗi đĩa có nhiều ứng với cực Trong cuộn dây phần stator giống loại động bước nam châm vĩnh cửu IV Thực hành Sơ đồ mạch ghép nối động DC động bước với Vi điều khiển J1 +12V DK1A VCC C9 DK1B 104 GND VCC DK2A VCC DK2B OUT2A OUT2B 15 VCC U6 LM7805 VI C10 100u GND OUT1A OUT1B VO L298 Hình P3_2.60: Mơđun động DC 80 VCC C11 104 2 10 11 12 13 14 15 C12 100u GND J7 J8 U1 4 J9 GND 18 17 16 15 14 13 12 11 10 18 17 16 15 14 13 12 11 10 4 J10 ULN2803 +12V J11 Hình P3_2.61:Mơđun động bước Dựa sơ đồ kết nối bên tiến hành kết nối với vi điều khiển viết code để điều khiển động Tham khảo đoạn code mẫu sau: #include // Declare your global variables here unsigned char stepA[] = {0xFF,0xFE,0xFD,0xFB,0xF7}, stepB[] = {0xFF,0xEF,0xDF,0xBF,0x7F}, stepC[] = {0xFF,0xEF,0xDF,0xBF,0x7F}; unsigned char indexA, indexB, indexC; void main(void) { // Declare your local variables here // Input/Output Ports initialization // Khởi tạo Port xuất liệu while (1) { // Place your code here if(indexA ++ >3) indexA=1; if(indexB ++ >3) indexB=1; if(indexC ++ >3) indexC=1; PORTA = stepA[indexA] & stepB[indexB]; PORTC = stepC[indexC]; delay_ms(500); }; } 81 Bài 10: GIAO TIẾP I2C VỚI DS1307 I Mục đích Hiểu giao chuẩn I2C Nguyên lí hoạt động DS1307 Đọc thời gian ngày tháng từ DS1307 hiển thị lên LCD II Yêu cầu Tìm hiểu ứng dụng I2C (realtime clock kết nối Rom ngoài) Hiển thị thời gian thực lên LCD Ghi giá trị vào ROM ngồi đọc ngược giá trị lên LCD III Cơ sở lý thuyết DS1307 chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm thời gian thực dùng với ý nghĩa thời gian tuyệt đối mà người sử dụng, tính giây, phút, giờ…DS1307 sản phẩm Dallas Semiconductor (một công ty thuộc Maxim Integrated Products) Chip có ghi 8-bit chứa thời gian là: giây, phút, giờ, thứ (trong tuần), ngày, tháng, năm Ngồi DS1307 có ghi điều khiển ngõ phụ 56 ghi trống dùng RAM DS1307 đọc ghi thông qua giao diện nối tiếp I2C (TWI AVR) nên cấu tạo bên đơn giản DS1307 xuất dạng SOIC DIP có chân hình Hình P3_2.62: Cấu tạo chip DS1307 Các chân DS1307 mô tả sau: - X1 X2: ngõ kết nối với thạch anh 32.768KHz làm nguồn tạo dao động cho chip - VBAT: cực dương nguồn pin 3V nuôi chip - GND: chân mass chung cho pin 3V Vcc - Vcc: nguồn cho giao diện I2C, thường 5V dùng chung với vi điều khiển Chú ý Vcc không cấp nguồn VBAT cấp DS1307 82 hoạt động (nhưng khơng ghi đọc được) - SQW/OUT: ngõ phụ tạo xung vuông (Square Wave / Output Driver), tần số xung tạo lập trình Như chân không liên quan đến chức DS1307 đồng hồ thời gian thực, bỏ trống chân nối mạch - SCL SDA đường giao xung nhịp liệu giao diện I2C Có thể kết nối DS1307 mạch điện đơn giản hình sau: Hình P3_2.63: Sơ đồ mạch điện đơn giản DS1307 Cấu tạo bên DS1307 bao gồm số thành phần mạch nguồn, mạch dao động, mạch điều khiển logic, mạch giao điện I2C, trỏ địa ghi (hay RAM) Do đa số thành phần bên DS1307 thành phần “cứng” nên khơng có q nhiều việc sử dụng DS1307 Sử dụng DS1307 chủ yếu ghi đọc ghi chip Vì cần hiểu rõ vấn đề cấu trúc ghi cách truy xuất ghi thông qua giao diện I2C Bộ nhớ DS1307 có tất 64 ghi 8-bit đánh địa từ đến 63 (từ 0x00 đến 0x3F theo hệ hexadecimal) Tuy nhiên, thực chất có ghi đầu dùng cho chức “đồng hồ” (gọi RTC) lại 56 ghi bỏ trống dùng chứa biến tạm RAM muốn Bảy ghi chứa thông tin thời gian đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), (HOURS), thứ (DAY), ngày (DATE), tháng (MONTH) năm (YEAR) Việc ghi giá trị vào ghi tương đương với việc “cài đặt” thời gian khởi động cho RTC Việc đọc giá từ ghi đọc thời gian thực mà chip tạo Ví dụ, lúc khởi động chương trình, ghi vào ghi “giây” giá trị 42, sau 12s đọc ghi này, thu giá trị 54 Thanh ghi thứ (CONTROL) ghi điều khiển xung ngõ 83 SQW/OUT (chân 6) Tuy nhiên, khơng dùng chân SQW/OUT nên bỏ qua ghi thứ Tổ chức nhớ DS1307 trình bày hình sau: Hình P3_2.64: Tổ chức nhớ DS1307 Vì ghi quan trọng hoạt động DS1307, khảo sát ghi cách chi tiết Trước hết quan sát tổ chức theo bit ghi hình sau: Hình P3_2.65: Tổ chức ghi thời gian Điều cần ý giá trị thời gian lưu ghi theo dạng BCD BCD viết tắt cụm từ Binary-Coded Decimal, tạm dịch số thập phân theo mã nhị phân Ví dụ bạn muốn cài đặt cho ghi MINUTES giá trị 42 Nếu quy đổi 42 sang mã thập lục phân thu 42=0x2A Theo cách hiểu thơng thường cần gán MINUTES=42 MINUTES=0x2A, nhiên ghi chứa giá trị BCD nên khác 84 Với số 42, trước hết tách thành chữ số (digit) Mỗi chữ số sau đổi sang mã nhị phân 4-bit Chữ số đổi sang mã nhị phân 4-bit 0100 đổi thành 0010 Ghép mã nhị phân chữ số lại thu mốt số bit, số BCD Với trường hợp này, số BCD thu 01000010 (nhị phân) = 66 Như vậy, để đặt số phút 42 cho DS1307 cần ghi vào ghi MINUTES giá trị 66 (mã BCD 42) Tất phần mềm lập trình hay ghi chip điều khiển sử dụng mã nhị phân thơng thường, khơng phải mã BCD, cần viết chương trình để quy đổi từ số thập nhị phân (hoặc thập phân thường) sang BCD Số BCD có ưu điểm việc hiển thị hiển thị chữ số hiển thị LED đoạn chẳng hạn Quay lại ví dụ 42 phút, giả sử dùng LED 7-đoạn để thị chữ số số phút Khi đọc ghi MINUTES thu giá trị 66 (mã BCD 42), 66=01000010 (nhị phân), để hiển thị cần dùng phương pháp tách bit thông thường để tách số 01000010 thành nhóm 0100 0010 (tách tốn tử shift “>>” C instruction LSL, LSR asm) xuất trực tiếp nhóm LED 0100 = 0010 =2, nhanh chóng Thậm chí, nối LED 7-đoạn PORT, việc tách digit không cần thiết, để hiển thị số, cần xuất trực tiếp PORT Như vậy, với số BCD, việc tách hiển thị digit thực dễ dàng, không cần thực phép chia (rất tốn thời gian thực thi) cho số 10, 100, 1000…như trường hợp số thập phân Thanh ghi giây (SECONDS): ghi ghi nhớ DS1307, địa 0x00 Bốn bit thấp ghi chứa mã BCD 4-bit chữ số hàng đơn vị giá trị giây Do giá trị cao chữ số hàng chục (khơng có giây 60 !) nên cần bit (các bit SECONDS6:4) mã hóa (số =101, bit) Bit cao nhất, bit 7, ghi điều khiển có tên CH (Clock halt – treo đồng hồ), bit set dao động chip bị vơ hiệu hóa, đồng hồ khơng hoạt động Vì vậy, thiết phải reset bit xuống từ đầu Thanh ghi phút (MINUTES): có địa 0x01, chứa giá trị phút đồng hồ Tương tự ghi SECONDS, có bit ghi dùng lưu mã BCD phút, bit luôn 85 Thanh ghi (HOURS): nói ghi phức tạp DS1307 Thanh ghi có địa 0x02 Trước hết 4-bits thấp ghi dùng cho chữ số hàng đơn vị Do DS1307 hỗ trợ loại hệ thống hiển thị (gọi mode) 12h (1h đến 12h) 24h (1h đến 24h) giờ, bit6 xác lập hệ thống Nếu bit6=0 hệ thống 24h chọn, bit cao dùng mã hóa chữ số hàng chục giá trị Do giá trị lớn chữ số hàng chục trường hợp (=10, nhị phân) nên bit đủ để mã hóa Nếu bit6=1 hệ thống 12h chọn, với trường hợp có bit dùng mã hóa chữ số hàng chục giờ, bit buổi ngày, AM PM Bit5 =0 AM bit5=1 PM Bit Thanh ghi thứ (DAY – ngày tuần): nằm địa 0x03 Thanh ghi DAY mang giá trị từ đến tương ứng từ Chủ nhật đến thứ tuần Vì thế, có bit thấp ghi có nghĩa Các ghi lại có cấu trúc tương tự, DATE chứa ngày tháng (1 đến 31), MONTH chứa tháng (1 đến 12) YEAR chứa năm (00 đến 99) Chú ý, DS1307 dùng cho 100 năm, nên giá trị năm có chữ số, phần đầu năm người dùng tự thêm vào (ví dụ 20xx) Ngồi ghi nhớ, DS1307 có ghi khác nằm riêng gọi trỏ địa hay ghi địa (Address Register) Giá trị ghi địa ghi nhớ mà người dùng muốn truy cập Giá trị ghi địa (tức địa nhớ) set lệnh Write Hình P3_2.66: Cấu trúc DS1307 86 IV Thực hành Sơ đồ kết nối kết nối DS1307 với vi điều khiển VCC J4 R2 4K7 R12 4K7 U9 VCC X1 SDA SCL SQW X2 GND VBAT D12 LED DS1307 U7 PC0 PC1 CONG TAC Y2 R1 300R PIN 3V U10 VCC A2 A1 A0 SCL SDA WP GND 24C64 Hình P3_2.67: Sơ đồ kết nối kết nối DS1307 với vi điều khiển Khởi tạo LCD , I2C DS1307 (a) (b) Hình P3_2.68: Khởi tạo LCD DS1307 87 Trong hình P3_2.68 (a) khởi tạo LCD: cửa sổ CodeWizardAVR chọn thẻ LCD, chọn LCD PORT PORTB Trong hình P3_2.68 (b) khởi tạo I2C DS1307: cửa sổ CodeWizardAVR chọn thẻ I2C, chọn I2C PORT chọn PORTC Trong tab chip ta chọn chíp DS1307, check vào Enabled để xác định sử dụng DS1307 ô Square Wave Output ta check vào ô Enabled, list Freq: Chọn Hz để khởi tạo cho chân output DS1307 s có xung ra, mạch chân nối với led khởi tạo vừa làm cho led nhấp nháy với tần số Hz Sau chọn File Generate and Exit Sơ đồ làm việc với DS1307 sau: Hình P3_2.69: Sơ đồ làm việc với DS1307 Code chương trình: #include #include // I2C Bus functions #asm equ i2c_port=0x15 ;PORTC equ sda_bit=0 equ scl_bit=1 #endasm #include // DS1307 Real Time Clock functions #include // Alphanumeric LCD Module functions #asm equ lcd_port=0x18 ;PORTB #endasm #include 88 Save, // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // I2C Bus initialization i2c_init(); // DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: On // Square wave frequency: 1Hz rtc_init(0,1,0); // LCD module initialization lcd_init(16); while (1) { // Place your code here }; } Để đọc thời gian ta dùng hàm rtc_get_time() rtc_get_date có sẵn thư viện DS1307.h Chúng ta phải khai báo biến để lưu thông tin thời gian h; phút m; giây s biến lưu thông tin ngày tháng ngày day; tháng month; năm year phía trước hàm main sau: // Declare your global variables here unsigned char h,m,s; //biến lưu thông tin thời gian unsigned char day,month,year;//biến lưu thông tin ngày tháng Để hiển thị số LCD ta phải viết thêm hàm lcd_putnum sau: void lcd_putnum(unsigned char x) { unsigned char tram,chuc,donvi; tram=x/100;// Lấy hàng trăm chuc=(x-tram*100)/10;//Lay hàng chục donvi=(x - tram*100 – chuc*10);//Lay hàng don vi //hiển thị chuyển qua mã ASCII lcd_putchar(tram+48); lcd_putchar(chuc+48); lcd_putchar(donvi+48); } 89 Chương trình vòng while(1) sau: while(1) { rtc_get_time(&h, &m, &s);//đọc thời gian từ DS1307 rtc_get_date(&day, &month, &year);//đọc ngày tháng từ DS1307 //Hiển thị lên LCD lcd_gotoxy(0,0);//di chuyển đến cột 0, dòng lcd_putnum(h); lcd_putchar(“:”); lcd_putnum(m); lcd_putchar(“:”); lcd_putnum(s); lcd_gotoxy(0,1); //di chuyển đến cột 0, dòng lcd_putnum(day); lcd_putchar(“-”); lcd_putnum(month); lcd_putchar(“-”); lcd_putnum(year); delay_ms(500); }; Biên dịch nạp chương trình vào vi điều khiển, kiểm tra kết hiển thị LCD 90 ... xem datasheet III.2 Giới thiệu KIT AVR KIT AVR thiết kế với mục tiêu phục vụ cho việc giảng dạy nghiên cứu vi điều khiển phát triển ứng dụng nhúng vi điều khiển KIT AVR bao gồm môđun sau: III.2.1.Môđun... CodeVisionAVR Đây chương trình hỗ trợ lập trình cho vi điều khiển AVR ngơn ngữ C, hỗ trợ nhiều thư viện lập trình, thuận lợi cho việc phát triển ứng dụng lớn AVR Khởi động chương trình CodeVisionAVR... sau: Hình P3_2.18: Khởi động chương trình CodeVisionAVR 11 Xuất cửa sổ chương trình CodeVisionAVR sau: Hình P3_2.19: Cửa sổ chương trình CodeVisionAVR Tạo Project chọn File -> New xuất cửa sổ Create

Ngày đăng: 16/12/2019, 17:08

w