Построение компьютерной системы на микроконтроллере

Содержание

Введение

    Анализ поставленной задачи

1.1 Обоснование достаточности аппаратных средств и программных ресурсов

1.2 Доопределение набора аппаратных средств и программных ресурсов

1.3 Распределение функций устройства между узлами микроконтроллера

1.4 Выбор и обоснование режимов работы узлов микроконтроллера

    Проектирование принципиальной схемы устройства

2.1 Схема включения микроконтроллера

2.2 Формирование тактовых импульсов

2.3 Организация сброса

2.4 Схемы входных и выходных устройств

2.5 Схема источника напряжения питания

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

3.1 Проектирование модуля инициализации микроконтроллера

3.2 Проектирование процедур обработки прерываний

3.3 Проектирование процедур обработки информации

3.4 Проектирование процедур вывода информации

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

    Листинг программы

Заключение

Введение

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

В ходе курсового проекта необходимо разработать КС которая будет считывать данные по последовательному порту и выводить обработанную информацию на LCD индикатор.

По техническому заданию на курсовой проект КС должна быть построена на микроконтроллере MSP430.

Микроконтроллеры MSP430 - это 16-разрядные микроконтроллеры RISC-архитектуры, с развитой периферией и сверхнизким энергопотреблением Микроконтроллеры семейства MSP430 содержат 16-разрядное RISC CPU, периферийные модули и гибкую систему тактирования, соединенные через фон-Неймановскую общую адресную шину (MAB) памяти и шину памяти данных (MDB). Объединяя современное CPU с отображаемыми в памяти аналоговыми и цифровыми периферийными устройствами, семейство MSP430 предлагает решения для приложений со смешанными сигналами.

    Анализ поставленной задачи.

Темой курсового проекта является "Удаленное устройство индикации".

Рассмотрим общую структурную схему, приведенную на рисунке 1.

Рисунок 1 – Структурная схема устройства.

В качестве микроконтроллера выберем MSP430F135.

MSP430F135 имеет память программ 16 Кбайт + 256 байт, ОЗУ 512 байт. Максимальное количество контактов ввода/вывода 48. Данная конфигурация позволяет строить малопотребляющие и высокоэффективные приложения.

У предложенного микроконтроллера достаточное число контактов ввода/вывода и памяти программ и данных.

На рисунке 2 приведен MSP430F135.

Рисунок 2 – MSP430F135

Характеристики MSP430F135:

    12-разрядный АЦП с внутренним источником опорного напряжения,

    устройством выборки-хранения,

    режимом автоматической последовательной оцифровки данных

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

    16-разрядный таймер с тремя регистрами захвата/сравнения

    Последовательный коммуникационный интерфейс (USART) с программной настройкой режима: асинхронный - UART или синхронный - SPI

    Внутрисхемный программатор с последовательной передачей данных

    Защита программного кода

    Последовательное программирование ( JTAG )

На рисунке 3 приведена внутренняя структура MSP430F135

Рисунок 3 – Внутренняя структура MSP430F135

    Проектирование принципиальной схемы устройства

Схема включения микропроцессора

Микроконтроллер MSP430F135 содержит 6 регистров ввода/вывода. Задействуем Port 1 и Port 2 управления светодиодным индикатором. Port 4 служит для считывания данных с датчика Холла.

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

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

Формирование тактовых импульсов

Источником тактовых импульсов в микроконтроллере MSP430F135 может быть:

      внутренний переменный резистор

      внешний резистор

      Керамический резонатор

      32 kHz кварцевый резонатор

      высокочастотный кварцевый резонатор

      внешний источник тактовых импульсов

В данном разрабатываемом устройстве наиболее предпочтительным режимом работы генератора является применение внешнего кварцевого резонатора подключаемого к контактам XIN и XOUT Это стабильный генератор с точной выдержкой временных интервалов тактовой частоты которая необходима для делителя USART интерфейса.

На рисунке 5 приведена схема тактирования.

Рисунок 5 – Схема тактирования.

Схема сброса

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

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

Схемы входных и выходных устройств

Прием данных осуществляется по последовательному RS-232 интерфейсу. Для его нормального функционировании и обеспечения совместимости с уровнями используем микросхему интерфейса MAX232. Схема включения MAX 232 приведена на рисунке 7.

Рисунок 7 – Схема включения MAX 232

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.1 Проектирование модуля инициализации микроконтроллера

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

3.2 Проектирование процедур обработки прерываний

Данное устройство не требует написания программы с обработкой прерываний. В связи с тем что по заданию необходима очень маленькая скорость обмена по RS232 и быстродействии LCD индикатора и контроллера достаточно для уверенного приема данных.

3.3 Проектирование процедур обработки информации

В микроконтроллер встроен последовательный коммуникационный интерфейс (USART) который обеспечивает совместимость по формату кадра с интерфейсом RS232. Согласование уровней описано выше.

3.4 Проектирование процедур вывода информации

Вывод данных производится на LCD индикатор. Управление индикатором осуществляется по трем сигнальным и восьми информационным линиям связи. Индикация заключается в записи кодов символов в соответствующие ячейки памяти LCD индикатора.

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

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

Рисунок 12 – Общий алгоритм работы устройства

    Листинг программы

#include <msp430F135.h>

void vLCD_Silence(void);/*Состояние выводов "по умолчанию"*/

void vLCD_Init(void);/*Инициализация дисплея*/

void vLCD_Clear();/*Очистка дисплея*/

void vLCD_RetLeft();/*Перемещение курсора в левую позицию*/

void vLCD_EntryModeSet(char ID,char SH);/*Установка направления сдвига курсора

(ID=0/1 - влево/вправо) и разрешение сдвига дисплея (SH=1) при записи в DDRAM*/

void vLCD_OnOff(char D,char CB);/*Включает модуль (D=1) и выбирает тип курсора (см. даташит)*/

void vLCD_CurDispShift(char SC,char RL);/*Выполнияет сдвиг дисплея или курсора

(SC=0/1 - курсор/дисплей, RL=0/1 - влево/вправо)*/

void vLCD_FuncSet(char DL,char _N,char _F);/*Устанавливает разрядность интерфейса

(DL=0/1 - 4/8 бита), режим развертки строк (_N=0/1 - одна строка/две строки)

и размер символа (_F=0/1 - 5х8/5х10)*/

void vLCD_SetAddr(char ADD);/*Установка адреса для последующих операций и выбор области DDRAM*/

void vLCD_WriteData(char DATA);/*Запись данных в активную область*/

void vLCD_Delay(char a);/*Задержка на 0/1 - 40 мкс/1.95 мс */

/*Команды(0)/Данные(1)*/

void vRS(char set)

{

if(set)

P3OUT|=0x80;

else

P3OUT&=~0x80;

}

/*Синхронизация*/

void vEN(char set)

{

if(set)

P3OUT|=0x40;

else

P3OUT&=~0x40;

_NOP();

}

/*Запись в индикатор

RS - команды(0)/данные(1); Data - тело команды/данных*/

void vLCD_Write(char RS, char Data)

{

vRS(RS);

_NOP();

//_NOP();

P1OUT&=Data|0x0f;//Запись старшей тетрады.

vEN(1);

_NOP();

//_NOP();

vEN(0);

_NOP();

//_NOP();

P1OUT&=~0xf0;

P1OUT|=(Data<<4)&~0x0f;//Запись младшей тетрады.

_NOP();

//_NOP();

vEN(1);

_NOP();

//_NOP();

vEN(0);

_NOP();

//_NOP();

P1OUT|=0xf0;//Устанавливает на выводах состояние "по умолчанию".

_NOP();

//_NOP();

}

/*Состояние выводов "по умолчанию"*/

void vLCD_Silence(void)

{

vEN(0);

vRS(0);

P1OUT=0xf0;

}

/*Инициализация дисплея*/

void vLCD_Init(void)

{

for(char i=0;i<21;i++)

vLCD_Delay(1);//задержка на 40 мс.

vRS(0);

_NOP();

P1OUT&=0x30|0x0f;//Запись старшей тетрады.

vEN(1);

_NOP();

vEN(0);

_NOP();

P1OUT|=0xf0;//Устанавливает на выводах состояние "по умолчанию".

_NOP();

for(char i=0;i<3;i++)

vLCD_Delay(1);//задержка на 4.1 мс.

vLCD_FuncSet(0,0,0);//4-х разрядная шина, развертка 1 строк, символ 5х8.

vLCD_FuncSet(0,1,0);//4-х разрядная шина, развертка 1 строк, символ 5х8.

vLCD_OnOff(1,0);//Вкл. модуля, выкл. курсора.

vLCD_Clear();//Очистка DDRAM.

vLCD_EntryModeSet(1,0);//Сдвиг курсора вправо, сдвиг дисплея запрещен.

}

/*Очистка дисплея*/

void vLCD_Clear()

{

vLCD_Write(0,0x01);

vLCD_Delay(1);

}

/*Перемещение курсора в левую позицию*/

void vLCD_RetLeft()

{

vLCD_Write(0,0x02);

vLCD_Delay(1);

}

/*Установка направления сдвига курсора (ID=0/1 - влево/вправо)

и разрешение сдвига дисплея (SH=1) при записи в DDRAM*/

void vLCD_EntryModeSet(char ID,char SH)

{

char Data=0x04+(ID<<1)+SH;

vLCD_Write(0,Data);

vLCD_Delay(0);

}

/*Включает модуль (D=1) и выбирает тип курсора (см. даташит)*/

void vLCD_OnOff(char D,char CB)

{

char Data=0x08+(D<<2)+CB;

vLCD_Write(0,Data);

vLCD_Delay(0);

}

/*Выполнияет сдвиг дисплея или курсора (SC=0/1 - курсор/дисплей,

RL=0/1 - влево/вправо)*/

void vLCD_CurDispShift(char SC,char RL)

{

char Data=0x10+(SC<<3)+(RL<<2);

vLCD_Write(0,Data);

vLCD_Delay(1);

}

/*Устанавливает разрядность интерфейса (DL=0/1 - 4/8 бита), режим развертки bстрок (N=0/1 - одна строка/две строки) и размер символа (F=0/1 - 5х8/5х10)*/

void vLCD_FuncSet(char DL,char _N,char _F)

{

char Data=0x20+(DL<<4)+(_N<<3)+(_F<<2);

vLCD_Write(0,Data);

vLCD_Delay(0);

}

/*Установка адреса для последующих операций и выбор области DDRAM*/

void vLCD_SetAddr(char ADD)

{

ADD+=0x80;

vLCD_Write(0,ADD);

vLCD_Delay(0);

}

/*Запись данных в активную область*/

void vLCD_WriteData(char DATA)

{

vLCD_Write(1,DATA);

vLCD_Delay(0);

}

/*Задержка на 0/1 - 40 мкс/1.95 мс */

void vLCD_Delay(char a)

{

IFG1&=~WDTIFG;//Сбросили очередной флаг прерывания...

//Запуск Собаки с очисткой.

if(a)

WDTCTL=0x5A00 | 0x1f;//TMSEL,SSEL,WDIS.1,WDIS.0 - период 1.95 мс.

else

WDTCTL=0x5A00 | 0x1b;//TMSEL,WDIS.1,WDIS.0 0 - период 12.8 мкс.

char z=1;

if(!a)z=4;

for(char i=0;i<z;i++)

{

while(!(IFG1&WDTIFG))

_NOP();//пока нет прерывания от Собаки - висим.

IFG1&=~WDTIFG;//Сбросили очередной флаг прерывания...

}

//Остановка Собаки.

WDTCTL=0x5A00 | 0x93;//HOLD,TMSEL,WDIS.1,WDIS.0

}

/*Вывод строки c позиции line,column до конца строки. Если фактическая длинна строки больше, строка переписывается с начальной позиции.

Начало строки: line - номер строки сверху (0-3),

column - позиция первого символа в строке, string - строка символов*/

void vLCD_TransMassive(unsigned char line,unsigned char column,

unsigned char string[])

{

//Для корректной работы следует установить следующий режим:

//vLCD_EntryModeSet(1,0);//Сдвиг курсора вправо, сдвиг дисплея запрещен.

unsigned char ADD=line,ColumnCounter=column;

/*Вычисляем ардес в DDRAM*/

switch(ADD)

{

case 3:

ADD=0x54;

break;

case 2:

ADD=0x14;

break;

case 1:

ADD=0x40;

case 0:

break;

default:

ADD=0x00;

}

if(column>19)

column=0;

ADD+=column;

vLCD_SetAddr(ADD);//Установка адреса.

for(char i=0;;i++)//Запись строки (бесконечный цикл).

{

if(string[i]=='\0')//Если обнаружен симовл конца строки - выход из цикла.

return;

else

{

vLCD_WriteData(string[i]);

if(++ColumnCounter>19)//Если достигнут физический конец строки,

{

vLCD_SetAddr(ADD);//продолжаем запись с начальной позиции.

ColumnCounter=column;

}

}

}

_NOP();

}

Заключение

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

Использование внешнего кварцевого генератора обеспечивает высокую стабильность работы последовательного коммуникационного интерфейса (USART).

В ходе проектирования устройства были рассмотрены основные принципы построения устройств на микроконтроллерах MSP430 от Texas Instruments. А так же изучены аппаратные возможности данных микроконтроллеров.

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

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