ATmega168 - портал в ад (24.08.2024). |
![]() |
2024 - Август | |||
26.08.2024 09:03 | |||
Ранее без микроконтроллера была создана система управления клапаном воды (которая сейчас чуток допиливается). Пришло время сделать её с микроконтроллером, увеличив функционал и снизив стоимость. В довоенное время была куплена плата Arduino Nano v.2.0 с микроконтроллером ATmega168 - точно была на 50-100руб дешевле ATmega328 (это сейчас они в одну стоимость стали, равно как ATmega328 и ATmega328PB). При работе с данным микроконтроллером, окончательно закрепилось утверждение: дьявол с чертями - это не вымышленные персонажи, а реальные глючные предметы и тупые люди этой планеты. Сэкономил, бл...
Работая с ATmega168, оглядывался на ATmega328: на ней была успешно реализована система защиты от протечек, способная работать при напряжении 4.8В, - и то могла бы и при меньшем: именно внешний модуль отправки SMS IOT-GA6-B был слабым звеном с высоким энергопотреблением. На деле - не нужно было оглядываться, т.к. возникла куча багов. Каждый баг, изначально, неизвестного типа: аппаратный, или контактный, или программный - думаешь на кривые руки при пайке или кривые мозги при программировании, а это микроконтроллер троллит. Характерно для обеих микроконтроллеров: - Rx - D0, Tx - D1; - прерывания: 0 - D2, 1 - D3; - как и для дорогущих плат АЦП (вида ADLINK PCI-9113A за 60к): влияние аналоговых каналов друг на друга даже с заземлением, паразитные значения без заземления. Решение было заимствовано из контрольно-проверочной аппаратуры: использовать входные каналы через один, заземлять все каналы. Был выявлен номинал заземляющего резистора, при котором 0.00В всегда будет 0.00В: 85кОм при пониженном напряжении питания 3.8В (5В от ПК, 1.2В из которого падало на питающих проводах: USB-хаб без дополнительного питания + кабель USB к программатору длиной 60см); - неочевидный всегда присутствующий баг самой платы Arduino Nano, независимо от микроконтроллера: каналы A6 и A7 работают только на вход; - если есть устройство, подключенное к D0 или D1, - оно может мешать заливать скетч в плату. Поэтому на них можно вешать только светодиоды; - цифровой выход D13 нельзя использовать с реле: несколько произвольных смен состояния при включении платы. Но его можно использовать для питания маломощных устройств. Почему-то на нём работает семисегментный индикатор TM1637 - возможно, связано с тем, что не успевает зажечься при внезапных подаче и отключении питания. Пусть входящее напряжение является наиболее распространённым на входах техники в настоящее время (5В) и её начинки (ещё меньше). Тогда: - у ATmega328 напряжение на выходах будет меньше 5В - но у ATmega168 оно будет ещё меньше; - для ATmega328 напряжение 5В является ниже порога 6В - однако порог 6В является лишь рекомендованным. В то же время, для ATmega168 данное напряжение является чётким выходом за нижний предел питающего напряжения. В результате, у ATmega168 наблюдается нечёткое поведение при измерении напряжения аналоговыми входами: со смещениями в несколько десятков милливольт. При этом, направление и номинал смещений при каждом включении будет разным - так ещё и во времени изменяется. Пусть входящее напряжение будет 12В: у ATmega328 напряжение на выходах будет 5В - но у ATmega168 оно будет ещё меньше (4.85-4.92В). Пусть нужно включить реле с помощью аналогового выхода. Тогда на ATmega328 при напряжении питания 5В: - достаточно одного аналогового выхода (при его максимуме по паспорту 40мА) для энергоэффективных реле. Например, QIANJI JQC-3F(T73): ток замыкания 40мА, мизерный ток удержания 11-13мА; - достаточно соединить 2 аналоговых выхода для неэнергоэффективных реле. Ток удержания FRNGKE JQC-3F(T73): 47.2мА. Тогда на ATmega168 при напряжении питания 5В: - не хватит и двух аналоговых каналов, т.к. выходное напряжение недостаточно для перемещения якоря FRNGKE JQC-3F(T73); - при этом зависнув на границе: якорь раз щёлкнет, раз не щёлкнет - требуется транзистор. Разное: - при работе TM1637 в ATmega168 при напряжении питания 5В - ток GND 76мА, при 12В - 128мА. При напряжении питания 3.8В может через раз ошибочно показывать значения (только часть символов); - это означает, что через цифровые выходы может течь ток >40мА без последствий для подключаемого оборудования. В случае с питанием, при 12В: на D13 наблюдается напряжение 4.92В - которое сразу же падает до 4.48В. При этом TM1637 успешно работает, т.к. это точно >3.09В при напряжении питания 3.8В; - исходники системы защиты от протечек не заливаются в ATmega168: в нём не хватает места для размещения. (добавлено 30.08.2024) ATmega168 сдох при подключении RST через резистор 2.2кОм к пину +5V. Теперь RST всегда как будто соединён с GND. 3 часа потратил на поиск волосков проводов, флюса или олова, паразитно соединяющих RST с GND (в т.ч. отпаивая всё подряд), - их нет. С учётом того, что резистор взят с более чем двойным запасом (2.2кОм вместо экспериментально доказанных в работе 1кОм и 12кОм для ATmega328) - ещё одно подтверждение: ATmega168, при текущих технологиях аж ATmega328PB, - не заслуживает внимания. (добавлено 15.11.2024) Впервые работал с Arduino Uno. Если Arduino Nano, с заведомо пониженным напряжением питания, способна включать реле 5В и цифровым выходом - то Uno с напряжением 5В не способна даже цифровым: всего 3.3В на выходе. Пришлось использовать дешёвый повышающий преобразователь SX1308 до 12В. |
|||
Обновлено ( 15.11.2024 10:27 ) |