Розробка програмного забеспечення 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Розробка програмного забеспечення



Общая структура программы

Опис програми (реалізованій на arduino);

Setup: Данная процедура инициализирует линии порта.
crateMenuSpeedCool: Дана процедура ініціалізує ШИМ,завдяки чому при подачі сигнаала на порт, із різним ШИМ,можемо корегувати швидкість обертання кулера.
createStartInfo: Дана процедура виводить інформацію на ЖК дисплей по 4х-бітному зєднанню.
loadTemperature: Дана процедура по підключеній шині із цифровим датчиком температури, по 1-write протоколі отримує інформацію про температуру, після чого ми її конвертуємо в шкалу по С*.  

Розробка протоколів зв'язку пк з ПЕОМ.

Згідно з завданням пристрій повинен керувати за допомогою по інтерфейсу RS-232. Для цього потрібно розробити протокол, згідно з яким будуть передаватися команди. Для зручної обробки команди слід скласти відповідно до наступної послідовності.

1) «$» - знак позначає початок передачі команди. Займає 1 байт

2) Абревіатура переданої команди з 3-х букв. Вона буде відрізняти команду від інших. Займає 3 байта.

3) «,» кома як роздільник..

4) Дані які передаються в команді.

5) Знак «*» означає, що наступна числова комбінація - контрольна сума пакета.

6) Контрольна сума пакета. Займає 1 байт.

7) Ознаки закінчення передачі пакета - новий рядок (0x0D) і повернення каретки (0x0A).

 

ПК-ПЕОМ

Команда отримання значення аналогового сигналу каналу певного в команді

$ AIN, 0 - 4, 0 -1024 * КС <0x0d> <0x0a>

Значення датчика температури можна отримає цієї ж командою позначивши 8-й канал.

Команда отримання значення цифрового сигналу каналу певного в команді.

$ DIN, 0 - 4,0 / 1 * КС <0 x0d> <0 x0a>

Команда загального стану дискретних входів.

$ DIN, 0-255 * КС <0x0d> <0x0a>

При виникненні помилки буде надходити така команда, причому буде виводитися номер помилки.

$ ERR, (№ошібкі) * КС <0x0d> <0x0a>

Команда, яка символізує успішність виконання я команди.

$ ОК!, * КС <0x0d> <0x0a>

 

ПЕОМ-ПК

Команда запиту значення аналогового сигналу каналу певного в команді

$ AIN, (№канала) * КС <0x0d> <0x0a>

Команда запиту значення цифрового сигналу каналу певного в команді.

$ DIN, (№канала) * КС <0x0d> <0x0a>

Запит загального стану дискретних входів

$ DIN, * КС <0x0d> <0x0a>

$ AUT, (№канала), (значення) * КС <0x0d> <0x0a>

$ DOU, (№канала), 0/1 * КС <0x0d> <0x0a>

$ DOU, 0-255 * КС <0x0d> <0x0a>

$ OK?, * КС <0x0d> <0x0a>

 

КС - контрольна сума всіх значень до символу «*»

Заключення

В результаті виконання курсового проекту - розробка мікроконтролера (МК) управління зовнішнім об'єктом на базі комплекту БІС мікропроцесора сімейства AVR виробництва фірми "ATMEL", були закріплені навички роботи з мікропроцесорами.

В даний час дані мікропроцесори знайшли широке застосування мікропроцесорних пристроях і системах.

 

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

 

Сташин В.В., Урусов А.В., Мологонцева О.Ф. Проектирование цифровых устройств на однокристальных микроконтроллерах. М.: Энергоатомиздат, 1990. 224 с.

Однокристальные микроЭВМ/ А.В.Боборыкин, Г.П.Липовецкий, Г.В.Литвин­ский и др. М.: МИКАП, 1994. 400 с.

Ваша первая программа для микроконтроллера Intel 8051: Методические указания к лабораторной работе №1 по курсу “Микропроцессоры и вычислительные устройства”/ Добряк В.А. Екатеринбург: УГТУ, 1999. 32 с.

Микропроцессоры. В 3-х кн. Кн. 1. Архитектура и проектирование микро-ЭВМ. Организация вычислительных процессов: Учебник для втузов/ П.В.Нестеров, В.Ф.Шаньгин, В.Л.Горбунов и др.; Под ред. Л.Н.Преснухина. М.: Высшая школа, 1986. 495 с.

А.В. Евстифеев. Микроконтроллеры AVR семейства классик фирмы «АTMEL»Додека 21. 2002 -208 стр.

 

 

Приложение №1 Текст программы.

/*

* GccApplication4.c

*

* Created: 17.06.2016 7:39:31

* Author: dmitry

*/

 

 

#include <avr/io.h>

#define F_CPU 1000000UL

#include <avr/io.h>

#include <util/delay.h>

#include <stdio.h>

 

// Установка лог. "1" на лінії E

#define LCD_E_SET PORTA | = 0x02

/ * Установка лог. "0" на лінії E * /

#define LCD_E_CLR PORTA & = 0xFD

/ * Установка лог. "1" на лінії RS * /

#define LCD_RS_SET PORTA | = 0x01

/ * Установка лог. "0" на лінії RS * /

#define LCD_RS_CLR PORTA & = 0xFE

 

/ * Макрос, який вказує функції, що

передаються команди * /

#define LCD_COMMAND 0

/ * Макрос, який вказує функції, що

передаються дані * /

#define LCD_DATA 1

 

#define lcd_putc(x) lcd_putbyte(x, LCD_DATA)

 

unsigned int ACP;

ISR(TIMER0_OVF_vect){

 

PORTD&=~(1<<0);

}

ISR(TIMER0_COMP_vect){

 

PORTD|=(1<<0);

}

ISR(ADC_vect){

ACP=ADCW;

ADCSRA|=(1<<ADSC);

}

int main(void)

{

DDRD=0b11111111;

OCR0=150;

TIMSK|(1<<1);

TIMSK|(1<<0);

asm("sei");

//////////////////////

// НАСТРОЙКА АЦП //

////////////////////

DDRB&=~(1<<0);

ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);

ADMUX|=(1<<REFS0)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0);

ADCSRA|=(1<<ADSC);

 

init_port();

 

// ініціалізація жк дисплея

lcd_init();

 

char buf[10];

sprintf(buf,"%d","Done At Home");

 

lcd_gotoxy(0,0);

lcd_putstring("helloq");

 

while(1){};

}

while(1)

{

asm("nop");

}

}

 

/* ініціалізація портів підключення до жк */

void init_port()

{

PORTD=0x00;

DDRD=0xFF;

}

* Функція передачі символ в жк * /

void lcd_putnibble(char t)

{

t<<=4;

LCD_E_SET;

_delay_us(50);

PORTD&=0x0F;

PORTD|=t;

LCD_E_CLR;

_delay_us(50);

}

 

/ * Функція передачі байта в ки.

char c - сам байт

char rs - змінна, яка вказує що передається:

rs = 0 - команда (встановлюється лінія RS)

rs = 1 - дані (скидається лінія RS) * /

void lcd_putbyte(char c, char rs)

{

char highc=0;

highc=c>>4;

if (rs==LCD_COMMAND) LCD_RS_CLR;

else LCD_RS_SET;

lcd_putnibble(highc);

lcd_putnibble(c);

}

 

void lcd_putchar(char c)

{

char highc=0;

highc=c>>4;

LCD_RS_SET;

lcd_putnibble(highc);

lcd_putnibble(c);

}

 

/* функция инициализации работы жки

в 4-битном режиме, без курсора */

 

void lcd_init()

{

_delay_ms(15);

lcd_putnibble(0b00000011);

_delay_ms(4);

lcd_putnibble(0b00000011);

_delay_us(100);

lcd_putnibble(0b00000011);

_delay_ms(1);

lcd_putnibble(0b00000010);

_delay_ms(1);

lcd_putbyte(0x28, LCD_COMMAND);

_delay_ms(1);

lcd_putbyte(0x0C, LCD_COMMAND);

_delay_ms(1);

lcd_putbyte(0x06, LCD_COMMAND);

_delay_ms(1);

}

 

/ * Функція очищення дисплея і повернення

курсору в початкову позицію * /

void lcd_clear()

{

lcd_putbyte(0x01, LCD_COMMAND);

_delay_us(1500);

}

 

/ * Функція переміщення курсора в задану позицію

col - номер знакоместа по горизонтальній осі (від 0 до 15)

row - номер рядка (0 або 1) * /

void lcd_gotoxy(char col, char row)

{

char adr;

adr=0x40*row+col;

adr|=0x80;

lcd_putbyte(adr, LCD_COMMAND);

}

 

void lcd_putstring (char stroka[])

{ char i;

for(i=0;stroka[i]!='\0';i++)

lcd_putchar(stroka[i]);

}

 

Повна схема дана по завданю

8 аналогових датчиків підключених до каналів АЦП, ЖК екран 4бітного звязку

 

Гальванічна розвязка дискертих входів(цифровий датчик) та виходів(нагрузка представлена кулером)

 

Схема пониження напруги джерела живлення МК

 



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 141; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.181.52 (0.028 с.)