Кардіостимулятор для Raspberry Pi; Частина 4 програмне забезпечення мікроконтролера; Гельмут Каргер

Гельмут Каргер> Проекти> Моніторинг Raspberry Pi> Кардіостимулятор для Raspberry Pi - Частина 4: Програмне забезпечення мікроконтролера

кардіостимулятор

У попередній статті я описав, як ми налаштували середовище програмування для мікроконтролера ATtiny 13A. Після того, як ми успішно прошили наш перший ескіз на µC, ми готові до фактичного Програмне забезпечення кардіостимулятора. Ця стаття про Програмна частина, той на Мікроконтролер біг. ATtiny повинен прослуховувати регулярну зміну сигналу Raspberry Pi через контактний штифт. Якщо це серцебиття не відбувається протягом певного часу, ми повинні припустити, що Raspberry Pi більше не активний. Він повісився або опинився в нескінченній петлі, від якої він більше не може звільнитися - у будь-якому випадку він більше не виконує свою роботу. У цей момент втручається мікроконтролер і ненадовго відключає живлення Raspberry Pi. Тоді RasPi може перезавантажитися, відновити свою роботу, і мікроконтролер, у свою чергу, знову почне моніторинг.

Функція програмного забезпечення кардіостимулятора

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

  1. моніторинг на час очікування та
  2. Відключення живлення у випадку тайм-ауту

Це саме те, що робить основна частина програми, як ми побачимо через мить.

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

Для мікроконтролера програмне забезпечення зазвичай пишеться не на Python, як у Raspberry Pi, а в Мова програмування C. В IDE Arduino вже є всі компоненти для складання програми C та передачі її на мікроконтролер.

Ось моя Програма кардіостимулятора на C:

Як бачите, програма досить компактна. Давайте пройдемося по одному. На початку їх буде параметр Визначаються:

  • BOOT TIME - це час у мілісекундах, протягом якого дозволено завантажувати Raspberry Pi. Тут 30-ті.
  • AUSZEIT - це тривалість переривання живлення для запуску перезавантаження. Тут 5с.
  • OUTPUT - це позначення штифта для з'єднання для вимкнення живлення. Тут PB3 = номер 2.
  • INPUT - це позначення штифта для введення серцебиття. Тут PB1 = контактний номер 6.
  • waitTime - це максимальний час, який може пройти без серцебиття до перезавантаження. Тут щедрі 60-ті

Звичайно, час можна регулювати, якщо, наприклад, перезавантаження займає більше 30 секунд.

Крім того, на початку програми визначається змінна останнього серцебиття, що економить час останньої виявленої зміни сигналу.

Входи та виходи визначаються та підключаються у функції setup (). ВИХІД встановлений у НИЗЬКИЙ. Ми повинні пам’ятати, що ми тут з a Зворотна логіка це потрібно зробити, оскільки MOSFET інвертує сигнал. Застосовується наступне:

  • ВИХІД = НИЗЬКИЙ: увімкнення
  • ВИХІД = ВИСОКИЙ: вимкнення живлення

Потім змінна останнього серцебиття задається поточним часом та a Обробка переривань оснащений лінією:

attachInterrupt (digitalPinToInterrupt (INPUT), isr, CHANGE);

Це означає, що з'єднання INPUT постійно контролюється, а функція isr викликається у разі зміни полярності (CHANGE). Ця функція, як ви можете бачити далі в програмі, не робить нічого іншого, як повторне подання змінної останнього серцебиття поточним часом. Тепер це відбувається автоматично при кожній зміні з HIGH на LOW і з LOW на HIGH на штифті INPUT .

Останньою дією функції setup () є увімкнення живлення за допомогою функції stromAn (). Ми знаходимо їх у кінці програми. stromAn () спочатку встановлює ВИХІД у НИЗЬКИЙ, щоб увімкнути живлення для Raspberry Pi, а потім дочекається ЧАСУ ЗАПУСКУ. Потім змінній останнє серцебиття знову присвоюється поточний час.

Аналогічно stromAn () існує також функція stromOff (). Він не робить нічого, крім встановлення ВИХІДУ на ВИСОКИЙ, щоб вимкнути живлення Raspberry Pi і дочекатися вказаного ВРЕМІ ВИКЛ.

Основна програма loop () тепер з'єднує всі функції і все ще досить простий. Він перевіряє, чи є TimeOut закінчився є. Це той випадок, коли різниця між поточним часом та часом останнього виявленого серцебиття перевищує вказаний час очікування. Лише тоді stromAus () та stromAn () викликаються один за одним, щоб змусити Raspberry Pi завантажитися. В іншому випадку потрібно зачекати лише 100 мс, а потім почати спочатку.

Програмне забезпечення для флеш-кардіостимулятора

Для запуску програми на ATtiny 13A ми копіюємо вихідний текст на цій сторінці та вставляємо на нову сторінку IDE Arduino a. Не забудьте заощадити! Коли апаратне забезпечення для програмування (див. Схему) готове, ескіз можна легко промайнути на ATtiny, натиснувши Клавіша Shift і одночасно клацніть на піктограму з стрілка вправо. Індикатори на програматорі (Nano) блиматимуть короткочасно, після чого процес спалаху закінчиться. Якщо Arduino IDE не видає жодних помилок, ATtiny можна вийняти з макетної дошки і вставити в дійсну схему кардіостимулятора.