рефераты рефераты
Главная страница > Курсовая работа: Система вимірника струмів  
Курсовая работа: Система вимірника струмів
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Система вимірника струмів

Рис. 2.5 – Схема включення РКІ ВС1602А

2.5 Схема стабілізатору напруги живлення

Мікросхема Н34063 являє собою монолітну ІМС з набором усіх необхідних блоків для побудування DC-DC перетворювача-стабілізатора напруги.

Її основні електричні параметри приведені у таблиці 2.3


Таблиця 2.3 – Основні електричні характеристики Н34063

Рис. 2.6 – Схема стабілізатору напруги живлення

Розрахунок резистора R4:

R4 = UVcc/Id – R3 = 5/0.0006 – 1800 = 6333 Ом

Приймемо значення опору R4 рівним 6,2 кОм.


3. Проектування програмного забезпечення мікропроцесора

Розробку програми для мікроконтролеру варто почати з алгорітму його функціонування. Програма повинна послідовно виконувати наступні задачі:

-  ініціалізувати необхідні у схемі вузли;

-  знімати результати перетворення АЦП;

-  перетворювати данні з АЦП;

-  видавати оброблені данні на РКІ;


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

У процедурі ініціалізації ми повинні налаштувати усі задіяні вузли мікроконтролеру та зовнішніх пристроїв за допомогою функцій, які встановлять усі необхідні режими роботи та початкові значення регістрів, потрібних для роботи програми. Ми повинні проініціалізувати наступні блоки:

- порти вводу/виводу;

- таймер-лічильник 0;

- АЦП;

- РКІ;

Функція налаштування портів, АЦП та таймеру:

void init_mega (void)

тактового сигналу


Функція налаштування роботи РКІ

void lcd_init (void)

Ця функція використана із стандартного include – файлу LCD.h компілятору. Її повне описання можна переглянути у компіляторі. Вона налаштовує РКІ на режим роботи з 4 лініями даних, без включення курсору, відображення символів ввімкнено, режим роботи з двома строками. Керуюча послідовність:

_lcd_init_write(0x30);

_long_delay();

_lcd_init_write(0x30);

_long_delay();

_lcd_init_write(0x30);

_long_delay();

_lcd_init_write(0x20);

_long_delay();

_lcd_write_data(0x28);

_long_delay();

_lcd_write_data(0x04);

_long_delay();

_lcd_write_data(0x85);

_long_delay();

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

Обробка процедури переривань досить проста:

- переривання від Т/Л0

interrupt [TIM0_OVF] void TIMER0_OVF_interrupt(void)

{

TCNT0=Tmr0_Reload;          // перезавантаження Т/Л0

TMR0Flag = 1;             // встановлення флагу переривання Т/Л0

SETBIT(ADCSRA,6);  // запуск АЦП

}

-  переривання від АЦП

interrupt [ADC_INT] void adc_isr(void)

{

ADCFlag = 1;               // встановлення флагу переривання АЦП

}

3.3 Проектування процедур вводу інформації

Процедура вводу інформації полягає у об’яві змінної та присвоєнні їй значення 16 бітного регістру доступу до АЦП ADCW.

int A;

A = ADCW;

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

Вивід інформації полягає у виводі даних після обробки на РКІ. Ця процедура виконується за допомогою функцій, які входять до бібліотеки LCD.lib та файлу LCD.h

lcd_gotoxy(2,0); //Встановлення адреси знакомісця на 2 позицію у першій строці

lcd_putsf("Current, A:");        //Вивід строки

lcd_gotoxy(5,1);            // Встановлення адреси знакомісця на 5 позицію у другій строці

lcd_putchar(a1 + 0x30);         // Вивід першої значущої цифри результату із зміщенням

lcd_gotoxy(6,1);            // Встановлення адреси знакомісця на 6 позицію у другій строці

lcd_putchar(0x2C);       // Вивід символу коми

lcd_gotoxy(7,1);            // Встановлення адреси знакомісця на 7 позицію у другій строці

lcd_putchar(a2 + 0x30);         // Вивід другої значущої цифри результату із зміщенням

lcd_gotoxy(8,1);            // Встановлення адреси знакомісця на 8 позицію у другій строці

lcd_putchar(a3 + 0x30);         // Вивід третьої значущої цифри результату із зміщенням

3.5 Проектування процедури перетворення інформації

Для виводу інформації на дисплей її необхідно обробити. АЦП має 10 розрядів, тобто він може перетворювати вимірювану величину з кроком 1/1023*Uref. Для простоти перетворень задамось, що максимальне значення нашої змінної яка буде зберігати значення після перетворення буде дорівнювати 2048. Таким чином ми отримуємо формулу для перетворення:

Current = 2 * ADC

Current = ((long)2 * (long)A;

Максимальне значення АЦП – 1023 буде відповідати значенню 2048 нашої змінної.

Тепер нам необхідно перекодувати значення змінної Current до BCD формату. Це можна реалізувати за допомогою функцій:


a1 = a/1000;

a2 = (a - (a1 * 1000))/100;

a3 = (a - (a1 * 1000) - (a2 * 100))/10;

a4 = (a -(a1 * 1000) - (a2 * 100) - (a3 * 10));

де а – вхідна змінна типу int;

а1 – тисячі;

а2 – сотні;

а3 – десятки;

а4 – залишок;

3.6 Проектування процедури main()

Процедура main() повинна складатися з процедур ініціалізації, основного тіла програми та незкінченного циклу. Після ініціалізації всіх вузлів дозволяються усі переривання і ми очікуємо переривання від АЦП, при приході переривання ми аналізуємо флаг ADCFlag , і якщо він дорівнює 1, то ми переходимо до тіла основної програми. Зчитуємо значення АЦП, перетворюємо його, виводимо текстове повідомлення на РКІ. Далі ми аналізуємо чи змінилось значення АЦП, і якщо так, то забороняємо переривання, викликаємо процедури перетворення та відображення результату, відновлюємо дозвіл на переривання.

void main(void)

{

init_mega();

lcd_init(16);

#asm("sei")

while(1)

{


int A, Current;

A = ADCW;

if (ADCFlag)

{

ADCFlag = 0;

Current = 2 * A;

lcd_gotoxy(2,0);

lcd_putsf("Current, A:");

//lcd_gotoxy(0,1);

//lcd_putsf("PREVED AE-022!!!");

if (d != A)

{

#asm("cli")

bar (2000,0);

d = A;

convert_out (Current, 5, 1);

#asm("sei")

}

}

}

}


4. Лістінг програми

#include "interrupt.h"

#include "io.h"

#include "mega16.h"

#include "signal.h"

#include "delay.h"

#include "string.h"

#include <stdio.h>

#include <delay.h>

#include <lcd.h>

//############################################################################################

#define ADC_VREF_TYPE 0x40

#define Tmr0_Reload 0

#define PrescalerTmr0 5 // timer0 counts clk/256

#define TOIE0 0

#define ADSC 0

#define CLRBIT(x,y) ((x&=~(1<<y)))

#define SETBIT(x,y) ((x|=(1<<y)))

//############################################################################################

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

//############################################################################################

unsigned char ADCFlag = 0;

unsigned char TMR0Flag = 0;

int d;

//############################################################################################

interrupt [ADC_INT] void adc_isr(void)

{

ADCFlag = 1;

}

//############################################################################################

interrupt [TIM0_OVF] void TIMER0_OVF_interrupt(void)

{

TCNT0=Tmr0_Reload;

TMR0Flag = 1;

SETBIT(ADCSRA,6);

}

//############################################################################################

void init_mega (void)

//############################################################################################

void convert_out (int a, char position_x, char position_y )

{

int a1, a2, a3, a4;

a1 = a/1000;

lcd_gotoxy(position_x,position_y);

lcd_putchar(a1 + 0x30);

a2 = (a - (a1 * 1000))/100;

lcd_gotoxy(position_x + 1,position_y);

lcd_putchar(0x2C);

lcd_gotoxy(position_x + 2,position_y);

lcd_putchar(a2 + 0x30);

a3 = (a - (a1 * 1000) - (a2 * 100))/10;

lcd_gotoxy(position_x + 3,position_y);

lcd_putchar(a3 + 0x30);

a4 = (a -(a1 * 1000) - (a2 * 100) - (a3 * 10));

lcd_gotoxy(position_x + 4,position_y);

lcd_putchar(a4 + 0x30);

}

//############################################################################################

void bar (char time, char posit)

{

lcd_clear();

lcd_gotoxy(posit,0);

lcd_putsf("Working.");

delay_ms(time);

lcd_clear();

lcd_putsf("Working..");

delay_ms(time);

lcd_clear();

lcd_putsf("Working...");

delay_ms(time);

lcd_clear();

lcd_putsf("Working....");

delay_ms(time);

lcd_clear();

}

//############################################################################################

void main(void)

{

init_mega();

lcd_init(16);

#asm("sei")

while(1)

{

int A, Current;

A = ADCW;

if (ADCFlag)

{

ADCFlag = 0;

Current = 2 * A;

Страницы: 1, 2, 3

рефераты
Новости