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

2016-07-30СтудИзба

Описание файла

Документ из архива "Реализация цифрового термометра на основе микроконтроллера ATmega 128 (с использовнием термодатчика DS18B20)", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "48764"

Текст 3 страницы из документа "48764"

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

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

В 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

#include

#include

#include // Alphanumeric LCD Module functions

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

. equ __w1_port=0x1B; PORTA

. equ __w1_bit=0

#endasm

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

#asm

. equ __lcd_port=0x15; PORTC

#endasm

#include // 1 Wire Bus functions

#include

/* >>>>>>>>>>>>>>>>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);

};

}

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5076
Авторов
на СтудИзбе
455
Средний доход
с одного платного файла
Обучение Подробнее