Мікроконтролери. 3x3x3 LED куб
Вибір мікроконтролера для вирішення поставленого завдання, апаратна обчислювальна платформа Arduino. Будова та особливості роботи напівпровідникового світлодіоду. Схема під’єднання дротів. Лістинг програмного коду для вирішення проблеми керування LED.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 14.05.2014 |
Размер файла | 1,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Міністерство освіти і науки україни
Національний університет "Львівська політехніка"
Кафедра автоматизованих систем управління
Розрахункова робота
з дисципліни "Системний аналіз"
на тему "Мікроконтроллери. 3x3x3 LED куб"
Виконав: студент групи КН-22
Кравчук А.В.
Прийняв: доцент каф. АСУ
Зербіно Д.Д.
Львів - 2012
Зміст
- Вступ
- 1. Вибір теми
- 2. Формування й аналіз проблеми
- 3. Вибір мікроконтроллера для вирішення поставленого завдання
- 4. Схема та під'єднання дротів
- 5. Лістинг програмного коду для вирішення проблеми
- Висновок
Вступ
Мікроконтромлер (англ. microcontroller), або днокристальна мікроЕОМ - виконана у вигляді мікросхеми, спеціалізована мікропроцесорна система, що включає мікропроцесор, блоки пам'яті для збереження коду програм і даних, порти вводу-виводу і блоки зі спеціальними функціями лічильники, компаратори, АЦП та інші).
Використовується для керування електронними пристроями. По суті, це - однокристальний комп'ютер, здатний виконувати прості завдання. Використання однієї мікросхеми значно знижує розміри, енергоспоживання і вартість пристроїв, побудованих на базі мікроконтролерів.
Мікроконтролери можна зустріти в багатьох сучасних приладах, таких як телефони, пральні машини, вони відповідають за роботу двигунів і систем гальмування сучасних автомобілів, з їх допомогою створюються системи контролю ісистеми збору інформації. Переважна більшість процесорів, що випускаються у світі - мікроконтролери.
При проектуванні мікроконтролерів доводиться дотримувати баланс між розмірами і вартістю з одного боку і гнучкістю і продуктивністю з іншою. Для різних застосувань оптимальне співвідношення цих і інших параметрів може розрізнятися дуже сильно. Тому існує величезна кількість типів мікроконтролерів, що відрізняються архітектурою процесорного модуля, розміром і типом вбудованої пам'яті, набором периферійних пристроїв, типом корпусу.
В той час, як 8-розрядні процесори загального призначення повністю витиснені продуктивнішими моделями, 8-розрядні мікроконтролери продовжують широко використовуватися. Це пояснюється тим, що існує велика кількість застосувань, в яких не потрібна висока продуктивність, але важлива низька вартість. В той же час, є мікроконтролери, з більшими обчислювальними можливостями, наприклад цифрові сигнальні процесори.
Обмеження за ціною і енергоспоживанням стримують також зростання тактової частоти контроллерів. Хоча виробники прагнуть забезпечити роботу своїх виробів на високих частотах, вони, в той же час, надають замовникам вибір, випускаючи модифікації, розраховані на різні частоти і напругу живлення. У багатьох моделях мікроконтролерів використовується статична пам'ять для ОЗП і внутрішніх регістрів. Це дає контролеру можливість працювати на менших частотах і навіть не втрачати дані при повній зупинці тактового генератора. Часто передбачені різні режими енергозбереження, в яких відключається частина периферійних пристроїв і обчислювальний модуль.
Окрім ОЗП, мікроконтролер може мати вбудовану незалежну пам'ять для зберігання програми і даних. У багатьох контролерах взагалі немає шин для підключення зовнішньої пам'яті. Найбільш дешеві типи пам'яті допускають лише одноразовий запис. Такі пристрої підходять для масового виробництва в тих випадках, коли програма контролера не оновлюватиметься. Інші модифікації контролерів мають можливістю багатократного перезапису незалежної пам'яті. На відміну від процесорів загального призначення, в мікроконтролерах часто використовується гарвардська архітектура.
1. Вибір теми
Тема яку я вибрав, це "3x3x3 LED куб" тобто фігура яка складаються з 27 світлодіодів, яку використовують переважно для дизайну інтер'єру.
Також цей куб можна використовувати і у інших сферах.
Часто користувачі ПК прикрашають свою "техніку" різними засобами. Наприклад світлом, світловими ефектами, при яких у темну пору доби робота за комп'ютером є набагато цікавішою.
Але використання куба далеко не обмежується комп'ютерами. Він є універсальним засобом дизайну інтер'єру, так як проекційна дошка, годинник оптоволоконний світильник і т. д.
Куб є невеликих розмірів і вартість його є невеликою, а задоволення від такої прикраси величезне.
Різні сфери використання 3x3x3 LED куба:
Рис 1. LED куб у системному блоці комп'ютера.
Рис 2. Світломузика.
2. Формування й аналіз проблеми
Дана проблема полягає в розробці програмного і технологічного продукту тобто створенні мікросхеми та розробка програми
У даній розрахунковій роботі я покроково розповім про виготовлення 3D LED куба, з розмірністю 3х 3х 3. Управління LED здійснюється за допомогою контролера Arduino.
Відмінною рисою даного проекту від інших є:
1. Невелике число додаткових компонентів, підключається безпосередньо до Arduino без використання різних мультиплексорів і т.п.
2. Проста для повторення принципова схема з безліччю фотографій і разьяснений.
3. Використання універсальної бібліотеки, що значно спрощує написання програми.
Для цього мені слід зрозуміти роботу світлодіодів та їх застосування.
Світлодіоди, або світловипромінюючі діоди (СІД, в англійському варіанті LED - light emitting diode) - напівпровідниковий прилад, що випромінює некогерентне світло при пропусканні через нього електричного струму. Робота заснована на фізичному явищі виникнення світлового випромінювання при проходженні електричного струму через pn-перехід. Колір світіння (довжина хвилі максимуму спектра випромінювання) визначається типом використовуваних напівпровідникових матеріалів, що утворюють pn-перехід.
Переваги:
1. Світлодіоди не мають ніяких скляних колб і ниток розжарювання, що забезпечує високу механічну міцність і надійність (ударна і вібраційна стійкість)
2. Відсутність розігріву і високих напруг гарантує високий рівень електро-і пожежобезпеки
3. Безінерційною робить світлодіоди незамінними, коли потрібна висока швидкодія
4. мініатюрність
5. Довгий термін служби (довговічність)
6. Високий ККД,
7. Щодо низькі напруги харчування та спожиті струми, низьке енергоспоживання
8. Велика кількість різних кольорів світіння, спрямованість випромінювання
9. регульована інтенсивність
Недоліки:
1. Відносно висока вартість. Ставлення гроші / люмен для звичайної лампи розжарювання в порівнянні зі світлодіодами становить приблизно 100 разів
2. Малий світловий потік від одного елемента
3. Деградація параметрів світлодіодів з часом
4. Підвищені вимоги до живлячої джерела
Зовнішній вигляд і основні параметри:
У світлодіодів є кілька основних параметрів:
1. Тип корпусу
2. Типовий (робочий) струм
3. Падіння (робоче) напруги
4. Колір світіння (довжина хвилі, нм)
5. Кут розсіювання
В основному, під типом корпусу розуміють діаметр і колір колби (лінзи). Як відомо, світлодіод - напівпровідниковий прилад, який необхідно живити струмом. Так струм, яким слід живити той чи інший світлодіод називається типовим. При цьому на світлодіоді падає певну напругу. Колір випромінювання визначається як використовуваними напівпровідниковими матеріалами, так і легуючими домішками. Найважливішими елементами, використовуваними в світлодіодах, є: Алюміній (Al), Галій (Ga), Індій (In), Фосфор (P), що викликають світіння в діапазоні від червоного до жовтого кольору. Індій (In), Галій (Ga), Азот (N) використовують для отримання блакитного і зеленого свічень. Крім того, якщо до кристалу, що викликає блакитне (синє) світіння, додати люмінофор, то отримаємо білий колір світлодіода. Кут випромінювання також визначається виробничими характеристиками матеріалів, а також колбою (типу) світлодіода.
В даний час світлодіоди знайшли застосування в самих різних областях: світлодіодні ліхтарі, автомобільна світлотехніка, рекламні вивіски, світлодіодні панелі і індикатори, що біжать рядки і світлофори і т.д.
Схема включення і розрахунок необхідних параметрів:
Так як світлодіод є напівпровідниковим приладом, то при включенні в ланцюг необхідно дотримуватись полярності. Світлодіод має два висновки, один з яких катод ("мінус"), а інший - анод ("плюс").
Світлодіод буде "горіти" тільки при прямому включенні, як показано на малюнку
При зворотному включенні світлодіод "горіти" не буде. Більш того, можливий вихід з ладу світлодіода при малих допустимих значеннях зворотної напруги.
3. Вибір мікроконтроллера для вирішення поставленого завдання
мікроконтролер arduino світлодіод лістинг
Я вибрав платформу Arduino - оскільки це один з новітніх мікроконтролерів.
Він непотребує окремого розроблення схеми оскільки має в додатку уже готовий стенд до якого підключається як сам мікроконтролер, так і всі інші деталі потрібні для створення певного проекту.
Arduino - апаратна обчислювальна платформа, основними компонентами якої є плата вводу/виводу та середовище розробки на мові Processing/Wiring. Arduino може використовуватися як для створення автономних інтерактивних об'єктів, так і підключатися до програмного забезпечення, яке виконується на комп'ютері (наприклад: Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider). Інформація про плату (малюнок друкованої плати) знаходиться у відкритому доступі і може бути використана тими, хто вважає за краще збирати плати самостійно
Отже, нам знадобиться:
- Макетна плата
- 3 NPN транзистора (2N2222, 2N3904, BC547 і т.п.)
- 12 резисторів (~ 220 Ом і 22 кОм)
- 13 конекторів (тато або мама)
- 27 світлодіодів (LED)
- З'єднувальні дроти
4. Схема та під'єднання дротів
Схема пристрою проста. Кожна з дев'яти колон підключена до висновків Arduino через струмообмежувальні резистори. А всі 3 рівня підключені до загального висновку через NPN-транзистори, які, в свою чергу підключаються до Arduino.
Т.ч. використовується тільки 12 висновків Arduino. В один момент часу буде загорятися LED тільки одного рівня, але за рахунок швидкого перемикання між рівнями, буде здаватися, що одночасно горять всі рівні (залежно від програми).
Передусім необхідно припаяти 9 резисторів. Я використовував резистори опором 220 Ом, які обмежують струм на рівні 22 мА. Номінал резисторів залежить від типу застосовуваних світлодіодів, і варіюється від 135 до 470 Ом. Більш точний розрахунок резистора для світлодіода можна зробити тут: LED калькулятор. Кожен висновок Arduino здатний видати до 40 мА.
Резистори на платі, я припаяв вертикально.
Після, я наклеїв шар ізоляційної стрічки, щоб не коротнуло з перемичками.
Наступним етапом буде монтаж радіоелементів для управління рівнями. Тут використовується три NPN-транзистора. Бази транзисторів, через резистор 22 кОм приєднуються до висновків Arduino. Т.ч. контролер відкриває транзистор і весь рівень LED з'єднується з "загальним".
5. Лістинг програмного коду для вирішення проблеми
В інтернеті я знайшов кілька прикладів управління подібними LED кубами. Але у всіх них був потрібний величезний початковий масив bin або hex даних. Я все вирішив написати свою програму управління.
Першим завданням було зробити доступне для розуміння відповідність програми і заліза. Я прийняв рішення звертатися до рівнів і колонах, замість використання RAW-даних порту або традиційних x, y, z. Другим завданням було зробити базові функції куба, такі як включення / відключення окремого світлодіода і ін..
Також, я вирішив ввести дві додаткові можливості для реалізації різних ефектів. Перша це буфер, який дозволяє реалізовувати основні функції для реалізації складних шаблонів, і друга - це функція послідовності.
Всю цю функціональність я зробив у вигляді класів і зробив бібліотеку Arduino, яку можна використовувати для інших проектів і навіть з іншого розмірністю куба.
#include <stdlib.h> // malloc and free
#include "WProgram.h"
#include "LedCube.h"
LedCube::LedCube(byte size, byte lp[], byte cp[]) : levels(size), cols(size*size), bufferEnabled(false), bufferInverted(false)
{
randomSeed(analogRead(0));
// initialize memory for dynamic arrays
buffer = (byte **) malloc(size * sizeof(*buffer));
colPins = (byte *) malloc(cols * sizeof(byte));
levelPins = (byte *) malloc(size * sizeof(byte));
for (byte i= 0; i < levels; i++)
{
buffer[i] = (byte *) malloc(cols * sizeof(byte));
levelPins[i] = lp[i];
pinMode(levelPins[i], OUTPUT);
}
for (byte i= 0; i < cols; i++)
{
colPins[i] = cp[i];
pinMode(colPins[i], OUTPUT);
}
clearBuffer();
}
byte LedCube::getNumCols()
{
return cols;
}
byte LedCube::getNumLevels()
{
return levels;
}
int LedCube::getLevelPin(int lv)
{
return lv <= levels ? levelPins[lv] : 0;
}
int LedCube::getColPin(int col)
{
return col <= cols ? colPins[col] : 0;
}
// buffer methods
void LedCube::enableBuffer(boolean enable)
{
bufferEnabled = enable;
}
void LedCube::invertBuffer(boolean invert)
{
bufferInverted = invert;
}
void LedCube::clearBuffer()
{
toggleBuffer(0);
}
void LedCube::fillBuffer()
{
toggleBuffer(1);
}
void LedCube::toggleBuffer(byte val)
{
for(byte lv=0; lv < levels; lv++)
for(byte col=0; col < cols; col++)
buffer[lv][col] = val;
}
byte LedCube::getBufferAt(byte lv, byte col)
{
return buffer[lv][col];
}
void LedCube::drawBuffer(unsigned int wait, byte duration)
{
byte seq[levels*cols*2];
byte num = 0;
for(byte lv=0; lv<levels; lv++) {
for(byte col=0; col<cols; col++) {
if(buffer[lv][col]){
seq[num] = lv;
seq[num+1] = col;
num+=2;
}
}
};
bool tmpBuffer = bufferInverted;
bufferEnabled = false;
bufferInverted = false;
lightSequence(seq,num,wait,duration);
bufferEnabled = true;
bufferInverted = tmpBuffer;
}
void LedCube::light(byte lv, byte col, byte val)
{
if(lv<levels && col<cols){
if(bufferEnabled){
buffer[lv][col] = val;
} else {
digitalWrite(colPins[col], val);
digitalWrite(levelPins[lv], val);
}
}
}
void LedCube::lightOff(byte level, byte col)
{
light(level,col,(bufferInverted ? HIGH : LOW));
}
void LedCube::lightOn(byte lv, byte col)
{
light(lv,col,(bufferInverted ? LOW : HIGH));
}
void LedCube::lightPulse(byte lv, byte col, unsigned int wait)
{
lightOn(lv, col);
if(!bufferEnabled){
delay(wait);
lightOff(lv, col);
}
}
void LedCube::lightSequence(byte seq[], byte length, unsigned int loops, byte duration)
{
if(length%2){ return; }
if(bufferEnabled){ loops = 1; }
for (unsigned int l=0; l<loops; l++) {
for (byte s=0; s<length; s+=2) {
if(bufferEnabled){
lightOn(seq[s],seq[s+1]);
} else {
lightPulse(seq[s],seq[s+1],duration);
}
}
}
}
void LedCube::lightLevel(byte lvl, unsigned int wait)
{
if(lvl<levels){
byte seq[2 * cols];
for(byte c=0; c<cols; c++) {
seq[c*2] = lvl;
seq[c*2+1] = c;
}
lightSequence(seq,sizeof(seq),wait);
}
}
void LedCube::lightRow(byte r, byte level, unsigned int wait)
{
if(r<levels && level<cols){
byte start = r*levels;
byte seq[] = {level,start,level,start+1,level,start+2};
lightSequence(seq,levels*2,wait);
}
}
void LedCube::lightColumn(byte col, unsigned int wait)
{
if(col && col<=cols){
byte seq[] = {0,col-1,1,col-1,2,col-1};
lightSequence(seq,levels*2,wait);
}
}
void LedCube::lightDrop(byte col, unsigned int wait)
{
for(byte r=0; r<levels; r++) {
lightPulse(r,col-1,wait);
}
}
void LedCube::lightPerimeter(byte level, byte rotations, unsigned int wait)
{
byte seq[] = {level,0,level,1,level,2,level,5,level,8,level,7,level,6,level,3};
lightSequence(seq, sizeof(seq), rotations, wait);
}
void LedCube::randomLight(byte numLights, unsigned int wait)
{
for (byte l=0; l<numLights; l++) {
lightPulse(random(0,levels), random(0,cols), wait);
}
}
void LedCube::randomColumn(byte numColumns, unsigned int wait)
{
for (byte c=0; c < numColumns; c++) {
lightColumn(random(0,cols), wait);
}
}
Висновок
Під час виконання розрахункової роботи я провів досить довгу роботу по збору інформації, класифікації інформації, абстрагування її - відкидання усіх непотрібних(неважливих) деталей. Окрім того вибрав якомога кращий спосіб для реалізування задуманого проекту. Цю роботу і повинен робити системний аналітик. Також я написав універсальну програму яка можливо і не є ідеальною але може бути на перший використаною.
Размещено на Allbest.ru
Подобные документы
Розробка цифрового дозиметра з трьома режимами вимірювання з виводом значення вимірювання на дисплей. Аналіз мікроконтролера для керування його роботи, функціональна схема на базі мікроконтролера та програмного забезпечення для роботи дозиметра.
курсовая работа [2,4 M], добавлен 18.06.2010Аппаратные средства с возможностью расширения и открытыми принципиальными схемами. Процесс работы с микроконтроллерами. Теоретические сведения о платформе Arduino. Установка драйверов для Arduino Duemilanove, Nano или Diecimila в Windows 7, Vista или XP.
курсовая работа [3,3 M], добавлен 26.09.2014Поняття, цілі, завдання робастного управління. Схема замкнутої структури керування. Метод синтезу за допомогою Н-теорії, який отримав розвиток та поширення в останні десятиліття. Вирішення стандартної задачі даної теорії за допомогою "2-Ріккаті підходу".
курсовая работа [369,0 K], добавлен 25.12.2014Визначення основних технічних характеристик та режимів роботи мікроконтролера для подальшого застосування у пристроях управління. Системи переривань та режими роботи. Будова мікроконтролера, модулі синхронізації. Вбудовані низькочастотні генератори.
курсовая работа [1,2 M], добавлен 10.12.2013Розробка термометра на базі мікроконтролера Atmega 8535. Визначення температури через аналогово-цифрове перетворення. Принципова схема пристрою. Варіанти з'єднання ліній портів з сегментами індикатора. Алгоритм роботи мікроконтролера у пристрої.
курсовая работа [1,8 M], добавлен 11.08.2012Конструкція та принцип роботи холодильної камери. Структурна схема автоматизованої системи керування, її проектування на основі мікроконтролера за допомогою сучасних програмно-інструментальних засобів розробки та налагодження мікропроцесорних систем.
курсовая работа [4,5 M], добавлен 08.07.2012Функціональна схема мікроконтролера ATMega8. Розробка робота на базі мікроконтролера ATMega8 з можливістю керування електродвигунами за допомогою програми. Функціональна і принципова схеми пристрою з вибором додаткових елементів, алгоритм його роботи.
курсовая работа [1,3 M], добавлен 08.10.2012Дослідження характеристик та роботи напівпровідникового діоду, біполярного транзистора, напівпровідникового тиристора, фоторезистора, операційного підсилювача, мультивібраторів, логічних інтегральних схем, малопотужних випрямлячів і згладжуючих фільтрів.
методичка [5,3 M], добавлен 02.12.2010Вибір конфігурації контролера і схем підключення. Схеми підключення зовнішніх пристроїв. Розроблення прикладного програмного забезпечення для реалізації алгоритму керування. Налагодження програмного забезпечення. Розрахунок надійності системи.
курсовая работа [3,8 M], добавлен 18.01.2014Аналіз умов та можливостей використання мікропроцесора для керування аналого-цифровим перетворювачем (АЦП). Особливості функціональної схеми АЦП на базі мікроконтролера та програмного забезпечення для функціонування цифрового обчислювального пристрою.
курсовая работа [707,8 K], добавлен 30.06.2010