Поради щодо програмування мікроконтролерів
220 вольт без понижувального трансформатора?
Можна порадити досить просту схему живлення пристрою від мережі
220 вольт, що забезпечує струм навантаження при зазначених номіналах елементів до 100 мА, що буває досить у багатьох випадках.
Резистор R2 повинен бути розрахований на потужність, що розсіюється, не менше 0,5 Вт, R3 може бути будь-який. Конденсатор C1 обов'язково має бути розрахований на напругу не менше 250 В. Вихідна напруга визначається стабілітроном VS1. Діод VD1 середньої потужності КД209А можна замінити, наприклад, на 1N4007 (поширений імпортний аналог).
УВАГА : Наведена схема має гальванічну зв'язок з мережею
220 В, тому під час налагодження та встановлення пристрою дотримуйтесь правил електробезпеки.

Чому відбуваються збої інформації в EEPROM і як їх позбутися?
При використанні внутрішньої або зовнішньої EEPROM іноді трапляються випадки мимовільної зміни вмісту осередків пам'яті. Відбувається це в основному в моменти вмикання/вимикання напруги живлення. Можливо, причина у випадковому ході виконання програми під час перехідних процесів. До речі, ця проблема є актуальною і для мікроконтролерів інших виробників, наприклад ATMEL.
Якщо вимкнення живлення відбувається у моменти звернення до EEPROM, як внутрішньої (у мікросхемах PIC16F84), і зовнішньої (типу 24CXX тощо.) з шиною управління I2C, теж існує ймовірність порушення збереженої інформації. Збої можуть відбуватися при проникненні імпульсних перешкод через ланцюги живлення в процесі роботи. Можу запропонувати кілька способів збільшення надійності збереження даних: програмний та схемотехнічний.
У програмному способі якщо доводиться зберігати всього один-два осередки, то можназаписувати кожне значення тричі поспіль. При зчитуванні перевіряти попарно на рівність і, якщо значення відрізняються, то порівнювати з третім і, залежно від результатів, можна виявити, в якому осередку дані порушені. При зберіганні області даних можна зробити так: по-перше зберігати дві однакових області даних (для відновлення однієї у разі збою в другій), по-друге, при кожній зміні даних підраховувати контрольну суму області та записувати її в окремих осередках EEPROM. При читанні, щоб переконатися в цілісності інформації, потрібно теж підраховувати контрольну суму і звіряти результат зі значенням, що зберігається там же. Виконувати таку операцію можна під час ініціалізації після включення приладу один раз, а можна і щоразу при читанні даних.
При схемотехнічному способі вирішення проблеми можна додати кілька елементів, як показано синім кольором на малюнку нижче, для контролю моменту вимкнення або аварії напруги живлення для того, щоб не читати або записувати в EEPROM. У принципі схемотехнічне рішення може бути будь-яким, виконаним за наведеною схемою, так і з використанням спеціалізованих мікросхем моніторів напруги або іншим способом. Елементи потрібно підібрати таким чином, щоб при зменшенні напруги живлення нижче порогового рівня на виведенні PORTn мікроконтролера з'являвся лог "0". А в підпрограмах звернення до EEPROM перш ніж розпочати цикл запису чи читання опитувати цей висновок.

Ще одне можливе вирішення цієї проблеми, запропоноване Ждановим Михайлом із Великого Новгорода, практично повністю виключає збої. Це рішення ґрунтується на дешевій мікросхемі LP2951. Сигнал скидання надходить на PIC коли напруга живлення досягне 5,7 вольта, а також і при вимкненні (задаєтьсядіодом). Конденсатор на VCC PIC підтримує живлення деякий час, зрізуючи перехідні процеси.

Для надійного скидання мікроконтролера можна використовувати схему на мікросхемі DS1233 фірми Dallas, наведену нижче. Вона надійно відстежує живлення, і запускає мікроконтролер PIC через 0,1 с після встановлення номінального. Щоб перешкоди живленню не викликали помилкові скидання м/с DS1233 включається через ланцюжок R1C1C2.

Для зменшення впливу зовнішніх впливів бажано невикористовувані висновки мікроконтролера програмувати як входи та підключати до шини живлення або землі (це зменшує енергоспоживання за рахунок відсутності випадкових перемикань вхідних ключів портів). Ще можна залишити висновки, що не використовуються, вільними, але при цьому запрограмувати їх як виходи. А при розведенні друкованої плати бажано розмістити керамічний конденсатор, що фільтрує, ємністю 0,01-0,1 мкф, між висновками живлення мікроконтролера. Зазвичай ці висновки розташовані навпроти один одного. Ланцюги генератора тактових імпульсів (кварцовий резонатор, RC ланцюжок) та ланцюги скидання мікроконтролера краще робити якомога коротше. Навколо друкованої плати периметром бажано провести шину землі. За такої конфігурації ні включення/вимкнення рядом силових приладів, ні підключення осцилографа не викличе помилкових спрацьовувань чи перескидів процесора. Під час розведення друкованої плати слід враховувати деякі моменти. По-перше, вхідні сигнали слід вести до мікроконтролера, а не крізь нього. Не доводячи сигнал до ніжки бажано поставити невеликий керамічний конденсатор, щоб коротка імпульсна перешкода йшла в землю. Потім для обмеження струму можна поставити опір. По-друге, непогано обвести "землю" навколо мікроконтролера.
Як отримати напругу негативної полярності?
Іноді живлення операційних підсилювачів чи компараторів потрібна напруга негативної полярності. Отримати його можна просто, використовуючи один із портів мікроконтролера PIC, видаючи безперервно послідовність імпульсів. Схема представлена на малюнку нижче:

Ще одна схема отримання напруги негативної полярності. Вона простіша, у ній відсутня індуктивність. Вихідна напруга становить приблизно -3,5 Вольт при використанні кремнієвих діодів. Дану схему можна застосовувати там, де не потрібна стабілізована напруга, наприклад, для живлення деяких операційних підсилювачів або компараторів або для подачі напруги регулювання контрастності РКІ модулів. Іноді це потрібно в моделях РКІ, розрахованих працювати при негативних температурах.

Як зробити сенсорну кнопку у пристрої на PIC?
Можна замінити в пристроях на PIC мікроконтролерах механічну кнопку на сенсорну ємнісну. Схема підключення на малюнки нижче:

ВАРІАНТ 1: Сенсорний майданчик - будь-яка металева пластина невеликих розмірів (1-2 кв. см.). Ідея полягає в тому, що при дотику до датчика збільшується сумарна ємність та змінюється час заряду конденсатора C1. Це видно з представлених діаграм:

При програмуванні можна зробити так: при включенні пристрою запрограмувати верхній за схемою висновок як вихід і встановити його в балку. "0", а нижній як вхід. Через невелику затримку встановити на виведенні, запрограмованому як вихід балка. "1" і запустити таймер. Коли балка. "1" з'явиться на нижньому виводі, запам'ятати показ таймера. Це буде константа для вільного детектора. Під час опитування в процесіроботи програми надходити так само і порівнювати отримане значення із запам'ятованим. Якщо отримане значення перевищує константу, вважати, що є дотик до датчика. Різниця затримок встановлення балка. "1" на вході між вільним сенсором та натиснутим становить приблизно 1-2 мкс.
ВАРІАНТ 2: схема працює аналогічним чином, тільки замість двох портів використовується один, який перемикається з виведення на введення. Зі станом очікування виведення порту запрограмовано як вихід і встановлено в балку. "0". Конденсатор С2 розряджений. Конденсатор С1 служить для розв'язування потенціалу тіла і потенціалу виведення мікроконтролера. При опитуванні виведення PICа перемикається на введення та вимірюється час появи балка. "1" на цьому висновку. Тимчасова діаграма відповідає тій, що описує у верхній схемі (варіант 1) виведення вхід. Після цього порівнюється виміряна величина та константа, запам'ятана та виміряна при ініціалізації (включенні пристрою) як у першому випадку.

Як зробити простий цифро-аналоговий перетворювач (ЦАП, DAC)?
Якщо більша точність ЦАП не потрібна, то можна обійтися дешевшим способом, без використання спеціалізованих додаткових мікросхем мікросхем. Наведемо спосіб 8-бітного ЦАП з використанням матриці резисторів R-2R. До недоліків можна віднести те, що для реалізації потрібно 8 портів I/O. Помилка складає 1 молодший розряд.

Як спростити роботу з кристалом налагодження і продовжити термін служби?
Є PIC(+5В) та є К561ІД1(Дешифратор +12В). Як узгодити логічні рівні? Чи не згорить PIC, якщо спробувати підтягнути вихідні лінії PIC до 12В через резистори?
Підтягнути не вдасться тому, що практично всі порти мають повний драйвер КМОП при використанні портівяк виходи. І ще, порти мають захисні діоди на землю та харчування.

У деяких контролерах є порт (наприклад, у PIC16F84 це RA4), виконаний за схемою "відкритий стік". Його можна підтягнути до 12В, але такий порт лише один.