--------------------------------------------------------------------------------------------- https://www.youtube.com/watch?v=wj5sQc-bunA --------------------------------------------------------------------------------------------- Đồ án Thiết kế mạch hiển thị mức âm lượng qua LCD sử dụng PIC 16F877A. Đồ án mô tả chi tiết cách thiết kế, thi công và kiểm tra mạch hiển thị mức âm lượng qua LCD sử dụng PIC 16F877A. Hệ thống khai thác công cụ ccs của Pic C để kích hoạt ADC và LCD. Hệ thống cũng tích hợp mạch khuyếch đại âm thanh công suất nhỏ nhằm đảm bảo là một sản phẩm hoàn chỉnh.
Trang 1Lời nói đầu tiên chúng em xin chân thành cảm ơn và gửi lời chúc sức khỏeđến Quý Thầy Cô trường Đại học Tiền Giang, Quý Thầy Cô Khoa Kỹ thuậtCông Nghiệp cùng Quý Thầy Cô bộ môn Điện - Điện Tử đã không ngại nhữngkhó khăn và tận tâm với nghề để truyền đạt những kiến thức quý báu cho chúng
em trong suốt khoảng thời gian chúng em học tại Trường Với những kiến thứcquý báu đó sẽ là một trong những nền tảng cơ bản và vững chắc giúp chochúng em trên con đường lập nghiệp sau này
Đồng thời chúng em cũng gửi lời cảm ơn thân mến đến tập thể sinh viênlớp Cao đẳng Điện - Điện tử 13 đã cùng chúng em trao đổi, học tập và giảiquyết những khó khăn trong suốt quá trình thực hiện đề tài
Chúng em xin trân trọng gửi đến thầy Hoàng Hữu Duy lời cảm ơn chân
thành và lòng biết ơn sâu sắc nhất Chúng em cũng rất mong nhận được những
lời nhận xét tận tình và sự đóng góp ý kiến quý báu của thầy Hoàng Hữu Duy,
Quý Thầy Cô Trường Đại học Tiền Giang và Quý Thầy Cô Khoa Kỹ ThuậtCông Nghiệp để đề tài của chúng em được tốt hơn
Chúng em xin chân thành cảm ơn!
Trang 3Hiện nay kỹ thuật vi điều khiển đã trở nên quen thuộc trong các ngành kỹthuật và trong dân dụng Các bộ vi điều khiển có khả năng xử lý nhiều hoạt độngphức tạp mà chỉ cần một chip vi mạch nhỏ, nó đã thay thế các mạch điều khiểnlớn và phức tạp bằng những mạch điện gọn nhẹ, dễ dàng thao tác sử dụng.
Vi điều khiển không những góp phần vào kỹ thuật điều khiển mà còn gópphần to lớn vào việc phát triển thông tin Chính vì các lý do trên, việc tìm hiểu,khảo sát vi điều khiển là điều mà các sinh viên ngành điện mà đặc biệt là chuyênngành kỹ thuật điện – điện tử phải hết sức quan tâm
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành và
sử dụng được lại là một điều rất phức tạp Phần công việc xử lý chính vẫn phụthuộc vào con người, đó chính là chương trình hay phần mềm Nếu không có sựtham gia của con người thì hệ thống vi điều khiển cũng chỉ là một vật vô tri Dovậy khi nói đến vi điều khiển cũng giống như máy tính bao gồm 2 phần là phầncứng và phần mềm
Mặc dù vi điều khiển đã đi được những bước dài như vậy nhưng để tiếp cậnđược với kỹ thuật này không thể là một việc có được trong một sớm một chiều
Để tìm hiểu bộ vi điều khiển một cách khoa học và mang lại hiệu quả cao cho
công việc về sau nhóm em đã đi đến quyết định “Thiết kế mạch hiển thị mức
âm thanh trên LCD sử dụng PIC 16F877A” nhằm đáp ứng nhu cầu học hỏi,
tìm hiểu của bản thân và giúp cho các bạn sinh viên dễ tiếp cận và hiểu sâu hơn
về vi điều khiển PIC
Trang 5A MỞ ĐẦU 1
1 Lý do chọn đề tài 2
2 Mục đích và mục tiêu nghiên cứu 2
3 Khách thể và đối tượng nghiên cứu 2
4 Phạm vi và giới hạn đề tài 2
5 Phương pháp nghiên cứu 2
6 Cấu trúc của đề tài 3
B NỘI DUNG 4
Chương 1 Tổng quan và cơ sở lý thuyết 5
1.1 Vi điều khiển PIC16F877A 5
1.1.1 Giới thiệu về họ vi điều khiển PIC 5
1.1.2 Cấu trúc phần cứng của PIC16F877A 5
1.1.2.1 Sơ đồ chân 5
1.1.2.3 Một số đặc điểm của vi điều khiển PIC16F877A 7
1.1.2.4 Các cổng xuất/nhập 8
1.1.3 ADC 10
1.2 LCD 12
1.3 TDA2030A 15
1.4 Phần mềm lập trình CCS 16
1.4.1 Giới thiệu về trình dịch CCS 16
1.4.2 Chỉ thị tiền xử lý 17
1.4.3 Các hàm Delay 18
1.4.4 Các hàm vào ra trong CCS 18
1.4.5 Thư viện hàm LCD của CCS 18
1.4.5.1 Khai báo 18
1.4.5.2 Các lệnh và ý nghĩa 19
1.4.6 Thư viện hàm ADC của CCS 19
1.4.6.1 Khai báo 19
1.4.6.2 Các hàm và ý nghĩa 19
1.4.7 Hàm Printf() 21
Trang 62.1 Sơ đồ khối của mạch 23
2.2 Chức năng của các khối 23
2.2.1 Khối nguồn 23
2.2.2 Khối khuếch đại 24
2.2.2.1 Định nghĩa mạch khuếch đại 24
2.2.2.2 Tầng khuếch đại công suất 25
2.2.2.3 Khối khuếch đại sử dụng TDA2030A 27
2.2.2.4 Nguồn âm thanh 28
2.2.2.5 Loa 28
2.2.4 Khối vi điều khiển 29
2.2.5 Khối hiển thị 30
Chương 3 Sơ đồ nguyên lý của mạch và cách xây dựng chương trình cho PIC16F877A
3.1 Sơ đồ nguyên lý của mạch 32
3.2 Nguyên lý hoạt của mạch 33
3.3 Xây dựng chương trình cho PIC16F877A 33
3.3.1 Lưu đồ thuật toán 34
3.3.2 Đọc và chuyển đổi giá trị ADC 35
3.3.3 Thành lập chương trình 36
3.3.3.1 Các tiền khai báo 36
3.3.3.2 Chương trình chính 37
3.4 Thi công và hoàn thành sản phẩm 40
3.5 Nhận xét hoạt động của sản phẩm 41
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỀN 42
TÀI LIỆU THAM KHẢO 43 PHỤ LỤC
Trang 7Hình 1.1 Sơ đồ chân PIC16F877A 5
Hình 1.2 Sơ đồ khối bộ chuyển đổi ADC 11
Hình 1.3 Các cách lưu kết quả chuyển đổi ADC 11
Hình 1.4 Hình dáng thực tế LCD 16x2 12
Hình 1.5 Sơ đồ chân của LCD 16x2 12
Hình 1.6 Hình ảnh thực tế TDA2030A 15
Hình 1.7 Vị trí các chân của TDA2030A 16
Hình 2.1 Sơ đồ khối toàn mạch 23
Hình 2.2 Mạch nguồn nuôi 24
Hình 2.3 Sơ đồ tổng quát của mạch khuếch đại 24
Hình 2.4 Mô tả việc phân loại các mạch khuếch đại công suất 26
Hình 2.5 Dạng sóng dòng điện của các chế độ khuếch đại 27
Hình 2.6 Mạch khuếch đại dùng TDA2030A 27
Hình 2.7 Các thiết bị là nguồn âm thanh 28
Hình 2.8 Dây nối tính hiệu âm thanh 28
Hình 2.9 Jack mono audio 3.5mm 28
Hình 2.10 Loa 28
Hình 2.11 Khối vi điều khiển 29
Hình 2.12 Khối hiển thị 30
Hình 2.13 Sơ đồ kết nối vi điều khiển với LCD 31
Hình 3.1 Sơ đồ nguyên lý toàn mạch 32
Hình 3.2 Lưu đồ thuật toán của vi điều khiển 34
Hình 3.3 Lưu đồ giải thuật đọc giá trị ADC 35
Hình 3.4 Mạch in 40
Hình 3.5 Sản phẩm thực tế 40
Trang 8Bảng 1.1 Bảng tóm tắt đặc điểm của vi điều khiển PIC16F877A 8
Bảng 1.2 Chức năng các chân của LCD 13
Bảng 1.3 Bảng tập lệnh LCD 14
Bảng 1.4 Bảng thông số tối đa của TDA2030A 15
Bảng 1.5 Bảng thông số nhiệt của TDA2030A 16
Bảng 1.6 Các hàm trong thư viện LCD của CCS 19
Bảng 1.7 Mã định dạng dữ liệu của hàm printf() 21
Bảng 3.1 Các tiền khai báo bắt buộc trong chương trình 36
Bảng 3.2 Ý nghĩa các config của Fuses trong CCS 36
Bảng 3.3 Các khai báo biến toàn cục 37
Bảng 3.4 Các hàm liên quan đến bộ ADC trong chương trình 38
Bảng 3.5 Bảng lệnh chuyển đổi và hiển thị ADC lên LCD 38
Bảng 3.6 Bảng biểu thể hiển mức điện áp của từng mức âm lượng 41
Trang 9A. MỞ ĐẦU
Trang 101. Lý do chọn đề tài
Ngày nay, sự phát triển mạnh mẽ của khoa học công nghệ, cuộc sống củacon người đã có những thay đổi ngày càng tốt hơn, mang lại sự tiện lợi tối ưuphục vụ công cuộc công nghiệp hoá, hiện đại hoá đất nước Góp phần vào sựphát triển đó là sự tích hợp các mạch điện – điện tử Trong đó các bộ vi xử lý –
vi điều khiển có vai trò rất quan trọng Vi xử lý – vi điều khiển ra đời đã và đanglàm nên một cuộc cách mạng trong mọi lĩnh vực của đời sống hiện đại từ chiếcmáy giặt, điện thoại… đến máy thu hình, máy ảnh, loa, máy khuếch đại âmthanh, Những thành tựu này đã biến những cái tưởng chừng như không thểthành những cái có thể
Với nhu cầu giải trí về mặt tinh thần ngày càng cao hơn của con người đãthúc đẩy các hệ thống vui chơi, giải trí như máy thu hình, điện thoại di động,máy tính xách tay, hệ thống chiếu phim, âm thanh, hình ảnh ngày càng pháttriển hơn Mỗi người, nhất là giới trẻ đều muốn có một hệ thống âm thanh choriêng mình với chi phí thấp
Dựa vào nhu cầu này, nhóm quyết định “Thiết kế mạch hiển thị mức âm thanh trên LCD sử dụng PIC16F877A”.
2. Mục tiêu và nhiệm vụ nghiên cứu
Mục tiêu của đề tài là thiết kế mạch hiển thị mức âm thanh trên LCD sửdụng PIC16F877A
Để đạt được mục tiêu này, các nhiệm vụ sau đây phải được thực hiện:
- Nghiên cứu và sử dụng phần mềm lập trình CCS
- Nghiên cứu vi điều khiển PIC16F877A và các lập lệnh có liên quan trong CCS
- Nghiên cứu sử dụng LCD 16x2
- Nghiên cứu mạch khuếch đại âm thanh sử dụng TDA2030A
- Nghiên cứu cơ chế hoạt động của bộ ADC trong PIC16F877A
- Mô phỏng mạch trong Proteus
- Xây dựng chương trình cho vi điều khiển PIC16F877A
- Thiết kế và thi công phần cứng
3. Khách thể và đối tượng nghiên cứu
Đối tượng nghiên cứu: Mạch hiển thị mức âm lượng trên LCD
Trang 11Khách thể nghiên cứu: Vi điều khiển PIC16F877A, TDA2030A, LCD.
4. Phạm vi và giới hạn đề tài
Phạm vi đề tài:
- Thiết kế mạch khuếch đại âm thanh 1 kênh
- Sử dụng biến trở để điều chỉnh âm lượng
- LCD có kích thước 16x2 và hiển thị 20 mức âm lượng
- Không thiết kế mạch nguồn từ 220VAC xuống 12VDC
- Công suất âm thanh 1W
Giới hạn của đề tài:
- Không tính toán hệ số khuếch đại của mạch
- Mạch chỉ có 1 kênh âm thanh ngõ ra
5. Phương pháp nghiên cứu
Chương 1 Tổng quan và cơ sở lý thuyết
Chương 2 Thiết kế mạch hiển thị mức âm lượng trên LCD sử dụngPIC16F877A
Chương 3 Sơ đồ nguyên lý và cách xây dựng chương trình choPIC16F877A
Kết luận và hướng phát triển
Trang 13B. NỘI DUNG
Trang 15CHƯƠNG 1.
TỔNG QUAN VÀ CƠ SỞ LÝ THUYẾT1.1 Vi điều khiển PIC16F877A
1.1.1 Giới thiệu về họ vi điều khiển PIC
PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch là
“máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho viđiều khiển đầu tiên của họ: PIC1650 được thiết kế để dùng làm các thiết bịngoại vi cho vi điều khiển CP1600 Về sau được hãng Microchip mua lại, viđiều khiển này sau đó được nghiên cứu phát triển thêm và từ đó hình thànhnên dòng vi điều khiển PIC ngày nay
1.1.2 Cấu trúc phần cứng của PIC16F877A
1.1.2.1 Sơ đồ chân
Hình 1.1 Sơ đồ chân PIC 16F877A
• Chân VDD (11, 32): Là các chân nguồn (+5V) của PIC
• Chân VSS (12, 31): Là các chân mass (0V) của PIC
• Chân OSC1/CLK1 (13): Ngõ vào kết nối với dao động thạch anh hoặc
Trang 16ngõ vào nhận xung clock từ bên ngoài.
• Chân OSC2/CLK2 (14): Ngõ ra dao động thạch anh hoặc ngõ ra cấpxung clock
• Chân MCLR/VPP (1) có 2 chức năng:
- MCLR: Ngõ vào reset tích cực ở mức thấp.
- Vpp: Ngõ vào nhận điện áp lập trình khi lập trình cho PIC
• Chân RA0/AN0 (2), RA1/AN1 (3), RA2/AN2 (3) có 2 chức năng:
- RA0, 1, 2: Xuất/ nhập số
- AN0, 1, 2: Ngõ vào tương tự của kênh thứ 0, 1, 2
• Chân RA2/AN2/VREF-/CVREF+ (4): Xuất nhập số/ ngõ vào tương tựcủa kênh thứ 2/ ngõ vào điện áp chuẩn thấp của bộ ADC/ ngõ vào điện ápchuẩn cao của bộ ADC
• Chân RA3/AN3/VREF+ (5): Xuất nhập số/ ngõ vào tương tự kênh 3/ ngõvào điện áp chuẩn (cao) của bộ ADC
• Chân RA4/TOCK1/C1OUT (6): Xuất nhập số/ ngõ vào xung clock bênngoài cho Timer 0/ ngõ ra bộ so sánh 1
• Chân RA5/AN4/ SS /C2OUT (7): Xuất nhập số/ ngõ vào tương tự kênh4/ ngõ vào chọn lựa SPI phụ/ ngõ ra bộ so sánh 2
• Chân RB0/INT (33): Xuất nhập số/ ngõ vào tín hiệu ngắt ngoài
Trang 171/ ngõ vào Capture2, ngõ ra compare2, ngõ ra PWM2.
• Chân RC2/CCP1 (17): Xuất nhập số/ ngõ vào Capture1, ngõ racompare1, ngõ ra PWM1
• Chân RC3/SCK/SCL (18): Xuất nhập số/ ngõ vào xung clock nối tiếpđồng bộ, ngõ ra chế độ SPI/ ngõ vào xung clock nối tiếp đồng bộ, ngõ racủa chế độ I2C
• Chân RC4/SDI/SDA (23): Xuất nhập số/ dữ liệu vào SPI/ xuất nhập dữliệu I2C
• Chân RC5/SDO (24): Xuất nhập số/ dữ liệu ra SPI
• Chân RC6/TX/CK (25): Xuất nhập số/ truyền bất đồng bộ USART/ xungđồng bộ USART
• Chân RC7/RX/DT (26): Xuất nhập số/ nhận bất đồng bộ USART
• Chân RD0-7/PSP0-7 (19-30): Xuất nhập số/ dữ liệu port song song
• Chân RE0/ RD/AN5 (8): Xuất nhập số/ điều khiển port song song/ ngõvào tương tự kênh thứ 5
• Chân RE1/ WR/AN6 (9): Xuất nhập số/ điều khiển ghi port song song/ngõ vào tương tự kênh thứ 6
• Chân RE2/ CS /AN7 (10): Xuất nhấp số/ Chân chọn lụa điều khiển portsong song/ ngõ vào tương tự kênh thứ 7
1.1.2.2 Một số đặc điểm của vi điều khiển PIC16F877A
Vi điều khiển PIC16F877A thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh
có độ dài 14 bit Mỗi lệnh đều được thực thi trong một chu kì xung clock Tốc
độ hoạt động tối đa cho phép là 20 MHz với một chu kì lệnh là 200ns Bộ nhớchương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệuEEPROM với dung lượng 256x8 byte Số PORT I/O là 5 với 33 pin I/O Có 8kênh chuyển đổi ADC
Các đặc tính ngoại vi bao gồm các khối chức năng sau:
- Timer 0: Bộ đếm 8 bit với bộ chia tần số 8 bit
- Timer 1: Bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năngđếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep
- Timer 2: Bộ đếm 8 bit với bộ chia tần số, bộ postcaler
- Hai bộ Capture/so sánh/điều chế độ rộng xung
Trang 18- Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C.
- Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ
- Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điềukhiển RD, WR
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
- Bộ nhớ flash với khả năng ghi xóa được 100.000 lần
- Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần
- Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm
- Khả năng tự nạp chương trình với sự điều khiển của phần mềm
- Nạp được chương trình ngay trên mạch điện ICSP (In Circuit SerialProgramming) thông qua 2 chân
- Watchdog Timer với bộ dao động trong
- Chức năng bảo mật mã chương trình
- Có thể hoạt động với nhiều dạng Oscillator khác nhau
Bảng 1.1 Bảng tóm tắt đặc điểm của vi điều khiển PIC 16F877A
Trang 19Đặc điểm PIC16F877A
Trang 20ứng TRIS (đối với PORT A là TRIS A, đối với PORT B là TRIS B, đối vớiPORT C là TRIS C, đối với PORT D là TRIS D và đối với PORT E là TRIS E).Bên cạnh đó PORT A còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vàoanalog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP(Master Synchronous Serial Port).
Các thanh ghi SFR liên quan đến PORT A bao gồm:
- PORT A (địa chỉ 05h): Chứa giá trị các pin trong PORT A
- TRIS A (địa chỉ 85h): Chứa giá trị các pin trong PORT A
- CMCON (địa chỉ 9Ch): Thanh ghi điều khiển bộ so sánh
- CVRCON (địa chỉ 9Dh): Thanh ghi điều khiển bộ so sánh điện áp
- ADCON1 (địa chỉ 9Fh): Thanh ghi điều khiển bộ ADC
PORT B
PORT B (RPB) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng
là TRISB Bên cạnh đó một số chân của PORT B còn được sử dụng trong quátrình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau PORT Bcòn liên quan đến ngắt ngoại vi và bộ Timer0 PORT B còn được tích hợp chứcnăng điện trở kéo lên được điều khiển bởi chương trình
Các thanh ghi SFR liên quan đến PORT B bao gồm:
- PORT B (địa chỉ 06h, 106h): Chứa giá trị các pin trong PORT B
- TRIS B (địa chỉ 86h, 186h): Điều khiển xuất nhập
- OPTION_REG (địa chỉ 81h, 181h): Điều khiển ngắt ngoại vi và bộTimer0
PORT C
PORT C (RPC) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng
là TRIS C Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh,
bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART.Các thanh ghi điều khiển liên quan đến PORT C:
- PORT C (địa chỉ 07h): Chứa giá trị các pin trong PORT C
- TRIS C (địa chỉ 87h): Điều khiển xuất nhập
PORT D
Trang 21PORT D (RPD) gồm 8 chân I/O, thanh ghi điều khiển xuất nhập tương ứng
là TRIS D PORT D còn là cổng xuất dữ liệu của chuẩn giao tiếp PSP (ParallelSlave Port)
Các thanh ghi liên quan đến PORT D bao gồm:
- Thanh ghi PORT D: Chứa giá trị các pin trong PORT D
- Thanh ghi TRIS D: Điều khiển xuất nhập
PORT E
PORT E (RPE) gồm 3 chân I/O Thanh ghi điều khiển xuất nhập tươngứng là TRIS E Các chân của PORT E có ngõ vào analog Bên cạnh đó PORT Ecòn là các chân điều khiển của chuẩn giao tiếp PSP
Các thanh ghi liên quan đến PORT E bao gồm:
- PORT E: Chứa giá trị các chân trong PORT E
- TRIS E: Điều khiển xuất nhập và xác lập các thông số cho chuẩn giaotiếp PSP
- ADCON1: Thanh ghi điều khiển khối ADC
1.1.3 ADC
ADC (Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạngtương tự và số PIC16F877A có 8 ngõ vào analog (RA4:RA0 và RE2:RE0).Hiệu điện thế chuẩn VREF có thể được lựa chọn là VDD, VSS hay hiệu điện thếchuẩn được xác lập trên hai chân RA2 và RA3 Kết quả chuyển đổi từ tín tiệutương tự sang tín hiệu số là 10 bit số tương ứng và được lưu trong hai thanh ghiADRESH: ADRESL Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này
có thể được sử dụng như các thanh ghi thông thường khác Khi quá trình chuyểnđổi hoàn tất, kết quả sẽ được lưu vào hai thanh ghi ADRESH:ADRESL, bit CS(ADCON0<2>) được xóa về 0 và cờ ngắt ADIF được set
Quy trình chuyển đổi từ tương tự sang số bao gồm các bước sau:
Bước 1: Thiết lập các thông số cho bộ chuyển đổi ADC:
- Chọn ngõ vào analog, chọn điện áp mẫu (dựa trên các thông số củathanh ghi ADCON1)
- Chọn kênh chuyển đổi ADC (thanh ghi ADCON0)
- Chọn xung clock cho kênh chuyển đổi ADC (thanh ghi ADCON0)
- Cho phép bộ chuyển đổi ADC hoạt động (thanh ghi ADCON0)
Trang 22Bước 2: Thiết lập các cờ ngắt cho bộ ADC:
Bước 3: Đợi cho tới khi quá trình lấy mẫu hoàn tất
Bước 4: Bắt đầu quá trình chuyển đổi (set bit GO DONE/ )
Bước 5: Đợi cho tới khi quá trình chuyển đổi hoàn tất bằng cách:
- Kiểm tra bit GO DONE/ Nếu GO DONE/ = 0, quá trình chuyển đổi
Trang 23Cần chú ý là có hai cách lưu kết quả chuyển đổi ADC, việc lựa chọn cáchlưu được điều khiển bởi bit ADFM và được minh họa cụ thể trong hình sau:
Hình 1.3 Các cách lưu kết quả chuyển đổi ADC
Các thanh ghi liên quan đến bộ chuyển đổi ADC bao gồm:
- INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép các ngắt (các bitGIE, PEIE)
- PIR1 (địa chỉ 0Ch): Chứa cờ ngắt ADC (bit ADIF)
- PIE1 (địa chỉ 8Ch): Chứa bit điều khiển ADC (ADIE)
- ADRESH (địa chỉ 1Eh) và ADRESL (địa chỉ 9Eh): Các thanh ghi chứakết quả chuyển đổi ADC
- ADCON0 (địa chỉ 1Fh) và ADCON1 (địa chỉ 9Fh): Xác lập các thông sốcho bộ chuyển đổi ADC
- PORTA (địa chỉ 05h) và TRISA (địa chỉ 85h): Liên quan đến các ngõvào analog ở PORTA
- PORTE (địa chỉ 09h) và TRISE (địa chỉ 89h): Liên quan đến các ngõvào analog ở PORTE
Ngoài các chức năng trên, vi điều khiển còn rất nhiều chức năng khác
1.2 LCD
LCD là viết tắt của Liquid Crystal Display (màn hình tinh thể lỏng) Cónhiều loại màn hình LCD khác nhau, ví dụ LCD 16x1, 16x2, 20x2,
Trang 24Hình 1.4 Hình dáng thực tế LCD 16x2.
Giống như led 7 đoạn, LCD là một thiết bị ngoại vi dùng để giao tiếp ngườidùng, so với led 7 đoạn thì LCD có ưu điểm là hiển thị được tất cả các kí tựtrong bảng mã ASCII, trong khi đó led 7 đoạn chỉ hiển thị được một số kí tự,nhưng LCD lại có nhược điểm là giá thành cao và khoảng cách nhìn gần
Hình 1.5 Sơ đồ chân của LCD 16x2
Bảng 1.2 Chức năng các chân của LCD
Trang 259 DB2 0/1 I/O Bus dữ liệu 2
- Chân RS (Regster select)
Khi ở mức thấp, chỉ thị được truyền đến LCD như xóa màn hình, vị trícon trỏ,… Khi ở mức cao, ký tự được truyền đến LCD
- Chân R/W (Read/ Write)
Dùng để phát hiện hướng của dữ liệu được truyền giữa LCD và viđiều khiển Khi nó ở mức thấp dữ liệu được ghi đến LCD và khi ở mứccao dữ liệu được đọc từ LCD Nếu chỉ cần ghi dữ liệu lên thì nối chân nàyxuống GND để tiết kiệm chân
- Chân E (Enable)
Cho phép truy nhập/xuất lên LCD thông qua chân RS và R/W Khichân E ở mức cao (1) LCD sẽ kiểm tra trang thái của 2 chân RS và R/W vàđáp ứng cho phù hợp Khi dữ liệu được cấp đến chân dữ liệu thì một xung
ở mức cao xuống thấp phải được cấp đến chân này để LCD chốt dữ liệutrên các chân dữ liệu Xung này phải rộng tối thiểu 450ns Còn khi chân E
ở mức thấp (0), LCD sẽ vô hiệu hóa hoặc bỏ qua tín hiệu 2 chân RS và R/W
- Các chân D0 - D7
Đây là 8 chân dữ liệu 8 bit, được dung để gửi lên LCD hoặc đọc nộidung của các thanh ghi trong LCD Các ký tự được truyền theo mã tươngứng trong mã ASCII Cũng có các mã lệnh mà có thể gửi đến LCD để xóamàn hình hoặc đưa ra con trỏ về đầu dòng hoặc nhấp nháy con trỏ
Trang 26Trước khi truyền ký tự ra màn hình LCD cần phải thiết lập LCD nhưchọn chế độ 4bit hay 8bit, 1 dòng hay 2 dòng, bật/tắt con trỏ…
Bảng 1.3 Bảng tập lệnh LCD
04 Giảm con trỏ (dịch con trỏ sang trái)
06 Tăng con trỏ (dịch con trỏ sang phải)
07 Dịch hiển thị sang trái
08 Tắt con trỏ, tắt hiển thị0A Tắt hiển thị, bật con trỏ0C Bật hiển thị, tắt con trỏ0E Bật hiển thị, nhấp nháy con trỏ0F Tắt con trỏ, nhấp nháy con trỏ
10 Dịch vị trí con trỏ sang trái
14 Dịch vị trí con trỏ sang phải
18 Dịch toàn bộ hiển thị sang trái1C Dịch toàn bộ hiển thị sang phải
80 Ép con trỏ về đầu dòng thứ nhấtC0 Ép con trỏ về đầu dòng thứ hai
Để đọc thanh ghi lệnh, phải đặt RS = 0 và R/W = 1 và xung caoxuống thấp cho bit E Sau khi đọc thanh ghi lệnh, nếu bit D7 (cờ bận) ởmức cao thì LCD bận, không có thông tin hay lệnh nào được xuất đến nó.Khi D7 = 0 mới có thể gửi lệnh hay dữ liệu đến LCD Cần kiểm tra bit cờ bậntrước khi ghi thông tin lên LCD
Trang 271.3 TDA 2030A
TDA2030A là một mạch nguyên khối tích hợp sẵn nằm trong góiPentawatt®, nhằm sử dụng như một bộ khuếch đại lớp AB tần số thấp Thôngthường nó cung cấp một công suất đầu ra 14W (d=0.5%) tại 14V/4; 14V hoặc28V, công suất đầu ra đảm bảo 12W trên tải 4Ω và 8W trên tải 8Ω
Hình 1.6 Hình ảnh thực tế TDA2030A
TDA2030A cho dòng ra cao có hài và méo chéo rất thấp Hơn nữa thiết bịkết hợp với một hệ thống bảo vệ ngắn mạch có khả năng tự động giới hạn côngsuất tiêu tán để giữ điểm làm việc trong vùng hoạt động an toàn Một hệ thốngngắt nhiệt thông thường cũng được đi kèm
Bảng 1.4 Bảng thông số tối đa của TDA2030A
Ptot Công suất tiêu tán tại Tcase = 90oC 20 W
Tstg , Tj Nhiệt độ lưu trữ và điểm nối - 40 đến 150 oCThông số nhiệt của TDA2030A:
Trang 28Bảng 1.5 Bảng thông số nhiệt của TDA2030A
Rth J – case Nhiệt kháng của junction-case max 3 oC/W
Vị trí chân:
Hình 1.7 Vị trí các chân của TDA 2030A
Chức năng các chân:
Chân 1: Chân không đảo ngược tín hiệu đầu vào
Chân 2: Chân đảo ngược tín hiệu đầu vào
Chân 3: Năng lượng đầu vào cuối (điện áp âm)
Chân 4: Điện đầu ra cuối cùng
Chân 5: Năng lượng đầu vào cuối (điện áp dương)
1.4 Phần mềm lập trình CCS
1.4.1 Giới thiệu về CCS C
CCS là trình biên dịch lập trình ngôn ngữ C cho vi điều khiển PIC của hãngMicrochip Chương trình là sự tích hợp của 3 trình biên dịch riêng biệt cho 3dòng PIC khác nhau đó là:
- PCB cho dòng PIC 12 bit opcodes
- PCM cho dòng PIC 14 bit opcodes
- PCH cho dòng PIC 16 và 18 bit
Tất cả 3 trình biên dịch này đuợc tích hợp lại vào trong một chương trìnhbao gồm cả trình soạn thảo và biên dịch là CCS
Trang 29Giống như nhiều trình biên dich C khác cho PIC, CCS giúp cho người sửdụng nắm bắt nhanh được vi điều khiển PIC và sử dụng PIC trong các dự án Cácchương trình điều khiển sẽ được thực hiện nhanh chóng và đạt hiệu quả caothông qua việc sử dụng ngôn ngữ lập trình cấp cao – Ngôn ngữ C.
CCS chứa rất nhiều hàm phục vụ cho mọi mục đích và có rất nhiều cáchlập trình mà cho cùng 1 vấn đề với tốc độ thực thi và độ dài chương trìnhkhác nhau Sự tối ưu là do kĩ năng lập trình của mỗi nhà lập trình
CCS cung cấp các công cụ tiện ích giám sát hoạt động chương trình như:+ C/ASM list: Cho phép mở ASM của file mà người lập trình biêndịch, giúp người lập trình quản lý và nắm rõ cách thức nó được sinh ra, làcông cụ rất quan trọng trong việc gỡ rối chương trình
+ SYMBOL: Hiển thị bộ nhớ cấp phát cho từng biến, giúp quản lý bộnhớ các biến của chương trình
#Bit
- Cú pháp: #bit name = x.y
Name: tên biến
X: biến C (8,16,32…bit) hay hằng số địa chỉ thanh ghi
Y: vị trí của bit trong x
Tạo biến 1 bit đặt ở byte x vị trí y tiện dùng kiểm tra hay gán giá trị chothanh ghi
Trang 30- Cú pháp: #define name text Name: tên biến
Text : chuỗi hay số
- Cú pháp: #use delay(clock = speed)
Speed: tốc độ dao động của thạch anh
Có chỉ thị này mới dùng được hàm delay_ms hoặc delay_us
#Use fast_io
- Cú pháp: #use fast_io(port)
Port : các cổng v_o ra của PIC (từ A-G)
Dùng chỉ thị này có thể điều chỉnh các port với chỉ 1 lệnh
1.4.3 Các hàm Delay
Delay_ms(time)
Time: giá trị thời gian cần tạo trễ
Delay_us(time)
Time: giá trị thời gian cần tạo trễ
Hàm delay này không sử dụng bất cứ Timer nào cả mà chỉ là 1 nhómlệnh vô nghĩa thực hiện trong khoảng thời gian đã định sẵn
Trước khi sử dụng các hàm này cần khai báo tiền định #use_delay( )
1.4.4 Các hàm vào ra trong CCS C
Output_low(pin) – Output_high(pin)
Thiết lập mức 0V hoặc 5V cho các chân của PIC
Output_bit(pin,value)
Pin: tên chân của PIC
Value: giá trị 0 hay 1
Output_X(value)
X: tên các port trên chíp
Value: giá trị 1 byte
Input_X()
Trang 31X: tên các port trên chip.
Hàm này trả giá trị 8 bit là giá trị hiện hữu của port đó
Thư viện hỗ trợ các hàm:
Bảng 1.6 Các hàm trong thư viện LCD của CCS
3 lcd_gotoxy(x,y) tự) tại x của dòng y (y=1 hoặc y=2)Đặt ví trí con trỏ (vị trí cần xuất ký
4 lcd_getc(x,y) Đọc về giá trị tại x của dòng y
5 lcd_cursor_on(int1 on) Bật ví trí con trỏ
Trang 32Trình biên dịch CCS đã cung cấp sẵn một số hàm để thiết lập và đo giá trịADC với PIC16F877A:
#device ADC = 8 để chọn độ phân giải của bộ ADC 8 bit (0-255).
#device ADC = 10 để chọn độ phân giải của bộ ADC 10 bit (0-1023).
• ADC_OFF: Tắt hoạt động ADC (tiết kiệm điện, dành chân cho hoạt động khác)
• ADC_CLOCK_INTERNAL: Thời gian lấy mẫu bằng xung clock IC (mất 2-6
us) thường là chung cho các chip
• ADC_CLOCK_DIV_2: Thời gian lấy mẫu bằng xung clock/2 (mất 0.4 us trên
thạch anh 20MHz)
• ADC_CLOCK_DIV_8: Thời gian lấy mẫu bằng xung clock/8 (1.6 us)
• ADC_CLOCK_DIV_32: Thời gian lấy mẫu bằng xung clock/32 (6.4 us)
Setup_ADC_ports (value)
Xác định chân lấy tín hiệu analog và điện thế chuẩn sử dụng Tùy thuộc
bố trí chân trên chip, số chân và chân nào dùng cho ADC và số chức năng ADCmỗi chip mà value có thể có những giá trị khác nhau Xem file tương ứng trongthư mục DEVICES để biết số chức năng tương ứng chip đó Sau đây là các giátrị cho value (chỉ dùng 1 trong các giá trị) của 16F877:
• ALL_ANALOGS: Dùng tất cả chân sau làm analog (Vref=Vdd)
• NO_ANALOG: Không dùng analog, các chân đó sẽ là chân I/O
• AN0: Dùng chân A0
• AN0_AN1_AN3: Dùng chân A0 A1 A3, Vref = Vdd
• AN0_AN1_VSS_VREF: Dùng chân A0 A1, Vrefh = A3
• AN0_AN1_AN4_VREF_VREF: Dùng chân A0 A1 A5, Vrefh = A3, Vrefl = A2
• AN0_AN1_VREF_VREF: Dùng chân A0 A1, Vrefh = A3, Vrefl = A2
• AN0_VREF_VREF: A0, Vrefh = A3 Vrefl = A2
Trang 33Ví dụ: setup_adc_ports (AN0_AN1_AN3 ); // A0, A1, A3 nhận analog,
áp nguồn +5V cấp cho IC sẽ là điện áp chuẩn
Read_ADC (mode)
Dùng đọc giá trị ADC từ thanh ghi/cặp thanh ghi, chứa kết quả biến đổiADC Lưu ý hàm này sẽ hỏi vòng cờ cho tới khi cờ này báo đã hoàn thành biếnđổi ADC (sẽ mất vài us) thì xong hàm
Nếu giá trị ADC là 8 bit như khai báo trong chỉ thị #DEVICE, giá trị trả
về của hàm là 8 bit, ngược lại là 16 bit nếu khai báo #DEVICE sử dụng ADC 10bit trở lên
Khi dùng hàm này, nó sẽ lấy ADC từ chân được chọn trong hàmSet_ADC_channel () trước đó Nghĩa là mỗi lần chỉ đọc 1 kênh Muốn đổi sangđọc chân nào dùng hàm set_ADC_channel() lấy chân đó Nếu không có đổi chândùng read_ADC() bao nhiêu lần cũng được
Mode có thể có hoặc không, gồm có:
• ADC_START_AND_READ: Giá trị mặc định
• ADC_START_ONLY: Bắt đầu chuyển đổi và trả về
• ADC_READ_ONLY: Đọc kết quả chuyển đổi lần cuối
#DEVCE 8 bit 10 bit 11 bit 16 bit
Trang 34Hàm này được dùng để xuất một chuỗi theo chuẩn RS232 hoặc theo mộthàm xác định Dữ liệu được định dạng phù hợp với đối số của chuỗi Các địnhdạng dữ liệu như sau:
Bảng 1.7 Mã định dạng dữ liệu của hàm printf()
- Cú pháp:
printf(string)printf(cstring, values )printf(fname, cstring, values )
- Tham số:
String là một chuỗi hằng hoặc một mảng ký tự không xác định.Values là danh sách các biến phân cách nhau bởi dấu “,”