Default

Rii Mini Wireless Keyboard i8+

Работает отлично. Засыпает через минуту, просыпается секунд за пять. Есть подсветка. Если забыть выключить то высаживает батарею недели за две. Был глючек с хаотичной потерей приемника при разряженой батарее. Допаял паралельно аккумулятору электролит 10мк х 25в и проблема ушла. Чип клавы - TK208, передатчика 2.4GHz - BK2433.

Default

Лабораторный блок питания. Вольтметр.

Решил тут пилить лабораторный блок питания. В фавориты выбились три участника: раз, два, три, три. Первые два не понравились шумами ШИМ-а на выходе. Третий не понравился архаичным управленим. Буду скрещивать ужа с ежем - линейник номер три и немного магии.

Сердцем будет Arduino Nano v3.0 на чипе FTDI (на CH341 не пойдет, об этом ниже). В место ШИМ-а два АЦП MCP4725. Так же в ролях участвуют: энкодер,  термистор для котроля температуры радиатора и вентилятора, клон четырехстрочного ЖКИ экрана на HD44780 и пару операционников.

Код будет модульным - каждый узел будет в отдельном файле. Такая практика применяется во взрослых IDE. Большинство людей с "ардуино головного мозга" пихают весь фунционал в один огромный файл образуя "спагетти" код в котором, через пару недель, трудно разобраться даже создателю.


Сегодня расскажу как обстоят дела с первыми двумя модулями "adc.h" и "voltmeter.h". Встроенный АЦП Atmega328 имеет разрядность 10 бит. Существует програмный способ разогнать АЦП до любого заряда c помощью оверсемплинга. Подробнее об этом написанно здесь. Согласно документу, оптимальный вариант - 14 бит (10 железных + 4 програмных). При этом сохраняется баланс между точностью и "скростью".


Как видно из таблицы - дальнейшее увеличение разрядности не приностит увеличение точности. Скрость взята в ковычки не случайно - для дополнительных 4 бит, микркотроллер делает 256 измерений, для 5 бит 1024 имерения и так далее.

Второй важный элемент любого АЦП - это источник опорного напряжения. К сожелнию напряжения ИОН-а, встроенного в Atmega328, не хватило. Термистор для измерения температуры подключен к 5 вольтам, по стандартной схеме делителя. При 25С на выходе схемы будет 2.5 вольта, что за гранью добра если учесть, что нам еще 30 вольт мерить. Поэтому в качестве "опорника" был взят стабилизатор 3.3 вольт, встроенный в FTDI чип. Качество стабилизации говно - выдает 3.4 вольта вместо 3.3 и плавает вслед за входным. Для прототипирования сойдет, а потом придется заменить на что то более серьезное.


Пока отлаживал словил интересный глюк. Теперь все переменные объявляю не просто int x, а int x = 0. Сравнил 10 и 14 бит. Предел измерений 0..40 вольт. Делитель 100кОм/8.2кОм. Подал на вход 4.95 вольт. Результат на фотографии. Справа количество отсчетов АЦП. Вывод - если вам надо один знак после запятой то 10 бит вполне сгодятся, если два то только 14 бит. Третьему знаку после запятой я не верю и в финальной версии его не будет.

В следующей части раскажу о "thermistor.h"
Default

Доработка iMax-B6 на ATmega32. Часть первая.

Универсальное зарядное устройство iMax-B6 по праву считается народным. Любой авиомоделист или человек имеющий в хозяйстве Li-Po аккумуляторы издалека узнает синюю шайтан-коробку.

Для своего времени зарядка оказалась настолько революционной и простой, что ее начали копировать все кому не лень. Существуют несколько версий зарядника:
- Оригинальный, сделанный конпанией SkyRC и построенный на базе ATmega32.
- Точная копия на ATmega32 сделанная в подвале (такая попалась мне).
- Клон с отличиями в схеме и плате, но тоже на ATmega32.
- Зарядка на чипе Nuvoton M0517. Клоном ее назвать трудно так как это устройство совсем на другом микроконтроллере и только внешне похожее на iMax-B6.

В сети гуляют как минимум три схемы оригинального iMax-B6. Самая удачная попытка срисовать схему и понять как она работает была предпринята пользователем electronik-irk. Со своими наработками он поделился в сообществе "Рожденный с паяльником".

Но в любой бочке меда всегда найдется ложка дегдя. Нашлась она и в iMax-B6. Это проблема с Δv во время заряда 1.2 вольтовых Ni-Ca и Ni-Mh аккумуляторов. В свое время я писал в сообщество о проблеме с Δv, но ответа так и не получил. Мое мнение - трудности с Δv возникают из-за нескольких косяков. Первый -  во время включения и при каждом измерении на конденсаторе C21 и выходных клемах возникает выброс порядка 3-4 вольта, который вносит нехилые искажения Δv у 1.2 вольтовых аккумуляторов.


Эта проблема легко решается добавлением сопротивления R128 с номиналом 4.7кОм параллельно конденсатору C21. В качестве бонуса этот резистор исправляет баг-фичу некоторых iMax-ов - умирать при включении без нагрузки. При этом обычно горят VT26 или VT27.

Подпаивать R128 надо вот сюда.

Вторая проблема маленькая разрядность АЦП и шумы от блока питания и цифровых цепей. 10bit еле-еле хватает для диапазона 0в - 30в с точностью 0.29мВ. Чтобы хоть как-то облегчить работу АЦП нужно провести комплекс мероприятий:
- Повысить стабильность опорного напряжения.
- Поменять родную прошивку iMax на cheali-charger. Данная прошивка использует трюк с передискретизацией и добавлением искуственного шума.

В iMax-е построенном на ATmega32 применяется не самый точный источник опорного напряжения в 2.5 вольта на базе TL431. Слегка повысить его стабильность можно допаяв электролитческий конденсатор емкостью 4.7мкФ-10мкФ между AREF и землей.


О перепрошивки, калибровке и активации режима искуственного шума я опишу во второй части.
Default

Нашествие цитатников (Массовый взлом аккаунтов в ЖЖ)

Originally posted by ljpromo at Нашествие цитатников (Массовый взлом аккаунтов в ЖЖ)
Бдительный 20_00 сигнализирует о нашествии ботов-цитатников 7-10 октября. Да и я заметил странные комментарии к древним записям:


Берут строчку из поста - максимум 100 символов - и вставляют в комментарий "как оторвется". Среди цитатников замечен даже один журнал памяти.


Collapse )
Default

Универсальная библиотека LiquidCrystal_I2C на базе расширителя портов PCF8574

Данная библиотека плод месячного курения манула на Hitachi HD4478U и ему подобным контролерам (S6A0069, KS0066U, NT3881D, LC7985, ST7066, SPLC780, WH160xB, AIP31066). Без проблем работает со "стандартным" китайским модулем.


Внешний вид китайского модуля
Принципиальна схема китайского модуля

Нумерация и описание портов Hitachi HD4478U

Полностью универсальна - можно переназначать пины если у вас не "стандартный" модуль (данной фичи нет ни у одной копипасты из сети). Для этого поближе посмотрим на строку иницилизации:

LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 4, 5, 6, 16, 11, 12, 13, 14, POSITIVE);

Эта запись означает, что: 4-й пин LCD подключен к поту P0 (4 ноге) PCF8574, 5-й пин LCD подключен к поту P1 (5 ноге) PCF8574, 6-й пин LCD подключен к поту P2 (6 ноге) PCF8574, 16-й пин LCD подключен к поту P3 (7 ноге) PCF8574 и тд.

Теперь представим, что в вашем
модуле 14-й пин LCD подключен к поту P0 (4 ноге) PCF8574, а 4-й пин LCD подключен к поту P7 (12 ноге) PCF8574, тогда строка инициализации для вашего модуля будет выглядеть так:

LiquidCrystal_I2C lcd(PCF8574_ADDR_A21_A11_A01, 14, 5, 6, 16, 11, 12, 13, 4, POSITIVE);

В библиотеке уже забиты все возможные адреса для чипа PCF8574. Вот их список:

PCF8574_ADDR_A21_A11_A01
PCF8574_ADDR_A21_A11_A00
PCF8574_ADDR_A21_A10_A01
PCF8574_ADDR_A21_A10_A00
PCF8574_ADDR_A20_A11_A01
PCF8574_ADDR_A20_A11_A00
PCF8574_ADDR_A20_A10_A01
PCF8574_ADDR_A20_A10_A00

Что бы понять что этот список означает посмотрите на внешний вид китайского модуля. В правом нижнем углу есть 3 контактные площадки A0, A1, A2. Теперь глянем на схему модуля - по умолчанию эти контакты подтянуты к питанию через резисторы R4, R5, R6, что соответствует логической единице на всех трех пинах: A0=1, A1=1, A2=1. Для такой конфигурации текущий адрес будет:

PCF8574_ADDR_A21_A11_A01

Если соеденить верхнюю и нижнюю контакнтную площадки A2, то мы закоротим ее на землю, что соотвествует логическому нулю на этом пине. Состояние на всех  трех контактах будет следущее: A0=1, A1=1, A2=0. Для такой конфигурации текущий адрес будет:

PCF8574_ADDR_A20_A11_A01

Я постарался привести как можно больше примеров в библиотеке. Написал сумбурно, но пока так. Будет время добавлю про все плюшки подробнее.

На Github и в сети сплошной плагиат с небольшими вариациями. Даже обычная LiquidCrystal, идущая вместе с Arduino IDE не блещет лаконичностью, и до версии среды 1.6.11 имела баг в функции установки позиции курсора для экранов 20x4. Просто задумайтесь - баг жил в дистрибьютиве 5 лет!!! Чем больше я понимаю в програмировании тем сильнее мое разочарование в Arduino.

UDP: Написал о библиотеке в официальный форум. Народ протестировал скорость: моя 1096мкс, библиотека из менеджера закачек 1458мкс.

UDP: Оказываеться у дисплея есть тестовый режим -  если подключить только питание то на рабочем экране должны появиться прямоугольники.



UDP: В качества ликбеза очень полезная статья про подтяжку линий SDA и SCL.

Забирать библиотеку тут.
Default

Термопаста GD900 и лучи ненависти в строну OCZ

Поддавшись на рекламу - раз и два, за 3 американских рубля купил 30 грамм чудо пасты - GD900. Обзоры обещали что в сравнении с народной КТП-8, паста от китайских товарищей не так адский сохнет и обладает лучшей теплопроводностью.


По этому случаю полностью разобрал десктоп и поменял пасту под процессром и "мостами". Заменил хлипкие пружинные фиксаторы "мостовых" радиатров на православные болт/гайку. Все прошло в штатом режиме - температура после замены снизилась на пару градусов.  PROFFIT!!! На пример, на видеокарте было 43 по цельсию, а стало 40.  На счет высыхания ничего пока сказать не могу.

На последок, впервые за 8 лет,  вскрыл служивший верой и правдой  - OCZ StealthXStream OCZ500SXS он же FSP в девичестве. Открыл и слегка офигел - все электролиты кроме дежурки были вспученны или потекшие. Все, Карл!!!


Как это все работало и стабильно грузилось, я до сих пор не понимаю. Судя по состоянию, потекли они очень давно.



OCZ решила сэкономить и поставила в место low ESR обычное китайское барохло. Они и раньше разводили клиетнов - продавали разогнаную память, накручивая два "конца". А чтоб не сбоила, запитывали ее от 2.1 вольт, когда обычная Hunix или Samsung заводилась на тех же частотах от штатных 1.8 вольт. И вот тепрь добрались до блоков питания. OCZ такой OCZ, но хомячкам нравится.

И под конец боянчик

Default

Установка и настройка сервера UwAmp под Windows

Когда деревья были маленькими я с удовольсвием пользовался XAMPP, но последние пару лет в него пичкают не совсем понятный мне софт, как допинг в российских спортсменов. Почитав хабр и попробовав пару альтернатив, решил остановиться на UwAmp.

Качаем архив и распаковываем в удобное для вас место. Теперь копируем наш локальный сайт в папку ...
\UwAmp\www\my-app. Прелесть заключается в том, что сайтов может быть несколько. Вот например, на картинке ниже, мирно уживаются три сайта.


Жмем на UwAmp.exe и кликаем на синюю иконку с буквой "u" в sysmet tray возле часов. Появится вот такое окно:


Теперь нам нужно разделить и настроить наши сайты. Для этого кликаем по кнопке "Apache Config" и в поле "Virtual server"  и создаем новый сайт. Например - smarthome.net


Тоже самое повторяем для остальных сайтов, не забывая менять название в поле "Server Name" и путь в поле "Document Root". Теперь открываем File Explorer (Проводник) по адресу C:\Windows\System32\drivers\etc и вносим наши сайты в файл hosts вот так:


Перезапускаем UwAmp, кнопкой "Stop", а затем  кнопкой "Start" из главного меню. Открываем Firefox или Internet Explorer и набираем smarthome.net. PROFFIT!!!


C Google Chrome данный трюк не проходит. Он почему-то игнорирует host файл и ищет smarthome.net во всемирной паутине. Но есть путь настоящих героев - в обход. Наберите в хроме "http://localhost/" и на появившейся странице кликните на линк "my-app" -> имя папки и сайт откроется.

UPD: Хоть наш серваер и локальный, но все же рекомендую изменить стандартный пароль mySQL на что нибудь по сложнее.
Default

DSO138 - осцилограф игрушка.

Зависла у меня небольшая сумма на ЖИРбесте, за потерянный товар. Маялся два месяца, пока не увидел DSO138 за 15.50US. Средняя цена по интернету в районе 22US - 25US. Как оказалось скидка была не случайна.

ТТХ:
- Analog bandwidth: 0 - 200KHz
- Sampling rate: 1Msps max
- Sensitivity: 10mV/Div - 5V/Div
- Sensitivity error: < 5%
- Vertical resolution: 12-bit
- Timebase: 10us/Div - 500s/Div
- Record length: 1024 points
- Built-in 1KHz/3.3V test signal
- Waveform frozen (HOLD) function available
- Save/recall waveform

200KHz конечно о-о-очень мало, но учитывая цену конкурентов у показометра нет. Пришло через месяц в пупырке. Собрал неторопясь, в течении недели. Для любителей хадкора, схема на последней странице тут.


Завелся сразу, но показывал погоду - перепутал ризисторы на позициях R9, R10, R11. Будте осторожны, в этом месте адская шелкография. Залил свежую прошивку под номером 113-13801-060, следуя иструкции и словил новый глюк - шкала напряжения перестала совпадать. Оказалось с версии 113-13801-050, резистор R11 похудел в 10 раз и стал 150ом. Поменял резистор и все вернулось в норму. Понятно почему магазин сбросил цену - избавлялся от плат с неправильным набором резизсторов и старой прошивкой.

Вот парочку осцилограм с выхода imax-B6


Выдержка 1 милисекунда

Выдержка 20 микросекунд.

UPD: Вышла новая прошивка 113-13801-061, изменения коснулись только драйвера экрана ILI9325.
Default

Я сделаю все наоборот

Originally posted by lucky_chaky at Я сделаю все наоборот


Когда-нибудь у меня родится сын, и я сделаю все наоборот. Буду ему с трех лет твердить: "Милый! Ты не обязан становиться инженером. Ты не должен быть юристом. Это не важно, кем ты станешь, когда вырастешь. Хочешь быть патологоанатомом? На здоровье. Футбольным комментатором? Пожалуйста. Клоуном в торговом центре? Отличный выбор",

И в свое тридцатилетие он придет ко мне, этот потный, лысеющий клоун с подтеками грима на лице и скажет: "Мама! Мне тридцать лет! Я клоун в торговом центре! Ты такую жизнь для меня хотела? Чем ты думала, мама, когда говорила мне, что высшее образование не обязательно? Чего ты хотела, мама, когда разрешала мне вместо математики играть с пацанами?"

А я скажу: "Милый, но я следовала за тобой во всем, я была альфа-мамой! Ты не любил математику, ты любил играть с младшими ребятами". А он скажет: "Я не знал, к чему это приведет, я был ребенком, я не мог ничего решать, а ты, ты, ты сломала мне жизнь" - и разотрет грязным рукавом помаду по лицу. И тогда я встану, посмотрю на него внимательно и скажу: "Значит так. В мире есть два типа людей: одни живут, а вторые ищут виноватых. И если ты этого не понимаешь, значит ты идиот".

Он скажет "ах" и упадет в обморок. На психотерапию потребуется примерно пять лет.

***
Или не так. Когда-нибудь у меня родится сын, и я сделаю все наоборот. Буду ему с трех лет твердить: "Не будь идиотом, Владик, думай о будущем. Учи математику, Владик, если не хочешь всю жизнь быть оператором колл-центра. Гуманитарные, че? В наше время таких дурачками называли".

Collapse )