You are on page 1of 14

Tên : Huỳnh Anh Khôi BÁO CÁO TUẦN 7

MSSV:2105130095 ADC, PWM


Nhóm : 7

Bài 1: (Mô phỏng, thực tế) Mô phỏng, lắp ráp sử dụng PIC16F877A và viết chương trình để thực hiện các
yêu cầu sau:

 Cấu hình phần cứng: Một biến trở được nối tới chân analog RA2 hoặc RA3, một LCD được nối với Port
D của PIC.  Đọc giá trị ADC từ biến trở, và hiển thị lên hàng 1 LCD.

 Chuyển đổi giá trị ADC đọc được sang điện áp, và hiển thị giá trị điện áp lên LCD.

 Chú ý: dùng VOM để kiểm tra giá trị điện áp tại chân vừa mới đọc ADC.

#include <adc_pwm_thvxl.h>
#define LCD_ENABLE_PIN PIN_d2 ////
#define LCD_RS_PIN PIN_d0 ////
#define LCD_RW_PIN PIN_d1 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int16 val1,val2;
float gt1,gt2;
void bai1()
{
set_adc_channel(2);
delay_us(10);
val1 =read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
gt1 = (val1*5/1023.0);
lcd_gotoxy(12,1);
printf(lcd_putc,"%f",gt1);
}
void main()
{
lcd_init();
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
while(TRUE)
{
Bai1();
}
}

Bài 2: (Mô phỏng, thực tế) Mô phỏng, lắp ráp sử dụng PIC16F877A và viết chương trình để thực hiện các
yêu cầu sau:

 Cấu hình phần cứng: Hai biến trở được nối tới chân analog RA2 ,RA3, một LCD được nối với Port D của
PIC.

 Đọc giá trị ADC, và hiển thị lên LCD.

 Chuyển đổi giá trị ADC đọc được sang điện áp, và hiển thị giá trị điện áp lên LCD.

#include <adc_pwm_thvxl.h>
#define LCD_ENABLE_PIN PIN_d2 ////
#define LCD_RS_PIN PIN_d0 ////
#define LCD_RW_PIN PIN_d1 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int16 val1,val2;
float gt1,gt2;
#include <adc_pwm_thvxl.h>
void bai2()
{
set_adc_channel(2);
delay_us(10);
val1 =read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
gt1 = (val1*5/1023.0);
lcd_gotoxy(12,1);
printf(lcd_putc,"%f",gt1);

set_adc_channel(3);
delay_us(10);
val2 =read_adc();
lcd_gotoxy(1,2);
printf(lcd_putc,"val2=%4lu",val2);

gt2 = (val2*5/1023.0);
lcd_gotoxy(12,2);
printf(lcd_putc,"%f",gt2);
}
void main()
{
lcd_init();
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
while(TRUE)
{
Bai2();
}
}
Bài 3: Viết chương trình nhấn các nút kết nối chân RA0, giá trị analog nút nhấn hiển thị ra LCD ở hàng
trên. Hàng dưới hiển thị tên nút đang nhấn (RIGHT, UP, DOWN, LEFT, SELECT).

#include <adc_pwm_thvxl.h>
#define LCD_ENABLE_PIN PIN_d2 ////
#define LCD_RS_PIN PIN_d0 ////
#define LCD_RW_PIN PIN_d1 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int16 val1,val2;
float gt1,gt2;
void bai3()
{

set_adc_channel(0);
delay_us(10);
val1 =read_adc();
if(val1==0)
{
LCD_PUTC('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
lcd_gotoxy(1,2);
lcd_putc("RIGHT");
}
else if(val1==254)
{
LCD_PUTC('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
lcd_gotoxy(1,2);
lcd_putc("UP");
}
else if(val1==584)
{
LCD_PUTC('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
lcd_gotoxy(1,2);
lcd_putc("DOWN");
}
else if(val1==716)
{
LCD_PUTC('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
lcd_gotoxy(1,2);
lcd_putc("LEFT");
}
else if(val1==787)
{
LCD_PUTC('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"val1=%4lu",val1);
lcd_gotoxy(1,2);
lcd_putc("SELECT");
}
}
void main()
{
lcd_init();
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
while(TRUE)
{
bai3();
}

}
Bài 4: Mô phỏng, lắp ráp sử dụng PIC16F877A và viết chương trình để thực hiện các yêu cầu sau:

 Cấu hình phần cứng: Một cảm biến LM35 được nối tới chân analog bất kỳ, một LCD được nối với Port D
của PIC.

 Đọc giá trị cảm biến, quy đổi sang nhiệt độ và hiển thị nhiệt độ lên LCD.

 Hiển thị thêm trạng thái tương ứng với khoảng nhiệt độ:

o Nhiệt độ>35 : Quá Nóng

o 25< Nhiệt độ < 35 : Bình thường

o Nhiệt độ < 25 : Lạnh.

float nhietdo=0; int16 value1;


void main()
{
lcd_init();
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports (ALL_ANALOG);
lcd_putc('\f');
while(TRUE)
{
//setup_adc_ports (AN0_AN1);
set_adc_channel(0);
delay_us(10);
int16 value1 = 0;
value1=read_adc();
nhietdo=value1/2.046;
lcd_gotoxy(1,1);
printf(lcd_putc,"NHIET DO = %.0f",nhietdo);
lcd_gotoxy(14,1);
lcd_putc(0XDF);
lcd_gotoxy(15,1);
lcd_putc("C");
if (nhietdo>35)
{
lcd_gotoxy(1,2);
lcd_putc(" Qua nong ");
}
if (nhietdo<25)
{
lcd_gotoxy(1,2);
lcd_putc(" Lanh sml ");
}
if (nhietdo<35&& nhietdo>25)
{
lcd_gotoxy(1,2);
lcd_putc("Binh thuong");
}
}
}
Bài 5: (Mô phỏng và thực nghiệm) PWM

Mô phỏng, lắp ráp sử dụng PIC16F877A và viết chương trình để thực hiện các yêu cầu sau:

 Cấu hình phần cứng: Một biến trở được nối tới chân analog RA2, một LCD được nối với Port D của PIC,
một led đơn nối với chân RC2.

 Đọc giá trị ADC của biến trở và hiển thị giá trị này lên LCD.

 Độ sáng đèn phụ thuộc vào giá trị ADC của biến trở, ADC càng lớn thì đèn sáng mạnh.

 Cho biết tần số xung xuất ra để thỏa mãn yêu cầu trên?

#include <adc_pwm_thvxl.h>
#define LCD_ENABLE_PIN PIN_d2 ////
#define LCD_RS_PIN PIN_d0 ////
#define LCD_RW_PIN PIN_d1 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int16 val1,val2;
float gt1,gt2;
void bai5()
{
set_adc_channel(2);
delay_us(10);
val1 =read_adc();
lcd_gotoxy(1,1);
printf(lcd_putc,"PWM: %4lu",val1);
set_pwm1_duty(val1);
}
void main()
{
lcd_init();
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
while(TRUE)
{
Bai5();
}
}
Bài 6: (Mô phỏng và thực nghiệm) PWM

Mô phỏng, lắp ráp sử dụng PIC16F877A và viết chương trình để thực hiện các yêu cầu sau:

 Cấu hình phần cứng:

o Nhận lệnh:  1 nút nhấn có chức năng đảo chiều động cơ. (SW1-đảo chiều)  2 nút nhấn giúp tăng
giảm tốc độ động cơ.(SW2- tăng tốc; SW3-giảm tốc)

o Chấp hành  Các chân IN1 và IN2 của module L298 được nối tới các chân bất kỳ  Chân ENA nối với
chân CCP1

o Hiển thị:  Một LCD được nối với Port D của PIC.

 Chức năng:

o Động cơ được điều khiển qua các nút nhấn. Bấm SW1 thì động cơ đảo chiều, còn tốc độ động cơ phụ
thuộc vào sw2 và sw3

o LCD hiển thị thông tin về chiều quay và tốc độ của động cơ.

(Lưu ý: ta coi tốc độ của động cơ tương ứng với số PWM xuất ra, PWM lớn thì tốc độ động cơ càng tăng).

#include <adc_pwm_thvxl.h>
#define LCD_ENABLE_PIN PIN_d2 ////
#define LCD_RS_PIN PIN_d0 ////
#define LCD_RW_PIN PIN_d1 ////
#define LCD_DATA4 PIN_D4 ////
#define LCD_DATA5 PIN_D5 ////
#define LCD_DATA6 PIN_D6 ////
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int i=0;
int16 val1,val2,dc;
float gt1,gt2;
#INT_EXT
void EXT_isr(void)
{
output_toggle(PIN_C0);
output_toggle(PIN_C1);
i++;
if(i==2) i=0;
}
void bai6()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"Chieu quay: %d",i);
lcd_gotoxy(1,2);
printf(lcd_putc,"PWM: %4lu",dc);
set_pwm1_duty(dc);
if(input(pin_b4)==0)
{
while(input(pin_b4)==0);
dc=dc+10;
}
if(input(pin_b5)==0)
{
while(input(pin_b5)==0);
dc=dc-10;
}
}
void main()
{
lcd_init();
clear_interrupt(INT_EXT);
enable_interrupts(INT_EXT_H2L);
enable_interrupts(GLOBAL);
setup_timer_2(T2_DIV_BY_16, 255, 1);
setup_ccp1(CCP_PWM);
dc=500;
output_high(pin_C0);
output_low(pin_C1);
while(TRUE)
{
bai6();
}

You might also like