Author Archives: admin

Mikrotik RouterOS – некоторые особенности работы с USB-портом

В своей работе на нескольких объектах применяем роутер Mikrotik LtAP Lte6 kit.
Из нужного под нашу задачу на его борту есть: 1 Ethernet порт, 1 USB порт и LTE модем на две SIM-карты. К USB порту через хаб подключены USB-RS232 преобразователи, до которых настроен удалённый доступ. Фактически Mikrotik работает как Port Server.

Преобразователи USB-RS232 иногда сбоят.
Помогает функция System->RouterBOARD->USB Power Reset.
Главное – выбрать правильную шину (Bus). В нашем случае нужно выбирать 0 (ноль). Третья шина сбрасывает питание LTE-модема. За что отвечают первая и вторая шины – не исследовал, но есть предположение, что одна из них отвечает за внутренний дополнительный порт mini PCIe, который в штатной комплектации пуст.

На одном из объектов столкнулся с некорректным поведением USB-шины Mikrotik’a. Отвалились порты преобразователей USB-RS232. При попытке сброса порты поднимаются, и работают ровно тот промежуток времени, который задан как время отключения. То есть ведут себя абсолютно инверсно. Mikrotik заменили, сбойный доставили мне на разбор полётов.
Оказалось, что неизвестным образом сбился параметр USB Type – вместо принудительного “USB Type A” стал “auto”. Возврат к варианту настройки “USB Type A” решил проблему. Также прошу обратить внимание, что это параметр в версии RouterOS 6.48 не сохраняется в backup’e.

Как я делал Digispark

Узнал о существовании этой платформы – и загорелся.
Из плюсов – программируется из среды Arduino , до 6 ног для подключения периферии.
Заказывать готовый модуль совершенно не хотелось, решил сделать сам.

Куплено:
Attiny85 – 2 штуки,
стабилитроны на 3,6 вольта – 10 штук,резисторы на 68 ом – 10 штук.

Найдено в загашнике:
резистор на 1,2 килоома (по хорошему бы надо 1,5)
макетная плата,
соединительные провода,
сборка светодиод+резистор,
хвост с USB-разъёмом.

Схема была сдёрнута отсюда

Получилось так:
digispark

Bootloader взял у micronucleus
Сами Digispark-овцы пишут, что их поделка работает на версии 1.02, в других местах встречал упоминание о стабильной 1.06, на micronucleus на момент написания лежит версия 2.03, которая показала себя вполне работоспособной.

Заливал bootloader в attiny85 программатором USBAsp, с программой eXtreme burner.
Burner’у пришлось чуть вправить мозг – о существовании attiny85 он не знал.
А теперь коварный вопрос – с какими фьюзами заливать прошивку?
Штатные (Low – 62, High – DF, Ext – FF) не прокатывают.
Нашелся добрый человек, подсказал: Low – E1, High – DD, Ext – FE. В этом случае нога контроллера RESET (1 нога чипа, или pin5 с точки зрения Arduino) так и остаётся сбросом, сохраняется возможность перешить контроллер обычным программатором, но pin5 программировать в скетчах бесполезно.

Для рисковых и подготовленных парней
Если сильно хочется задействовать тот самый pin5
Low – E1, High – 5D, Ext – FE.
!!! Внимание !!! После прошивки этих фьюзов контроллер для обычного программатора станет недоступен. Посему предлагаю сначала прошиться безопасными фьюзами, убедиться, что девайс завёлся, и только потом шаманить.
У меня на это случай собран FuseBit Doctor , так что мне не страшно 🙂

Далее ставим драйвера и добавляем поддержку Digispark’a в среде Arduino.

Bootloader работает хитрО – первые 5 секунд после подачи питания ждёт сигнала по USB на обновление прошивки, после чего передаёт управление залитой программе.

Соответствие физических ног контроллера и логических пинов в среде разработки:

  • 5 – Pin 0 → I2C SDA, PWM
  • 6 – Pin 1 → PWM
  • 7 – Pin 2 → I2C SCK, Analog In
  • 2 – Pin 3 → Analog In (also used for USB+ when USB is in use)
  • 3 – Pin 4 → PWM, Analog (also used for USB- when USB is in use)
  • 1 – Pin 5 → Analog In

Про особенности создания bootloader-ов для таких малых чипов можно почитать тут

 

Ошибка при программировании ATtiny13 в eXtreme Burner (решено)

Нарвался на неприятность – программа eXtreme Burner (v 1.4.2) отказывается корректно шить ATtiny13.
При верификации начинается ругань “Mismatch at location 0x00000000”
При этом и Khazama и AVRDUDEPROG шьют её без проблем на том же компе и программаторе.

Исправляется так:
Находим, куда заинсталлирован eXtreme Burner.
У меня располагается штатно c:\Program Files\eXtreme Burner – AVR\.
Заходим в папку Data, в ней открываем файл chips.xml да хоть Notepad’ом.
Находим кусок:

<CHIPLIST>
<CHIP>
<NAME>ATtiny13A</NAME>
<FLASH>1024</FLASH>
<EEPROM>64</EEPROM>
<SIG>0x0007901E</SIG>
<PAGE>64</PAGE>

…и меняем значение PAGE с 64 на 32.

Сохраняем, перезапускаем, наслаждаемся.

Сложение регистровой пары с регистром или константой

Иногда в памяти программ удобно хранить некий блок констант для последующего использования. Определяется такой блок директивой .db (для однобайтовых значений) и помечается меткой, предположим const_label.
Как пример – набор битовых масок цифр и символов для 7-сегментного индикатора.
Или последовательность задержек для формирования сложного сигнала.
В чем разница?
В первом случае из памяти программ извлекается единственное значение –  нужная в данный момент битовая маска.
Во втором происходит последовательное чтение всей цепочки до некоего определённого стоп-байта (как вариант – $FF).
Для задания адреса, по которому находится нужный блок и элемент в нём, используется регистровая пара Z (она же ZH:ZL, она же r31:r30), разрядностью в 16 бит.
В первом случае эта регистровая пара складывается либо с 8-битной константой,
либо с 8-битным же регистром.

Этот случай и рассмотрим.
Continue reading

Как добавить статический блок в страницу

 Сначала создаётся сам статический блок:
CMS > Static Block > Add New Block
Запоминаем для себя идентификатро блока, для примера возьмем myblock_id

 Затем вставляем в страницу:
CMS > Pages
выбираем нужную.

Теперь внимание, способы вставки в разделы Content и Design различаются.

Для раздела Content:

{{block type="cms/block" block_id="myblock_id" template="cms/content.phtml"}}
Для раздела Design:

<block type="cms/block" name="name_myblock_id" template="cms/content.phtml">
<action method="setBlockId"><block_id>myblock_id</block_id>
  </action>
</block>

В этом случае name_myblock_id может быть любым.

“Надувной” хард от WD

Очередной пациент с запросом на починку  XP-шных “окошек”.
Перво-наперво лезу в блок питания. Не зря, три вздутых ёмкости. Меняю, чищу, колю масло в вентилятор – штатные процедуры.
Запускаюсь – “NTLDR is missing”. Гружу Acronis Disk Director Suite – ругается на ошибку в 700-миллионном каком-то секторе. Говорю ему – игнорировать все ошибки, DDS от такого счастья мёртво виснет. Хард, на минуточку, 320 Gb, у него по определению 600 с копейками миллионов секторов, но никак не 700, арифметику ещё не отменили. Ладно, на тебе MHDD. Число секторов показывает штатное, поверхность тоже годная.
Призадумался. Из озорства загрузил Acronis True Image. Ошибки всё тех же несуществующих секторов, но прогрузился. Так, разделы, размеры… Мамо ж дорогое… На харде в 320 гигов четыре раздела, один из которых аж 850 гигов. Удаляться разделы отказываются.
Подцепил на другую машину с виндой, запустил Acronis DDS уже из-под неё. Четыре раздела, один из них на 320 гигов, остальные  – по мелочи, но слагаемые всё равно больше суммы.
От броска в мусорник железяку спасло только чудо. Дай, думаю, у производителя на сайте пошуршу. Нашлась утилита – Data Lifeguard Diagnostic. Проверил – не видит оно ошибок. Решился на крайность – потереть поверхность. Утилита предложила скоростной режим: пишет нули в первый и последний миллион (кажется) секторов. Согласился. На выходе, естественно, хард без единой партиции. Разбивка, формат… Заработал.
Как я понял, у харда был замусорен Master Boot Record, часть отвечающая за количество и размер партиций. А утилита его похоронила, и копию его резервную, нездоровую – тоже.
В общем – SOLVED!

Перевернутое изображение с веб камеры asus (камера перевернута)

Один из способов решения проблемы:
находим в реестре следующий раздел:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0001\Settings

Находим там ключ Flip, если его значение “0” – меняем на “1” и наоборот.
Перезагружаемся.

Возможна ситуация, что будет несколько подразделов: 0001\Settings, 0002\Settings – начинайте менять со старшего. Если ключа нет – создайте, тип DWORD.

Windows7 x64 ошибка 0xc0000005 после обновления 14.08.2013, 11.09.2013 09.10.2013

Не запускаются 32битные приложения – 64-битные запукаются.
Решение проблемы – удаление обновления KB2859537.
1) Вручную (Панель управления – Программы и компоненты – Просмотр установленных обновлений )
2) Командой из консоли (с запуском от имени администратора) wusa.exe /uninstall /kb:2859537

UPD 1 (11.09.2013): Если не помогает – удаляем KB2872339 тем же способом
UPD 2 (09.10.2013): Новый источник проблемы – KB2882822, удаляем тем же способом.

Способ избавиться от проблемы навечно:
после сноса обновления
1. Запустил активатор ODIN 1.3.7 by secr9tos и удалил драйвер (кнопка Uninstall Driver).
2. Перезагрузил PC.
3. Использовал активатор Windows 7 Loader eXtreme Edition v3 503 (рекомендуемый метод активации).
4. Перезагрузил PC.
5. После загрузки убедился, что Windows 7 активирована (Компьютер – Свойства – раздел Активация Windows).
(взято отсюда)
Таже можно почитать тут

Тонкости BSOD 7B при переносе на другую материнскую плату.

Предупреждение первое: случай редкий, ранее в моей практике подобных заскоков при переносе не наблюдалось.
Предуперждение второе: много букв и крайне полезно наличие знаний о порядке загрузки Windows, иначе будет довольно сложно.

Сначала немного теории.

Речь пойдет о старой доброй Windows XP, эта ось крайне неохотно покидает офисное железо. А железо стареет. А два переезда равны одному пожару.
Как известно, BSOD 7B при переезде возникает, так как на определённом этапе загрузки система перестаёт взаимодействовать с контроллерами хардов через BIOS-овский INT 19h, и пытается  “начать жить своим умом”. То есть выясняет в реестре, какой драйвер отвечает за HDD контроллеры и начинает того дёргать.  Так как на новом железе контроллер иногда случается от другого вендора, а гадалки у XP не водится, система принимается паниковать.
Continue reading