Поради програмістам-початківцям мікроконтролерів. Чіп-ключ в автомобілі: все, що про нього треба знати Перепрограмування картриджів

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

Суть роботи запрограмованого ключа запалювання

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

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

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

  • синхронізація ключа та іммобілайзера - повністю автоматизований процес, тобто введення коду відбувається саме собою і не потребує участі водія;
  • дана протиугінна система складається з: приймача та відповідача сигналів, який вбудований у сам ключ, спеціальної антени, світлодіода-сигналізатора та безпосередньо іммобілайзера;
  • система має автономний принцип роботи, тобто навіть при відключенні клем АКБ вона довго може захищати ваш автомобіль від зловмисників.

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

Необхідність програмування

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

Основними причинами виходу з ладу іммобілайзера є:

  • збій на програмному рівні;
  • несприятливі зовнішні умови (надто низька температура, висока вологість тощо);
  • погана робота системи харчування;
  • зниження напруги на виходах контакту.

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

Ремонт системи проходить шляхом здійснення програмування ключів запалювання заново або виточення нових. Роботи з мікросхемою, як правило, входять до обов'язків офіційного дилера. Однак у більшості випадків програмування в таких сервісних центрах займає досить довгий час через велику «плинність» клієнтів і брак спеціалістів. Оптимальним рішенням у таких ситуаціях є звернення до альтернативних організацій, які здійснюють чіп-тюнінг автомобілів.

Варто зазначити, що програмування ключів здійснюється не завжди через несправність системи. Іноді має бути реальний тюнінг, що полягає в поліпшенні захисту автомобіля від угону. Здійснивши програмування на складніший варіант ПЗ, цілком реально зробити протиугінну систему вашої машини справжньою «кам'яною стіною» для зловмисників. Але це, природно, справа смаків та бажань, адже і штатний ключ із небулайзером може врятувати автомобіль від угону.

Процес програмування

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

Для повноти картини нижче розглянемо процес програмування ключа, який був поламаний або втрачений:

  1. В першу чергу проводяться заходи щодо вибору леза та виточення нового ключа, суворо з дотриманням усіх ремонтних норм.
  2. Наступним кроком проводиться програмування чіпа для чорного ключа (далі — ЧК). Для здійснення цієї процедури власнику автомобіля необхідно надати спеціальний «червоний ключ» (далі — КК), який обов'язково додається до будь-якого автомобіля, оснащеного іммобілайзером. Цей ключ необхідний для проведення всіх ремонтних заходів щодо чіп-тюнінгу цього вузла машини. КК призначений тільки для разових використання, для «повсякденки» використовується саме запрограмований ЧК (додатковий для іммобілайзера, але основний для власника), який запам'ятав у системі (докладніше нижче).
  3. Ремонтні заходи щодо програмування ключа закінчуються на прописці чіпа для кнопок приладів, пов'язаних із системою.

Увага! З метою безпеки дозволяється програмування та наступне наявність двох або трьох ключів (включаючи КК) для конкретного іммобілайзера і, відповідно, автомобіля.

Як правило, вартість процедури залежить від марки автомобіля. Найчастіше вона варіюється в межах від 1000 до 4000 рублів. Якщо автомобіль перебуває на гарантійному обслуговуванні, у деяких випадках можливий варіант гарантійного ремонту в офіційного дилера.

Процес запам'ятовування ключів іммобілайзером

Після того, як вам зробили і видали новий ЧК з прописаним кодом, необхідно провести процедуру його запам'ятовування іммобілайзером, інакше експлуатувати автомобіль не вийде. Захід проводиться за наступним алгоритмом дій:


Якщо з якихось причин запам'ятовування було перервано, для повторного його проведення дайте відпочити автомобілю близько хвилини.

Після того, як, на вашу думку, іммобілайзер запам'ятав 1 або 2 ЧК, можна провести перевірку. Для цього необхідно знову вставити в замок запалювання КК і уважно стежити за індикатором, який повинен на 1-3 секунди спалахнути, а потім блимнуть стільки разів, скільки ключів іммобілайзер запам'ятав раніше. Якщо миготіння немає - захід необхідно провести заново.

Варто розуміти, що стерти запам'ятаний ключ із пам'яті неможливо. Стирання з пам'яті кодів, що запам'ятовуються ЧК, проводиться тільки при запам'ятовуванні нових екземплярів.

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



Запаюючи ще одну мікросхему на чергову плату або перерізаючи доріжку на платі вдесяте для внесення чергових (але не останніх) змін до нового пристрою, ви починаєте подумувати: «А чи не кинути мені це нудне заняття?!» Ваш новий пристрій виходить не таким, як вам хотілося б, але і змінювати схему і переробляти все на платі вам вже набридло.
Перегортаючи журнали з електроніки, ви частіше зустрічаєте слова: процесор, мікроконтролер, прошивка, програмування. Але ці слова вам не мають конкретного значення. Ви десь чули, а може, навіть і тримали в руках те, про що ви навіть думаєте з благоговійним трепетом… мікроконтролери! Те, що зменшує розміри пристроїв, наділяючи їх недосяжними для вас можливостями ... Ні, вам, як електроннику, зрозумілі загальні ідеї роботи цих пристроїв, але про їх практичне застосування у своїх виробах не може бути й мови! Ви вже кілька разів намагалися освоїти мікроконтролери, навіть придбали кілька книг із серії «…для чайників» та завантажили з інтернету кілька популярних самовчителів. Проходив якийсь час, і все зупинялося на найцікавішому місці: схеми, показані в книгах, вам були зрозумілі, але методи створення програми для вас так і залишилися загадкою. Набрати кілька символів англійською (або якоюсь там) мовою у зазначеній книгою програмі для вас не проблема. Але не ясна СУТНІСТЬ і МЕТОДИ використання цих загадкових символів, послідовність яких у книзі називали програмою. Ви звинувачували себе в тупості і відкладали ідею освоєння мікроконтролерів у далеку скриньку. Та й навіщо? Ви і так чудово справляєтеся: у вас є багато мікросхем, на яких ви розробляєте свої пристрої... Пристрої на великих платах, які ви довго-довго налагоджуєте і переробляєте...
Але знайомтеся з хлопцем із сусіднього будинку: він пише програми, завантажує їх у мікроконтролер і те, що вам доводиться налагоджувати місяцями, він робить за кілька днів. Ви в паніці, починаєте шукати занедбані книжки і згадувати все раніше прочитане… Він може, а ви – ні. Ви ближче знайомитесь з цим хлопцем, і під виглядом сторонньої розмови починаєте розпитувати його про мікроконтролери та їх можливості. І він спокійно говорить про те, що контролери йому хобі. Ви просите його розповісти вам про їхній пристрій. Його відповіді прості та невигадливі.

Мікроконтролери. Що таке мікроконтролер?
Мікроконтролер - це невеликий спеціалізований комп'ютер, російською мікро-ЕОМ. Причому ця мікро-ЕОМ виконана в одній мікросхемі, на одному кристалі. Звідси повна назва: «однокристальна мікро-ЕОМ». Як і комп'ютер, мікроконтролер – це електронний пристрій, роботою якого керує програма – послідовність команд, заздалегідь завантажена на згадку. Ці команди виконує процесор: такий собі "мега-мозок", що має у своєму складі АЛУ - арифметично-логічний пристрій. Тобто, процесор «уміє» виконувати математичні дії та проводити логічні операції над даними.

Розрядність процесора. Методи подання інформації.
І процесор, і пам'ять - цифрові пристрої, які «розуміють» сигнали лише двох рівнів: є напруга/струм, і немає напруги/струму на лінії. Ці два стани прийнято записувати так: логічна одиниця – «1», і логічний нуль – «0». Команди та дані - це набір одиниць та нулів. Одна лінія (називають розрядом) при двох її станах може передати лише два значення. Але зі збільшенням кількості розрядів збільшується і кількість значень: два розряди - вже чотири, а вісім розрядів - вже 256 значень. Розряд називається бітом: один розряд це один біт. А набір із восьми розрядів - байтом: вісім біт це один байт. Але один байт має лише 256 значень. Для передачі більшої кількості інформації використовується кілька, послідовно розміщених у пам'яті, байт. Два байти передають вже 65536 значень. Три байти - 16777216 значень! І так далі. Найпоширенішими є процесори, які за одну дію можуть обробити вісім розрядів, тому такі процесори називають восьмирозрядними.

Система команд процесора.
Під час розробки процесора до нього закладають можливість виконання певних команд. Команди, які цей процесор може виконувати, називають набором команд. Що це за команди? Найпоширеніші арифметичні та логічні команди, а також команди роботи з портами – лініями зв'язку процесора із зовнішнім світом. Процесор, вважавши значення з комірки пам'яті чи стан порту на власну пам'ять - регістр, може зробити з нього математичні чи логічні дії. Математично дії нам зрозумілі: додавання, віднімання та інші. Під логічними діями розуміються такі дії: порівняння – більше, менше, одно; робота над розрядами осередку пам'яті або регістру: обнулення або його встановлення, а також операції зсуву розрядів ліворуч або праворуч.

Пам'ять та її типи.
Дані можуть бути зчитані з пам'яті. Пам'ять - місце, де певний час можуть зберігатися програма та/або дані. Вони можуть зберігатися короткочасно – до відключення живлення, або довгостроково – незалежно від наявності напруги живлення. Пам'ять першого типу використовується для зберігання проміжних даних, що використовуються під час виконання різних операцій. Тому її так і називають – «оперативна пам'ять». Пам'ять другого типу найчастіше використовується для зберігання програми. Типів довготривалої пам'яті кілька: одноразово програмована пам'ять, пам'ять з електричним стиранням і пам'ять, що стирається ультрафіолетовим або рентгенівським випромінюванням. Фізичний пристрій та принцип роботи пам'яті може бути різним, але суть одна: зберігати дані. Для опису сховища даних використовують поняття «комірка». Отже, що більше комірок, то більше вписувалося даних може бути збережено. Кожна осередка має індивідуальну адресу. Процесор звертається до значення осередку пам'яті саме на її адресу.

Порти. Режими роботи портів.
Дані також можуть бути отримані із зовнішніх пристроїв через лінії зв'язку - висновки мікроконтролера. Ці лінії зв'язку називають портами, а по-науковому: пристрої введення та виведення даних. Висновки порту можуть бути входами, з використанням яких процесор отримує інформацію ззовні від різних датчиків, або бути виходами, подаючи сигнали, на які можна керувати зовнішніми пристроями. У сучасних мікроконтролерах висновки практично всіх портів двонаправлені, тобто можуть бути і входами, і виходами. Універсальні порти необхідно налаштовувати – встановити режим роботи на введення чи виведення. Для цього є спеціальний осередок у пам'яті - регістр управління режимами роботи порту. Наприклад, щоб зробити входом необхідний висновок (розряд) порту, в розряд регістра управління записують 1 або 0, залежно від моделі мікроконтролера.

Периферійні пристрої.
Але мікроконтролер містить у своєму складі не лише процесор та пам'ять. Основну роль грають звані периферійні пристрої: таймери, лічильники, аналогові компаратори, цифро-аналоговые і аналогово-цифрові перетворювачі, пристрої послідовного обміну (часто їх називають послідовним портом). Часто мікроконтролер має і кілька осередків енергонезалежної пам'яті (найчастіше Flash), у якій можуть бути збережені різні дані.

Сімейства мікроконтролерів.
Наявність всіх перерахованих пристроїв у складі мікроконтролера не є обов'язковою. Найчастіше виробник випускає кілька моделей виробів, які мають у своєму складі різні периферійні пристрої. Мікроконтролери з одним типом процесора (і набором машинних кодів, що виконуються), але різними периферійними пристроями, відносять до одного сімейства. Так і кажуть: мікроконтролери сімейства ATtiny.

Багатофункціональність висновків мікроконтролера.
Може виникнути питання: як усі ці пристрої "спілкуються" із зовнішнім світом, якщо у більшості мікросхем у корпусі DIP не більше 40 висновків? Для вирішення проблеми нестачі висновків використовують метод поєднання функцій кількох пристроїв з використанням одного виводу. Наприклад, висновки одного з портів (8 розрядів – 8 висновків) також використовується для роботи аналогово-цифрового перетворювача, а висновки іншого порту - як входи аналогових компараторів, послідовного порту або для підключення інших вбудованих вузлів. Для управління режимами роботи висновків використовується спеціальний регістр управління режимами роботи порту (про нього розповідалося раніше, пояснюючи принципи роботи портів). У більшості мікроконтролерів висновки мають кілька функцій. Якщо звернутися до технічної документації на контролер, то при описі функції виводу буде зроблено зауваження щодо основної та альтернативної функції даного виводу. Наприклад: PD0/RX - нульовий розряд порту D одночасно є і входом послідовного порту, PB1/Ain0 - перший розряд порту одночасно є входом аналогового компаратора.

Алгоритми. програми.
Команди для процесора даються у порядку, відповідно до раніше розробленим алгоритмом. Алгоритм – це послідовність виконання процесором. Причому команди має бути зрозумілою процесору, і при цьому мати однозначне тлумачення, без будь-якої самостійності при її виконанні. Алгоритм можна записувати словесно. Наприклад: початок програми; зробити нульовий розряд порту входом; зробити сьомий розряд порту виходом; рахувати значення нульового розряду порту; якщо він дорівнює логічній одиниці, то виконати такі дії: завантажити до сьомого розряду порту логічну одиницю; повернутися на початок програми. Так ми описали алгоритм роботи схеми, що складається з вимикача, лампочки (або іншого навантаження) та джерела живлення. Результат виконання буде такий: при натисканні кнопки на вхід порту надходить напруга, процесор виконує програму - подає вихід порту напруга. І поки контакти замкнуті, на виході порту буде напруга.
Але таке написання дуже складно сприймати. Тому було розроблено методи графічного опису алгоритму. Ось приклад графічного запису вищеописаного алгоритму.
Мал. Алгоритм-1. Графічний метод опису алгоритму

Команди розгалуження: умовний та безумовний переходи.
До особливих команд процесора відносяться команди умовного та безумовного переходу. Щоб зрозуміти це, необхідно пояснити таке поняття як «покажчик адреси виконуваної команди». У процесора є спеціальний регістр, в якому зберігається адреса команди, що виконується в даний момент. При подачі харчування цей регістр обнулюється - записується нуль. Далі процесор починає виконувати команди, що зберігаються в пам'яті, починаючи з нульової адреси - адже в регістрі покажчика адреси виконуваної команди вказано нуль. Виконавши команду, цей покажчик інкримінується, тобто його значення збільшується. Процесор зчитує наступну команду з пам'яті на адресу, вказану в покажчику. Тобто команди виконуються послідовно. Порушити послідовність виконання програми можна, використовуючи команди умовного та безумовного переходів. Для цього в одній із осередків пам'яті зберігається команда, що вказує процесору змінити значення регістру покажчика адреси виконуваної команди. Команда безумовного переходу вказує процесору змінити порядок послідовно виконання програми та почати виконувати команди, що зберігаються у пам'яті, починаючи з вказаної адреси.
Команда умовного переходу складніша: під час її виконання перевіряється виконання будь-якої умови. Наприклад, необхідно порівняти значення двох осередків пам'яті. Якщо значення першого осередку більше, то продовжити виконання програми за адресою А, інакше (тобто значення першого осередку менше) - перейти за адресою С.

Переривання та їх типи. Пріоритети переривань.
Є ще один спосіб «змусити» процесор припинити послідовне виконання програми та перейти до виконання програми за певною адресою – викликати «переривання». Поняття переривання виникло разом із першими процесорами. Справа в тому, що процесор управляє менш швидкісними, ніж він, пристроями. Наприклад, процесор повинен обробляти дані до появи певного сигналу. Наведемо простий приклад: процесор виконує програму підрахунку кількості імпульсів, які надійшли однією з його портів. При натисканні кнопки процесор повинен перервати виконання цієї програми та виконати іншу програму: увімкнути будь-який пристрій (тобто подати на один із розрядів порту логічну одиницю - «1»). Як вирішити це завдання? Можна у самій програмі постійно опитувати необхідний розряд порту, якого підключена кнопка. Але при цьому частина ресурсів (швидкості) процесора практично витрачається на опитування порту. Другий спосіб – це використання переривань. У процесора (отже, і мікроконтролера) є спеціальний висновок. Зазвичай його позначають як Int (англ. Interrupt - переривання). При подачі сигналу висновок «Int» відбуваються такі действия:
- зупинення виконання основної програми,
- в оперативній пам'яті зберігається значення регістру покажчика адреси виконуваної команди (місце переривання виконання програми),
- після цього в цей же регістр завантажується нова адреса (залежить від бажання виробника процесора),
- у комірці пам'яті із зазначеною адресою розташована команда безумовного переходу: «перейти за адресою хх»,
- У пам'яті, починаючи з осередку з адресою хх, розташована ще одна програма, назвемо її службовою програмою.

У нашому випадку службова програма повинна видати в порт логічну одиницю, тим самим увімкнувши необхідний пристрій. А ось тут починається найцікавіше: останньою командою службової програми є команда «вихід із переривання». Отримавши цю команду, процесор зчитує з пам'яті раніше збережене значення регістру покажчика адреси команди, що виконується, і завантажує його в цей регістр. Отже, процесор продовжує виконання основної програми з перерваного місця.
Але переривання може бути викликане як зовнішніми сигналами, а й внутрішніми пристроями самого мікроконтролера: таймерами, лічильниками, послідовними портами і навіть енергонезалежною пам'яттю. Знов-таки, робиться це в основному для того, щоб зменшити кількість команд, що виконуються з аналізу стану цих периферійних пристроїв. Наведемо приклад: процес запису даних у енергонезалежну пам'ять дуже тривалий, цей час процесор може виконати дуже багато команд. Тому процесор виконує основну програму, у ній видає команду на стирання енергонезалежної пам'яті, після чого продовжує виконання основної програми. Як тільки очищення енергонезалежної пам'яті завершено, схеми управління формують сигнал переривання від цієї пам'яті. Процесор перериває виконання основної програми та починається процес запису даних на згадку. Цей спосіб виконання будь-якої дії поза основною програмою називають фоновим режимом. Також часто кажуть: «ця частина програми виконується у фоновому режимі».
При роботі з перериваннями необхідно бути обережним: можлива ситуація, коли виконання програми і робота всього пристрою може бути порушена. Справа в тому, що мікроконтролер має кілька переривань. Для управління режимами переривань є регістр управління перериваннями. Ви при налаштуванні режимів роботи переривань ви дозволили роботу кількох переривань – це нормальна ситуація. Але, отримавши зовнішній або внутрішній сигнал переривання основної програми та перейшовши до виконання програми обробки переривання, ви не відключили переривання. Процесор виконує службову програму і в цей момент отримує ще один сигнал переривання. Процесор перериває виконання службової програми та переходить до виконання програми обробки нового переривання. Нескладно здогадатися, чого це може призвести.
Для вирішення цієї проблеми було розроблено метод присвоєння кожному з переривань ступеня важливості, або пріоритету переривання. Залежно від моделі мікроконтролера пріоритет переривань може бути заданий жорстко (а програміст лише дозволяє або забороняє обробку того чи іншого переривання), або бути реалізований програмістів програмно (тобто пріоритет переривання залежить від переваг програміста та алгоритму реалізації конкретного завдання).

Керуємо процесором. Мови програмування. Транслятори.
Машинні коди Асемблер.
Команди для процесора - послідовності одиниць та нулів. Часто команди процесора називають машинними кодами, підкреслюючи, що ці команди спочатку розраховані конкретного виконавця - машину, але з людини. Запам'ятовувати команди із цифр (машинні коди) дуже складно. Тож спрощення роботи придумали спосіб заміни цифрових послідовностей більш зрозумілі людині символьні скорочення. Наприклад, для команди "завантажити дані" придумали зрозуміле скорочення "ld" (англ. "load" - завантажити), для команди "порівняти" - "cp" (англ. "compare" - порівняння) і так далі. Даний метод символьного запису команд процесора називають асемблер. Якщо під час роботи з машинними кодами програміст безпосередньо вводить команди управління процесором у пам'ять пристрою, то, при роботі з асемблером між програмою і процесором є своєрідний посередник, який перетворює символьні позначення машинні коди. Програму, що є посередником, називають транслятором, тобто перекладачем. Але тут є маленький нюанс: асемблером називають не тільки метод символьного позначення цифрових команд (машинних кодів), а й програму-транслятор, яка допомагає програмісту перевести символьні позначення команд безпосередньо до машинних команд. Тому часто використовується наступний прийом: коли говорять про мову – пишуть Асемблер, коли про програму – просто асемблер.
Асемблера має величезну гідність: програми, написані на Асемблері, дуже швидко виконуються процесором. Справа в тому, що Асемблер - це практично машинна команда. Але в асемблера є й мінуси: основний мінус – складність написання програм, другий навіть відносно нескладні програми мають великий обсяг вихідного тексту, що ускладнює аналіз програми.

Модульність програм. Часто повторювані завдання.
Кожен програміст за час своєї роботи накопичував певну кількість програм. Але багато програм містять однакові дії. Наприклад, у багатьох програмах проводиться опитування клавіатури та аналіз натиснутої кнопки. Отже, цю частину програми можна переносити з однієї програми до іншої. З таких шматочків (модулів) поступово сформувалися бібліотеки програм. Програмісти стали «ліпити» програму з модулів: тобто, вставляли необхідний модуль у потрібне місце програми. Такий підхід прискорював процес написання програми та збільшував надійність роботи програми загалом за рахунок використання вже налагоджених модулів. Але з перших днів виникла проблема спільного використання модулів: адже кожен програміст писав модулі за власним стандартом - як йому було зручніше в той чи інший момент. Тому поступово виробився стандарт (точніше, кілька стартів) написання цих модулів. У них була описана структура модулів для їхнього зручнішого «склеювання» в одну програму.

Мови програмування та його функціональне поділ.
Поступово ці стандарти використання модулів сформували те, що пізніше буде названо «мовами програмування». Як і людські мови, мова програмування має кілька підрівнів, які визначають як написання окремих слів (модулів) та методи їх запису, так і правила їх використання. Згодом мови програмування перетворювалися і видозмінювалися. Поступово всі мови програмування розділилися на кілька груп, залежно від професійної орієнтації:
- прикладні мови програмування (FORTRAN для математиків, FoxPro для фінансових працівників);
- універсальні (Pascal та Basic);
- Системні (Ассемблер і Сі).

Системні слова мови стали називати низькорівневими, тобто програміст працює на нижньому, найбільш наближеному до процесора, рівні. А мови, під час роботи з якими програміст не стикається з безпосереднім управлінням роботою процесора, стали називати мовами високого рівня (часто позначають як ЯВУ). Не плутайте це скорочення під назвою мови «Ява» - «Java».

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

Процес створення програми. Середовища розробки програм.
З появою трансляторів процес створення програми став виглядати так:
- Розробляється алгоритм роботи майбутньої програми,
- алгоритм кодується (тобто описується у вигляді команд мови програмування),
- отриманий код записується в якомусь текстовому редакторі,
- файл із текстом програми передається у транслятор,
- транслятор перетворює символьні команди на зрозумілі процесору команди та зберігає їх у файл,
- Цей файл завантажують на згадку.
Як бачимо, програмісту доводилося працювати у кількох програмах. Найчастіше всі ці програми писалися різними виробниками, тому сумісність цих програм не гарантувалася. Їхню сумісність доводилося з'ясовувати шляхом спроб і помилок.

Інтегроване середовище розробки програм.
Останнім часом з'явився новий підхід: "Інтегроване Середовище Розробки" (англ. "IDE"). Під інтеграцією розуміється виконання в одній програмі всього процесу створення програми: написавши текст програми, програміст клацанням миші запускає трансляцію тексту програми в машинні коди, після чого отриманий файл автоматично завантажується в пам'ять процесорного пристрою. Тобто все робиться в одній програмі. Такий підхід пришвидшує роботу програміста.

Перші складнощі.
Усі попередні глави були вступним курсом, який готував вас до сприйняття нової інформації. На шляху ми маємо кілька проблем.
1. Великий обсяг різнобічної інформації: електроніка, пристрій мікроконтролерів, алгоритми, синтаксис мов програмування, опис роботи з програмним інструментарієм. І як писати? Один читач – хороший електронник, але жодного разу не писав програми, інший – програміст, але електроніка – на рівні радіо гуртка, третій – щось середнє...

2. Вибір МК: якщо всі мікроконтролери хороші, то на основі якого виробу та якого виробника будувати процес подальшого навчання та практичного застосування мікроконтролерів?
Для того щоб вибрати мікроконтролер для НАВЧАННЯ нам необхідно виконати такі умови:
А) обраний для навчання мікроконтролер має бути доступним та недорогим.
Б) він має бути сучасним виробом, але не найновішим.

Тепер докладніше про кожний пункт.
З пунктом А все зрозуміло: який сенс вивчати виріб, який важко придбати чи його ціна надхмарна для новачка.
Пункт Б потребує пояснення. Справа в тому, що нові вироби завжди мають якісь недоробки. Вони виявляються лише через якийсь час, поки хтось випадково не натрапить на цю проблему в ході роботи з цим виробом. Але новинки не відразу попадають у нові конструкції: потрібен час на написання програм для нових моделей. Тут є людський чинник: у розробників вже є готові рішення на попередніх моделях мікроконтролерів, і переходити на нові - складно.
Також усі нові мікроконтролери мають лише фірмовий опис. А воно написане англійською мовою та з використанням численних професійних термінів: адже на професіоналів і розраховане! А ми – учні… Через якийсь час з'являються приклади конструкцій, докладніші описи з численними коментарями та порадами. Потім хтось почне перекладати документацію російською мовою (не все, але хоча б найскладніше або найчастіше використовується).
До нового мікроконтролера може не бути і інструментарію: компілятори, налагоджувачі та програматори «не розуміють» цей виріб. Знову очікування, доки автори цих програм не оновлять свої твори...

3. Необхідно вибрати мову програмуванняна якому ми плануємо писати програми для МК.
Вибір мови програмування - дуже акуратне заняття. Для навчання програмуванню мікроконтролерів хотілося б використовувати мову програмування з простим синтаксисом: програміст повинен займатися програмою, але не її оформленням!
Тут треба заздалегідь зробити пояснення: нині серед розробників програм та пристроїв на мікроконтролерах популярні три «родини» мов: Сі (Пишуть як «С»), Паскаль (Pascal) та Бейсік (BASIC). Паскаль спочатку розроблявся як інструмент вивчення програмування. Бейсик самою структурою схожий на Паскаль, але запис команд спрощений і вимог до оформлення програми значно менший. Сі – прийнято вважати мовою професіоналів. Сі – це як китайська філософія: важливим є не лише символ (команда), а й його зображення і колір. Жарти жартами, але моя думка така: Сі - це кошмар. Його використання виправдовується лише в деяких, дуже вузько профільних задачах. Але наше завдання – спробувати свої сили, і мінімально їх витрачати на завдання, які не мають прямого зв'язку з основною метою.

4. Нам необхідне середовище розробки програм для мікроконтролерів. Її вибір безпосередньо залежить від типу використовуваного МК та мови програмування.
Середовище розробки програм є дуже важливим для успішного освоєння програмування мікроконтролерів. Писати програми в текстовому редакторі на кшталт Блокнота можна, але незручно (перевірено!). Та й у командному рядку викликати компілятор – справа невдячна у наш, графічно-віконний, вік.
Вибір середовища розробки безпосередньо залежить від мікроконтролера, на якому ми будуватимемо практичну частину навчання. До того ж нам треба мати безкоштовний інструментарій. Але, як показало тестування таких програм, безкоштовне ПЗ найчастіше має посередню якість як з погляду і користування, і з погляду вивчення програмування МК: наявність помилок чи недоробок у самих трансляторах створюють додаткові труднощі і позбавляють впевненості у власних силах.
Зійде й демонстраційна версія, яка мала б мінімум обмежень і працювала хоча б півроку – саме такий термін необхідний для здобуття навичок роботи з мікроконтролерами в домашніх умовах.

5. Програматор, з використанням якого завантажуватимемо написані програми на згадку про МК. Вибір програматора також залежить від типу використовуваного МК. Є, звичайно, «універсальні» програматори, що дозволяють працювати з різними мікроконтролерами та мікросхемами пам'яті, але вони дорогі. Та й не потрібні здебільшого. Тому простіше виготовити щось вузькоспеціалізоване для цього сімейства МК.
Але справа не так у складності схем програматора, а в методі підключення цього програматора до ПК. Тут потрібно пояснити: програматор - це електронний адаптер, що перетворює сигнали комп'ютерних інтерфейсів (порти СОМ, LPT і USB) на сигнали, що подаються висновки МК завантаження програми у пам'ять. Електронним адаптером управляє програма ПК, яка й «примушує» адаптер видавати необхідні послідовності сигналів висновки МК.
Якщо адаптер програматора, що підключається до ПК через порти COM і LPT, можливо виготовити в домашніх умовах - «на коліні», то виготовлення такого адаптера, але USB порту, що підключається, вже дещо проблематично: серцем такого адаптера часто є... мікроконтролер. Тут з'являється феномен: щоб запрограмувати МК нам потрібно запрограмувати МК.
Напрошується логічне питання: а навіщо виготовляти складний адаптер, що підключається до USB, коли можна зробити простий та підключити його до LPT або COM порту. Вся справа в тому, що багато (майже всі) сучасні ПК не мають у своєму складі цих портів. Тому доведеться виготовляти складніший адаптер для програмування МК.

Березень 2010

Ці питання я ставив собі у березні, а зараз уже кінець листопада. Але цей час не пройшов даремно: я знайшов вихід із ситуацій, описаних вище, і знайшов відповіді на всі запитання, що мучили мене. А тепер про все по порядку.

Відповідь на запитання №1
Якщо матеріали попередніх розділів ще якось можна було логічно систематизувати та подавати поетапно, то матеріали в наступних розділах даються паралельно: одне має на увазі інше. Можливо, вам мій метод подачі нових матеріалів здасться дещо сумбурним, але вигадати щось красивіше за оформленням я не зміг.

Відповідь на запитання №2
Мікроконтролер виробництва компанії ATMEL ATMEGA48. Добре описаний, що випускається вже кілька років, не планується до зняття з виробництва ще як мінімум 3 роки, має оптимальні технічні параметри.

Відповіді на запитання 3 та 4
Середовище програмування – BASCOM (виробник MCS Electronics, автор Марк Альбертс). Мова програмування за стилем та вимогами до оформлення тексту програми схожа з Паскалем, але синтаксис команд взято з BASIC.
Причини вибору:
- повнофункціональна демонстраційна версія компілятора (єдине обмеження: код, що генерується компілятором, обмежений об'ємом 4 КБайт)
- бажання автора програми співпрацювати (я зробив переклад повідомлень інтерфейсу та довідкової системи російською мовою, він додав російську мову в цю програму)
- Наявність російськомовного форуму користувачів даного компілятора

Відповідь на запитання №5
Поєднати простоту схеми та USB не вдалося. Вирішили описати дві моделі програматорів: одна підключається до LPT порту комп'ютера, друга до COM порту. За відсутності цих портів друга версія програматора може бути підключена до комп'ютера за допомогою перетворювача USB-COM. Так отримуємо зв'язку USB-COM-програматор-мікроконтролер.
Перша модель програматора відома як STK-200/300, містить мікросхему буфера з третім станом та кілька резисторів. Друга модель – відомий програматор USBasp.

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

Так, наприклад, у чіпі є інформація про тип картриджа, дату його виготовлення та серійний номер. У процесі роботи принтера або БФП у чіп заноситься додаткова інформація про дату його встановлення у пристрій, поточний лічильник відбитків, зроблених картриджем, інші технічні дані. Коли лічильник відбитків картриджа досягає певного значення, чіп картриджа надходить інформація про те, що картридж став порожнім. Тоді пристрій попереджає користувача про те, що картридж порожній і його потрібно замінити. Залежно від марки принтера або БФП, техніка або продовжує працювати з таким попередженням, або перестає.

У такому разі є кілька варіантів:

1. Не міняти чіп картриджа

Якщо у Вас техніка марки Canon або HP, чіп вашого порожнього картриджа не блокує роботу принтера або БФП, а лише постійно сигналізує про те, що картридж порожній. У такому випадку при заправці картриджа його можна не змінювати, а попередження про порожній картридж ігнорувати.

2. Перепрограмувати чип.

У принтерах марок Samsung Xerox чіп картриджа часто блокує функціонування принтера після того, як картридж став порожнім. Для того, щоб заправлений картридж почав працювати — чіп перепрограмують. Це можна зробити в наших майстернях. Також ви можете дізнатися про можливість перепрограмування (обнулення) чіпа вашого картриджа .

3. Замінити чіп

Якщо чіп неможливо перепрограмувати, його або змінюють кожного разу при заправці, або один раз перепрошують принтер/МФУ. Ви можете дізнатися про необхідність міняти чіп при заправці в нашійу графі примітки.

4. Перепрошувати принтер

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

Ті, хто з'явився на нашому ринку в 90-х роках, попереджали установника: мовляв, можеш розривати тільки ланцюг, що управляє включенням стартера. Щоправда, на карбюраторних автомобілях і рвати було особливо нема чого: хіба що ланцюг живлення котушки запалювання, який бувавий викрадач міг відновити за секунди. І лише з появою упорскових двигунів з'явилася можливість блокувати комплексну систему керування живленням та запалюванням.

Першим і, мабуть, останнім вітчизняним автомобілем із упорсковим двигуном та звичайним ключем запалювання був Святогор із двигуном від Рено F3R. Там було все, як на карбюраторній машині. Замок запалювання видавав харчування на «мозки» двигуна, а ті забезпечували роботу свічок запалювання та подачу палива.

Вазовські автомобілі з появою системи упорскування палива відразу набули блоку АПС (автомобільна протиугінна система), який спілкувався з чіпом у ключі запалювання і тільки після впізнання свого ключа давав ЕБУ (електронному блоку управління) дозвіл на пуск двигуна. Зараз блок сильно зменшився в розмірах і знаходиться під кожухом кермової колонки. Корпус замку запалювання автомобіля оточений рамкою, пов'язаною безпосередньо з блоком іммобілайзера. При включенні запалення блок подає імпульси в цю рамку і переходить у режим зчитування, тобто починає приймати відгук від чіп-ключа. Від імпульсу чіп-ключ отримує енергію і починає передавати вшитий у нього на рамку іммобілайзера. Рамка іммобілайзера приймає код і якщо код збігається, дає можливість запустити двигун. Після цього все йде своєю чергою, і згаданий пусковий контур більше не потрібен.

Зрозуміло, що за такого підходу звичайний ключ запалювання поступається місцем чіп-ключу. Нічого складного в цьому немає: навіть люди, які взагалі не мають автомобіля, стикаються з чіп-ключами щодня. Адже за цією ж технологією виконано ключ від домофона, який тепер стоїть на дверях під'їзду майже будь-якого багатоквартирного будинку.

Ключі із чіпами бувають чотирьох основних типів.

  • Ключ із чіпом, що дозволяє лише запустити двигун поворотом леза у звичайному замку запалювання. Чіп є невеликим циліндриком або пластмасовим паралелепіпедом, що містить індуктивну котушку, і мікросхему, в якій запрограмований індивідуальний код даного ключа. Чіп у такому виконанні герметичний, що дозволяє не лише користуватися ним під дощем, а й навіть йти з ним купатися.
  • Ключ з чіпом і радіопередавачем, що дозволяє відкривати та закривати автомобіль кнопками на брелоку на відстані не більше 30–50 м, що пускає двигун за допомогою механічного замикання контактів у замку запалювання. У деяких автомобілів такими кнопками на ключі активується штатна сигналізація автомобіля, що включає сирену, а також датчики нахилу та руху. Але герметичність таких ключів обмежується бризкозахисним виконанням: занурювати в рідину їх не можна.
  • Ключ, у якого нормальному режимі не використовується механічне лезо. Відкривають та закривають автомобіль кнопками на ключі. Для пуску автомобіля ключ вставляють у спеціальний слот на панелі приладів, після чого натискають кнопку . Виконання ключа – бризкозахисне.
  • Ключ для так званого безключового доступу. Двері автомобіля відкриваються натисканням невеликої кнопочки на ручці, а пуск двигуна здійснюється кнопкою "старт-стоп". При цьому ключ повинен знаходитись у кишені власника. Слот у салоні автомобіля передбачено, але ключ може залишатися в кишені протягом усієї поїздки. При цьому у розпорядженні господаря залишаються всі кнопки керування на ключі. При бажанні можна відкривати та закривати автомобіль, натиснувши відповідну кнопку на ключі.

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

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

Чи є у таких чіп-ключів майбутнє? Вважаємо, що ні: це просто проміжний етап розвитку систем доступу. Давним-давно відомі системи, реагують на відбитки пальців, райдужну оболонку очей і все, що завгодно. Є й дивні рішення: наприклад - впровадити керуючий чіп в організм власника. А буквально вчора відбулася масштабна прем'єра чергового айфону, який впізнає власника по обличчю. Щоправда, на презентації стався конфуз: смартфон таки не впізнав творця.

Я категорично проти такого підходу. Зазвичай все це закінчується - або нічим, або забиті форуми з благаннями допомогти. Навіть якщо комусь допомагають, то в 90% він більше ніколи не спливе на сайтах з електроніки. В решті 10% він так і продовжує заливати форуми благаннями, його спочатку штовхатимуть, потім поливатимуть брудом. З цих 10% відсівається ще 9%. Далі два варіанти: або таки до дурної голови доходить і все ж таки відбувається goto до початку, або в особливо запущених варіантах, його доля копіювати чужі конструкції, без жодної думки про те як це працює. З останніх найчастіше народжуються ардуїнщики.

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

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

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

2. Перед розв'язанням задачі, дробіть її до абсурду аж до «припаяти резистор», це допомагає, перевірено.Дрібні завдання вирішувати значно простіше. Коли велике завдання розбите на купу дрібних дій, то все, що залишається - це виконати їх. Можу навести ще одну придатну пораду, хоч вона вам і здасться маячною - заведіть блокнотик і пишіть у нього все, що збираєтеся зробити. Ви думаєте, тож запам'ятаю, але ні. Допустимо сьогодні у мене гарний настрій і думаю про те, як зібрати платню. Запиши план дій: сходити купити резистор, підготувати дроти, зробити кріплення дисплея. Потім все забудеш, відкриєш блокнотик і дивишся - ага сьогодні настрій попилити і пострігати, зроблю кріплення. Або збираєш ти плату і вже залишилося допаяти останній компонент, але не тут то було резистори закінчилися, от записав би перед тим як паяти, то згадав.

3. Не користуйтеся кодогенераторами, нестандартними фічами та іншими спрощалками, хоч би на перших етапах.Можу навести свій особистий приклад. За часів активного використання AVR я користувався кодогеном CAVR. Мене він повністю влаштовував, хоч усі казали, що він кака. Дзвіночки дзвеніли постійно, були проблеми з бібліотеками, з синтаксисом, з портуванням, але важко було від цього відмовитися. Я не розбирався як це працює, просто знав де і як поставити галочки.

Коли в мою труну було вбито з появою STM32, потрібно було обов'язково переповзати на них, ось тоді і виникли проблеми. Проблеми м'яко сказано, фактично мені довелося освоювати мікроконтролери та мову Сі з нуля. Більше я не повторював минулих помилок. Треба сказати це вже знадобилося і неодноразово. З того часу мені довелося попрацювати з іншими платформами і ніяких труднощів не відчуваю, підхід виправдовує себе.

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

4. Вивчайте мову Сі.Ех, як часто я чую, як початківці радіоаматори хваляться, що добре знають сишку. Для мене це стало кормом, завжди люблю проконсультуватись у таких співрозмовників. Зазвичай відразу з'ясовується, що мову вони зовсім не знають. Можу сказати, що не дивлячись на простоту, що здається, людей які дійсно добре б його знали, зустрічав не так багато. В основному всі його знають на стільки, наскільки потрібно для вирішення завдань.

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

Дуже багато початківців гидують вивченням мови, тому якщо ви не будете як усі, то відразу станете на два щаблі вище за інших новачків. Так само не жодної різниці, де вивчати мову. На мою думку, мікроконтролер для цього не дуже підходить. Набагато простіше поставити якусь Visual Studio або Qt Creator і вирішити завдання в командному рядку.

Хорошою підмогою буде також вивчення будь-яких тестів з мови, які дають під час співбесід. Якщо поритися можна багато нового дізнатися.

5. Вивчення асемблера? Боятися його не треба, так само як і обожнювати.Не потрібно думати, що вміючи написати програму на асемблері, ви відразу станете гуру мікроконтролерів, чомусь це часта помилка. Насамперед це інструмент. Навіть якщо ви не плануєте використовувати його, то все одно я б рекомендував написати хоча б пару програм. Це дуже спростить розуміння роботи мікроконтролера та внутрішнього пристрою програм.

6. Читайте даташит.Багато розробників нехтують цим. Вивчаючи даташит ви будете на два щаблі вище за тих розробників. Робити це вкрай корисно, по-перше це першоджерело, які сайти ви не читали б, у більшості випадків вони повторюють інформацію з даташиту, найчастіше з помилками і недомовленостями. Крім того, там може бути інформація, про яку ви не замислюєтеся зараз, але яка може стати в нагоді в майбутньому. Може статися так, що вилізе якась помилка і ви згадаєте що так, у датасіті про це було сказано. Якщо ваша мета стати хорошим розробником, то цього етапу не уникнути, читати датташити доведеться, що раніше ви почнете це робити, тим швидше піде зростання.

7. Часто народ просить надіслати даташит російською.Даташит - це те, що має сприйматися як істина, найвірніша інформація. Навіть там не виключено помилок. Якщо до цього додадуться помилки перекладача, адже він теж людина, може навіть не навмисне, просто опечататися. Або в нього своє бачення, може щось прогавити, на його погляд не важливе, але можливо вкрай важливе для вас. Особливо смішною стає ситуація, коли потрібно знайти документацію на не дуже популярні компоненти.

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

Мною був проведений експеримент: у наявності був студент, даташит і гугл перекладач. Експеримент №1: студенту вручено даташит і дано завдання самостійно знайти потрібні значення, результат - «так як я зможу», «так я не знаю англійську», «я нічого не знайшов/я не зрозумів» типові фрази, що говорять про те, що він навіть не пробував. Експеримент №2: тому ж студенту, вручений той самий даташит і теж завдання, з тією різницею, що я сів поруч. Результат – через 5 хвилин він сам знайшов усі потрібні значення, абсолютно без моєї участі, без знання англійської.

8. Вигадуйте велосипед.Наприклад, вивчаєте якусь нову штуку, припустимо транзистор, дядько Хоровиць зі сторінок своєї книги авторитетно заявляє, що транзистор посилює, завжди кажете – НЕ ВІРЮ. Беремо в руки транзистор вмикаємо його в схему і переконуємося, що це дійсно так. Є цілий пласт проблем та тонкощів, які не описуються в книгах. Відчути їх можна лише тоді, коли візьмеш у руки і спробуєш зібрати. При цьому отримуємо купу попутних знань, дізнаємося про тонкощі. Крім того, будь-яка теорія без практики забудеться набагато швидше.

На початковому етапі мені дуже допоміг один метод - спочатку збираєш схему і дивишся як вона працює, а потім намагаєшся знайти обґрунтування в книзі. Те саме і з програмною частиною, коли є готова програма, то простіше розібратися в ній та співвіднести шматки коду, який за що відповідає.

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

9. А як би я зробив це, якби був на місці розробників?Чи можу я зробити краще? Щоразу ставте собі ці питання, це дуже добре допомагає просуватися у навчанні. Наприклад, вивчіть інтерфейси 1wire, i2c, spi, uart, а потім подумайте чим вони відрізняються, чи можна було зробити краще, це допоможе усвідомити чому саме так, а не інакше. Так само ви усвідомлюватимете, коли і який краще застосувати.

10. Не обмежуйтеся технологіями.Важливо, що ця порада має дуже тонку грань. Був етап у житті, коли з кожної підворітці долинало «треба б знати ПЛІС», «а ось на ПЛІС можна зробити». Формально у мене не було цілей вивчати ПЛІСини, але й пройти повз було ніяк не можна. Цьому питанню було виділено небагато часу на ознайомлення. Час не пройшов даремно, у мене була ціла низка питань, що стосуються внутрішнього пристрою мікроконтролерів, саме після спілкування з плісинами я отримав відповіді на них. Подібних прикладів багато, всі знання, які я набував у тому чи іншому вигляді, рано чи пізно стали в нагоді. У мене немає жодного марного прикладу.

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

11. Якщо запитати радіоаматора-початківця, що йому більше подобається програмування або схемотехніка, то з ймовірністю 99% відповідь буде програмування. У цьому більшу частину часу ці програмісти витрачають виготовлення плат ЛУТом/фоторезистом. Причини взагалі то зрозумілі, але часто це перетворюється на якийсь маразм, який полягає у виготовленні плат для виготовлення плат.

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

12. Наступна порада, особливо болісна, мені дуже не хочеться її обговорювати, але треба.Часто мені пишуть, мовляв, ххх руб за ууу дорого, де б дешевше дістати. Начебто звичайне питання, але зазвичай я відразу напружуюся від нього, оскільки часто він переходить у нескінченні скарги на відсутність грошей. У мене завжди виникає запитання: чому б не відірвати п'яту точку та не піти працювати? Хоч у той же макдак, хоч на будівництво, потерпіти місяць, зате потім можна придбати кілька плат, яких вистачить на найближчий рік. Та я знаю, що в маленьких містах та селах складно знайти роботу, переїжджайте у велике місто. Працюйте на віддаленні, загалом потрібно крутитись. Просто скаржитися немає сенсу, вихід із ситуації є, хто шукає його, той знаходить.

13. У ту ж скарбничку внесу дуже болісне питання інструменту.Інструмент повинен дозволяти максимально швидко розробляти пристрої. Чомусь дуже багато розробників не цінують свій час. Типовий приклад, дешевий обтиск для клем, на якому так люблять економити багато роботодавців. Проблема в тому, що вона навіть стискає неправильно, через це дроти вивалюються. Доводиться робити купу додаткових маніпуляцій, відповідно витрачати час. Але як відомо дурень платить тричі, тому низька ціна кримпера зросте у багато разів, за рахунок часу, що витрачається, і поганої якості обтиску.

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

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

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

Ще на самому початку, коли мікроконтролери були для мене хобі, я багато допомагав із курсовими та дипломами різних вузів, просто щоб оцінити свій рівень. Можу сказати впевнено, що рівень загалом невисокий незалежно від імені вишу. Вчитися кілька років, щоб написати такий диплом, зовсім необов'язково. Досягти цього можна самостійно за дуже короткий термін. І все-таки часто бували моменти, коли студенти знали якийсь предмет, який вони проходили на 2-3 курсі, а я цього не знав. Хоча всі ці знання і компенсувалися самоосвітою, але все ж таки краще було б не витрачати на цей час.

ВНЗ заради папірця. Можу сказати, що були й такі ситуації, коли пропонували роботу, яка вимагала обов'язкової наявності освіти та було прикро, що саме на той момент папірця не було. Але в цілому, історія показує, що більшості роботодавців наплювати на ваш папірець.

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

Ще один момент – це можливості. Найчастіше у вузів є свої можливості - обладнання, може якісь секції, може якісь програми роботи за кордоном, цим потрібно користуватися, якщо є хоч найменша можливість. Якщо у вузі ви не бачите перспективи, йдіть в інший, світ на якомусь одному не закінчується.

Якщо підсумувати то порада така: якщо є хоч найменша можливість - треба йти вчитися, обов'язково за профілем, якщо є хоч якісь шанси, то лізти скрізь, а не відсиджувати штани на задній парті. Заводити знайомства, паралельно вдома самому практикуватися, розвиватися.

16. Чи пізно починати програмувати у 20, 30, 40, 50 років?Практика інших людей показує, що вік взагалі не перешкода. Багато хто чомусь не враховує те, що є цілий пласт роботи, яку молоді через свої амбіції не хочуть робити. Тому роботодавці вважають за краще брати тих, хто її тягне. Це ваш шанс зачепитися, а далі все залежить лише від вас.

І остання порада.Багато радіолюбителів нетовариських, сердитих і дратівливих - вважайте це специфікою роботи. Випромінюйте добро і позитив, будьте гарною людиною.