Завдання:
Виміряти значення напруги на виході потенціометра з допомогою АЦП реалізованого на базі ЦАП згідно варіанту та відобразити виміряне значення на рідкокристалічному дисплеї;
№ варіанту |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
Тип ЦАП |
MAX504 |
MAX515 |
MAX517 |
MAX518 |
MAX519 |
MAX5820 |
MAX5821 |
MAX5822 |
MAX5839 |
MCP4725 |
Порядок виконання роботи
Розробити та скласти схему пристрою.
Написати та відлагодити програму роботи мікроконтролера.
Запрограмувати мікроконтролер.
Перевірити функціонування схеми.
Оформити звіт.
Приклад схеми
Приклад програми на С51
Файл main.c
#include <REGX52.H>
#include <stdio.h>
#include "iic_mast.h"
sbit comparator_out=P0^5;
bit comparator_off;
#define DAC_bits 8
#define Uref 5
float u;
unsigned char volt_pos;
void delay(unsigned int n);
/*-----------------------------------*/
#include "lcd.h"
/*-----------------------------------*/
void main(void)
{
unsigned char tt,n,nt;
sda=1;
scl=1;
write(0x58,0,0);
delay(2);
comparator_off=comparator_out;
init_LCD();
printf("\nLab N3 Example ");
volt_pos=print_ram_adres_lcd;
while(1)
{
n=0;
nt=0;
for(tt=0;tt<DAC_bits;tt++)
{
n=1<<(DAC_bits-tt);
nt=nt|n;
write(0x58,0,nt);
delay(3);
if(comparator_out!=comparator_off)nt=nt&(~n);
}
u=(float)Uref/(1<<DAC_bits)*nt;
print_ram_adres_lcd = volt_pos;
printf("N=%bX U=%.3f",nt,u);
}
}
/*-----------------------------------*/
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<500;j++);
}
/*-----------------------------------*/
Файл iic_mast.h
#include<intrins.h>
/*------------------------*/
sbit sda=P0^7;
sbit scl=P0^6;
/*------------------------*/
void start_condition(void)
{
sda=1;scl=1;
if((sda)&&(scl))
{
_nop_();
sda=0;
_nop_();_nop_();
_nop_();_nop_();_nop_();
scl=0;
}
}
/*------------------------*/
void stop_condition(void)
{
sda=0;
_nop_();_nop_();
scl=1;
_nop_();_nop_();
_nop_();_nop_();_nop_();
sda=1;
}
/*------------------------*/
void ACK(void)
{
sda=0;
_nop_();_nop_();
scl=1;
_nop_();_nop_();
_nop_();_nop_();
scl=0;
}
/*------------------------*/
void NAK(void)
{
sda=1;
_nop_();_nop_();
scl=1;
_nop_();_nop_();_nop_();_nop_();
scl=0;
}
/*------------------------*/
unsigned char rbyte(void)
{
unsigned char tt,c=0,cc;
sda=1;
for(tt=0;tt<8;tt++)
{
_nop_();_nop_();_nop_();
scl=1;
_nop_();_nop_();
if(sda)cc=(1<<7-tt);
c=c|cc;
scl=0;
}
return c;
}
/*------------------------*/
unsigned char wbyte(unsigned char dd)
{
unsigned char tt=0;
unsigned char a,i;
sda=0;
for(i=0;i<8;i++)
{
a=dd&(1<<(7-i));
if(a)sda=1;
else sda=0;
_nop_();
scl=1;
_nop_();_nop_();
_nop_();_nop_();
scl=0;
}
sda=1;
_nop_();_nop_();
scl=1;
_nop_();_nop_();
_nop_();_nop_();
if(sda)tt=1;
scl=0;
return tt;
}
/*------------------------*/
unsigned char read(unsigned char device,unsigned char address)
{
unsigned char t;
start_condition();
t=device&0xFE;
wbyte(t);
wbyte(address);
start_condition();
t=device|(0x01);
wbyte(t);
t=rbyte();
NAK();
stop_condition();
return t;
}
/*------------------------*/
void write(unsigned char device,unsigned char address,unsigned char dd)
{
start_condition();
wbyte(device&0xFE);
wbyte(address);
wbyte(dd);
stop_condition();
}
/*------------------------*/
Робота схеми
Лабораторна робота № 4
Тема: Реалізація системи автоматичного регулювання.
Мета: Ознайомлення з роботою систем автоматичного регулювання зі зворотнім зв’язком.
