Смекни!
smekni.com

Реализация цифрового термометра на основе микроконтроллера ATmega 128 (с использовнием термодатчика DS18B20) (стр. 3 из 4)

Преимущества 1-Wire-технологии:

простое и оригинальное решение адресуемости абонентов,

несложный протокол,

простая структура линии связи,

малое потребление компонентов,

легкое изменение конфигурации сети,

значительная протяженность линий связи,

исключительная дешевизна всей технологии в целом.

Ведомые однопроводные компоненты, содержащие 1-Wire-интерфейс, выпускаются в двух различных видах. Либо в корпусах MicroCAN, похожих внешне на дисковый металлический аккумулятор, либо в обычных корпусах для монтажа на печатную плату.

Однако наиболее популярными ведомыми компонентами 1-Wire, на базе которых реализовано, пожалуй, наибольшее количество однопроводных приложений, безусловно, являются цифровые термометры типа DS1820. Преимущества этих цифровых термометров с точки зрения организации магистрали, по сравнению с любыми другими интегральными температурными сенсорами, а также неплохие метрологические характеристики и хорошая помехоустойчивость, уже на протяжении полутора десятков лет неизменно выводят их на первое место при построении многоточечных систем температурного контроля в диапазоне от - 55°С до125°С. Они позволяют не только осуществлять непосредственный мониторинг температуры в режиме реального времени, но и благодаря наличию встроенной энергонезависимой памяти температурных уставок, могут обеспечивать приоритетную оперативную сигнализацию в 1-Wire-линию о факте выхода контролируемого параметра за пределы заданных значений. Также поставляются более совершенные термометры DS18В20, у которых скорость преобразования определяется разрядностью результата, программируемой непосредственно по 1-Wire-линии. Цифровой код, считываемый с такого термометра, является прямым результатом измеренного значения температуры и не нуждается в дополнительных преобразованиях. Российской фирмой Rainbow Technologies получен сертификат Госстандарта России об утверждении однопроводных цифровых термометров DS1822, DS18B20, DS18S20, DS1920, производимых концерном Dallas/Maxim Integrated Products, в состав которого входит фирма Dallas Semiconductor, в качестве средств измерения. В подтверждение этого факта имеется документ о том, что данные типы приборов зарегистрированы в Государственном реестре средств измерений и допущены к применению в Российской Федерации.

2. Конструкторская часть

2.1 Общие сведения. Функциональное назначение используемых программ

Для выполнения курсовой работы были использованы следующие программные средства: компилятор языка С для микроконтроллеров AVR (CodeVisionAVR), генератор начального кода программы CodeWizard AVR с необходимой конфигурацией периферии МК (AVR Studio).

CodeVision AVR представляет собой кросс-компилятор языка С, графическую оболочку и автоматический генератор шаблонов программ, ориентированные на работу с семейством микроконтроллеров AVR фирмы Atmel.

Программа представляет собой 32-разрядное приложение для работы в операционных системах Windows 95, 98, Me, NT4.0, 2000, XP.

Кросс-компилятор включает в себя практически все элементы, соответствующие стандарту ANSI. Кроме того, в компилятор включены дополнительные возможности, ориентированные на использование архитектурных особенностей микроконтроллеров AVR и встроенных систем в целом.

Объектные файлы COFF позволяют осуществлять отладку программ с просмотром содержимого переменных. Для этого следует применять свободно распространяемый фирмой Atmel (www.atmel.com) отладчик AVR Studio.

Для отладки систем, использующих последовательную передачу данных, в графической оболочке имеется встроенная программа Terminal.

Кроме стандартных библиотек языка С, компилятор имеет библиотеки для работы с:

ЖКИ индикаторами со встроенным контроллером;

шиной I2C фирмы Philips;

датчиком температуры LM75 фирмы National Semiconductor;

часами реального времени PC8536 и PC8583 фирмы Philips, DS1302 и DS1307 фирмы Dallas Semiconductor;

однопроводным протоколом фирмы Dallas Semiconductor;

датчиками температуры DS1820 и DS1822 фирмы Dallas Semiconductor;

датчиком температуры/термостатом DS1621 фирмы Dallas Semiconductor;

памятью EEPROM DS2430 и DS2433 фирмы Dallas Semiconductor;

шиной SPI;

управлением режимами пониженного потребления энергии;

временными задержками;

преобразованием кодов Грэя.

В CodeVision AVR имеется автоматический генератор шаблонов программ, который позволяет в течение считанных минут получить готовый код для следующих функций:

настройка доступа к внешней памяти;

определение источника прерывания Reset;

инициализация портов ввода/вывода;

инициализация внешних прерываний;

инициализация таймеров/счетчиков;

инициализация сторожевого таймера;

инициализация UART;

инициализация аналогового компаратора;

инициализация встроенного АЦП;

инициализация интерфейса SPI;

инициализация поддерживаемых библиотеками CodeVision AVR микросхем, работающих с однопроводным интерфейсом и шиной I2C;

инициализация модуля ЖКИ со встроенным контроллером.

Кроме того, среда CodeVision AVR включает в себя программное обеспечение для работы с различными AVR-программаторами. После компиляции исходной программы на языке С полученный код может быть сразу записан в память программ микроконтроллера.

2.2 Реализация

Основные компоненты:

1. Микроконтроллер ATmega128

2. Датчик температура DS18B20

3. ЖКИ

Выделим следующие этапы в разработке программного обеспечения термометра:

1. Получение данных с датчика.

2. Передача данных на ЖКИ.

3. Обработка прерывания.

4. Передача данных на ЖКИ.

1. Получение данных с датчика:

Данные получаем с температурного датчика DS18B20, подключенного на порт В.

2. Передача данных на ЖКИ:

Данные выводим на ЖК индикатор, подключенный на порт А.

3. Обработка прерывания:

Промежуток между измерениями 500 мс.

В процессе разработки проекта возникли следующие вопросы:

1. Каким образом подключить датчик к шине 1-Wire?

2. Как зашифрована температура, передаваемая датчиком?

3. Какие специализированные команды необходимо применять для опроса датчика?

2.3 Запуск и выполнение

Скомпилированная программа представляет собой файл типа cof, который прошиваем на микроконтроллер ATmega 128 семейства AVR.

Соединяем компоненты рабочей модели прибора, получаем сигнал с температурного датчика, считываем температуру окружающей среды.

3. Список используемой литературы

1. Белов А.В. Конструирование устройств на микроконтроллерах. - СПб.: Наука и Техника, 2005. - 256 С.

2. Бородин В.Б., Калинин А.В. Системы на микроконтроллерах и БИС программируемой логики - М.: Издательство ЭКОМ, 2002. - 400 с.: илл.

3. Гребнев В.В. Микроконтроллеры семейства AVR фирмы Atmel М.: ИП РадиоСофт, 2002. - 176 с.

4. Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы "ATMEL" - М.: Издательский дом "Додека-ХХI", 2004. - 560 с.

5. Шпак Ю.А. Программирование на языке Си для AVR и PIC микроконтроллеров. - К: ”МК-Пресс", 2006. - 400 С.

Приложение

Код программы

/*****************************************************

This program was produced by the

CodeWizardAVR V1.25.8 Professional

Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s. r. l.

http://www.hpinfotech.com

Project: Digital Thermometer

Version: 1

Date: 24.11.2009

Author: Marina

Company:

Comments:

Chip type: ATmega128

Program type: Application

Clock frequency: 7,000000 MHz

Memory model: Small

External SRAM size: 0

Data Stack size: 1024

*****************************************************/

#include <mega128. h>

#include <delay. h>

#include <stdio. h>

#include <lcd. h> // Alphanumeric LCD Module functions

#asm // сообщаем куда подключен датчик

. equ __w1_port=0x1B; PORTA

. equ __w1_bit=0

#endasm

// сообщаем куда подключён ЖКИ

#asm

. equ __lcd_port=0x15; PORTC

#endasm

#include <1wire. h> // 1 Wire Bus functions

#include <ds18b20. h>

/* >>>>>>>>>>>>>>>>maximum number of DS18B20 connected to the 1 Wire bus */

#define MAX_DEVICES 8

// Declare your global variables here

/* >>>>>>>>>>>>>>DS18B20 devices ROM code storage area */

unsigned char devices;

unsigned char rom_code [MAX_DEVICES] [9] ;

/*>>>>>>>>>*/char lcd_buffer [33] ;

void main (void)

{ int temp;

unsigned int a;

double d;

UCSR0A=0x00;

UCSR0B=0x10;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x2D;

// >>>>>>>>>>>>>>>> Declare your local variables here

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=Out Func6= Out Func5= Out Func4= Out Func3= Out Func2= Out Func1= Out Func0= Out

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00;

DDRA=0xFF;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T

PORTB=0x00;

DDRB=0x02;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00;

// Port E initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTE=0x00;

DDRE=0x00;

// Port F initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTF=0x00;

DDRF=0x00;

// Port G initialization

// Func4=In Func3=In Func2=In Func1=In Func0=In

// State4=T State3=T State2=T State1=T State0=T

PORTG=0x00;

DDRG=0x00;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

// Mode: Normal top=FFh

// OC0 output: Disconnected

ASSR=0x00;

TCCR0=0x00;

TCNT0=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh

// OC1A output: Discon.

// OC1B output: Discon.

// OC1C output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer 1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

// Compare C Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer 2 Stopped

// Mode: Normal top=FFh

// OC2 output: Disconnected

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// Timer/Counter 3 initialization

// Clock source: System Clock

// Clock value: Timer 3 Stopped

// Mode: Normal top=FFFFh

// Noise Canceler: Off

// Input Capture on Falling Edge

// OC3A output: Discon.

// OC3B output: Discon.

// OC3C output: Discon.

// Timer 3 Overflow Interrupt: Off

// Input Capture Interrupt: Off