Программирование микроконтроллера

Программирование термометра, выполненного на микроконтроллере ATmega16 и датчике с интерфейсом 1-wire. Основные методы работы в AVR Studio; протоколы программы. Запись команды данных по четырехбитной шине на дисплей. Описание пользовательских функций.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 08.02.2016
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Содержание

Введение

1 Обзор существующих сред программирования

1.1 Изучение основных методов работы в AVR Studio

2 Описание основных протоколов работы программы

2.1 Запись команды данных/данных по четырехбитной шине на дисплей

2.2 Инициализация: сигнал сброса и присутствия на 1-Wire шине

2.3 Запись данных на 1-Wire шине

2.4 Чтение данных на 1-Wire шине

3 Описание программного обеспечения

3.1 Программа

3.2 Описание используемых данных

3.2.1 Присвоенные имена числовым значениям

3.2.2 Переменные

3.3 Описание используемых функций

3.4 Блок-схема программы

Заключение

Список литературы

Введение

Термометр выполнен на микроконтроллере ATmega16 и датчике с интерфейсом 1-wire, фирмы "Dallas Semiconductor" типа DS18B20 или DS1822. Устройство может измерять температуру в диапазоне от 0 до 125 градусов Цельсия. Индикация значений температуры осуществляется с помощью LCD экрана. Программирование устройства осуществляется на языке Си.

Для достижения поставленной цели необходимо решить несколько задач:

1) Выполнить обзор существующих программ

2) Изучить основные методы работы в выбранной среде программирования

3) Описание основных протоколов работы программы

4) Перечислить все используемые данные

5) Перечислить все используемые функции

6) Блок-схема

1. Обзор существующих сред программирования

Чтобы преобразовать исходный текст программы в файл прошивки микроконтроллера, применяют компиляторы. Фирма Atmel поставляет мощный компилятор ассемблера, который входит в среду разработки AVR Studio, работающую под Windows. Наряду с компилятором, среда разработки содержит отладчик и эмулятор.

AVR Studio совершенно бесплатна и доступна на сайте Atmel. В настоящее время представлено достаточно много компиляторов Си для AVR. Самым мощным из них считается компилятор фирмы IAR Systems. Именно ее сотрудники в середине 90-х годов участвовали в разработке системы команд AVR. IAR C Compiler имеет широкие возможности по оптимизации кода и поставляется в составе интегрированной среды разработки IAR Embedded Workbench (EWB), включающей в себя также компилятор ассемблера, линкер, менеджер проектов и библиотек, а также отладчик. Цена полной версии пакета составляет 2.820 EUR.

Фирмой Image Craft выпускается компилятор языка Си, получивший достаточно широкую популярность. Image Craft C Compiler обладает неплохим уровнем оптимизации кода и достаточно низкой ценой (от $199 до $749 в зависимости от версии). Не меньшую популярность завоевал Code Vision AVR C Compiler, цена полной версии этого компилятора невысока и составляет 150 EUR. Компилятор поставляется вместе с интегрированной средой разработки, в которую, помимо стандартных возможностей, включена достаточно интересная функция - CodeWizardAVR Automatic Program Generator. Наличие в среде разработки последовательного терминала позволяет производить отладку программ с использованием последовательного порта микроконтроллера.

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

WinAVR прекрасно интегрируется со средой разработки AVR Studio от Atmel. Ассемблер идентичен по входному коду ассемблеру AVR Studio. Компиляторы Си и ассемблера имеют возможность создания отладочных файлов в формате COFF, что позволяет применять не только встроенные средства, но и использовать мощный симулятор AVR Studio. Еще одним немаловажным плюсом является то, что WinAVR распространяется свободно без ограничений (производители поддерживают GNU General Public License).

Моим выбором стала среда программирования AVR Studio с интегрированной в неё WinAVR, дающая возможность компилировать программы на языке Си.

1.1 Изучение основных методов работы в AVR Studio

Шаг 1 - Запуск программы AVR Studio

Запустите на выполнение программу AVR Studio. После запуска на экране появится окно, подобное тому, что изображено на рисунке 4.

Рисунок 4 - Окно программы AVR Studio в начале работы над проектом

Шаг 2 - Создание нового проекта

Чтобы создать новый проект выберите опцию «New Project» в диалоговом окне «Welcome to AVR Studio 4» или выберите пункты «Project» и «New Project» в соответствующем разделе главного меню программы.

В открывшемся диалоговом окне нужно выбрать тип проекта: Atmel AVR Assembler или AVR GCC в соответствии с тем, на каком языке будет написан исходный файл кода программы:

AVR Assembler. В этом случае AVR Studio использует для компиляции проекта программу Ассемблер. Никаких дополнительных действий пользователя больше не потребуется. Этот вариант используется в данном примере.

AVR GCC. В этом случае предполагается, что текст программы будет написан на языке C.

Рисунок 5 - Вкладка AVR Studio для определения имени проекта и исходного файла с кодом программы

Для продолжения работы нажмите {Finish}. Диспетчер проекта выдаст на экран новое окно проекта (рисунок 6). В нем будут показаны все файлы, связанные с данным проектом и будет открыто окно редактирования кода программы.

Рисунок 6 - Пример интерфейса пользователя среды разработки AVR Studio 4

Шаг 3 - Создание файла с кодом программы на ассемблере

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

Предполагается, что файл с текстом кода вначале пустой, и следует ввести в него программный код, воспользовавшись обычными приемами редактирования. Напомним, что при редактировании удобно использовать процедуры копирования и вставки из буфера (кнопки {Ctrl+C} и {Ctrl+V}).

Управления доступом и конфигурирование портов ввода/вывода МК семейства AVR осуществляется через три регистра МК:

1) DDRx - регистр, конфигурирующий направление передачи данных. Конфигурирование реализуется побитно. Например, запись числа 11110000 в регистр DDRB означает, что четыре младших вывода 8-ми разрядного порта B сконфигурированы как входные, т.е. из них данные будут читаться, а четыре старших вывода порта B будут работать на выход, т.е. будут передавать данные.

2) PORTx - это регистр передачи или приема данных порта x. Если какие-то биты этого порта были сконфигурированы как выходные, то в биты этого регистра следует записать те значения, которые требуется задать на выходах МК. Если эти биты сконфигурированы на прием данных, то запись единицы в них означает, что данный вход через резистор 150 Ом подключен к выводу питания (вход «подтянут к единице» прямой логики). Таким образом, при отсутствии сигнала на этом выводе обеспечивается помехозащищенность и гарантируется, что считанное значение будет соответствовать логической единице.

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

Шаг 4 - Ассемблирование исходного кода программы

Следующий шаг заключается в создании машинного кода из исходного текста программы. Для выполнения этой процедуры следует выбрать в меню "Build" опцию "Build" или нажать клавишу {F7}. После компиляции программы в окне "Build" будет выведена информация о результатах. На рисунке 9 в окне вывода результатов компиляции показано, что ассемблер обнаружил ошибку в 16-й строке кода: код содержит неопределенный идентификатор «tnp1». Как видно из рисунка, там же перечислены и последующие ошибки, возникшие вследствие неопределенности идентификатора.

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

Рисунок 9 - Окна с кодом программы и результатами компиляции с указанием ошибок

Шаг 5 - Выбор устройства

Нужно проследить, чтобы симуляция кода проводилась именно для выбранного типа процессора. Выбор типа МК для симуляции осуществляется из меню “Debug” (пункт "Select Platform and Device…"). При этом в открывшейся вкладке (см. рисунок 10) следует выбрать тип МК и программу для симуляции его работы.

Шаг 6 - Отладка кода программы

Если файл с программным кодом подготовлен, то его можно запустить в режиме симулятора-отладчика, выбрав в меню "Debug" пункт "Start Debugging " (сочетание клавиш {Ctrl+Sift+Alt+F5}). О переходе в этот режим работы свидетельствует появление желтой стрелки слева от текста с кодом команд, указывающей на инструкцию, которая будет выполняться на следующем шаге в соответствии с содержимым счетчика команд PC (см. рисунок 11).

Полный перечень режимов работы симулятора доступен из функции главного меню “Debug”, что иллюстрируется рисунком 12. Некоторые функции продублированы пиктограммами, соответствующими инструментам, которые можно вывести на экран из меню “View”- “Toolbars”.

Рисунок 10 - Окно назначения параметров симуляции

Рисунок 11 - Указатель положения счетчика команд в окне с кодом программы в режиме отладки-симуляции

Процесс отладки заключается в отслеживании хода выполнения программы и управления данными в регистрах с помощью окна с текстом кода, окна консоли вывода текущих сообщений (Message) и специальных окон, показывающих состояния регистров ввода/вывода (I/O View), позволяющих вести контроль значений переменных (Watch), отслеживать состояния процессора (Processor). Вывод на экран панелей этих инструментов симулятора также настраивается из главного меню (см. рисунок 13).

Рисунок 12 - Инструменты и функции AVR Studio в режиме отладки

Рисунок 13 - Всплывающие списки панелей инструментов и вызова окон для отображения состояний микроконтроллера в режиме симуляции-отладки программы

Настройка окна ввода-вывода

Откройте окно "IO View", выбрав соответствующий пункт меню "View" - “Toolbar” (клавиши {Alt+5}). Поскольку симулятор уже настроен для работы с типом микроконтроллера ATmega 16, то соответствующие элементы его архитектуры отобразятся в этом окне автоматически (см. рисунок 14).

Щелчок на значке «+» у строчки с надписью PORTB открывает содержимое регистров, связанных с портом ввода-вывода B (см. рисунок 12): регистр данных порта PORTB (Port B Data Register), регистр управления направлением передачи порта DDRB (Port B Data Direction) и регистр драйверов порта PINB (Port B Input Pins). Состояние каждого бита этих регистров отображается в соответствующей позиции окна: логическому нулю ("0") соответствует пустая позиция, а логическая единица ("1") отображается позиция окрашенная серым. Эти позиции могут изменяться в ходе выполнения программы, показывая текущее состояние каждого бита. В ходе выполнения программы вы также можете сами установить или сбросить эти биты, щелкая левой кнопкой мыши на соответствующем поле.

Рисунок 14. Окно устройств ввода/вывода микроконтроллера ATmega 16

Выполнение программы в режиме симуляции

Режимы выполнения программы при симуляции работы МК доступны при открытии выпадающего списка функции “Debug” (см. рисунок 14). Их назначение и горячие клавиши вызова приведены в таблице 1.

Таблица 1

Функции отладчика, управляющие ходом симуляции кода программы

Запустив программу на исполнения, проследите, как изменяется положение указателя выполняемой операции кода, нажимая несколько раз клавиши {F11}, {F10}, {Shift+F11}, {Ctrl+F10}, {Alt+F5} и {Ctrl+F5} или выбрав соответствующую опцию из пиктограмм отладчика.

2. Описание основных протоколов работы программы

2.1 Запись команды/данных по четырехбитной шине на дисплей

Ожидаем готовности микроконтроллера дисплея. Для этого можно использовать флаг готовности или задержку. Записываем в переменную байт данных. В этом байте второй бит(1-команда/0-данные) и третий бит(1-начало записи/0-конец) необходимо выставить соответствующим образом. Далее выводим переменную в соответствующий порт. Ожидаем готовности. Сбрасываем третий бит для окончания записи. Ожидаем готовности. Записываем в переменную байт, сдвинутый влево на четыре, второй и третий биты. Выводим переменную в порт. Ожидаем готовности. Сбрасываем третий бит.

2.2 Инициализация: сигнал сброса и присутствия на 1-Wire шине

Все сеансы связи микроконтроллера с датчиком DS18B20 начинаются с сигнала сброса. Микроконтроллер на 480 мкс «проваливает» 1-Wire шину в ноль, а затем «отпускает» ее. Если к шине подключен термометр DS18B20, то он обнаруживает положительный перепад и после паузы в 15-60 мкс отвечает микроконтроллеру импульсом присутствия -- «проваливает» шину в ноль на время от 60 до 240 мкс.

2.3 Запись данных на 1-Wire шине

Обмен данными по 1-Wire шине происходит последовательно, младшим битом вперед. Передача или прием одного бита данных выполняются в течении фиксированного промежутка времени, так называемого тайм слота (time slot). Различают тайм слоты записи и тайм слоты чтения. Длительность всех тайм слотов должна быть > 60 мкс, а пауза между тайм слотами > 1 мкс.

Для передачи нуля микроконтроллер «проваливает» 1-Wire шину на время от 60 до 120 мкс. Затем «отпускает» ее и перед записью следующего бита выдерживает паузу >1 мкс.

Для передачи единицы микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс, «отпускает» ее и выдерживает паузу. Пауза должна быть такой, чтобы длительность тайм слота была > 60+1 мкс.

2.4 Чтение данных на 1-Wire шине

DS18B20 является подчиненным устройством и может передавать данные, только когда микроконтроллер формирует на 1-Wire шине тайм слоты чтения. Для формирования тайм слота чтения микроконтроллер «проваливает» 1-Wire шину на время от 1 до 15 мкс, а затем «отпускает» ее, передавая управление состоянием 1-Wire шины датчику DS18B20. Если DS18B20 передает ноль, он удерживает шину в «проваленном» состоянии (в состоянии логического нуля) до конца тайм слота. Если он передает 1, он оставляет шину в «подтянутом» состоянии.

Микроконтроллер может считывать данные датчика DS18B20 через 15 мкс после начала тайм слота чтения

программа микроконтроллер интерфейс протокол

3. Описание программного обеспечения

3.1 Программа

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

#define SKIP_ROM 0xCC

#define CONVERT_T 0x44

#define READ_SCRATCHPAD 0xBE

#define lov DDRA |= 1<<0

#define high DDRA &= ~(1<<0)

#define e 0x03

#define rs 0x02

char init(void)

{

char device;

lov;

PORTA=0x00;

_delay_us(480);

high;

_delay_us(60);

if((PINA & (1<<0))==0x00)

device=1;

else

device=0;

_delay_us(420);

return device;

}

void send_bit(char bit)

{

lov;

PORTA=0x00;

_delay_us(1);

if(bit==0)

{

_delay_us(60);

high;

}

else

{

high;

_delay_us(60);

}

}

void send_byte(unsigned char byte)

{

char i;

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

{

if((byte & (1<<i))==(1<<i))

send_bit(1);

else

send_bit(0);

}

}

char read_bit(void)

{

char rbit=0;

lov;

PORTA=0x00;

_delay_us(1);

high;

_delay_us(14);

if(PINA&(1<<0))

rbit=1;

_delay_us(45);

return rbit;

}

unsigned char read_byte(void)

{

char data=0, i;

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

data|=(read_bit()<<i);

return data;

}

unsigned int temp()

{

unsigned char temp_ls=0;

unsigned char temp_ms=0;

unsigned int temp=0;

init();

send_byte(SKIP_ROM);

send_byte(CONVERT_T);

_delay_ms(750);

init();

send_byte(SKIP_ROM);

send_byte(READ_SCRATCHPAD);

temp_ls = read_byte();

temp_ms = read_byte();

temp =(temp_ms<<8)|temp_ls;

return temp;

}

unsigned char convert_temp()

{

unsigned char convert;

convert=temp()/16;

return(convert);

}

void send_com(unsigned char com)

{

unsigned char a;

a=(com&~(1<<rs))|(1<<e);

PORTD=a;

_delay_us(1);

PORTD=a&~(1<<e);

a=((com*16)&~(1<<rs))|(1<<e);

PORTD=a;

_delay_us(1);

PORTD=a&~(1<<e);

_delay_ms(2);

}

void send_data(unsigned char data)

{

_delay_us(50);

unsigned char b;

b=(data|(1<<rs))|(1<<e);

PORTD=b;

_delay_us(50);

PORTD=b&~(1<<e);

_delay_us(50);

b=((data*16)|(1<<rs))|(1<<e);

PORTD=b;

_delay_us(50);

PORTD=b&~(1<<e);

_delay_us(50);

}

void lcd_init (void)

{

_delay_ms(2);

send_com(0b00000001);

_delay_ms(2);

send_com(0b00001100);

_delay_ms(2);

send_com(0b00100000);

_delay_ms(2);

send_com(0b00000110);

_delay_ms(2);

}

void send_temp(void)

{

unsigned char t;

unsigned char g;

g=convert_temp();

t=(g/100);

if(t!=0)

{

t=t+0x30;

send_data(t);

t=((g%100)/10)+0x30;

send_data(t);

t=((g%100)%10)+0x30;

send_data(t);

}

else

{

t=((g%100)/10);

if(t!=0)

{

t=t+0x30;

send_data(t);

t=((g%100)%10)+0x30;

send_data(t);

}

else

{

t=((g%100)%10)+0x30;

send_com(0b00000001);

_delay_ms(2);

send_data(t);

}

}

}

int main(void)

{

DDRA=0x00;

PORTA=0x00;

DDRD=0xFF;

PORTD=0x3F;

_delay_ms(1000);

lcd_init();

while(1)

{

send_temp();

send_com(0b00000010);

}

}

3.2 Описание используемых данных

3.2.1 Присвоенные имена числовым значениям

SKIP_ROM - 0xCC;

CONVERT_T - 0x44;

READ_SCRATCHPAD - 0xBE;

lov - DDRA |= 1<<0;

high - DDRA &= ~(1<<0);

e - 0x03;

rs - 0x02.

3.2.2 Переменные

device - переменная состояния датчика;

i -переменная цикла;

rbit - переменная для записи бита с датчика;

data - переменная для записи байта с датчика;

temp_ls - переменная для записи младшего байта с датчика;

temp_ms - переменная для записи старшего байта с датчика;

temp - переменная, содержащая оба байта температуры;

convert - переменная для преобразования температуры в один байт;

a - переменная для отправки команд в порт микроконтроллера;

b - переменная для отправки команд в порт микроконтроллера;

g - промежуточная переменная для отправки температуры на экран;

t -переменная для отправки температуры на экран.

3.3 Описание используемых функций

char init(void) - функция инициализации датчика;

void send_bit(char bit) - функция отправки бита в датчик;

void send_byte(unsigned char byte) - функция отправки байта в датчик;

char read_bit(void) - функция чтения бита из датчика;

unsigned char read_byte(void) - функция чтения байта из датчика;

unsigned int temp()- функция чтения температуры;

unsigned char convert_temp()- функция конвертирования температуры;

void send_com(unsigned char com) - функция отправки команд на дисплей;

void send_data(unsigned char data) - функция отправки данных на дисплей;

void lcd_init (void) - функция инициализации дисплея;

void send_temp(void) - функция отправки температуры на дисплей

.

3.4 Блок-схема программы

Заключение

В ходе написания данной курсовой работы я познакомился с несколькими средами программирования микроконтроллеров. Остановил выбор на программе AVR Studio 4 и подробнее рассмотрел ее работу. Написал и проверил на работоспособность программу на языке «Си» для термометра. Работа над программой позволила понять работу пользовательских функций и их взаимодействия. Проделанная работа в будущем поможет мне в освоении написания новых, более сложных программ для микроконтроллеров.

Список литературы

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

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

Размещено на Allbest.ru


Подобные документы

  • Разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы. Текст программы, инициализация указателя стека, структура системы и ресурсов микроконтроллера. Запись кодов при программировании данного устройства.

    контрольная работа [18,4 K], добавлен 24.12.2010

  • Общие сведения о микроконтроллерах AVR, их основные параметры. Функции термометра, реализованного на микроконтроллере AVR. Порядок программирования микроконтроллера с использованием программы на языке С. Передача данных сом-порт, вывод значений на ЖКИ.

    курсовая работа [35,8 K], добавлен 08.04.2010

  • Запись кодов команд программы и констант в FlashROM, кодов исходных данных в EEPROM, требуемых значений установочных битов (Fuse Bits) и битов защиты (Lock Bits). Запись и чтение кодов при программировании, способы программирования в микроконтроллерах.

    контрольная работа [24,2 K], добавлен 22.08.2010

  • Организация файлов и доступ к ним. Файловые операции. Программирование с использованием встроенных функций ввода-вывода; линейных, разветвляющихся и циклических вычислительных процессов с использованием If-else, оператора выбора Case; массивов и матриц.

    курсовая работа [5,8 M], добавлен 24.05.2014

  • Особенности разработки устройства управления системой измерения веса, построенного на микроконтроллере ATmega16 фирмы Atmel. Схема включения микроконтроллера, сброса, стабилизатора напряжения. Проектирование функций микроконтроллера. Листинг программы.

    курсовая работа [153,6 K], добавлен 19.12.2010

  • Пакет Microsoft Office. Электронная таблица MS Excel. Создание экранной формы и ввод данных. Формулы и функции. Пояснение пользовательских функций MS Excel. Физическая постановка задач. Задание граничных условий для допустимых значений переменных.

    курсовая работа [3,4 M], добавлен 07.06.2015

  • Введение в объектно-ориентированное программирование. Постановка задачи. Описание алгоритма решения в псевдокоде (команды в виде текста на русском языке). Исходный текст программы на С. Тестирование программы. Модификация программы. Полиморфизм.

    курсовая работа [294,0 K], добавлен 08.09.2008

  • Программирование логических игр с помощью подходов СИИ. Методы работы с Windows Forms в языке С#, алгоритм поиска в пространстве состояний. Формализация дерева состояний. Описание использованных алгоритмов. Иерархическая схема и блок-схемы программы.

    курсовая работа [1,7 M], добавлен 01.12.2015

  • Рассмотрение основ работы в Microsoft Visual Studio 2010 с языком программирования С#. Реализация программы обработки данных авиапассажиров. Выбор метода ввода данных из текстового файла. Создание фильтра для обработки списка по определенным критериям.

    курсовая работа [1,4 M], добавлен 17.01.2016

  • Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.

    курсовая работа [1,0 M], добавлен 26.12.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.