Рефераты. Разработка измерителя температуры жидкости

–                   Генератор с внешним резонатором;

–                   Генератор с внутренней RC-цепочкой;


Наиболее предпочтительным в данном блоке является генератор с внешним резонатором т. к. он позволяет задавать любую тактовую частоту, которая зависит только от кварцевого резонатора, на которой может работать микроконтроллер. Это стабильный генератор с точной выдержкой частоты генерации.

Использование внешнего генератора требует наличия дополнительной аппаратуры.

Генератор с внутренний и внешний RC-цепочкой не гарантирует стабильность частоты.

На рисунке 2.2 приведена схема включения тактового генератора.


Рисунок 2.2 – Схема включения тактового генератора с внешним резонатором.

2.3Схема сброса


На рисунке 2.3 приведена аппаратная схема сброса по включению питания. Данная схема необходима для первичной инициализации аппаратуры микроконтроллера.


Рисунок 2.3 – Аппаратная схема сброса по включению.

2.4 Схема подключения цифрового термометра

Для подключения цифрового термометра используется три порта ввода/вывод. На рисунке 2.4 приведена схема включения термометра.


Рисунок 2.4 – Схема включения термометра


Функциональная схема приведена на рисунке 2.5


Рисунок 2.5 – Функциональная схема DS1620.


2.5 Схема подключения ЖКИ


ЖКИ подключен к микроконтроллеру AT90S1200 с помощью 8-ми разрядной шиной.


Рисунок 2.6 – Схема подключения ЖКИ.


Алфавитно-цифровые ЖКИ - модули представляют собой недорогое и удобное решение, позволяющее сэкономить время и ресурсы при разработке новых изделий, при этом обеспечивают отображение большого объема информации при хорошей различимости и низком энергопотреблении. Возможность оснащения ЖКИ - модулей задней подсветкой позволяет эксплуатировать их в условиях с пониженной или нулевой освещенностью, а исполнение с расширенным диапазоном температур (-20°С...+70°С) в сложных эксплуатационных условиях, в том числе в переносной, полевой и даже, иногда, в бортовой аппаратуре.

В соответствии с временной диаграммой в исходном состоянии сигнал Е = 0, сигнал R/W = 0, значение сигнала RS - произвольное, шина данных DBO...DB7 в состоянии высокого импеданса (НI). Такое состояние управляющих сигналов (E и R/W) должно поддерживаться все время в промежутках между операциями обмена с ЖКИ-модулем. Шина данных в эти моменты в принципе свободна, и может использоваться в мультиплексном режиме для каких-либо других целей, например, для сканирования матрицы клавиатуры. Естественно, необходимо позаботиться об исключении конфликтов на шине данных в момент совершения операций обмена с ЖКИ-модулем.

Последовательности действий, которые необходимо выполнять управляющей системе при совершении операций записи и чтения для 8-ми разрядной шины приведены соответственно в таблицах  1, 2. Для нормальной работы ЖКИ необходимо сформировать временные диаграммы приведенные на рисунках 2. 7 и 2.8

Таблица 1. Операции записи для 8-ми разрядной шины

Установить значение линии RS

Вывести значение байта данных на линии шины DB0...DB7

Установить линию Е = 1

Установить линию У = 0

Установить линии шины DB0...DB7 = HI

Таблица 2. Операции чтения для 8-ми разрядной шины

Установить значение линии RS

Установить линию R/W = 1

Установить линию Е = 1

Считать значение байта данных с линий шины DB0...DB7

Установить линию Е = 0

Установить линию R/W = 0


Рисунок 2.7 – Временная диаграмма операции записи

 

Рисунок 2.8 – Временная диаграмма операции чтения

2.6 Схема стабилизатора напряжения


Стабилизатор напряжения построен на микросхеме фирмы LM7805. Напряжение стабилизации 5V. На рисунке 2.9 приведена схема включения стабилизатора.


Рисунок 2.9 – Схема включения стабилизатора.


Особенностью данного стабилизатора является большой разброс напряжений подаваемых на вход, простая схема включения, большие токи нагрузки.


3.                 Проектирование программного обеспечения микроконтроллера


3.1 Разработка алгоритма программы

Рисунок 3.1 – Алгоритм функционирования цифрового термометра.

3.2 Проектирование процедур управления периферийными устройствами


Разрабатываемое устройство выполняет следующие операции:

a.                  Запрос текущей температуры

b.                 Обработка полученной информации.

#define ENABLE_BIT_DEFINITIONS

#include <tiny2313.h>

#include "ctype.h"

#include "stdlib.h"

#define PrescalerTmr0 4                            // timer0 counts clk/256

// OscFrq 7342800                                  osc frequency in Hz

// OscPeriod 1/OscFrq * 1000000000 =  136.1878     osc Period in ns

//Tmr0ClkPeriod = OscPeriod*256 = 34864.07         Timer0 Clk Period in ns

//Tmr0_Interval = 1000000                          timer0 overflow interval in ns (1ms=1000000ns)

//Tmr0_Ticks = Tmr0_Interval/Tmr0ClkPeriod = 28,68 timer0 steps for 1 ms delay

#define Tmr0_Reload   256 - 29                     // timer0 Reload value for 1 ms

#define TOIE0   0

//==CircularBuffer

#define CircBufLen 32

unsigned char CircBuf[CircBufLen];

unsigned char CircBufHead = 0;

unsigned char CircBufTail = 0;

//==GlobalVariables

unsigned int Var2 = 0;

//==Declare external functions

void DisplayInit(void); // Инициализация индикатора

void SendDataToDisplay(unsigned char Data, unsigned char Mode);


//==Declare internal functionsunsigned char CircBufGet(void);

void CircBufPut (unsigned char data);

//==VirtualTimerVariables

unsigned char Tmr0Flag = 0;

unsigned char TmrCnt[2];

unsigned char TmrPreLoad[2];

unsigned char TmrFlag[2]={0,0};

//0    - timer disabled

//0x01 - timer is started and counting, not reloadable

//0x81 - counting, reloadable

//0x02 - ready, stopped

//0x83 - ready, reloaded, counting

3.3 Проектирование процедуры инициализации аппаратуры микроконтроллера


Процедура инициализации производит настройку: портов ввода/вывода, периферийных аппаратных устройств, а так же внешних устройств которые требуют инициализации.

//== Port Initialisation ===============

void Init(void)

{

DDRD = 0xf0; //PD3-PD0 as input

PORTD = 0xff; //Turn ON PullUP for PortB pins

DDRB = 0xff;      //Port B pins as output

PORTB = 0x00;

}

//== Virtual Timer Initialisation ==========

void InitTimers(void)

//=================================

char TimeDelay_us(char x)  //near 1us time delay

{

char i,j,k,n;

j=1;

for (i=0;i<x;i++)

{

k=j+1;

n=k-j;

}

return n;

}

//== Circular Buffer Write =====================

void CircBufPut (unsigned char data)

{

unsigned char tmphead;

tmphead = CircBufHead + 1;

if (tmphead>=CircBufLen)

{

tmphead=0;

}

CircBuf[tmphead] = data;

CircBufHead = tmphead;

}

//== Circular Buffer Read ==========

unsigned char CircBufGet(void)

{

unsigned char tmptail;

if (CircBufHead != CircBufTail)

{

tmptail=CircBufTail+1;

if (tmptail>=CircBufLen)

{

tmptail=0;

}

CircBufTail = tmptail;

return CircBuf[tmptail];

}

else

{

return 0;

}

}


3.4 Инициализация цифрового термометра DS1620


char DS1620Init(void)

TimeDelay_us(20);

void DS1620WriteBit(char Value)

void DS1620WriteByte(char data)

{

char loop, CurrentBit;

for (loop = 0; loop < 8; loop++)  // Loop to write each bit in the byte, LS-bit first

{

CurrentBit = data & 0x01;

DS1620WriteBit(CurrentBit);

data >>= 1; // shift the data byte for the next bit

}

}

char DS1620ReadBit(void)

DDRD

//==

char DS1620ReadByte(void)

{

char loop, result=0, CurrentBit;

for (loop = 0; loop < 8; loop++)

{

result >>= 1; // shift the result right to get it ready for the next bit

CurrentBit = DS1620ReadBit();

if (CurrentBit != 0) // if result is one, then set MS bit

}

return result;

}


3.5 Инициализация и настройка ЖКИ


#include <tiny2313.h>

/*

#define LCD_E PORTC_Bit4

#define LCD_RW PORTC_Bit5

#define LCD_RS PORTC_Bit6

#define LCD_DATA PORTC

#define LCD_PIN PINC

#define LCD_DDR DDRC

*/

#define E PORTD.2

#define WR PORTD.1

#define RS PORTD.0

#define LCD_DATA PORTD

#define LCD_PIN PIND

#define LCD_DDR DDRD

#define CLRBIT(ADDR, BIT)       (ADDR |= (1<<BIT))

#define SETBIT(ADDR, BIT)       (ADDR &= ~(1<<BIT))

char ini_cmd[]={0x03,0x03,0x03,0x02,0x02,0x0d,0x00,0x0d,0x00,0x01,0x00,0x06};

//==================================

void Delay(int i)  // программная задержка

{

while(--i>0x00);

}

//===============================

void SendDataToDisplay(unsigned char Data, unsigned char Mode)

{

//PORTB - 8bit Data

/*PORTD - PD0 - RS

PD1 - RW

PD2 - E */

CLRBIT(PORTD,E);

if (Mode)

SETBIT(PORTD,RS);

else

CLRBIT(PORTD,RS);

PORTB = Data;

CLRBIT(PORTD,WR);

SETBIT(PORTD,E);

Delay(4);

CLRBIT(PORTD,E);

}

//========================

void DisplayInit(void)

{

Delay(30);

SendDataToDisplay(0x30,1); //режим работы дисплея – ширина шины данных 8 бит

Delay(5);

SendDataToDisplay(0x30,1);

Delay(1);

SendDataToDisplay(0x30,1);

SendDataToDisplay(0x38,1); // шина данных 8 бит

//размер развертки 2 строки

//размер матр. Символов – 5х10

SendDataToDisplay(0x08,1); //выкл. Наличие изображения

SendDataToDisplay(1,1);    //очистка экрана

SendDataToDisplay(0x6,1);  //счетчик адреса настроить на увеличение

SendDataToDisplay(0xC,1);  //вкл. изображение

}

unsigned char ReadDatafromDisplay(unsigned char Mode)


3.6 Проектирование процедуры Main()


Процедура Main(), является основной исполняемой процедурой из которой начинается выполнение программы. Поэтому все действии нужно выполнять в этой процедуре.

В начале процедуры необходимо разместить вызовы процедур инициализации.

Опрос термометра производим постоянно в бесконечном цикле.

В остальное время отображение температуры на ЖК-индикаторе.

//== Main Procedure

void main(void)

{

int Cels1;

char Cels,Ready;

//  unsigned int x;

Init();

InitTimers();

DisplayInit();    // lcd.c is needed!

while (1)

{

//--Virtual timer0 is used for LCD display--

if ((TmrFlag[0] & 0x02) != 0)

{

TmrFlag[0] &= ~(0x02);

{

unsigned char data;

data=CircBufGet();

while (data != 0)

{

SendDataToDisplay(data,0);  // lcd.c is needed!

data=CircBufGet();

}

}

}

//--Virtual timer1 is used to read a keypad--

if ((TmrFlag[1] & 0x02) != 0)

{

TmrFlag[1] &= ~(0x02);

//Запустить измерение

DS1620Init();

DS1620WriteByte(0xee);  //начать преобразование

//проверить готовность измерения

Ready = 0;

while (!Ready)

{

DS1620Init();

DS1620WriteByte(0xac); //read status

Cels = DS1620ReadByte();

if(Cels & 0x80)

{

Ready = 1;

}

else

{

Ready = 0;

}

}

//прочесть результат измерения

DS1620Init();

DS1620WriteByte(0xaa); //read temperature

Cels = DS1620ReadByte();

Cels1 = (int) Cels;

CircBufPut(Cels1);

}

}

}

//==Timer0 Interrupt Routine

interrupt [TIM0_OVF] void TIMER0_OVF_interrupt(void)

{

unsigned char i;

TCNT0=Tmr0_Reload;

for (i=0;i<2;i++)

{

if((TmrFlag[i] & 0x01) != 0)    // If counting bit set - serve this timer!

{

if(TmrCnt[i]==0)              // If counter is empry - serve this overflow!

{

TmrFlag[i] |= 0x02;         // Set timer overflow bit

if(TmrFlag[i] & 0x80)       // If Reload bit is set - reload this timer!

{

TmrCnt[i]=TmrPreLoad[i];  // Reload counter

}

else

{

TmrFlag[i] &= ~0x01;      // Clear counting bit

}

}

else

{

TmrCnt[i]--;

}

}

}

}


4.                 Рекомендации по разработке программных  и аппаратных диагностических средств для проверки работоспособности устройства


Данное устройство должно осуществлять измерение температуры. Для проверки рекомендуется использовать термостат.

Датчик термометра (DS1620) необходимо поместить в термостат и установить температуру активной зоны 20 °С. Произвести замер температуры по индикатору. Далее аналогичные действия произвести для температур 75°С и 125°С. Если показания отличаются от заданных то произвести расчет погрешности и внести корректировку в программу обработки температуры.


5.                 Проектирование печатной платы устройства


В пакет OrCAD входит программа Layout. Она позволяет производить разводку печатных плат, как в автоматическом режиме, так и в ручном.

Произведем разводку печатной платы нашего устройства. Для этого мы создадим схему в OrCADe.

Перед разводкой платы необходимо чтобы:

–                   не было «висячих» проводов;

–                   все выводы выходящие с платы подключены к разъемам.

В данной схеме не установлен выходной разъем на все исходящие выводы, в связи с тем, что данная схема является частью одного устройства и другие элементы не указаны на схеме.

В результате моделирования мы получили плату,  приведенную в приложении Б. Ее следует изготовить из фольгированного стеклотекстолита толщиной  1…1.5 мм. Все отверстия на плате должны быть металлизированы.


Заключение


В данном курсовом проекте произведено проектирование цифрового термометра с возможностью отображения температуры на ЖК индикаторе. Данное устройство обладает высокой скоростью измерения, широким  диапазоном измерения температуры.

Также имеет малые габариты, вес, и обладает низким энергопотреблением.


Страницы: 1, 2



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.