All posts by DI HALT

О модерации комментариев.

Я думаю многие уже успели заметить, что далеко не все комментарии сразу же размещаются. Причина — в премодерации. Я решил не вводить капчу (защита от ботов в виде корявых буковок) т.к. это бесячее зло, а просто разные подозрительные комменты забрасываю на модерацию. В итоге, и спама меньше и комментить проще.

Какие комменты попадают на модерацию:
1) Содержащие активные ссылки куда либо. Неважно куда и в каком количестве. Если от ссылки оторвать http:// или www то, по идее, такой коммент пройдет без модерации. Не проверял :)

2) Содержащие ряд слов, на первый взгляд безобидных, но по ним застрявают многие спамеры. Так что если хотите, чтобы коммент сразу же был опубликован, то не рекомендую применять слова «сайт», «проект», «кредит» ну и еще десяток менее применимых к этому ресурсу, вроде «недвижимость» или «аренда»

Read More »

Ультразвуковой дальномер

Подключенный сонар
Подключенный сонар

Вот прикупил я для своего робота ультразвуковой дальномер — Maxbotix LV-MaxSonar EZ1. На днях ко мне пришла посылка из Терраэлектроники, где сей замечательный девайс был куплен. Сам сонар стоит под 750 рублей, доставка обошлась в 800 :) Но я заказывал кучу всего вкусного, так что оно того стоило. Несмотря на нехватку времени, не побаловаться этой игрушкой я не мог. Итак, встречайте краткий тест системы.

Описание:
Девайс представляет из себя головку излучателя с платой контроллера на заднице. Контроллер собран на базе PIC16F676 и микросхемы LM324. Схема сонара указана в даташите, а прошивку в итоге можно и самому написать, так что рано или поздно я повторю его на AVR :) Тем более где то я эту схему уже видел… Впрочем, схема тут не важна, УЗ сонаров как грязи разработано умельцами, самое главное тут это излучатель, вот его найти задачка та еще. Я применил MaxBotix’овский пьезоизлучатель. И если цена готового модуля почти 800рублей, то сама пищалка стоит всего 150 рублей.

(далее…)

Read More »

О глюках на сайте

В связи с ростом числа посетителей возникла нагрузка на хостинг и пришлось поставить кэширующую примочку на сайт. Но она несколько глючная, и пока в стадии отладки.

Если вместо каких-либо страниц (или всего сайта) будет тупо белый фон, то просьба сообщать мне мылом (clihlt на yandex.ru) или по аське (200605975) на какой странице беда.

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

Read More »

Юкио Сато «Обработка сигналов, первое знакомство»


Автор: Юкио Сато
Редактор: Есифуми Амэмия
Название: Обработка сигналов. Первое знакомство
Издательство: Додэка 2002

Отличная книга, посвященная цифровой обработке сигналов. Все обьясняется предельно доступно, без загруза тяжелой математикой. От основных терминов и математических представлений, до ключевых методов, вроде Преобразования Фурье. Практически на пальцах. Очень много картинок, графиков, поясняющих диаграмм. По страницам шляются всякие анимэшные девочки, втирая разные правила и шпаргалки. Мне пока не пригождалась, а вот камрад Длиный оценил ему как раз для диплома вся эта ботва нужна. Хорошая книжка, помогает вьехать в суть. Все примеры кода приведены на бейсике.

Read More »

AVR. Учебный Курс. Виртуальные порты

Глядя на то, как раскиданы порой ножки портов по корпусу контроллеров, у меня возникают большое подозрение, что разводчик кристалла дунул что то сильно забористое. Когда вперемешку идут выводы разных портов, да еще почти в рандомном порядке… Когда к этим портам вешаем что-либо разнобойное, то пофигу. А если надо подцепиться на прямую линейку шины данных, вроде того же LCD дисплея? Вот тут и начинается круголяние дорожек по плате. А если плата фаршированная донельзя? Тут приходится вводить перемычки, дополнительные слои и извращаться как только можно. Короче, та еще проблема.

Я решаю ее виртуальными портами. То есть завожу в системе переменную каждому биту которой привязываю какую-либо ножку. Поскольку все выводы независимы я могу компоновать виртуальный порт в любом порядке и из любых линий. Чертовски удобно. Впрочем, за удобство приходится платить — обработка такого порта требует несколько десятков команд. Но когда кристалл не забит под завязку, то можно позволить себе немного пошиковать во имя удобства.

Итак. Подключаем куда-нибудь в область процедур блок кода виртуального порта. (далее…)

Read More »

AVR. Учебный Курс. Библиотека для LCD на базе HD44780

Сел я и дописал свою библиотеку для LCD на базе HD44780.

Как она работает я тут расписывать не буду — код весьма плотно фарширован комментариями. Тем более я уже рассказывал как работать с этим дисплеем Поэтому, думаю, разберетесь. Если будут вопросы, то обращайтесь. Тут же я расскажу как ей пользоваться.

Состав
Библиотека состоит из двух файлов LCD.asm и LCD_macro.inc для подключения по 8ми битной шине и LCD4.asm и LCD4_macro.inc для подключения по четырех битной шине данных. Используете тот вариант, по которому у вас подключен дисплей.

  • Файл LCD.asm содержит все основные настройки портов и, собственно, код.
  • LCD_macro.inc содержит макросы для работы с дисплеем. И используется для работы с библиотекой.

Подключение LCD к микроконтроллеру.
Порт данных использует биты 7…4 любого порта на 4 битном подключении, или весь порт целиком на 8ми разрядном
Порт управления использует 3 любых бита любого порта. Главное, чтобы они были на одном порту. Впрочем код можно и чуток подправить :)

(далее…)

Read More »

Atmel R.I.P.

Приплыли, господа. Компании Atmel больше нет. Она была продана по частям. Микропроцессорное отделение выкупила компания Microchip (та самая которая PIC делает), а отдел Flash памяти продано компании On Semiconductors Что теперь будет с архитектурой AVR неизвестно. Несколько лет то еще она, конечно, просуществует, но вот что дальше? У Микрочипа есть свои контроллеры и своя архитектура которая занимает внушительный процент рынка. Не вижу смысла им дробить силы на разработку двух разных архитектур. Возможно AVR будет свернуто и все мощности брошены на PIC, а возможно возникнет третья архитектура, этакий гибрид, обьединяющий обе платформы.

Может оно и к лучшему, но вот только мне как то сцыкотно, если зарубят AVR то я даже не знаю куда подрываться, т.к. PIC мне не нравится категорически.

Заряженые MSC-51 от SiLab или Philips?
MSP430?
PSOC или HC08?

В общем, я в глубоких раздумьях. У кого какие соображения?

UPD:
Акционеры Атмела покурили, подумали и написали Микрочипу ответ с количеством стеба сравнимый  с письмом «Турецкому султану». Само письмо висело на главной странице Атмела с неделю. В общем, основной смысл был такой — Хер вам! Родина Атмел не продается! Так что все ок. Выдыхаем!

Read More »

Корпус

Коробочка
Коробочка
Минимать
Минимать
С другой стороны
С другой стороны

Никак не мог найти корпус для своего одноплатного компа. Комп может и мелкий, но платка у него все же не карманных размеров. Так что подобрать корпус под эту чуду юду было чертовски сложно. Одни не проходили по ширине, другие по длине, а третьи представляли из себя огроменные чемоданы, которые мне были совершенно не нужны. Я уже почти отчаялся, когда случайно в продуктовом магазине не увидел ЕГО! Пофиг, что пластик хрупкий и прозрачный — ногами пинать не будут и царапать тоже, зато он весьма жесткий, а внутрь можно сунуть гламурную подсветку. Так что вот! Рекомендую, гарный корпус. Обошелся мне он всего в 300 рублей, немногим дешевле специального корпуса, зато в нагрузку еще конфеток отсыпали почти 300 грамм. =) Вот выпилю дырки под разъемы, поставлю вентиляторы, может ножки приделаю или крепеж какой. Будет красиво :)

Да, сразу же предугадывая вопросы по поводу девайса, что в коробке. Это одноплатный комп фирмы ASTRO на базе процессора AMD GEODE 333MHz на плате смонтировано все что нужно: Ethernet, USB, RS232, RS485, MicroPCI, SVGA, Audio, IDE, PS/2 Mouse и PS/2 Keyboard. Также есть CF разъем, позволяющий грузится с флеша. Полностью пассивное охлаждение, бесшумен, хоть и не сильно быстр. Воткнуто туда 128Мб PC133 SDRAM. Питание 12 вольт, подается прям на плату (стандартный разьем) я запитал от БП свитча — работает и БП, судя по температуре корпуса, не напрягается.

Сколько стоит и где можно купить я понятия не имею, конкретно этот стоял в лохотронных автоматах. Подарили.

На него скорей всего я установлю какой нибудь линух (фака! Это ведь еще надо в линухи вкуривать… чорт, ну ладно, винду туда ставить ваще никак мне не улыбается). А потом… Не знаю, может сделаю из него домашний сервер под файло. Или что поглобальней придумаю. Например в машину в качестве бортового компа. Повесить туда систему GPS умную сигналку и систему «Параноик» — камеры кругового обзора пишущие все вокруг. Можно пустить на мега мозги для робота, но пока до этого дело не дошло.

А у меня опять же встречный вопрос, где бы мне надыбать мини IDE разьем, а лучше сразу шлейфик, чтобы можно было ноутбучный винт туда подключить. А то флеш флешем, но только маловато будет.

Так что вот, господа. Смотрите по сторонам, полезное находится порой в самых неожиданных местах.

З.Ы.
Да, я тут, последнее время, «немного» загружен работой, так что сайт, скорей всего будет подтупливать с новыми постами. В крайняк, буду выкладывать разработки особо креативных посетителей сайта, которые мне прислали на мыло — на переформулировку и верстку уж время выкрою, равно как и на ответы на комменты Если есть чем поделится, то шлите мылом. Адрес в разделе «Об авторе»

Read More »

Переменный резистор

Переменный резистор
Переменный резистор
Ограничение крайних значений
Ограничение крайних значений
Повышение точности
Повышение точности
Вроде бы простая деталька, чего тут может быть сложного? Ан нет! Есть в использовании этой штуки пара хитростей. Конструктивно переменный резистор устроен также как и нарисован на схеме — полоска из материала с сопротивлением, к краям припаяны контакты, но есть еще подвижный третий вывод, который может принимать любое положение на этой полоске, деля сопротивление на части. Может служить как перестариваемым делителем напряжения (потенциометром) так и переменным резистором — если нужно просто менять сопротивление.

Хитрость конструктивная:
Допустим, нам надо сделать переменное сопротивление. Выводов нам надо два, а у девайса их три. Вроде бы напрашивается очевидная вещь — не использовать один крайний вывод, а пользоваться только средним и вторым крайним. Плохая идея! Почему? Да просто в момент движения по полоске подвижный контакт может подпрыгивать, подрагивать и всячески терять контакт с поверхностью. При этом сопротивление нашего переменного резистора становится под бесконечность, вызывая помехи при настройке, искрение и выгорание графитовой дорожки резистора, вывод настраимого девайса из допустимого режима настройки, что может быть фатально.
Решение? Соединить крайний вывод с средним. В этом случае, худшее что ждет девайс — кратковременное появление максимального сопротивления, но не обрыв.

Борьба с предельными значениями.
Если переменным резистором регулируется ток, например питание светодиода, то при выведении в крайнее положение мы можем вывести сопротивление в ноль, а это по сути дела отстутствие резистора — светодиод обуглится и сгорит. Так что нужно вводить дополнительный резистор, задающий минимально допустимое сопротивление. Причем тут есть два решения — очевидное и красивое :) Очевидное понятно в своей простоте, а красивое замечательно тем, что у нас не меняется максимально возможное сопротивление, при невозможности вывести движок на ноль. При крайне верхнем положении движка сопротивление будет равно (R1*R2)/(R1+R2) — минимальное сопротивление. А в крайне нижнем будет равно R1 — тому которое мы и рассчитали, и не надо делать поправку на добавочный резистор. Красиво же! :)

Если надо воткнуть ограничение по обеим сторонам, то просто вставляем по постоянному резистору сверху и снизу. Просто и эффективно. Заодно можно и получить увеличение точности, по принципу приведенному ниже.

Повышение точности.
Порой бывает нужно регулировать сопротивление на много кОм, но регулировать совсем чуть чуть — на доли процента. Чтобы не ловить отверткой эти микроградусы поворта движка на большом резисторе, то ставят два переменника. Один на большое сопротивление, а второй на маленькое, равное величине предполагаемой регулировки. В итоге мы имеем две крутилки — одна «Грубо» вторая «Точно» Большой выставляем примерное значение, а потом мелкой добиваем его до кондиции.

Read More »

Робот на контроллере PIC от SWG. Часть 2

Предварительная версия схемы
Предварительная версия схемы
Тем временем, SWG продолжает совершенствовать своего робота. Структурно его конструкции похожа на моего робота — тоже раздельные специализированные контроллеры. Недавно он прислал мне схему контроллера датчиков/ИК буфферов. Короче глаза и прочие сенсоры. А также наброски кода для управления всем этим добром. Респект!

Хы, надо сказать я несколько отстаю в разработке :) Он уже за датчики взялся, а у меня пока только ходовая отлаживается… ничо ничо, вот щас с заказами разберусь и закажу себе УЗ сонары :)))) А там еще посмотрим кто первый в космос полетит :)

SWG:
Оперативную связь с ходовым контроллером планирую с использованием в обоих контроллерах линий портов B0, B1, с задействованием внешнего прерывания по B0. Кроме того, у контроллера буферов будет также выход на межмодульную шину I2C, для связи с центральным процессором, а иногда и с ходовым контроллером, (для несрочных операций, типа уточнения местоположения препятствия, диагностики исправности датчиков и т.д.) На всякий случай вывожу на разьем также неиспользуемые линии портов, в т.ч. и USART (на всякий случай, в первую очередь для отладки). В качестве датчиков столкновений пока нарисовал микрики, но ставить скорее всего буду все же оптопары, что лучше будет отрабатывать толчки с разных направлений, но потребует дополнительных резисторов для CD подсветки, и желательно управление ей. Свободные линии портов для этого еще есть. На всякий случай (для отладки, а также наглядности работы буфера, и облегчения настройки локаторов, на A4 хочу поставить сигнальный светодиод. (при подачи тока на него он светится разными цветами, переключая их по очереди).

Бонусом в архиве идет доработанная программа ходового контроллера:

  • Исходник на Pascal
  • Cкомпилированные им ассемблерный листинг и HEX — код, а также
  • Дизассемблерный из HEX-кода листинг. Получен программой из комплекта IC-Prog, которой я прошиваю PIC16F876).

Описание ходовой части. Обратите внимание на комменты к посту, в них автором расписана большая часть подробностей и идей по дальнейшему развитию.

Read More »

Источники питания. Часть 2 — Импульсные преобразователи

DC-DC преобразование
Для изменения напряжения постоянного тока с минимальными потерями используются DC-DC преобразователи, работающие по принципу Широтно-Импульсной Модуляции (ШИМ, она же PWM по басурмански). Если не читал мои прошлые статьи, где я подробно разжевал принцип работы ШИМ, то я кратенько тебе напомню. Основной принцип тут в том, что напряжение подается не сплошным потоком, как в линейных стабилизаторах, а краткими импульсами и с большой частотой.

Готовый девайс
Готовый девайс

То есть у тебя на выходе ШИМ контроллера, например, сначала в течении десяти микросекунд напряжение, к примеру, двенадцать вольт, потом идет пауза. Скажем, те же десять микросекунд, когда на выходе напряжения вообще нет. Затем все повторяется, словно мы быстро-быстро включаем и выключаем рубильник.

Таким образом у нас получаются прямоугольные импульсы. Если вспомнить матан, а конкретно интегрирование, то после интегрирования этих импульсов мы получим площадь под фигурой очерченной импульсами. Таким образом, меняя ширину импульсов и пропуская их через интегратор, можно плавно менять напряжения от нуля до максимума с любым шагом и практически без потерь.
В качестве интегратора служит конденсатор, он заряжается на пике, а на паузах будет отдавать энергию в цепь. Также туда всегда последовательно ставят дроссель, который тоже служит источником энергии, только он запасает и отдает ток. Поэтому такие преобразователи при небольших габаритах легко питают мощную нагрузку и при этом почти не расходуют энергию на лишний нагрев.

Если не догнал, то я для простоты переложил это в понятное «канализационное русло». Смотри на картинку, где ключевой транзистор ШИМ контроллера похож на вентиль, он открывает и закрывает канал. Конденсатор это банка, накапливающая энергию. Дроссель это массивная турбина, которая, будучи разогнанной потоком, при открытом вентиле, за счет своей инерции прогоняет воду по трубам и после закрытия вентиля.

Конечно, самостоятельно разработать такой источник питания сложно, требуется неслабое образование в области электроники, но не стоит напрягаться по этому поводу. Умные дядьки из Motorola, STM, Dallas и прочих Philips’ов придумали все за нас и выпустили уже готовые микросхемы содержащие в себе ШИМ контроллер. Тебе остается его лишь припаять и добавить обвески, которая задает параметры работы, причем изобретать самому ничего не надо, в datasheet’ах подробно расписано что и как подключать, какие номиналы выбирать, а иногда даже дают готовый рисунок печатной платы. Надо лишь немного знать английский :)

(далее…)

Read More »

Источники питания. Часть 1 — Батарейное и сетевое питание

Автономное плавание
Если ты разрабатываешь подслушивающее устройство или же что-либо мобильное, что нельзя воткнуть в розетку на постоянную основу, то тебе только одна дорога – батарейное питание. Существует множество видов аккумуляторов или батареек, подходящих на все случаи жизни.

С батарейками тут все просто, если соединить их последовательно, цепочкой от плюса к минусу, то напряжение складывается. А если связать параллельно, объединив все плюсы и все минусы, то получим увеличение емкости батареи. Главное тут, чтобы все батареи имели равную свежесть. А то если в такой связке попадется одна полудохлая, с более низким напряжением, то остальные через нее тут же подсядут до ее уровня.

Особой любовью у меня пользуются батарейки от материнских плат. Так как они выдают 3 вольта, что в подавляющем большинстве случаев достаточно для запитки микроконтроллера (Tiny или Mega с индексом L) или еще какой мелкой электроники. Кстати, мелкие батарейки на девять-двенадцать вольт (такие обычно стоят в брелках авто сигнализаций) внутри содержат стопку обычных таблеточных батареек для часов. Так что в следующий раз лучше не тратить бабло на дорогующую двенадцати вольтовую батарейку, а купить матрас китайских таблеток по рублю за штуку и смотать их скотчем.
Еще классными батарейками снабжались кассеты от фотоаппаратов Polaroid. Она была плоской, выдавала девять вольт и обладала чумовой энергоемкостью, их особенно любили фрикеры, изготовлявшие подслушивающие устройства. Так как такую батарейку, вместе с жучком было легко сделать в виде картонки, которая закидывалась куда-нибудь за шкаф и работала порой до двух трех месяцев.

(далее…)

Read More »

Ремонт промышленного оборудования

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

Впрочем, тут хорошо еще MAX232 был, не пришлось городить его на транзисторах :)))) Хотя фигня, бывали случаи и похуже, когда я на радио заводе для починки станка в пол лимона евро не мог стабилитроны найти, а резисторы пришлось делать из грифеля от карандаша.

З.Ы.
Это фотка платы от промышленного компьютера, который мне притащили на ремонт. Под катом еще пара фоток.

(далее…)

Read More »

AVR. Учебный курс. Подключение к AVR LCD дисплея HD44780

Сегодня разменял четверть века
Сегодня разменял четверть века!
Так случилось, что прикупил я тут себе поприколу LCD дисплейчик две строки по восемь символов. Валялся он в ящике валялся, да чегото поперло меня и решил я его заюзать, попутно вкурив в его работу. О том как подключить к AVR LCD дисплей я вам сейчас и поведаю.

Для начала оговорюсь сразу, что речь тут пойдет о LCD индикаторах на контроллере HD44780, который стал промышленным стандартом де-факто на рынке цифро-буквенных дисплеев. Продается везде где только можно, стоит недорого (8х2 мне обошелся порядка 150 рублей), а также под него написана куча кода. Я же, как обычно, решил изобрести велосипед и сварганить свою собственную тру-библиотеку для работы с этим типом индикаторов. Разумеется на ассемблере, а на чем же еще? ;)

(далее…)

Read More »

AVR. Учебный курс. Процедура сканирования клавиатуры

Итак, клавиатуру я сделал и написал процедуру сканирующую клавиатурную матрицу 4х4 кнопки. Пора бы рассказать как организовать опрос такой клавы. Напомню, что клава представляет из себя строки, висящие на портах и столбцы, которые сканируются другим портом. Код написан для контроллера ATMega8535, но благодаря тому, что все там указано в виде макросов его можно быстро портировать под любой другой контроллер класса Mega, а также под большую часть современных Tiny. Хотя в случае с Tiny может быть некоторый затык ввиду неполного набора команд у них. Придется чуток дорабатывать напильником.

(далее…)

Read More »

Коварные ВЧ цепи

Расскажу немного о проектировании и разводке высокочастотных цепей. Вообще ВЧ системы это такая тема, ради которой можно поднимать отдельный сайт, настолько она всеобъемлюща. Но я в это не полезу, т.к. сам не являюсь болшим спецом по ВЧ. Я лишь покажу одни характерные грабли на которые недавно наступил, чтобы ты знал, что может быть и такое.
 

Предыстория
Разводил я плату, того самого универсального пульта. И была у меня там обычная матричная клавиатура — строки и столбцы. По столбцам сканируется, по строкам считывается. Элементарно. Собрал, запрограммировал опрос клавиатуры и выдачу символов на экран.
 

Включаю и тут же вылазит нажатие. Проверил программу — все как и должно, а кнопка сама почему то нажимается. Выключаю. Включаю — то же самое. Косяк, видать либо кнопка коротит, либо развел неправильно. Было поздно лег спать. Проснулся, включаю — не вылазит буква. Потыкал кнопочки, все работает как и должно. Что это было? Непонятно, может приглючилось? Тут раз — выскочила. Опа. Стал проверять. Вскрылось шаманство. После сброса кнопка не срабатывала, но стоило поднести к пульту руку, справа, под определенным углом — самопроизвольное нажатие. Мда… Но хоть что то стало ясно.
 

(далее…)

Read More »

Свершилось!

По многочисленным просьбам прикрутили таки к сайту редактирование комментариев. Чтобы эта фича была доступна нужнозарегистрироваться и залогиниться на сайте. Пользуйтесь.

UPD от 18.07.09
Как прикрутили так и открутили. Жутко тормозная фича :(

Read More »

Робот на контроллере PIC от SWG

Камрад SWG решил тоже побаловаться самобеглыми тачанками. И достал с антресоли давнюю разработку.

SWG:
Глядя на вашу бурную активность, я тоже решил шевельнуть ластами. Достал со шкафа сделанную еще в 2006г простенькую тележку (к коробке от CD-ROMа прикручены 2 самодельных колеса, 2 движка ДПМ-25-Н1-7Т с редукторами (27v, но неплохо тянут уже при 12, надо будет больше — сделаю преобразователь 12->27), и самодельный поворотный узел с роликом (третье колесо).

Потребление от 12v: 33 мА при выкл. двигателях, при макс. скорости без нагрузки (колеса не касаются пола) = 103 мА вперед, 115 мА назад. При одном заклиненном колесе — 300 мА, при обоих заклиненных колесах = 500 мА.
L293DN чуть теплая. Будет греться — приклею радиатор. Да, частоту ШИМ взял пока 500 Гц. (период 2 мс). Померяю скорость нарастания тока в двигателях — определю более оптимальную (За самый короткий импульс ток в двигателе должен успеть достигнуть максимума).
Максимальная скорость движения по полу сейчас 15-20 см/сек. Больше мне пока ни к чему, слишком быстро будет комнату пробегать. Диаметр колес = 80мм (резиновые “бублики” вроде от какой-то сантехники, полно на базаре).

Честно говоря, я был сильно удивлен когда нагуглил характеристики движка ДПМ. Почти все они, несмотря на весьма брутальную конструкцию, жрут довольно мало. Так что даже L293 их спокойно тянет. При этом они отличаются вполне сносным моментом и оборотами.

(далее…)

Read More »

AVR. Учебный Курс. Отладка программ. Часть 4

Продолжаем трактат об отладке программ. На этот раз в бой идут одни старики.
 

Осциллограф
Очень часто хочется в динамике поглядеть как работает программа. Особенно если ее структура сложней чем просто суперцикл. Если там конечные автоматы на прерываниях или разделение задач на флаговом автомате/очередном диспетчере, то аналитическое тупление в код и прогоны в отладчике мало что дадут — наслоение прерываний, процессов в очереди, стадии и взаимодействие разных конечных автоматов взорвут мозг кому угодно. А если еще программа не написана с нуля, а собрана из кучи чужих исходников, да даже если из своих, но древних и уже забытых.
 

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

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

В принципе все с виду работает пучком и никаких косяков. Но одолели меня сомнения, так ли это? Если двигатель вращается, то это еще не значит, что он работает хорошо и без ошибок. Так и у нас, надо проверить, все ли в порядке. Слушать мы будем осциллографом «механику» тиканья службы таймера. Почему его? Ну так вокруг него вся логика программы построена.
 
(далее…)

Read More »

AVR. Учебный Курс. Отладка программ. Часть 3

Метод 3. USART (Работа с последовательными интерфейсами)
Пожалуй самым популярным отладочным интерфейсом является все же USART. Во-первых, он поддерживается аппаратно почти всеми микроконтроллерами. Во-вторых, он прост в использовании и требует всего один/два сигнальных провода, а в третьих, для связи с компом не надо городить никаких специфичных девайсов. В худшем случае UART-USB или UART-RS232 конвертер на FT232RL или MAX232.
 

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

1
2
3
4
5
6
7
8
9
10
11
12
; Usart INIT
		.equ 	XTAL = 8000000 	
		.equ 	baudrate = 9600  
		.equ 	bauddivider = XTAL/(16*baudrate)-1
 
uart_init:	LDI 	R16, low(bauddivider)
		OUT 	UBRRL,R16
		LDI 	R16, high(bauddivider)
		OUT 	UBRRH,R16
 
		LDI 	R16,0
		OUT 	UCSRA, R16

 

1
2
3
; Прерывания запрещены, прием-передача разрешен.
	LDI 	R16, (1< <RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
	OUT 	UCSRB, R16

 

Маркеры
Всегда полезно знать где наша программа шляется в данный момент. Конечно, можно зажигать светодиодики, как в прошлом методе. Но когда точек много, то выводов не напасешься на эту затею. Или затрахаешься перекомпилировать. Проще всего натыкать в код маркеров, наступая на которые наш МК будет отрыгивать в терминал свое местоположение. Терминальный клиент будет писать лог и ничего не проморгаешь.
 
(далее…)

Read More »