Розроблення цифрового пристрою на мікроконтролері: метео-балістичний суматор (МБС)

Викладення процесу розроблення пристрою автоматичного обчислення та контролю снайперської гвинтівки при веденні стрільби на розрахованих дистанціях: принципова схема метео-балістичного суматора; перевірка працездатності пристрою в середовищі Proteus.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид дипломная работа
Язык украинский
Дата добавления 07.06.2014
Размер файла 6,3 M

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

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

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

Принцип дії та склад сенсорної панелі

На верхні і нижні шари (звичайного виготовлені із прозорого і міцного пластику - поліестеру або майлару) рівномірно наноситься резистивне покриття - плівка на основі оксидів індію та олова (Indium Tin Oxide - ITO). Нижній шар має металізовані обкладки зверху і знизу, а верхній шар - справа і зліва. Шари накладаються один на одного з невеликим зазором, який забезпечується за допомогою прозорих кульок - спейсерів. Оскільки верхній шар має гнучку структуру, то при торканні екрану в точці дотику між шарами утворюється електричний контакт, і по величині опору між обкладинками можна визначити координати точки дотику.

Робиться це по черзі по осях X і Y. Для визначення координати точки дотику по осі X подають опорну напругу на обкладки верхнього шару, в результаті чого по осі X утворюється градієнт напруги. Вихідна напруга, прямо пропорційна координаті X точки дотику, вимірюють на виводах обкладки нижнього шару.

Процес вимірювання координати Y аналогічним процесу вимірювання координати Х, з тією відмінністю, що опорна напруга подається на обкладки нижнього шару, а зміна вихідної напруги, прямо пропорційно координаті Y точки дотику, виводиться з виводів обкладки верхнього шару.

Найпростіший контролер сенсорного екрану включає вимірювальний комутатор, АЦП, схему управління і інтерфейс і може бути виконаний по структурній схемі, наведеної на рис. 28.

Рисунок 28. Структурна схема інтегрального мікроконтролера сенсорного екрану

Комутатор використовується для формування вимірювальної схеми - подачі опорних напруг і підключення до АЦП виводів відповідних слоїв сенсорної панелі; параметри АЦП - розрядність і швидкодія - визначаються специфікою роботи обслугованого пристрою. Схема управління синхронізує процеси комутації, вимірювання і передачі даних на керуючий хост - контролер через вбудований послідовний інтерфейс, SPI.

Очевидно, що застосування спеціалізованих контролерів не є єдино можливим вирішенням завдання ефективного знімання інформації з сенсорного екрану і може скластися враження, що з цим може успішно впоратися АЦП, вбудований у мікроконтролер. І тут слід відзначити суттєві паразитні ефекти, які помітно впливають на результати вимірювань. Сенсорний екран, підключений до входів АЦП, володіє значною площею резистивного покриття, яке являється свого роду антеною та « збирає перешкоди». Для їх усунення зазвичай використовують конденсатори невеликої ємності, підключені до виводів сенсорної панелі [1]. Іншою проблемою є значна ємність самої панелі, в результаті чого вихідний сигнал АЦП приймає правильне значення лише через деякий час. Тому для коректних вимірювань необхідно забезпечити певну паузу, що знижує швидкодію і може зробити неможливим введення графічної інформації та аналіз написаних від руки текстів. І, нарешті, контакт між шарами не є абсолютно надійним і має схильність до «мерехтіння», який необхідно подавляти апаратно або програмним способом.

Отже можна зробити такий висновок, що використання спеціалізованих інтегральних контролерів сенсорних екранів Texas Instruments дозволяє успішно і з мінімальними витратами вирішити ці проблеми і отримати стабільний відгук сенсорної панелі в простому цифровому коді, зручному для подальшої обробки.

5.6 Опис рідкокристалічного індикатора(РКІ)

В даному проекті буде використаний самий розповсюджений 8-и бітний мікроконтролер ATmega32 і графічний рідкокристалічний індикатор від мобільного телефону Nokia 3310.

Чому саме РКІ Nokia 3310?

Почав я пошуки дисплею з того, що перевірив дошки оголошень на предмет продажу старенького але дуже поширеного телефону. Як виявилося люди хотіли великі гроші не виправдано великі або просто напросто вже продали телефон. Вирішив пошукати дисплей як запасну частину, і правильно зробив. Купити зміг у магазині Імрад (Київ) дисплей від NOKIA 3310 за ціною 20,47 грн (2,57 долара).

Рисунок 29. Зовнішній вигляд РКІ від Nokia 3310

Даний дисплей був знятий з неробочого телефону.

Опис дисплею

· Напруга живлення CDD VSS: від 2,7 до 3,3В;

· Низьке енергоживлення, працює від батареї;

· Температурний діапазон: від -25 до +70 ° C;

· Розміри дисплею: 84*48 пкс.

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

Нижче буде описано виводи РКІ дисплею до контролера.

Рисунок 30. Задня сторона РКІ

Призначення виводів контролера дисплею, показано в Таблиця 4:

Вивід

Сигнал

Опис

Напрям даних

1

VDD

Живлення контролера дисплею 2,7-3,3 В

вхід

2

SCLK

Тактуючий вивід для послідовного інтерфейсу SPI

вхід

3

SDIN

Вхід даних послідовного інтерфейсу SPI

вхід

4

D/C

Вивід вибору режиму вводу даних Дані/Команди

вхід

5

SCE

Вивід вибору чіпа, дозволу на ввід данних в контроллер дисплею

вхід

6

GND

Вивід мінус живлення контролера

вхід

7

VOUT

Вивід вихідної напруги контролера, до нього необхідно підключити конденсатор, мінусовим виводом до спільного провідника живлення

вихід

8

RES

Зовнішнє скидання контролера

вхід

Рисунок 31. Підключення РКІ Nokia 3310 до мікроконтролера ATmega32

Отже, можна зробити такий висновок, що до вибору РКІ я зробив правильний вибір, так як у нього ряд переваг, а саме: маленький, тонкий, графічний, працює по SPI, споживає менше милі ампера, має технічний опис та коштує копійки.

5.7 Опис micro SD card та його підключення до МК

Micro SD card - є флеш карта пам'яті, призначена для пропускної здатності інформації та зберігання її в пам'яті на тривалий час. В даний час є дуже популярного і використовується в більшості електронних пристроїв, таких як мобільні телефони, плеери, комп'ютери та іншої мультимедійної техніки.

Опис

Якось давно хотів собі розробити метео - балістичний суматор щоб можна було використати зовнішню EEPROM пам'ять. Головною причиною стало корегування текстових файлів які я зчитую з EEPROM. Просто хочеться писати дані на карту пам'яті, яку можна потім вставити в карт - рідер і через провідник перекинути на комп'ютер, де їх вже можна обробляти більш зручно. Для цього потрібно вміти власне писати дані на карту пам'яті, і знати файлову систему FAT, щоб картка розпізнавалася комп'ютером.

З цього вступу хочу почати невеликий цикл, в якому я напишу про те, як працювати з micro SD / MMC картою пам'яті і файлової системою FAT. Картку SD я вибрав через те, що всередині її є вбудований контроллер і що з нею можна працювати в SPI 0 режимі (позитивний синхроімпульс, зсув по задньому фронту), з яким досить просто впоратися. Подивимося на виводи SD карти на Рисунку 31:

а) б)

Рисунок 32. Зовнішній вигляд micro SD card а) спереду б) ззаду

Видно, що карточка має 8 контактів, призначенення їх наступне:

Таблиця 5.

PIN

Signal Function

Pin name SD

1

NC No connect

DAT2

2

CS Chip Select

CD/DAT3

3

DI MOSI

CMD

4

+2.7/3/6V

VDD

5

CLook

CLK

6

Gnd

VSS

7

DO MISO

DAT0

8

Reserved

DAT1

При роботі з мікроконтролерами режиму SPI вистачає по швидкості, тому використовувати рідний режим роботи карти пам'яті буде недоцільно. Нам знадобляться піни DI, DO, CLK, CS для передачі даних і VSS, VDD для живлення.

Тепер трохи про живлення, micro SD карті потрібно від 2,7 В до 3,6 В, і струм до 100мА. Також якщо планується гаряче підключення, потрібно передбачити просідання живлячої напруги при приєднанні карти. Інакше живлення може просісти до такого рівня, коли BOD детектор спрацює і перезавантажить мікроконтролер. Цього можна уникнути, припаяти до живлення конденсаторів і індуктивність.

Для живлення карти пам'яті передбачений стабілізатор на 3,3 В - LP2980 -3.3. Його обв'язка з конденсаторів C1, C3 - 100мкф, танталові; C2, C4 - 0,1 мкф, кераміка; L1 - індуктивність на 22мкГн. Для сполучення TTL рівнів сигналів передбачені резистивні подільники R2- R4 по 5,6 кОм; R5 - R7 по 10кОм. Світлодіод D1 - сигнальний, для нього обмежує резистор R1 - 470 Ом. Також на роз'ємі виявилися виводи WP і INS, відстежуючи стан яких можна зрозуміти, захищена чи карта від запису механічною засувкою, і чи присутня карта в роз'ємі відповідно. Далі справа за підключенням, всі сигнали з карти підключив до PortB мікроконтролера. Небажано використовувати апаратний SPI мікроконтролера буду аргументувати поганою зміною коду на різні моделі мікроконтролерів. Для роботи з micro SD картою відразу буду використовувати ATmega32 (при роботі з FAT нам знадобиться близько 20КБ флеша). Хоча можна використовувати хоч Atmega8, код для цього переробляти не потрібно. Схема підключення до мікроконтролеру показана на Рисунку 33 нижче.

Тактовий генератор - вбудований RC на 8МГц, хоча можна використовувати будь-який, але з 8МГц працює спритно. Конденсатори C5, C7 - по 100мкФ, електроліти, С4, С6 - 0,1 мкф, кераміка. Так як ми будемо передавати великі обсяги даних (стандартний блок - 512 байт), то виводити їх будемо по UART на комп'ютер в програму Terminal 1.9.

Тепер у нас є все залізо для експериментів з картою пам'яті. Згадаємо, що карта типу MMC також може працювати в SPI режимі. Для її управління також варто використовувати виводи DI, DO, CLK, CS. Схемо технічні міркування для MMC такі ж, як і для micro SD карти.

Рисунок 33. Підключення micro флеш карти до мікроконтролера

Після потрібно виставити на CS нульовий рівень, далі карта входить в режим SPI, тепер для успішної роботи слід подати команди скидання і ініціалізації CMD0, CMD1 перш, ніж ми зможемо писати / читати дані з карти. Команд для карти досить багато, частина з них наведена в таблиці 6 нижче:

Команд багато, але основана маса роботи проводиться командами CMD0, CMD1 (скидання і ініціалізація) CMD17 (читання), CMD24 (запис). Весь перелік команд і як з ними працювати, можна переглянути в рідній специфікації SD карти англійською.

Таблиця 6.

Розглянемо формат команди для SD карти, на Рисунку 34:

Рисунок 34.

Спершу йде індекс команди. Індекс команди в десятковому вигляді визначається як 64 + ім'я команди. Далі слід 4 байта аргументів (дані, адреса), після слід 7-ми бітна контрольна сума. Після успішного відправлення команди слід послати байтову паузу з 8 * N тактових імпульсів (N - ціле), після чого карта відповість. Відповідь може бути типу R1, R2, R3. У нашому випадку, відповіді будуть тільки типу R1, зображені на Рисунку 35.. Тому розглянемо тільки його.

Старший біт R1 завжди дорівнює 0. Призначення інших бітів добре видно з малюнка. Розглянемо процес ініціалізації карти пам'яті командами CMD0, CMD1. Спершу, при високому рівні на виводах CS і DI подаємо 80 тактових імпульсів на виведення CLK.

Рисунок 35.

Далі на весь час роботи з картою садимо CS на землю, подаємо команду CMD0, контрольна сума для якої дорівнює 0x95 (контрольна сума в нашому випадку потрібна тільки для команди CMD0, в інших випадках вона не перевіряється, тому весь час будемо використовувати 0х95 як контрольну суму). Далі, після байтової паузи, картка повинна відповісти 0х01, що означає, що вона увійшла в SPI режим і готова брати команди. Тепер подаємо команди CMD1, і після паузи очікуємо від картки відповіді 0х00, яка говорить про те, що карта готова до обміну даними.

Обмін даними між картою пам'яті і мікроконтролером буде проводитися стандартними блоками по 512 байт. Адресація карти по байтно починаючи з нуля, але зчитувати дані можна тільки блоками. Адресою блоку служить перший його байт. Тобто 0-й блок має адресу 0х0000, 1-й блок - 0х0200, 2-й блок - 0х400 і т.д. (справедливо для розміру блоку 512 байт). У SDHC картах адресація поблочна, адресою блоку слугує його номер. Операція читання блоку проводиться в наступному порядку. Подається команда CMD17, байтова пауза, якщо приймається відповідь 0х00, то після ще однієї байтової паузи приймається блок даних, структура якого показана на Рисунку 36., нижче.

Рисунок 36. Структура байтної паузи

Тимчасову діаграму операції читання можна подивитися на Рисунку 37., нижче:

Рисунок 37.

Як видно, блок починається з байта 0хFE (для команд CMD17/18, CMD24), далі йде 512 байт інформації та 2 байта контрольної суми (яка за замовчуванням не використовується). Операція запису проводитися схоже, команда CMD24, пауза, відповідь карти 0х00, і блок даних (так як контрольна сума не перевіряється, то її поле можна заповнити випадково). Далі слідує відповідь карти про прийом блоку даних, наведений на Рисунку 37 нижче.

Рисунок 38.

Після чого busy стан, коли карта записує отримані дані. Тимчасова діаграма операції запису наведена на Рисунку 39. , нижче.

Рисунок 39.

Блок схема флеш пам'яті

В даний час карти пам'яті micro SD забезпечує до 1024000000 байт пам'яті з використанням шлеф мікросхем пам'яті. SD карта включає інтелектуальний контролер який керує протоколами обміну даними, зберігання їх та пошук, керуванням живленням та часом контролю. Блок схема micro SD Card наведена на Рисунку 40.

Рисунок 40.

5.8 Опис COM порту RS232

Загальний опис

RS-232 - фізичний рівень для асинхронного (UART) інтерфейсу. Історично мав широке поширення в телекомунікаційному обладнанні для персональних комп'ютерів. В даний час все ще широко використовується для підключення спеціального обладнання до комп'ютерів, однак активно витісняється інтерфейсом USB. RS-232 забезпечує передачу даних і деяких спеціальних сигналів між терміналом (англ. Data Terminal Equipment, DTE) і комунікаційним пристроєм (англ. Data Communications обладнання, АКД) на відстань до 15 метрів.

Призначення

Спочатку створювався для підключення телефонних модемів до комп'ютерів. У зв'язку з такою спеціалізацією має вигляд, наприклад, окремої лінії. Поступово телефонні модеми перейшли на інші інтерфейси (USB), але роз'єм RS- 232 мався на всіх персональних комп'ютерах і багато виробники обладнання використовували його для підключення свого обладнання. Але ми його використовуємо для зв'язку з комп'ютером, а саме для програмування мікроконтролера.

Принцип роботи

RS-232 - провідний дуплексний інтерфейс. Метод передачі даних аналогічний асинхронному послідовному інтерфейсу. Інформація передається по проводах двійковим сигналом з двома рівнями напруги. Логічному «0» відповідає позитивна напруга (від +5 до +15 В для передавача), а логічного «1» від'ємне (від -5 до -15 В для передавача). Для електричного узгодження ліній RS-232 і стандартної цифрової логіки UART випускається велика номенклатура мікросхем драйверів.

Призначення контактів

У наведеній нижче таблиці 7 показано призначення контактів 9-контактного з'єднувача DB9. Таблиця показує розпайку вилки обладнання обробки даних (DTE). Розетка пристрою передачі даних (АПД) розпаяна так, що два роз'єми стикуються безпосередньо, або через кабель, розпаяний "контакт в контакт".

Рисунок 41. Зовнішній вигляд RS-232

Таблиця 7.

Контакт

Напрям передачі та ім'я сигналу

1

<

Carrier Detect (CD) Наявність несучої частоти

2

<

Received Data (RD) Приймальні дані

3

>

Transmitted Data (TD) Передавальні дані

4

>

Data Terminal Ready (DTR) Готовність ООД

5

-

Signal Ground Загальний

6

<

Data Set Ready (DSR) Готовність ОПД

7

>

Request To Send (RTS) Запит на передачу

8

<

Clear To Send (CTS) Готов передавати

9

<

Ring Indicator (RI) Наявність сигналу виклику

Для передачі даних призначені ланцюги RD і TD. Решта ланцюгів призначені для індикації стану пристроїв (DTR, DSR), управління передачею (RTS, CTS) та індикації стану лінії (CD, Род-Айленд).

Технічні подробиці

Усі сигнали в інтерфейсі потенційні, з номінальними рівнями +12 В і -12В відносно загального проводу (сигнальна земля). Логічній одиниці відповідає рівень-12В, логічному нулю відповідає +12 В.

RS232 називають послідовним інтерфейсом, оскільки потік даних передається по одному проводу біт за бітом. У відсутність передачі даних лінія знаходиться в стані логічної одиниці (-12В). Швидкість передачі даних стандартом не нормується, але зазвичай вибирають з ряду 110, 300, 600, 1200, 2400, 4800, 9600, 19200 біт в секунду. В основному використовується асинхронний режим роботи, при якому дані передаються фреймами. Кожен фрейм складається з стартового біта, бітів даних, біта контролю парності (може бути відсутнім), стопового бита. Біти байта даних передаються хвостом вперед , починаючи з молодшого біта.

Для правильного стикування приймачі на обох пристроях повинні бути запрограмовані однаковим чином, тобто повинні збігатися швидкість, кількість бітів даних (7 або 8), тип контролю по парності, довжина стопового біта (1, 1,5 або 2). При точних розрахунках часу на передачу масиву байтів поряд з бітами даних слід враховувати всі службові біти.

На Рисунку 42 наведена "осцилограма" одного фрейма при наступних налаштуваннях: 8 бітів даних, контроль за непарності (паритету непарні), 1 стоповий біт:

Рисунок 42.

Стартовий біт завжди йде рівнем логічного нуля, стоповий - одиницею. Стан біта паритету визначається настроюванням передавача. Біт доповнює число одиничних бітів даних до непарності (паритету непарні), парності (паритету навіть), може не використовуватися (парності немає), бути завжди одиницею (знак) або нулем (пропуск).

Підключення мікросхеми RS232

Але COM порт не може існувати без мікросхеми RS232. Дана мікросхема формує напругу на виході пристрою(терміналу) до комп'ютера. Іншими словами можна сказати, що RS232 виступає комутатором змінної напруги. Головною перевагою мікросхеми є те, що вона може як передавати так і приймати сигнали зі швидкістю 115 Кбіт/с та коштує значно дешево.

До її складу входять лінійні приймачі та передавачі, які забезпечують роботу мікросхем вузлів подвоювача і перетворювача напруги живлення. На виході мікросхеми формується напруга +10 В і -10 В. Ця мікросхема забезпечує обмін даними по уніполярним лініях. Так як інтерфейс RS232 радіальний, входи "Вибір" в мікросхемах серії не передбачені.

Для безпосереднього сполучення типового UART-порту мікроконтролера із з'єднувачем інтерфейсу RS232 пропоную мікросхему IL75232 (підключеня інших подібних мікросхем здійснюється аналогічно). Мікросхема дозволяє реалізувати функціонально завершений порт RS232 з використанням мінімального числа елементів. Призначена для застосування в програмованих контролерах, керуючих комп'ютерах і подібних їм виробах. Гранична швидкість передачі даних 120 Кбіт / с.

Рисунок 43. Типова схема включення мікросхеми MAX232

Отже, можна зробити такий висновок, що RS232 є COM порт в телекомунікації, стандарт послідовний синхронній та асинхронній передачі двійкових даних між терміналом та кінечним пристроєм.

6. Необхідні елементи, прилади і ПЗ для розробки проекту:

1.Програмне забезпечення Proteus isis;

2.Atmel studio;

3.Отладочная плата на базі ATMega32.

4.Программатор USB-Basp;

5. Електронні компоненти згідно вищезгаданого списку;

6.Слот плата для SD card;

7.Лабораторний блок живлення;

8.Осцилограф С1-99;

9.Мільтіметр М888.

Налагоджувальні і макетні плати розроблялися під програмним управлінням Proteus isis і виготовлялися з використанням фоторезисту з наступним травленням в розчині хлорного заліза. Електронні компоненти були замовлені і придбані на електронному порталі Ebay.com і отримані з Китаю.

7. Розроблення власного метео-балістичного суматора

Розроблюваний нижче пристрій орієнтується на значну дешевизну, сумісність з багатьма застосовуваними ОП і стрілецьких комплексів, чи не буде прив'язане до стандартних балістичним даними БП і об'єднає позитивні сторони вищевказаних приладів. На даний момент розроблювальний пристрій не має аналогічних приладів розроблених в інших країнах.

Ідея полягає в тому, що б використовуючи обчислювальні та операційні можливості МП фірми Atmel ATMEGA32 оброблювальні дані надходять з датчиків, і з перебувають табличних даних які оператор завантажує на SD- карту, виробляючи з ними математичні обчислення виводити дані і поправки на ЖК екран та індикатори приладу.

При цьому прилад виконує функції:

ь Визначення температури повітря і дельта Т поправку на дальність в слідстві зміни температури повітря від табличної;

ь Визначення вологості повітря і дельта Hg поправку на дальність в слідстві зміни вологості повітря від табличної (тому вплив вологості повітря надає не значний вплив то на даний момент опціонально);

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

ь Визначення положення СГ, що включає в себе контроль завалу гвинтівки і кута місця цілі і відповідно визначення поправки по задану дальність при стрільбі СГ на не нульовий кутах місця цілі;

ь Виводить дані і поправки на РКІ екран;

ь Виводить звукове повідомлення при завалі;

ь Введення і виведення значень на комп'ютер використовуючи RS232, а також отримання даних від анемометра - приладу для вимірювання швидкості вітру (опціонально).

ь Управління здійснюється через клавіатуру або сенсорний екран в залежності від виконання приладу (установка на приціл або на приклад).

Блок схема даного пристрою зображена на Рис.45

Рис.45 Метео - балістичний суматор, блок схема пристрою

Принцип роботи пристрою

Розглянемо основні принципи роботи пристрою в скороченому варіанті:

1.Інтегральний датчик температури DS18b20 працює з МК по шині 1wire і за запитом відправляє поточне значення температури середовища в якій розміщений датчик.

2.3-х осьовий акселерометр ММА7361 відправляє значення положення датчика в аналоговому вигляді від 0 - 3.3 вольт на входи АЦП МП де відбувається обробка і виведення цифрових значень для розрахунків в програмному контенті.

3.Сенсорна панель обслуговується за алгоритмом який обчислює чи було натиснення і які координати точки, після чого оброблена інформація передається в програмні змінні для подальшої обробки при цьому використовується АЦП МП.

4.Карта пам'яті SD-card працює з МП по SPI протоколу використовуючи методику petitfats - спрощений алгоритм роботи з файлової системи карти пам'яті на якій записаний текстовий файл Table.txt який містить табличні дані використовуваного БП обираного користувачем.

5.РКІ від мобільного телефону Nokia3310 працюючи за поширеним протоколом SPI виводить всю поточну інформацію для візуального контролю, користувач при цьому може регулювати підсвічування РКІ використовуючи ШІМ (широтно-імпульсну модуляцію) вбудовану в МК.

6.Все дані крім того дублюються виведенням на СОМ порт rs232, що дозволяє підключити зовнішні пристрої введення-виведення (комп'ютер, анемометр).

7.Клавіатура підключена (через зсувний регістр - опціонально) до порту В дозволяє здійснювати загальне управління приладом.

8.Звуковий сигналізатор сигналізує через емітерний повторювач на транзисторі КТ3102 про події в пристрої.

9.Світлодіодна шкала одночасно дублює показання завалу СГ.

Принципіальна електрична схема пристрою наведена в ДОДАТКУ 2.

Опис програмного коду

Програмне забезпечення для МК atmel ATmega32 написано мовою Сі під управлінням оболонки Atmel Studio 6.0. Програмний код налагоджувався за допомогою ПЗ Proteus 7.0 і виготовленої самостійно отладочної плати для МК atmega 32 і імітує плати МБС з підключеними до неї датчиками положення в просторі, температури, сенсорного екрану і адаптерами підключення зовнішніх пристроїв micro Sd card і ПК.

Архітектура побудови коду модульного типу з використанням зовнішніх бібліотек і зокрема полягає:

mbc.c - основне тіло програми яке включає основні функції і керування мбс;

mbc.h - бібліотека налаштування і підключення периферії;

drbor.h - образ завантаження заставки(змінюється);

18b20.c - контент і бібліотека функцій для управління ІМС датчика температури Dallas 18 в 20;

n3310.c - опис функцій для управління РКІ nokia 3310 через SPI інтерфейс;

n3310.h - бібліотека для настройки підключення та управління РКІ nokia 3310;

pff.c - опис функцій для управління micro SD card через SPI інтерфейс, використовуючи скорочену систему управління файловою системою Petit Fats.

pff.h - бібліотека для настройки підключення та управління SD card;

Розкривати опис бібліотек і функцій 18b20. *, N3310. *, Pff. * не будемо. Так як ці дані взяті з загальновідомих джерел, і трохи доопрацьовані і налаштовані для роботи з нашим МК. Зупинимося на описі коду управління МБС.

Функціонально - блоковий опис коду програми досить розгалужений і обширний тому візуально - блокове представлення коду опустимо і зупинимося на поблочний і по функціойованому описі контенту програми.

Почнемо з бібліотеки налаштування пристрою mbs.h;

Після підключення стандартних бібліотек для обслуговування пристрою:

#include <avr/io.h>

#include <avr/eeprom.h>

Зробимо макровизначення виводів МК, так як згідно опису МК на порту А знаходиться АЦП МК то визначимо:

#define ADC_PORT PORTA

#define SET_ADC_PORT DDRA

#define TS_Y_MINUS PA0//Сенсорний екран виводу Y-

#define TS_Y_PLUS PA1//Y+

#define TS_X_MINUS PA2//X-

#define TS_X_PLUS PA3//X+

#define AXE_X PA4//вісі акселерометра X

#define AXE_Y PA5//ADXL345Y

#define AXE_Z PA6//Z

де встановимо синонім на порт А ADC_PORT, і встановимо конфігуратор даного порту SET_ADC_PORT при цьому виводи сенсорного екрану і осі акселерометра будуть підключатися згідно вищевикладеного контенту.

Опишемо порт В на якому в нашому випадку зконфігурований SPI порт, шина 1wire і будуть підключені зовнішні пристрої такі як датчик температури 18 b 20, РКІ Nokia 3310 і підключений зовнішній носій інформації у вигляді флеш карти micro Sd card отже:

#define DATA_PORT PORTB

#define SET_DATA_PORT DDRB

#define RES PB0//reset LCD - перезапуск ЖКІ

#define DC PB1//data-command т.ч. данні або команда для РКІ

#define CE PB2//command enabled LCD, вкл/викл РКІ

#define TEMP PB3//шина 1wire для датчика температури 18b20

#define CS PB4//enable SD card, вкл.викл micro SDcard

#define MOSI PB5//MOSI - SPI master output slave input

#define MISO PB6//MISO - SPI master input slave output

#define CLK PB7//SPI синхронізація для РКР та SD card

де наш МК завжди є master т.ч. провідним основним пристроєм, а РКІ nokia 3310 і micro SD card є slave тобто другорядними веденими пристроями.

Порт С є в даній конфігурації пристрою допоміжним і служить для забезпечення функціоналу micro Sd card і зовнішнього звуковипромінювача який сигналізує про зовнішні події і положення горизонтальній осі нахилу пристрою. Тому макровизначаємо тільки необхідну частину порту С призначивши синонім PR_PORT:

//порт C - керування переферією

#define PR_PORT PORTC

#define SET_PR_PORT DDRC

#define SD_INS PC5//індикація наявності в слоту sd cаrd

#define SD_WP PC6//наявність захисту від запису sd cаrd

#define BEL PC7//біпер - зовнішній звуковой випромінювач

Порт D служить для зв'язку з зовнішніми пристроями МБС такими як анемометри, зовнішні гарнітури і ПК використовуючи послідовну шину передачі UART порт і також використовує апаратну широтно - імпульсну модуляцію МК для управління підсвічуванням РКІ МБС, інші виводи не використовуються тому макровизначення має вигляд:

//порт D - керування RS232 та підсвіткою

#define DATA_PORT PORTD //порт керування клавіатури і uart

#define SET_DATA_PORT DDRD//конфігуратор порту D

#define RX PD0//232порт - зчитування даних

#define TX PD1//232порт - відправка даних

#define PWM_OUT PD5//вихід ШІМ для підсвітки LED LCD

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

#define SetBit(port,bit) port |= _BV(bit)

#define ClrBit(port,bit) port &= ~_BV(bit)

де SetBit встановлюватиме на виведення 1, а ClrBit встановить логічний 0 на виведенні МК, у подальший цей конструктив буде широко використовуватися в подальшому програмному коді.

Далі визначаємо змінні які допоможуть нам встановить uart порт на швидкість обміну в 9600 0pbs:

#define BAUD 9600 //швидкість обміну по порту UART

#define MYUBRR F_CPU/16/BAUD-1 //значення 51 відповідає табличним значенням стр.160

Де константа MY UBRR дорівнюватиме 51 при частоті МК F_CPU = 8MHz, що відповідає швидкості порту в 9600 бод згідно ТО МК табл.

Величини швидкості в 9600 бод цілком достатньо для обслуговування периферії пристрою і для достатньої швидкодії через com порт ПК виступаючого як аналізатора і трансформатора інформації надходить як від МК так і на МК.

У зв'язку з тим, що наш пристрій неможливий без використання незалежнії пам'яті МК, на якій зберігаються фабричні установки пристрою необхідні для коректної роботи МБС необхідно визначити розмір пам'яті і змінні, які будуть перебувати в EEPROM Atmega32:

//Визначення ЕЕPRОМ

// застосуємо однорівневий масив для налаштувань приладу за замовчуванням

/*EEMEM unsigned int mbs_eeprom[24]=

{177,165,699,808,// дані для налаштування тачскріну x1, y1, x2, y2

// верхня і нижня межа тачскрину

0xC8,0x0C,0xFF,0x01,// контрастність, інверсність (0x0C-день 0x0D-//ніч),підсвітка 0-255, звукon/off 1/0

512,264,496,0,//поправки x_axe0, x_axe_min,x_axe_max,резерв

512,264,496,0,//поправки y_axe0, y_axe_min,y_axe_max,резерв

512,264,496,0,//поправки z_axe0, z_axe_min,z_axe_max,резерв

1,1,1,1};//резерв

*/

Даний опис при компонуванні коду ініціалізуємо 1 раз, отримуючи файл mbs.eep, який використовуємо при записі EEPROM Atmega32 через наявний у нас програматор USBBASP. Надалі код закоментуємо як зазначено вище і використовуємо просте визначення (виділення) пам'яті МК для наших потреб.

uint16_t mbs_eeprom [] EEMEM;

На цьому опис бібліотеки для mbs.c закінчуємо.

Опис основного коду

Опис основного програмного коду mbs.c

Для коректної і правильної роботи програми нам необхідно встановити потрібну швидкість (частоту) роботи МК:

#define F_CPU 8000000UL//частота для МК 8 МГц

і підключити потрібні бібліотеки для роботу з МК де:

#include <avr/io.h>//бібліотека вводу виводу

#include <util/delay.h>//бібліотека затримок і пауз

#include <avr/pgmspace.h>//бібліотека керування оперативною пам'яттю

#include <string.h>//работа з рядковими змінними

#include <stdlib.h>//работа зі стандартними операндами

#include <avr/eeprom.h> //работа з енергонезалежною пам'яттю

Це стандартні бібліотеки включені в набір Atmel Studio і опис даних бібліотек проводити не будемо.

Також підключаємо необхідні нам бібліотеки для нашої переферії:

#include "mbs.h" //вищепоказана бібліотека для налаштування пристрою

#include "n3310.h"//бібліотека для налаштування LCD Nokia 3310

#include "drbor.h" //бібліотека з зображенням малюнка заставки при запуску

#include "pff.h"//бібліотека керування PetitFats

#include "diskio.h"//бібліотека дискових операцій

#include "integer.h"//бібліотека замовчування змінних

Після підключення бібліотек назначаємо необхідні нам змінні які будуть використовуватися в наступних розрахунках при побудові коду програми:

volatile unsigned long int x_axe, y_axe, z_axe;

volatile unsigned int temp, adc_u;

Назначаємо глобальні змінні які будуть видні і в других суміжні файлах проекту, де:

x_axe, y_axe, z_axe - значення даних по вісям датчика положення;

temp - нинішнє значення температури;

adc_u - дані значення АЦП МК.

Другі локальні змінні необхідні для роботи:

char str[10]; //строкова змінна для символьних значень.

char znak,//знак температури

znak_ugol,//знак кута місця цілі

tscr_x, tscr_y, //тачскрін координати натиску

tscr_status, //тачскрін статус нажаття або ні

invers_mode, //Вид зображення на РКІ інверсне(1) або нормальне(0)

lcd_contrast_value,//РКІ - контрастність

lcd_light_value, //РКІ - рівень підсвітки

alfa, mydata_marker1=0, mas2, mas1; //допоміжні змінні для розрахунків

unsigned long int tscr_x1_calibr, tscr_x2_calibr, tscr_y1_calibr, tscr_y2_calibr;//калібровані значення для сенсорного екрану

unsigned char SD_status, //статус готовності micro Sd card

begin_str=0, scr_bar=0, //змінні для роботи з екранною інформацією speaker_on=1;//статус зовнішнього звуковипромінювача вкл-1 викл-0

Крім цього виявимо значення табличних значеннях для кулі 223rem (5.56х45мм) калібру які будуть використовуватися по замовчуванням так табличні данні при відсутності інформації з флеш пам'яті micro SD card файл table.txt які опишемо в масиві:

volatile char mydata[20][14]= {

{'_','_','_','_','_','_','_','_','_','_','_','_','_'},//1

{'d','T','=','+','1','6','C',' ','H','=','7','0','%'},//2

{'7','5','0','m','m',' ',' ','h','=','1','5','0','m'},//3

{' ',' ',' ','d','A','=','+',' ','0','"',' ',' ',' '},//4

{'X',' ',' ',' ','Y',' ',' ',' ','Z',' ',' ',' ',' '},//5

{'|','м','е','т','р','|','т','ы','с','|','в','е','т'},//6

{'|','1','0','0','m','|',' ',' ','1','|',' ',' ','1'},//7

{'|','1','5','0','m','|',' ',' ','0','|',' ',' ','2'},//8

{'|','2','0','0','m','|',' ',' ','3','|',' ',' ','3'},//9

{'|','2','5','0','m','|',' ',' ','5','|',' ',' ','4'},//10

{'|','3','0','0','m','|',' ','1','2','|',' ',' ','5'},//11

{'|','3','5','0','m','|',' ','1','6','|',' ',' ','6'},//12

{'|','4','0','0','m','|',' ','2','0','|',' ',' ','7'},//13

{'|','4','5','0','m','|',' ','2','5','|',' ',' ','8'},//14

{'|','5','0','0','m','|',' ','3','1','|',' ',' ','9'},//15

{'|','5','5','0','m','|',' ','3','8','|',' ','1','0'},//16

{'|','6','0','0','m','|',' ','4','5','|',' ','1','5'},//17

{'|','6','5','0','m','|',' ','5','5','|',' ','1','9'},//18

{'|','7','0','0','m','|',' ','6','5','|',' ','2','2'},//19

{'|','7','5','0','m','|',' ','7','5','|',' ','3','0'}//20

};

Даний масив є аналогом файлу table.txt який знаходиться на карті пам'яті SD, файл повинен відповідати деяким вимогам.

1. Повинен мати в рядку 14 символів;

2. Повинен мати не менше 20 рядків;

3. Перші 6-сть рядків - маска і повинні такий вид:

РІВЕНЬ

dT=+16"CH=70%;

750mm, h=150m;

d@=+ 0";

X Y Z;

|метр|тис|віт

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

Наступні розмежувальні знаки "|" повинні залишатися на місцях і використовуються для обмеження границь даних (дальності в метрах, поправка по висоті в поділках кутоміра - тисячних, і поправка на бічну складову вітру 3м/с на одиницю дальності) і має вигляд:

|100m| 1| 1

|150m| 0| 2

|200m| 3| 3

|250m| 5| 4

|300m| 12| 5

|350m| 16| 6

|400m| 20| 7

|450m| 25| 8

|500m| 31| 9

|550m| 38| 10

і т.д.

Застосування іншого формату даних призведе до помилки розрахунків при коригуванні значень по рубежам стрільб.

У подальшому визначаємо буфери рядкових значень для роботи з потоками даних через uart порт МК:

//Буфер для читання/запису по СOM порту

//------------------------------------------------------------------

char read_buf[128]={};

char write_buf[128]={'w','r','i','t','e',' ','o','k','\r','\n',0x00};

//------------------------------------------------------------------

Після закінчення опису змінних приступимо до опису та написання функцій які визначають роботу МБС:

//Програма формування затримки

void pause (unsigned int a)

{

unsigned int i;

for (i=a;i>0;i--);

}

Функція отримуючи значення від 0-1024 формує затримку в 1*а машинних циклу:

void pause100 (unsigned int a)

{

unsigned int i;

for (i=a;i<7;i++) _delay_ms(100);

}

Функція отримуючи значення від 0-7 формує затримку 0.1-0.7сек.

Також нам необхідні функції:

//програма зміни знаку змінної

int sign (int x);

{

if (x<0) return -1;

if (x>0) return 1;

return 0;

}

Дана повертає знак змінної х, а якщо значення х = 0 то повертає 0.

//Програма розрахунку по модулю

int abs (int x)

{

if (x<0) return -x;

else return x;

}

Обчислення змінної х за модулем.

Приступаємо до опису та ініціалізації порту uart:

//ініціалізація порту

void uart_init(void)

{

/* Встановлення швидкості зв'язку */

UBRRH = MYUBRR>>8;

UBRRL = MYUBRR; //Встановить швидкість 9600 бод

UCSRA = 0x00;//Режим работи

UCSRB = (1<<RXEN)|(1<<TXEN);//Режим отправки и передачи

UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

}

Встановлюємо режим роботи порту uart:

UCSRA = 0x00;

Запише в регістр UCSRA в змінні біти TXC, U2X, MPCM = 0

Що буде відповідати:

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

данные биты не используем - поэтому 0.

Устанавливаем статут порта

UCSRB = (1<<RXEN)|(1<<TXEN);//Режим отправки и передачи

UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);

Установим режим передачи данных

то есть включаем режим записи в регистр UCSRC (1<<URSEL)

Установим 8ми битную передачу данных(1<<UCSZ1)|(1<<UCSZ0);

При этом биты

UMSEL, UPM1, UPM0, USBS - остаются равными нулю что соответствует 8ми битному асинхронному режиму передачи с одним стоповым битом без режима четности, т.е стандартному режиму 8n1 применяемого в широко распространенных прикладных устройств.

Рассмотрим отправку данных по порту uart

//отправка байта по порту

void uart_transmit(char data )//transmit byte by UART

{

while ( !( UCSRA & (1<<UDRE)) );

UDR = data;

}

Отправка байта data осуществляется записью значении в регистр UDR значение считается записанным когда бит UDRE регистра UCSRA станет равным 0

т.е пока происходит запись бит UDRE будет равен 0 и цикл ожидания будет продолжаться при появления 1 в бите UDRE цикл будет прекращен и значение data присвоится регистру UDR и т.д.

Используя первичную функцию uart_transmit можно осуществить отправку сообщения msg размер сообщения должен не превышать 256 символов

//отправка сообщения по порту

void uart_transmit_message(char* msg)//transmit message by UART

{

unsigned char i;

i=0;

while ((i<256)&(msg[i]!=0x00) )

{

uart_transmit(msg[i]);

i++;

}

}

Организуется цикл в котором идет перебор действительных значений буфера msg по порядку от 0-256 как только встречается пустое значение или превышение счетчика >255 цикл и вызов выше рассмотренной функции uart_transmit которой передается последовательное значение буфера msg - прекращается. Т.о. передаются значения буфером до 256 байт что достаточно для передачи всех полезных сообщений от МК.

Инициализация и работа с ШИМ

// инициализация ШИМ для управления подсветкой дисплея и линейки уровня на светодиодах

void init_pwm(void){

SET_DATA_PORT|= _BV(PWM_OUT);

TCCR1A = (1<<COM1A1)|(1<<WGM10); //На выводе ОС1А едbница, когда

//OCR1A==TCNT1, делитель восьмибитный

TCCR1B = (1<<CS10);// делитель =1

}

Установим вывод порта d на выход SET_DATA_PORT|= _BV(PWM_OUT);

Сконфигурируем вывод так чтобы на выводе OC1A присутствовала 1 когда счетчик TCNT1 будет равен значению регистра ШИМ OCR1A, после чего счетчик начинает новый отсчет

Регистр WGM10 устанавливает 1 режим - 8ми разрядный ШИМ

В регистре TCCR1B = (1<<CS10)

устанавливая бит CS10 в 1 устанавливаем частоту ШИМ без предделителя

Далее следует простая функция gпердачи значения ШИМ в регистр OCR1A

// передача значения для установки ШИМ

void set_pwm(unsigned char i){

OCR1A = i;

pause100(1);

}

Таким образом осуществляется управление освещенностью светодиодной посветкой ЖКД.

Опишем функцию вывода приветствия или приветствующего изображения хранящегося в файле drbor.h

//функция вывода сообщения приветствия

void my_hello(){

LcdImage (drbor);//вывод сохраненного граф.изображения на дисплей

LcdUpdate();//непосредственный вывод из буфера на ЖКД

_delay_ms(1000);//задержка на показ изображения

}

Используя системную функцию LcdImage передаем ей переменную в виде const uint8_t drbor[] PROGMEM которая при подключении библиотеки drbor.h заносится в программную память МК где и выделяет ей место наряду с контентом ПО.

После производим обновление памяти ЖКИ и задерживаем на показ сообщения в течении 1сек.

Инициализация порта АЦП

//инициализация АЦП

void adc_init(){

SET_ADC_PORT = 0x01; //установим вывод РА0 порта А как вывод

//остальные как входы

ADC_PORT = 0х00;//установим на выводах 0

pause(50);//задержка для установки

//предустановка АЦП

ADMUX = (1<<REFS0)|(1<<ADLAR)|(1<<MUX1)|(1<<MUX0);

//ADEN включаем АЦП и ADPS - предделитель F_CPU(частота МП)/2

//для нормальной точности нужно частоту прескалера АЦП выдержать в районе 50-200кгц

ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //насторойка для F_CPU 8mHz частота прескалера 8/64/2 = 63 кгц

pause(20); //даем возможность за это время установиться регистрам

}

Регистр ADMUX позволяет включать нужный нам в определенное время нужный нам АЦП находящийся на порту А (ADC_PORT)

В данном случае выбран ADC3 битами (1<<MUX1)|(1<<MUX0);

Выбираем источник опорного напряжения АЦП МК

Т.е. выбираем ФМСС с внешним конденсатором на AREF устанавливая бит REFS0 в 1.

При схеме подключения

Бит ADLAR выровняет наш результат значения регистра ADC (АЦПреобразования) по левой стороне

Используя регистр ADCSRA в дальнейшем включаем и настраиваем частоту прескалера АЦП которая должна находится в пределах 50-200кГц для оптимального измерения и рассчитывается по формуле Fмп/Прескалер/Предделитель т.е.

таким образом, частота прескалера АЦП в нашем случае равна 800000/2/64 = 62500Гц, что удовлетворяет условиям использования.

Битом ADEN производим включение АЦП. Задержка в 20 тактов позволит установиться регистрам в нужное положение.

Получение данных АЦП

//функция получение данных АЦП

unsigned int adc_data(void){

unsigned int v=0;

unsigned char i;

//запуск преобразования

//используем последовательное приближение для 5ти результатов

for (i=0;i<5;i++){

ADCSRA |=(1<<ADSC);

while((ADCSRA&_BV(ADIF))==0x00); //Ждем окончания преобразования по АЦПv=v+(ADCL/64+ADCH*4);

}

return v/i;

}

Данная функция использует осреднение полученных результатов из 5ти замеров, осуществляя 5ть циклов включения измерений

ADCSRA |=(1<<ADSC);

Где бит ADSC включает преобразование ADCSRA |=(1<<ADSC);

Далее ждем пока бит ADIF не станет равным 1 сигнализируя о том что преобразование произведено.

while((ADCSRA&_BV(ADIF))==0x00);

(ADCL/64+ADCH*4); Таким образом получаем совокупное 10битное значение регистра ADC его старшие ADCH и младшие ADCL значения сдвинутые влево и переведенные в цифровой вид

в дальнейшем возвращаем среднее значение ADCH+ADCL

v=v+(ADCL/64+ADCH*4);

return v/i;

Считывание настроек МВС из EEPROM и занесение в текущие переменные.

// функция считывания калибровочных констант и установки преднастроек устройства из ЕЕПРОМ

void mbs_calibr_const(void){

eeprom_busy_wait();//ждем готовности еепром

tscr_x1_calibr = eeprom_read_word(&mbs_eeprom[0]);

tscr_y1_calibr = eeprom_read_word(&mbs_eeprom[1]);

tscr_x2_calibr = eeprom_read_word(&mbs_eeprom[2]);

tscr_y2_calibr = eeprom_read_word(&mbs_eeprom[3]);

//устанавливаем режим контрасности/яркости

lcd_contrast_value = eeprom_read_word(&mbs_eeprom[4]);

if (lcd_contrast_value>0xCF) lcd_contrast_value = 0xC8; //проверка если

//значения инверсии экрана отлично от

//0x0D то вкл норм.режим отображения

LcdContrast (lcd_contrast_value);

// устанавливаем режим отображения экрана нормальный/инверсный

invers_mode = eeprom_read_word(&mbs_eeprom[5]);

if (invers_mode!=0x0D) invers_mode = 0x0C; //проверка если значения

//инверсии экрана отлично от

//0x0D то вкл норм.режим //отображения

else LcdInvers(invers_mode);

//устанавливаем напряжение подсветки дисплея используя переменную для //Широтно Импульсной Модуляции МК

lcd_light_value = eeprom_read_word(&mbs_eeprom[6]);

if (lcd_light_value > 0xFF) lcd_light_value = 0xFF; //проверка если

//значение выходит за рамки //действительных значений 0-255 для //ШИМ

set_pwm(lcd_light_value);//устанавливаем значение ШИМ

//cчитываем флаг вкл/выкл(1/0) внешнего звукоизлучателя / бипера

speaker_on = eeprom_read_word(&mbs_eeprom[7]);

if (speaker_on > 0x01) speaker_on = 0x01; //проверка если значение выходит

//за рамки действительных значений 0-1 //для флага

}

Разберем функцию поэтапно

eeprom_busy_wait();//ждем готовности еепром

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

tscr_x1_calibr = eeprom_read_word(&mbs_eeprom[0]);

tscr_y1_calibr = eeprom_read_word(&mbs_eeprom[1]);

tscr_x2_calibr = eeprom_read_word(&mbs_eeprom[2]);

tscr_y2_calibr = eeprom_read_word(&mbs_eeprom[3]);

Здесь происходит считывание калибровочных констант которые обозначают граница использования сенсорного экрана

//устанавливаем режим контрасности/яркости

lcd_contrast_value = eeprom_read_word(&mbs_eeprom[4]);

if (lcd_contrast_value>0xCF) lcd_contrast_value = 0xC8;

Производится считывание в переменную lcd_contrast_value значения контрастности для дисплея nokia 3310 которое должно быть в пределах 0 - 0xCF если значение отлично от номиналов то по умолчание назначается значение контрастности 0xC8 Функция LcdInvers напрямую устанавливает контрастность дисплея.

lcd_light_value = eeprom_read_word(&mbs_eeprom[6]);

переменная lcd_light_value получает значение подсветки ЖКД из ЕЕПРОМ

if (lcd_light_value > 0xFF) lcd_light_value = 0xFF;

если значение подсветки более 255 то устанавливаем максимальную подсветку назначая переменной значение 255

set_pwm(lcd_light_value);//устанавливаем значение ШИМ

передаем вышеописанной функции set_pwm значение переменной подсветки, где и производится установка/регулирование для светодиодов подсветки ЖКД

Производим считывание переменной обозначаемой включение или выключение звукового сигнала

speaker_on = eeprom_read_word(&mbs_eeprom[7]);

if (speaker_on > 0x01) speaker_on = 0x01;

т.к. переменная speaker_on должна иметь значение 0 или 1, при этом если полученное значение выходит за рамки значений тогда присваиваем 1 т.е. сигнал включен.

Рассмотрим функцию подачи короткого звукового сигнала

//функция подачи n -кол-ва зв.сигнала

//где i - кол-во бипов (сигналов)

void beep (unsigned char n){

for (; n>0; n--)

{

SetBit(PR_PORT,BEL); //подать 1 на BEL

_delay_ms(50);

ClrBit(PR_PORT,BEL);//подать 0 на BEL

_delay_ms(50);

}

}

Организуем n - циклов, где n - принимаемое значение данной функции, подадим сигнал на вывод BEL порта PR_PORT задержим на 50ms и отключим сигнал , задержим уровень логического 0 на 50ms и так n - раз.

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

...

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

  • Визначення температури в приміщенні, аналіз на задимленість та своєчасна подача сигналів. Структурна схема пристрою, обґрунтування достатності апаратних засобів та програмних ресурсів. Принципова схема пристрою та схема підключення цифрового датчика.

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

  • Найдоцільніший тип мікропроцесорного пристрою для керування обладнанням - однокристальний мікроконтролер (ОМК). Розробка принципової схеми пристрою контролю температури процесу. Складання програми мікроконтролера та її симуляція в Algorithm Builder.

    реферат [2,1 M], добавлен 11.08.2012

  • Основні вимоги до конструкції пристрою автоматизованої системи управління (АСУ) тестування працездатності. Компонування і аналіз умов експлуатації пристрою АСУ тестування працездатності. Розрахунок основних вузлів, надійності і теплового режиму пристрою.

    курсовая работа [408,9 K], добавлен 08.03.2012

  • Розрахунок інвертуючого суматора. Розробка структурної схеми. Вибір операційного підсилювача. Розрахунок однофазного випрямляча малої потужності з інтегральним стабілізатором напруги. Моделювання пристрою в середовищі програми Electronics Workbench.

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

  • Обґрунтування достатності апаратних засобів та програмних ресурсів. Розподіл функцій пристрою між вузлами мікропроцесору. Проектування принципової схеми пристрою, формування тактових імпульсів. Програмне забезпечення мікропроцесора, лістинг програми.

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

  • Аналіз електричної схеми мікшера. Опис функціональної, структурної та електричної принципіальної схеми пристрою. Розробка та обґрунтування конструкції пристрою. Розрахунок віброміцності та удароміцності друкованої плати. Аналіз технологічності пристрою.

    дипломная работа [2,3 M], добавлен 12.12.2010

  • Розрахунок смуги пропускання приймача та спектральної щільності потужності внутрішніх шумів. Розрахунок чутливості приймача та бази сигналу. Принципова електрична схема підсилювача проміжної частоти радіоприймального пристрою, параметри мікросхеми.

    курсовая работа [476,2 K], добавлен 09.11.2010

  • Схема інтелектуального давача, побудованого на базі мікропроцесорного пристрою. Побудова контролера клавіатури та семисегментного індикатора. Ввід інформації з клавіатури. Вивід інформації на восьмисегментний індикатор. Робота аналого-цифрового пристрою.

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

  • Принцип функціонування пристрою охоронної сигналізації з дистанційним радіозв'язком. Розробка оптимальної конструкції. Площа та габарити друкованої плати, технологія її виготовлення. Вибір матеріалу та класу точності. Тепловий розрахунок пристрою.

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

  • Розробка конструкцій і технології процесу виготовлення друкованої плати пристрою. Обґрунтування вибору елементної бази, розрахунок структури технологічного процесу. Монтаж і складання проектованого виробу. Програма спектру для розводки друкованих плат.

    дипломная работа [5,5 M], добавлен 19.11.2015

  • Функціональна електрична схема і програма ПЗП мікропроцесорного пристрою для вимірювання температури. Розробка структурної схеми пристрою. Обґрунтування вибору комплектуючих. Опис електричних параметрів та загальних схем підключення основних мікросхем.

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

  • Розробка блоку контролю та управління пристрою безперервного живлення, із заданою вихідною напругою, електричною схемою принциповою, діапазоном робочих температур та тиском. Конструкція та технологія виготовлення виробу на підставі електричної схеми.

    дипломная работа [2,9 M], добавлен 12.07.2010

  • Загальна характеристика та принципи дії GSM-сигналізації. Порівняльний аналіз розроблювального пристрою з аналогами. Проведення розрахунків, які підтверджують працездатність пристрою й подальшу експлуатацію. Розробка принципової схеми і друкованої плати.

    дипломная работа [437,9 K], добавлен 12.12.2010

  • Обґрунтування й вибір функціональної схеми генератора коливань. Вибір і розрахунок принципових схем його вузлів. Моделювання роботи функціональних вузлів електронного пристрою на ЕОМ. Відповідність характеристик і параметрів пристрою технічним вимогам.

    курсовая работа [79,7 K], добавлен 15.12.2010

  • Розробка сигналізації для 10 квартир багатоквартирної будівлі. Опис пристрою. Основні характеристики і аналіз мікроконтролерів. Вибір інших елементів пристрою. Вибір середи програмування. Програмування мікроконтролеру. Фінальне налаштування та тестування.

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

  • Опис роботи схеми, знаходження передавальних функцій слідкуючого пристрою. Складання рівняння асинхронного двигуна. Визначення передавальних функцій системи. Аналіз граничного значення коефіцієнта передачі тахогенератора. Оптимізація роботи пристрою.

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

  • Аналіз стійкості вихідної системи автоматичного управління за критерієм Найквиста. Проектування за допомогою частотного метода корегуючго пристрою. Проведення перевірки виконаних розрахунків за допомогою графіка перехідного процесу (пакети Еxel і МatLab).

    курсовая работа [694,3 K], добавлен 10.05.2017

  • Специфіка розробки структурної, функціональної і принципової схеми автоматичного ПІД-регулятора за допомогою сучасних пакетів (OrCAD9.2). Блоки інтегральної та диференціальної складових і їх розрахунок. Схема суматора складових закону керування.

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

  • Основні вимоги, що пред'являються до головних електроприводам екскаваторів. Мікропроцесорні засоби для захисту двигунів змінного струму від перевантажень. Технічні параметри зразку пристрою захисту екскаваторних двигунів. Структурна схема пристрою.

    курсовая работа [2,6 M], добавлен 18.06.2015

  • Генератор - пристрій, призначений для перетворення енергії механічного руху в енергію електричного струму. Використання принципу електромагнітної індукції. Типи генераторів і їх параметри. Функціональна схема електронного пристрою та генератора імпульсів.

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

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