Безкоштовна технічна бібліотека ЕНЦИКЛОПЕДІЯ РАДІОЕЛЕКТРОНІКИ ТА ЕЛЕКТРОТЕХНІКИ Як зв'язати мікроконтролер та комп'ютер по каналу RS-232. Енциклопедія радіоелектроніки та електротехніки Енциклопедія радіоелектроніки та електротехніки / Мікроконтролери Ця стаття замислювалася як приклад реалізації розробки мікроконтролерного пристрою, керованого персональним комп'ютером по послідовному каналу. Вона призначена для тих, хто ще не має досвіду таких розробок. Розібравшись з тим, як ПК керує мікроконтролером, відображає, обробляє та зберігає отриману від нього інформацію, ви зможете застосувати ці знання для власних розробок. До того ж описаний пристрій має ще й самостійну цінність: це керований цифровий вольтметр, результати вимірювання якого перед відображенням можуть бути оброблені комп'ютером за заданим алгоритмом, а також збережені у файлі на вінчестері вашого ПК, переглянуті та роздруковані. Все це робить описаний пристрій основою для простої системи збору, обробки та документування даних, корисною для електронників, які мають недостатній для самостійних розробок рівень знання мікроконтролерної техніки. Запровадження Метою даної роботи була розробка та створення найпростішого вимірювального пристрою на базі мікроконтролера все ще найпоширенішого на сьогоднішній день сімейства х51, яке могло б обмінюватися інформацією з персональним комп'ютером. У пристрої передбачалося реалізувати вимірювач напруги, який надалі міг бути доповнений різними приставками, що перетворюють інші фізичні величини, що безпосередньо вимірюються, в напругу. Подібний пристрій дозволив би легко проводити серії вимірювань, будучи керованим комп'ютером, а також накопичувати результати та проводити їх комп'ютерну обробку. Піддане непринциповим змінам, воно змогло б легко перетворитися на систему дистанційного контролю та управління обладнанням чи іншими приладами та пристроями. Загальний опис пристрою. Електрична частина пристрою Пристрій (рис.1), по суті, є цифровим вольтметром. На вході вольтметра стоїть операційний підсилювач (DA1), що має високий вхідний опір. За операційним підсилювачем слід АЦП (DD2), що дозволяє оцифрувати напругу, що цікавить нас, для подальшої передачі в мікроконтролер. Мікроконтролер DD3 є головним керуючим ланкою пристрою, оскільки він зчитує інформацію з АЦП і спілкується з персональним комп'ютером послідовним каналом. У пристрій також входять перетворювачі живлення для вироблення +5 В для цифрової частини і для вироблення +/-10 В для операційного підсилювача, а також мікросхема перетворення рівнів (логічні <0> і <1> -15:+15 В і назад) для обміну інформацією послідовного каналу типу RS232.
Значення, що посилається в комп'ютер, лежить в діапазоні 0 ... 4095 (що відповідає розрядності АЦП), відповідає вхідному рівню 0В, 0 - рівню 4095В, лінійна залежність. Швидкість обміну інформацією може бути обрана як менше 9600 бод, так і вище - до 115 бод. На досить старих комп'ютерах, типу 200 і раніше, верхня межа набагато нижче - 386 бод. Це з тим, що мікросхеми послідовного порту, встановлені у цих комп'ютерах, були розраховані більш високі швидкості. Опис мікросхем Перетворювач напруги живлення MAX680 Операційні підсилювачі зазвичай вимагають подачі на них двополярного живлення (наприклад, +10 і -10 щодо загального проводу). Радіоаматори, мало знайомі з сучасною елементною базою, використовують зазвичай для отримання такої напруги трансформатор з двома вторинними обмотками (або з однією, але з відведенням від середини), два конденсатори, що фільтрують, два стабілізатори і т. д. Однак якщо у вас є в розпорядженні стабілізована напруга 5В, а використовуваний операційний підсилювач, що вимагає двополярного живлення, може обійтися всього +7:10, споживаючи при цьому 1:2 мА, то згадані дві обмотки і два стабілізатори не знадобляться. Досить використовувати мікросхему MAX680 фірми Maxim (зазначимо, що подібні мікросхеми випускає Linear Technology та низка інших відомих фірм). На вхід мікросхеми подається напруга Uвх величиною від 3:5 до 6:10 (залежно від типу), на виходах її формуються напруги, рівні приблизно +2Uвх. Чудово те, що, по-перше, для формування цих напруг крім 8-вивідних MAX680 або LT1026 потрібно всього лише 4 невеликі електролітичні конденсатори (див. рис. 1), а по-друге, при зміні вхідної напруги подвійні вихідні змінюються синфазно, що мало позначається вихідному сигналі ОУ. Для детальнішого ознайомлення з подібними мікросхемами автор рекомендує звернутися до відповідних фірмових описів. АЦП MAX1241 В останні роки в мікроконтролерній техніці набули широкого розвитку мікросхеми, керовані по послідовному каналу. Однією з таких мікросхем є 12-розрядний АЦП МАХ1241. Як і у випадку з МАХ680, МАХ1241 має досить багато точних та наближених аналогів (МАХ187 від Maxim, LTC1286, LTC1298 від Linear Technology, AD7894 від Analog Devices та ряд інших). МАХ1241 упакована в 8-вивідний корпус, живиться напругою від 2,7 до 5, споживає струм близько 5 мА. Вона вимагає застосування зовнішнього джерела опорної напруги (в даному випадку застосований прецизійний стабілітрон КР142ЕН19, що формує напругу 2,50) і використовує для зв'язку з мікроконтролером всього 3 лінії. Роботу МАХ1241 ілюструють часові діаграми, зображені на рис. 2. До початку перетворення та обміну вхід CS# МАХ1241 повинен підтримуватись мікроконтролером у одиничному стані. Для старту перетворення цей вхід необхідно подати рівень логічного нуля. Процес перетворення на МАХ1241 займає трохи менше 8 мкс. Протягом всього часу перетворення МАХ1241 підтримує на своєму виході рівень логічного 0 DOUT. Після завершення перетворення МАХ1241 переводить вихід DOUT в одиничний стан.
Перед початком перетворення мікроконтролер на вході SCLK МАХ1241 має встановити нульовий логічний рівень. Коли процес перетворення всередині АЦП завершиться, мікроконтролер повинен сформувати на вході SCLK послідовність щонайменше 12 позитивних імпульсів (рис. 2). Фронт першого імпульсу готує МАХ1241 передачі даних. По спаду імпульсу на DOUT з'являється як логічного нуля чи одиниці старший 12-й біт. Мікроконтролер зчитує цей біт, формує на SCLK фронт другого імпульсу, а згодом - його спад. По спаду другого імпульсу на DOUT з'являється мікроконтролером 11-й біт і т.д. По спаду 12-го імпульсу на виході DOUT встановлюється молодший 1-й біт. Спад 13-го імпульсу переводить DOUT в нульовий стан, в якому він перебуває до встановлення в 1 входу CS #. Переведенням CS# в одиничний стан мікроконтролер інформує МАХ1241 про завершення процесу читання результату перетворення. Наступне перетворення МАХ1241 може здійснити через 1 мкс після установки CS# в 1. Алгоритми роботи LTC1286, LTC1298 від Linear Technology та AD7894 від Analog Devices трохи відрізняються від описаного для МАХ1241. Докладніше з ними можна ознайомитись, звернувшись до відповідних фірмових описів. Перетворювач рівнів MAX202Е Мало для кого є секретом, що в стандартній логіці одиниця представляється рівнем напруги від 2,4 до 5 В, а нуль - від 0 до 0,8 В. Однак, початківцям може бути невідомо, що при передачі по каналу RS-232 нуль і одиниця кодуються однаковими за величиною (від 5 до 12), але різними за знаком сигналами. У рамках цієї статті не передбачається пояснювати, чому прийнято робити так, а не інакше, – ми обмежимося лише констатацією цього факту. Якщо для передачі по RS-232 стандартні логічні сигнали повинні бути перетворені на сигнали іншого рівня, необхідно передбачити у схемі відповідні засоби перетворення. Років 10 тому для цієї мети застосовувалися спеціально розроблені каскади із трьох-чотирьох транзисторів, пари діодів та майже десятка резисторів. Наразі ситуація значно змінилася: провідні виробники мікросхем випускають повністю закінчені перетворювачі, що потребують мінімальної кількості додаткових елементів. До них відносяться МАХ202Е від MAXIM та повністю ідентична їй, аж до цоколівки, AD232 від Analog Devices. Усередині обидві мікросхеми містять перетворювач напруги +5 В +10 В, ідентичний вищеописаному МАХ680, і каскади, що здійснюють перетворення логічних сигналів стандартного рівня сигнали рівня за стандартом RS-232. Кожна зі згаданих мікросхем містить перетворювачі логічного рівня для двох приймачів та двох передавачів. Ми скористаємося лише одним приймальним каналом. Режим роботи МК із послідовним каналом Як відомо (дивись, наприклад, номери 10 та 11 журналу "Радіо" за 1994 р.), у мікроконтролерів сімейства х51 існують чотири режими роботи приймача. Нас буде цікавити режим 1 як найпростіший і найприйнятніший. Режим 1 характеризується такими параметрами:
Це зручний режим для програмування: потрібно дуже небагато програмного коду для налаштування приймача та роботи з ним. Хоча за бажанням можна використовувати й інші режими роботи. Метою цієї статті є опис якогось пристрою, має можливість спілкуватися з персональним комп'ютером. Ми не наводитимемо тут опису того, як саме працює приймач. Цю інформацію можна буде отримати зі згаданих журналів "Радіо" або іншої літератури. Основні підпрограми для МК Основними підпрограмами для мікроконтролера будуть: зчитування даних з АЦП, ініціалізація УАПП, прийом байта та посилка байта. Зчитування даних з АЦП Налаштування ПК для обміну інформацією послідовним каналом. Для того, щоб налаштувати ПК на обмін інформацією по послідовному каналу, необхідно зробити таке:
Приклад коду, розрахованого на швидкість обміну 9600 біт/с для кварцового резонатора з резонансною частотою 11,059 МГц:
GET_VOLT: SETB DOUT; ДОЗВОЛИЛИ ВВЕДЕННЯ ДАНИХ З ADC SETB CS ; ВСТАНОВИЛИ ПОЧАТКОВИЙ СТАН ADC CLR SCLK ; ВСТАНОВИЛИ ПОЧАТКОВИЙ СТАН ADC CLR CS; ПОВІДОМЛИ ПРО БАЖАННЯ ПРОЧИСТИ ДАНІ MUL AB ; 4 МКС НА 12 MHZ \ MUL AB; 4 МКС | MUL AB; 4 МКС } ЗАЧЕКАЙЛИ КІНЦЯ ; | ОЦИФРУВАННЯ MUL AB; 4 МКС / MOV R0, # 12; ЗРАХУВАТИ 12 БІТ GET_VC: SETB SCLK ; \NOP; | NOP; | CLR SCLK; }СФОРМУВАЛИ ІМПУЛЬС ДЛЯ ЧИТАННЯ БІТА NOP; | NOP; / MOV C, DOUT; ПРОЧИТАЛИ БІТ MOV A, R2; \ RLC A; | MOV R2,A; | MOV A, R3; } Засунули БИТ У СЛОВО ; |РЕЗУЛЬТАТУ - R3R2 RLC A; | MOV R3,A; / DJNZ R0, GET_VC; ЗАЦИКЛЮЄМОСЯ ANL A,#0FH MOV R3,A ; ОЧИЩИЛИ СТАРШІ БІТИ R3R2 SETB CS; БІЛЬШЕ НЕ ХОЧЕМО ЗЛІЧУВАТИ; (Інші біти = 0) MUL AB ; 4 МКС НА 12 MHZ \ MUL AB; 4 МКС | MUL AB; 4 МКС | MUL AB; 4 МКС } MIN ЗАТРИМКА; | ПЕРЕД СЛІД. MUL AB; 4 МКС | MUL AB; 4 МКС/RET Ця підпрограма викликається найпершою в основній програмі мікроЕОМ. У принципі, її можна навіть і не оформлювати як підпрограму. Прийом та посилка байта Підпрограми прийому та посилки байта по послідовному каналу дуже прості.
SERINIT: MOV IE, #0; Заборонити переривання MOV TMOD, #20H ; Встановити режим 2 для таймера 1 MOV TH1, # REL96; Значення автоперезавантаження лічильника MOV TL1, #REL96 ; Початкове значення лічильника для 9600 біт/с; при SMOD = 0 ANL PCON, # 7FH; Очистили SMOD MOV SCON, # 50H; Режим для 8 біт даних та швидкості передачі, ; залежить від таймера SETB TR1; Старт таймера/сітчика 1 RET де REL96 - константа, що дорівнює 0FDh Зчитувати байт із порту вводу/виводу SBUF можна лише за встановленого біту RI регістру управління/статусу SCON, сигналізує про наявність байта в буфері прийому. Після зчитування цього байта біт RI необхідно скинути. Після запису байта в порт введення/виводу потрібно дочекатися встановлення біта TI, який сигналізуватиме закінчення посилки байта в лінію. Потім біт TI також потрібно буде скинути. Підпрограма прийому байта в акумулятор:
GETCH: JNB RI, GETCH MOV A, SBUF CLR RI RET Підпрограма посилки байта з акумулятора:
PUTCH: MOV SBUF, SEND: JNB TI, SEND CLR TI RET Слід зазначити, що ніяких засобів виявлення помилок вводу/вывода мікроЕОМ немає. Для того щоб організувати перевірку програмно-апаратним чином, можна розширити кількість ліній вводу/виводу, якими будуть передаватися додаткові сигнали, і за ними можна буде визначати стани, в яких знаходяться учасники діалогу, а також виявляти помилки. Можна підвищити надійність прийому/передачі інформації та іншим шляхом: передавати з вісьмома бітами даних ще один біт - біт парності, що обчислюється аналогічно прапору паритету у слові стану програми (біт 0 PSW). Тільки обчислюватися він повинен для переданого або прийнятого байта. Після прийняття байта та біта парності необхідно порівняти їх на відповідність один одному. Якщо вони не відповідають, значить, була помилка введення/виводу. Для передачі додаткового 9-го інформаційного біта потрібно використовувати режим 2 або 3 роботи таймера/лічильника. Загальна програма МК. Діаграма станів пристрою Загальна програма для мікроЕОМ базується на описаному нижче алгоритмі. Алгоритм досить складний, т.к. все ж таки потрібно якимось чином, хоча б програмним методом, виявляти помилки вводу/виводу та реагувати на їх появу. Для більшої наочності до алгоритму, описаному звичайними словами, додається малюнок - так звана діаграма стану пристрою (рис.3), де наведено чотири основних стану пристрою з погляду обміну інформацією з ЕОМ.
Заздалегідь обмовимо той факт, що наша мікро-ЕОМ є веденою, а персональний комп'ютер – провідним під час обміну даними. Іншими словами, пристрій сам собою, без наказу від ПК, нічого робити не повинен. Воно повністю підпорядковується керуючому комп'ютеру. Персональний комп'ютер обраний провідним з тієї простої причини, що він має більшу потужність і здатний без особливих проблем керувати пристроєм. Крім того, він може надати користувачеві більше сервісних функцій. Стан перший - Wait У цьому стані пристрій виявляється відразу ж після включення напруги живлення. Тут він очікує від комп'ютера запиту на ініціалізацію, який виявляється у посилці комп'ютером символу NUL. Пристрій, у свою чергу, повинен у відповідь на отриманий запит включити та налаштувати, якщо потрібно, додаткові модулі та ресурси, а потім, якщо все пройшло нормально, надіслати в ЕОМ символ ACK. У разі помилки воно має надіслати NAK. Таким чином, відбувається перше "спілкування" двох "співрозмовників". Якщо хочете, вони мають "обміняться привітаннями" або "потиснути один одному руки". При вдалій ініціалізації пристрою з подальшим посиланням символу ACK, він автоматично переходить у наступний стан. Цей перехід позначений стрілкою 1 діаграмі. Стан Ready У цьому стані наша мікро-ЕОМ чекає на запит ПК на посилку виміряного значення, ліченого з АЦП. Запит є символом XON. Після прийняття цього символу пристрій перетворюється на новий стан - Sending. Переходу відповідає стрілка 2. Стан Sending Потрапляючи сюди, мікроконтролер зчитує двійкове дванадцятирозрядне число з АЦП раніше зазначеним способом і посилає частинами ЕОМ. У цій реалізації відбувається перетворення двійкового числа на трисимвольний шістнадцятковий еквівалент, наприклад, <1FF> для десяткового числа 511. Спочатку посилається <1>, потім Після закінчення передачі значення комп'ютер мікро-ЕОМ перетворюється на такий стан за стрілкою 4. Стан Sent Цей стан є останнім і ніби замикає коло одиничного акту спілкування пристрою з комп'ютером. Тут від комп'ютера очікується підтвердження того, що він правильно прийняв значення, яке йому адресовано. Тут можливими є кілька варіантів відповіді ПК на послане число: він може відповісти про успішний прийом символом XOFF, який означатиме, що більше не потрібно інших значень, а може відповісти символом XON, що означає, що потрібно ще одне значення. Якщо прийнято XOFF, пристрій повертається у стан готовності Ready (перехід 7 на діаграмі). Якщо прийнятий символ XON, то пристрій знову виявляється в стані Sending (перехід 5) і повторює зчитування з АЦП з подальшою передачею числа в лінію. Не розглянутим виявився лише той випадок, коли ПК не сподобалося, що він отримав: наприклад, замість символів діапазону <0>...<9>, ... Залишилися не описаними переходи, позначені стрілками 3 та 8 діаграми. Якщо комп'ютер виявить серйозну помилку вводу/виводу або йому знадобиться припинити обмін з пристроєм, то він просто надішле ініціалізаційний NUL, по якому відбудеться ініціалізація пристрою і він опиниться в стані готовності Ready. Тобто. в якому б стані не знаходилося наш пристрій, він повинен відповісти на ініціалізаційний запит, так само, як і при первинній ініціалізації (див. пункт стан Wait). Якщо ж мікро-ЕОМ отримала якийсь несподіваний чи невірний символ чи запит, воно завжди має відповісти на нього символом NAK. Така стратегія є виграшною, оскільки при такій організації програми для пристрою полегшує виконання відразу кількох завдань: мікро-ЕОМ і ПК не гратимуть у зіпсований телефон, по-перше, а, по-друге, вони зможуть просто та ефективно "спілкуватися" друг з другом. Переходимо до ПК. Спільна програма для ПК. Діаграма станів ПК Принципово загальна програма для комп'ютера не буде ні чим відрізнятися від мікроконтролера, що використовується. Алгоритм буде аналогічним, схожою буде діаграма станів. Перший стан Initialization Сюди комп'ютер потрапляє, коли користувач натискає з його клавіатурі клавішу, відповідну прийняттю єдиного значення. У цьому стані комп'ютер посилає символ ініціалізації NUL у пристрій і чекає на нього символом ACK чи NAK. Якщо було отримано ACK, то ініціалізація пройшла нормально і можна продовжити роботу - перейти в наступний стан за стрілкою 2 на діаграмі. У разі отримання NAK робота повинна припинитися і комп'ютеру слід перейти до заключного стану Done за стрілкою 1. Стан Ready У цьому стані комп'ютер готується до прийому символів, у тому числі складатиме запитане з мікро-ЕОМ значення. Запитів на посилку значення є два. Перший це звичайний запит значення, йому відповідає символ XON. Другий запит - це запит на повторну посилку останнього значення. Це необхідно в тому випадку, якщо значення не було прийнято повністю за якийсь об'єктивний час або були прийняті невірні символи, що не потрапляють у діапазони від <0> до <9> і від до Далі, після підготовки до прийому символів значення відбувається один із двох вищевказаних запитів до нашого пристрою, потім комп'ютер переходить за стрілкою 4 стан прийому значення. Стан Receiving Тут ПК просто зчитує три символи значення, виміряного та перетвореного за допомогою АЦП. Як було зазначено раніше, існує деякий об'єктивний час очікування символу комп'ютером. Якщо символ не було раховано цей час, то така ситуація інтерпретується як помилкова, тобто. мала місце помилка введення/виводу. До речі, при досить високих швидкостях обміну інформацією (більше 19200 біт/с) або при роботі в операційній системі MS-Windows (будь-якої версії) часто буває, що комп'ютер із посиланих йому трьох символів приймає лише два, а іноді й того менше - один . Щоб комп'ютер "не висів" - очікував нескінченно довго не вистачає або пропущеного символу - вводиться деякий час, що обмежує це очікування. На жаль, ці перепустки апаратним методом ніяк не виявляються. У цій реалізації визначено два типи часу очікування, які можуть бути встановлені користувачем з клавіатури. Перший тип - це час очікування одного з трьох символів. Він дозволяє пристрою спокійно, ні куди не поспішаючи, виміряти, оцифрувати потрібне нам число і перетворити його на символьний еквівалент. А другий тип – це тимчасовий ліміт на посилку другого та третього символів. Перейдемо тепер до можливих переходів із стану Receiving до інших станів. Якщо так і не було прийнято всіх 3 символів значення за відведений час, то комп'ютер повинен попросити наш пристрій послати йому значення повторно. Цій ситуації відповідає перехід за стрілкою 5, тобто. комп'ютер робить запит символом NAK і перетворюється на стан Ready. Якщо процесі прийому комп'ютером було зафіксовано помилку вводу/вывода (а ПК є така можливість досить проаналізувати регістр стану послідовного порту), краще привести і комп'ютер і мікро-ЕОМ у вихідний стан, тобто. повторити ініціалізацію. Тому на діаграмі також є і стрілка 3. І, нарешті, якщо комп'ютер отримав від пристрою всі три символи, то він переходить у стан аналізу отриманого значення - стан Received за стрілкою 8. Публікація: cxem.net Дивіться інші статті розділу Мікроконтролери. Читайте та пишіть корисні коментарі до цієї статті. Останні новини науки та техніки, новинки електроніки: Запрацювала найвища у світі астрономічна обсерваторія
04.05.2024 Управління об'єктами за допомогою повітряних потоків
04.05.2024 Породисті собаки хворіють не частіше, ніж безпородні
03.05.2024
Інші цікаві новини: ▪ Штучний інтелект отримав ніс ▪ TPA6211A1 - мікросхема аудіопідсилювача Стрічка новин науки та техніки, новинок електроніки
Цікаві матеріали Безкоштовної технічної бібліотеки: ▪ Розділ сайту Веселі завдання. Добірка статей ▪ стаття Покривало Ізіди. Крилатий вислів ▪ стаття Назви яких валют походять від заходів ваги? Детальна відповідь ▪ стаття Шинус. Легенди, вирощування, способи застосування ▪ стаття Плеєр з живленням від велогенератора. Енциклопедія радіоелектроніки та електротехніки ▪ стаття Управління кроковим двигуном. Енциклопедія радіоелектроніки та електротехніки
Залишіть свій коментар до цієї статті: All languages of this page Головна сторінка | Бібліотека | Статті | Карта сайту | Відгуки про сайт www.diagram.com.ua |