10 разделить на скорость USART в бод/сек.

1.7 Вывод значений на ЖКИ

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

Контроллер HD44780 потенциально может управлять 2-мя строками по 40 символов в каждой (для модулей с 4-мя строками по 40 символов используются два однотипных контроллера), при матрице символа 5 х 7 точек. Контроллера также поддерживает символы с матрицей 5 х 10 точек, но в последние годы ЖКИ-модули с такой матрицей практически не встречаются, поэтому можно считать, что фактически бывают только символы 5х7 точек.

Существует несколько различных более-менее стандартных форматов ЖКИ-модулей (символов х строк): 8х2, 16х1, 16х2, 16х4, 20х1, 20х2, 20х4, 24х2, 40х2, 40х4. Встречаются и менее распространенные форматы: 8х1, 12х2, 32х2 и др., - принципиальных ограничений на комбинации и количество отображаемых символов контроллер не накладывает - модуль может иметь любое количество символов от 1 до 80, хотя в некоторых комбинациях программная адресация символов может оказаться не очень удобной.

Жидкокристаллический модуль MT-16S2H состоит из БИС контроллера управления и ЖК панели. Контроллер управления КБ1013ВГ6, производства ОАО "АНГСТРЕМ" (www.angstrem.ru), аналогичен HD44780 фирмы HITACHI и KS0066 фирмы SAMSUNG.

Модуль выпускается со светодиодной подсветкой. Внешний вид приведен на рисунке 1. Модуль позволяет отображать 1 строку из 16 символов. Символы отображаются в матрице 5х8 точек. Между символами имеются интервалы шириной в одну отображаемую точку.

Каждому отображаемому на ЖКИ символу соответствует его код в ячейке ОЗУ модуля.

Модуль содержит два вида памяти - кодов отображаемых символов и пользовательского знакогенератора, а также логику для управления ЖК панелью.

Модуль позволяет:

модуль имеет программно-переключаемые две страницы встроенного знакогенератора (алфавиты: русский, украинский, белорусский, казахский и английский)

работать как по 8-ми, так и по 4-х битной шине данных (задается при инициализации);

принимать команды с шины данных (перечень команд приведен в таблице 4);

записывать данные в ОЗУ с шины данных;

читать данные из ОЗУ на шину данных;

читать статус состояния на шину данных;

запоминать до 8-ми изображений символов, задаваемых пользователем;

выводить мигающий (или не мигающий) курсор двух типов;

управлять контрастностью и подсветкой;

Программирование и управление:

Перед началом рассмотрения принципов управления ЖКИ-модулем, обратимся к внутренней структуре контроллера HD44780, чтобы понять основные принципы построения ЖКИ-модулей на его основе. Эта информация позволит понять способы организации модулей различных форматов с точки зрения программной модели, а также мотивации конструкторов ЖКИ-модулей.

Другие элементы не являются объектом прямого взаимодействия с управляющей программой - они участвуют в процессе регенерации изображения на ЖКИ: знакогенератор, формирователь курсора, сдвиговые регистры и драйверы (напоминаем, что приведенная схема - упрощенная, и многие не важные для получения общей картины промежуточные элементы на ней опущены).

Управление контроллером ведется посредством интерфейса управляющей системы. Основными объектами взаимодействия являются регистры DR и IR. Выбор адресуемого регистра производится линией RS, если RS = 0 - адресуется регистр команд (IR), если RS = 1 - регистр данных (DR).

Данные через регистр DR, в зависимости от текущего режима, могут помещаться (или прочитываться) в видеопамять (DDRAM) или в ОЗУ знакогенератора (CGRAM) по текущему адресу, указываемому счетчиком адреса (АС). Информация, попадающая в регистр IR, интерпретируется устройством выполнения команд как управляющая последовательность. Прочтение регистра IR возвращает в 7-ми младших разрядах текущее значение счетчика АС, а в старшем разряде флаг занятости (BF).

Видеопамять, имеющая общий объем 80 байтов, предназначена для хранения кодов символов, отображаемых на ЖКИ. Видеопамять организована в две строки по 40 символов в каждой. Эта привязка является жесткой и не подлежит изменению. Другими словами, независимо от того, сколько реальных строк будет иметь каждый конкретный ЖКИ-модуль, скажем, 80 х 1 или 20 х 4, адресация видеопамяти всегда производится как к двум строкам по 40 символов.

Будучи устройством с динамической индикацией, контроллер циклически производит обновление информации на ЖКИ. Сам ЖКИ организован как матрица, состоящая в зависимости от режима работы из 8-ми (одна строка символов 5 х 7 точек), 11-ти (одна строка символов 5 х 10 точек) или 16-ти (две строки символов 5 х 7 точек) строк по 200 сегментов (когда строка насчитывает 40 символов) в каждой. Собственный драйвер конроллера HD44780 имеет только 40 выходов (SEG1... SEG40) и самостоятельно может поддерживать только 8-ми символьные ЖКИ. Это означает, что ЖКИ-модули форматов до 8 х 2 реализованы на одной единственной микросхеме HD44780, модули, имеющие большее количество символов, содержат дополнительные микросхемы драйверов, например, HD44100, каждая из которых дополнительно предоставляет управление еще 40-ка сегментами.

У контроллера HD44780 существует набор внутренних флагов, определяющих режимы работы различных элементов контроллера (таблица 7). В таблице 8 приведены значения управляющих флагов непосредственно после подачи на ЖКИ-модуль напряжения питания. Переопределение значений флагов производится специальными командами, записываемыми в регистр IR, при этом комбинации старших битов определяют группу флагов или команду, а младшие содержат собственно флаги.

Подключение модуля LCD:

Функции работы с LCD используются для интерфейса между программами на C и LCD модулями, построенными на микросхемах Hitachi HD44780 или аналогичных. Прототипы для этих функций находятся в файле lcd. h.

До включения файла lcd. h, вы должны объявить порт микроконтроллера, который будет использоваться с модулем LCD. Поддерживаются следующие форматы LCD: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 и 2x40 символов.

 

1.8 Описание температурного датчика DS18B20

DS18B20 - Калиброванный цифровой термометр с однопроводным 1-Wire-интерфейсом и перестраиваемой разрядностью преобразования. Диапазон измеряемых температур от - 55°C до +125°C. Считываемый с микросхемы цифровой код является результатом непосредственного прямого измерения температуры и не нуждается в дополнительных преобразованиях. Программируемая пользователем разрешающая способность встроенного АЦП может быть изменена в диапазоне от 9 до 12 разрядов выходного кода. Абсолютная погрешность преобразования меньше 0,5°C в диапазоне контролируемых температур - 10°C до +85°C. Максимальное время полного 12-ти разрядного преобразования ~750 мс. Энергонезависимая память температурных уставок микросхемы обеспечивает запись произвольных значений верхнего и нижнего контрольных порогов. Кроме того, термометр содержит встроенный логический механизм приоритетной сигнализации в 1-Wire-линию о факте выхода контролируемой им температуры за один из выбранных порогов. Узел 1-Wire-интерфейса компонента организован таким образом, что существует теоретическая возможность адресации неограниченного количества подобных устройств на одной 1-Wire-линии. Термометр имеет индивидуальный 64-разрядный регистрационный номер (групповой код 028Н) и обеспечивает возможность работы без внешнего источника энергии, только за счет паразитного питания 1-Wire-линии. Питание микросхемы через отдельный внешний вывод производится напряжением от 3,0 В до 5,5 В. Термометр размещается в транзисторном корпусе TO-92, или в 8-контактном корпусе SO для поверхностного монтажа (DS18B20Z), или 8-контактном корпусе микро-SOP для поверхностного монтажа (DS18B20U).

Выпускается специальная модификация цифрового термометра, предназначенная только для работы в режиме паразитного питания DS18B20-PAR. Она размещается в транзисторном корпусе TO-92, один из выводов которого не используется.

 

1.9 Подключение датчика DS18B20 с использованием порта 1-Wire

Однопроводной интерфейс 1-Wire, разработанный в конце 90-х годов фирмой Dallas Semiconductor, регламентирован разработчиками для применения в четырех основных сферах-приложениях:

приборы в специальных корпусах MicroCAN для решения проблем идентификации, переноса или преобразования информации (технология iButton),

программирование встроенной памяти интегральных компонентов,

идентификация элементов оборудования и защита доступа к ресурсам электронной аппаратуры,

системы автоматизации (технология сетей 1-Wire-сетей).

Первое из этих направлений широко известно на мировом рынке и уже давно пользуется заслуженной популярностью. Второе с успехом обеспечивает возможность легкой перестройки функций полупроводниковых компонентов, производимых фирмой Dallas Semiconductor и имеющих малое количество внешних выводов. Третье позволяет обеспечить недорогую, но достаточно эффективную идентификацию и надежную защиту самого разнообразного оборудования. Что касается четвертого применения, то реализация локальных распределенных систем на базе 1-Wire-шины является на сегодня де-факто наиболее оптимальным решением для большинства практических задач автоматизации. В настоящее время Dallas Semiconductor поставляет широкую номенклатуру однопроводных компонентов различных функциональных назначений для реализации самых разнообразных сетевых приложений. Поэтому имеется огромное число конкретных примеров использования 1-Wire-интерфейса для целей автоматизации в самых различных областях, и все больше разработчиков проявляют интерес к этой технологии.

Преимущества 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

 // Compare A Match Interrupt: Off

 // Compare B Match Interrupt: Off

 // Compare C Match Interrupt: Off

TCCR3A=0x00;

TCCR3B=0x00;

TCNT3H=0x00;

TCNT3L=0x00;

ICR3H=0x00;

ICR3L=0x00;

OCR3AH=0x00;

OCR3AL=0x00;

OCR3BH=0x00;

OCR3BL=0x00;

OCR3CH=0x00;

OCR3CL=0x00;

 // External Interrupt (s) initialization

 // INT0: Off

 // INT1: Off

 // INT2: Off

 // INT3: Off

 // INT4: Off

 // INT5: Off

 // INT6: Off

 // INT7: Off

EICRA=0x00;

EICRB=0x00;

EIMSK=0x00;

 // Timer (s) /Counter (s) Interrupt (s) initialization

TIMSK=0x00;

ETIMSK=0x00;

 // USART0 initialization

 // Communication Parameters: 8 Data, 1 Stop, No Parity

 // USART0 Receiver: On

 // USART0 Transmitter: Off

 // USART0 Mode: Asynchronous

 // USART0 Baud Rate: 57600

UCSR0A=0x00;

UCSR0B=0x18;

UCSR0C=0x06;

UBRR0H=0x00;

UBRR0L=0x07;

 // Analog Comparator initialization

 // Analog Comparator: Off

 // Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

PORTB=0x00;

DDRB=0x01;

 // LCD module initialization

lcd_init (16);

w1_init ();

/*>>>>>>>>>>>>>*/

delay_ms (250);

lcd_clear ();

/* detecting device */

devices=w1_search (0xF0,rom_code);

delay_ms (250);

sprintf (lcd_buffer,"%u DS18B20\nDevice detected", devices);

lcd_puts (lcd_buffer);

delay_ms (250);

lcd_clear ();

while (1)

{

temp=ds18b20_temperature (0); // чтение температуры с датчика

if (temp>1000) { // преобразование отрицательной температуры

temp=4096-temp;

temp=-temp;

}

sprintf (lcd_buffer,"t=%i.%u\xdfC",temp,temp%1); // запись температуры в массив для вывода на экран

lcd_clear (); // очистка экрана

lcd_puts (lcd_buffer); // вывод температуры

delay_ms (500); // ожидание 500 мс перед следующим измерением

a = ADCW;

d = (double) a / 1024 * 5;

printf ("%f\r", a);

};

}


Информация о работе «Реализация цифрового термометра на основе микроконтроллера ATmega 128 (с использовнием термодатчика DS18B20)»
Раздел: Информатика, программирование
Количество знаков с пробелами: 31387
Количество таблиц: 2
Количество изображений: 0

0 комментариев


Наверх