Как собрать универсальный USB программатор для AVR микроконтроллеров. Какие компоненты нужны для сборки. Как прошить микроконтроллер Atmega8 для работы программатора. Как настроить и использовать самодельный программатор.
Преимущества самодельного USB программатора для AVR
Самостоятельная сборка USB программатора для микроконтроллеров AVR имеет ряд преимуществ:
- Низкая стоимость по сравнению с готовыми решениями
- Возможность программировать широкий спектр AVR микроконтроллеров
- Подключение к современным компьютерам через USB порт
- Компактные размеры устройства
- Возможность модификации и доработки под свои нужды
Собрав программатор своими руками, вы получите универсальный инструмент для работы с AVR микроконтроллерами по доступной цене. При этом вы лучше разберетесь в принципах работы программаторов.
Необходимые компоненты для сборки USB программатора
Для сборки USB программатора на базе микроконтроллера Atmega8 понадобятся следующие компоненты:
- Микроконтроллер Atmega8
- USB разъем типа B
- Кварцевый резонатор на 12 МГц
- Два конденсатора по 22 пФ
- Резисторы: 2×10 кОм, 2×68 Ом, 1×1.5 кОм
- Светодиод
- Печатная плата
Также потребуются провода для соединений и разъем для подключения программируемого микроконтроллера. Все компоненты широко доступны и недороги.
Схема и печатная плата USB программатора
Принципиальная схема USB программатора на Atmega8 выглядит следующим образом:
«` «`На схеме показаны основные компоненты и их соединения. Для изготовления печатной платы можно использовать любой удобный метод — лазерно-утюжную технологию, фоторезист или заказать изготовление на заводе.
Прошивка микроконтроллера Atmega8
Для работы программатора необходимо прошить микроконтроллер Atmega8 специальной прошивкой. Выполнить это можно с помощью другого программатора, например, простого программатора на LPT-порт.
Прошивку для Atmega8 можно скачать с сайта разработчика или использовать готовый hex-файл. При прошивке важно правильно настроить фьюзы микроконтроллера:
- CKSEL = 1111 (внешний кварцевый резонатор)
- SUT = 10 (медленный старт)
- CKOPT = 0 (усиление генератора включено)
- BOOTRST = 0 (вектор сброса в начале флэш-памяти)
После прошивки микроконтроллер готов к установке на плату программатора.
Сборка и подключение USB программатора
Сборка программатора выполняется в следующем порядке:
- Припаять все компоненты на печатную плату согласно схеме
- Установить прошитый микроконтроллер Atmega8
- Припаять USB разъем
- Подключить светодиод индикации через резистор
- Проверить все соединения на отсутствие замыканий
После сборки программатор подключается к USB порту компьютера. При первом подключении потребуется установить драйвер виртуального COM-порта.
Настройка и использование самодельного USB программатора
Для работы с собранным программатором потребуется специальное программное обеспечение, например, AVRdude или специализированные среды разработки. Настройка программы заключается в выборе типа программатора (USBasp) и указании номера виртуального COM-порта.
Основные шаги использования программатора:
- Подключить программатор к компьютеру
- Подсоединить программируемый микроконтроллер
- Запустить программу для прошивки
- Выбрать hex-файл прошивки
- Запустить процесс программирования
При корректной работе светодиод на программаторе будет мигать, сигнализируя о процессе прошивки. По завершении можно отключить программируемый микроконтроллер.
Возможные проблемы при работе с самодельным программатором
При использовании самодельного USB программатора могут возникнуть некоторые сложности:
- Не определяется как USB устройство — проверьте правильность сборки и прошивки Atmega8
- Ошибки при прошивке — убедитесь в надежности соединений с программируемым МК
- Не работает на высоких скоростях — попробуйте снизить скорость в настройках
- Конфликты с антивирусом — добавьте программу прошивки в исключения
В большинстве случаев проблемы решаются проверкой монтажа, обновлением драйверов и корректной настройкой ПО. При необходимости обратитесь к документации на используемое программное обеспечение.
Преимущества использования самодельного программатора
Самостоятельно собранный USB программатор для AVR микроконтроллеров имеет ряд преимуществ по сравнению с готовыми решениями:
- Низкая стоимость — затраты только на комплектующие
- Понимание принципов работы — вы сами собрали устройство
- Возможность модификации — добавление новых функций
- Ремонтопригодность — легко заменить вышедшие из строя компоненты
- Компактные размеры — можно сделать миниатюрное устройство
Собрав программатор своими руками, вы получите полезный инструмент для работы с микроконтроллерами и углубите свои знания в области электроники. При этом затраты будут значительно ниже, чем при покупке готового устройства.
Простой программатор для радиостанций Motorola
Программатор — универсальный компьютерный интерфейс (RIB — Radio Interface Box), предназначен для программирования и перепрограммирования практически всего спектра носимых и автомобильно-стационарных радиостанций компании Motorola, выпускавшихся до 2005 года.
В статье ниже, рассмотрим простой программатор для программирования радиостанций серии Motorola.
Радиостанции имеют модификации, обозначаемые буквами после обозначения платформы, в соответствии с таблицей:
Номер буквы | Характер модификации | Описание модификации |
1 | Тип программного обеспечения (ПО) | А – ПО для работы в протоколах PL/DPL и MPT1327 или Select 5 В – ПО для работы в протоколах PL/DPL и MDC1200 |
2 | Тип контрольной панели | А – без дисплея, без клавиатуры, 6 кнопок меню С – без клавиатуры, дисплей, 10 кнопок меню |
3 | Рабочий поддиапазон | А – 29,7 — 36 МГц В – 36 — 42 МГц С – 42 — 50 МГц |
Примечание: третья буква ставится только для модели GM360 с платформой МW106. |
Радиостанции относятся к системам аналоговой телефонной радиосвязи.
Программирование радиостанций осуществляется с компьютера оснащенного портом RS232 (COM-Port).
COM-Port компьютера состоит из микросхемы — контроллера последовательного порта и микросхемы-драйвера, приводящие внешние сигналы порта в соответствие с протоколом RS-232.
Микросхема-драйвер принадлежит к многочисленному семейству MAX-2xx, MAX-32xx или их аналогам.
Драйвер воспринимает как двуполярные входные сигналы размахом 25 В, так и ТТЛ-уровни. Внешние цепи и сигналы порта имеют следующие свойства:
- — входные уровни: логическая единица — (-25…0,8) В, логический нуль — (2,4…25) В;
- — входы драйвера соединены с землей внутренними резисторами (3…7) кОм;
- — выходные уровни: логическая единица — (-5…-10) В, логический нуль — (5…10) В при нагрузке всех выходов относительно земли сопротивлениями не менее 3 кОм;
- — допустимо долговременное замыкание на землю (но не на другой выход) выходов порта.
Задача программатора
Основная задача программатора — инвертировать уровни сигналов, поскольку для последовательного порта логическая единица представляет собой низкое напряжение, а логический ноль — высокое.
Из всего разнообразия я использовал схему, предложенную UN7QBQ.
Обратите внимание на то, что универсальный интерфейс нуждается во внешнем питании и не функционирует как самостоятельное устройство.
В качестве внешнего источника питания удобно использовать трансформаторные блоки питания от старых телефонных аппаратов с АОН, которые имеют стабилизатор на микросхеме К142ЕН5А.
Применяемые микросхемы — 561ЛА7 или 561ЛЕ5. Входные цепи не использующихся логических элементов через резистор 1 кОм необходимо соединить с минусовым выходом источника питания. На один из свободных выходов микросхемы через резистор 300 Ом можно подключить светодиод, для контроля.
КАБЕЛИ ДЛЯ ПРОГРАММИРОВАНИЯ РАДИОСТАНЦИЙ MOTOROLA
Кабель для программирования радиостанций Р040, Р080
Разъём делается из миниджека диаметром 2,5мм. В радиостанции ответная часть утоплена, поэтому по месту нужно подпилить. Пунктирные линии показывают примерно линии спиливания разъёма.
Кабель для программирования GM350, GM160, GM360
Используется стандартный RJ-45 разъем с 8-ю контактами. Я использовал 30-ти сантиметровый кусок обжатого кабеля UTP.
ПОРЯДОК ПРОГРАММИРОВАНИЯ РАДИОСТАНЦИЙ
1. Подключить программатор к порту компьютера, при этом компьютер должен быть отключен.
Включить программатор, а затем компьютер.
2. Подключить радиостанцию к блоку питания или полностью заряженному аккумулятору. Контакты питания должны быть надёжны.
3. Подключить программатор к разъёму радиостанции, убедиться в надёжности контактов. Включить радиостанцию ручкой или кнопкой на передней панели.
4. Запустить соответствующую программу для программирования радиостанций Motorola.
5. Прочитать информацию из станции согласно указаниями или справке к программе, сохранить информацию в файл на диск под соответствующим именем.
6. Модифицировать настройки, сохранить их в файл на диск.
7. Согласно указаниями или справке к программе записать настройки в радиостанцию.
8. Выключить радиостанцию ручкой или кнопкой. Отключить станцию от программатора.
9. При необходимости подключить к радиостанции гарнитуру, включить и проверить станцию.
10. Выключить станцию, отключить от блока питания. Программирование завершено.
Soft для программирования радиостанций Motorola можно найти в Интернет.
Владимир, EW7AS
Метки: [ радиостанции ]
ПОДЕЛИТЕСЬ СО СВОИМИ ДРУЗЬЯМИ:
П О П У Л Я Р Н О Е:
- Делитель для частотомера на 64/1000.
- Делитель частоты на 10 для частотомера на 193ИЕ2.
Данный делитель частоты на U813BS (U664B) можно использовать для частотомера. Его частотный диапазон от 80 до 1000МГц. Чуствительность около 10 mV. Подробнее…
SmartTV – приставка с WI-FI позволяющая выводить на экран телевизора информацию с интернета через HDMI-порт. Позволяет сэкономить покупку телевизора с интернетом в 10 раз!
Небольшая чёрная коробочка 11см х 11см с некоторых пор начала жутко глючить. Приходилось вставать и перезапускать путём отключения питания что порядком осточертело. Да…, ворчал я вставая очередной раз с дивана, надо что то сварганить безпроводное.
Порылся в интернете нашёл от братьев китайцев передатчик(коричневая коробочка) и приёмник(зелёная плата), купил 2 комплекта по 89 грн/комп.(См Рис. 1, ниже)
Подробнее…
Для расширения верхнего предела частотомера предлагаю собрать простой делитель частоты на микросхеме 193ИЕ2. Коэффициент деления данного делителя = 10, максимальная входная частота для 193ИЕ2 — 200 мгц. Т.е. с описанными ранее частотомерами этот делитель позволит измерять частоту до 200 мгц с разрешением в 100 гц. Подробнее…
Популярность: 4 267 просм.
USB программатор своими руками на микроконтроллере Atmega8. Схема
Главная » Микроконтроллеры » USB программатор своими руками на микроконтроллере Atmega8. Схема
в Микроконтроллеры 1 Комментарий 3,349 Просмотров
С развитием компьютерной техники, с каждым разом становится все меньше и меньше компьютеров оснащенных COM и LPT портами. Это в свою очередь вызывает затруднения, в частности у радиолюбителей, связанные с сопряжением средств программирования микроконтроллеров с персональным компьютером.
Портативный паяльник TS80P
TS80P- это обновленная версия паяльника TS80 Smart, работающий от USB…
Подробнее
В данной статье приведено описание USB программатора для микроконтроллеров AVR, который можно собрать своими руками. Построен он на микроконтроллере Atmega8 и способен работать от USB разъема компьютера. Данный программатор совместим с STK500 v2.
Описание USB программатора
USB программатор построен на плате, сделанной из одностороннего фольгированного стеклотекстолита по технологии ЛУТ. На плате есть 2 перемычки: одна расположена под разъёмом SPI, вторая перемычка расположена неподалеку от того же разъема.
После того как все детали будут запаяны нужно прошить микроконтроллер Atmega8 прошивкой приведенной в конце статьи. Фьюзы, которые необходимо выставить при программировании микроконтроллера Atmega8, должны выглядеть следующим образом:
Паяльный фен YIHUA 8858
Обновленная версия, мощность: 600 Вт, расход воздуха: 240 л/час…
Подробнее
- SUT1 = 0
- BOOTSZ1 = 0
- BOOTSZ0 = 0
- CKOPT = 0
- SPIEN = 0
Необходимо напомнить, что в некоторых программах фьюзы выставляются противоположно этому. Например, в программе CodeVisionAVR необходимо проставить галочки напротив вышеперечисленных фьюзов, а в программе PonyProg наоборот.
Программирование Atmega8 через LPT-порт компьютера
Самый быстрый и дешевый способ запрограммировать Atmega8 – применить LPT-программатор для AVR. Подобная схема приведена ниже.
Питание микроконтроллера осуществляется от простого стабилизатора напряжения 78L05. В качестве оболочки для программирования можно использовать программу UniProf.
При первом включении программы и при не подключенном контроллере, нажав кнопку «LPTpins», необходимо настроит выводы LPT-порта следующим образом:
В момент запуска UniProf, она автоматом определяет вид микроконтроллера. Загружаем в память UniProf прошивку Atmega8_USB_prog.hex, отклоняем подключение файла EEPROM.
Выставляем следующим образом фьюзы (для программы UniProF), нажав кнопку «FUSE»:
Для запоминания установок нажимаем все три кнопки «Write». Затем нажав на «Erase» предварительно очищаем память прошиваемого микроконтроллера. После этого уже жмем на «Prog» и дожидаемся завершения прошивки.
Настройка USB программатора
После того как наш микроконтроллер прошит, его необходимо установить в плату USB программатора. Далее подключаем программатор к USB порту компьютера, но пока питание не подаем.
Далее необходимо настроить программу терминал (HyperTerminal) которая находится по следующему пути: Пуск > Программы > Стандартные > Связь > HyperTerminal. Настраиваем порт, параметры терминала и ASCII
Настройка порта:
Настройка терминала:
Настройка ASCII:
Теперь после всех проделанных процедур, подаем питание на USB программатор. Светодиод HL1 должен промигать 6 раз и затем светится постоянно.
Для проверки связи USB программатора с компьютером 2 раза нажимаем клавишу «Enter» в программе HyperTerminal. Если все в порядке мы должны увидеть следующую картину:
Если это не так проверяем еще раз монтаж, особенно линию TxD.
Далее вводим версию программатора 2.10, так как без этого программатор не будет работать с программами «верхнего уровня». Для этого вводим «2» и нажимаем «Enter», вводим «а» (английская) и нажимаем «Enter».
USB программатор способен распознавать подключение программируемого микроконтроллера. Выполнено это в виде контроля «подтяжки» сигнала Reset к источнику питания. Этот режим включается и выключается следующим образом:
- «0», «Enter» — режим выключен.
- «1», «Enter» — режим включён.
Изменение скорости программирования ( 1МГц):
- «0», «Enter» – максимальная скорость.
- «1», «Enter» – сниженная скорость.
На этом подготовительная работа завершена, теперь можно попробовать прошить какой-нибудь микроконтроллер.
Скачать прошивку, печатную плату USB программатора и программу UniProf (829,4 KiB, скачано: 1 654)
Источник: http://r-lab.narod.ru
Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…
Подробнее
Atmega8AVRПрограмматор 2014-06-28
С тегами: Atmega8 AVR Программатор
Программатор ЭБУ — оборудование для прошивки своими руками + Видео
Уже немало статей написано об эффективном чип-тюнинге автомобилей, где подробно описан как сам процесс и подготовка к нему, так и необходимое оборудование. Вся эта информация предназначена для любителей доводить до совершенства своего железного коня самостоятельно. Для тех, кто сталкивается с проблемой прошивки ЭБУ своими руками впервые, мы вкратце проясним некоторые основные моменты.
Содержание- Преимущества новой прошивки авто
- Виды памяти контроллера
- Оборудование и технология перепрограммирования
1 Преимущества новой прошивки авто
Автомобили с автоматическим управлением вполне заслужено обрели популярность по всему миру. Тысячи автолюбителей мечтают иметь как минимум коробку-автомат, а как максимум – то, что в народе именуется «полный фарш»: климат-контроль, всевозможные регуляторы и наладчики, для продуктивной работы которых нужно всего лишь нажать кнопочку. Комфорт стал своего рода фетишем, требующим, однако, немало средств. Оборудование, столь милое сердцам любителей комфорта, стоит очень дорого и позволить его могут не все. Но, как это часто бывает в русских сказках, на каждую иноземную примочку всегда найдётся народный умелец и соберёт-таки из газонокосилки самоходную телегу. В нашем случае – доведёт до ума базовую комплектацию своего автомобиля и сделает её более интересной и полезной, используя современное оборудование в виде компьютерных программ. Стать таким умельцем, тем самым приобщившись к великому русскому гению, может каждый. Необходим лишь программатор и набор комплектующих.
Похожие статьи
На самом деле, перепрошивка ЭБУ имеет всего две основные причины. Первая – это желание сэкономить топливо. Вторая – жажда более высокой мощности и динамичности авто. Иногда использование прошивки бывает оправдано за счёт введения новых законов, запрещающих применение топлива ниже стандарта EURO-III. Ещё одним нюансом становится маркетинговая стратегия автомобильных компаний, из-за которой они часто усредняют показатели своего товара, чтобы иметь возможность продавать его по всему миру. С помощью прошивки ЭБУ вы можете попросту раскрыть потенциал своего автомобиля, который был припрятан ради удобства производителя. Качественный чип-тюнинг машины устраняет недостатки в электронной системе, и одним из залогов успеха является правильно подобранный программатор.
2 Виды памяти контроллера
Для каждого семейства ЭБУ предназначен свой программатор. С помощью специального кабеля он подключается к бортовому компьютеру и вы производите необходимые действия: закачиваете новую версию прошивки (или даже несколько версий), проверяете результат. Проверка осуществляется с помощью специальной программы по диагностике работы системы.
Бортовой компьютер автомобиля принципом своего устройства мало чем отличается от настольного ПК. Разве что в более современных версиях оборудование ЭБУ использует два вида памяти, а именно FLASH и EEPROM, сохраняющие записанную на них информацию даже в условиях отсутствия источника питания. Первый вид является изменяемой памятью, то есть такой, которую можно перепрограммировать. На FLASH хранятся данные по управлению впрыском топлива и калибровке системы. В процессе прошивки эти данные переписываются по линии k-line системной диагностики. Оборудование для данного процесса особое: адаптер и подходящая программа-загрузчик. Память типа EEPROM предназначена для постоянных перезаписей и хранит временную информацию. Например, данные об ошибках системы, в дальнейшем помогающие провести диагностику неполадок. Коды доступа к сигнализации также находятся здесь, и некоторые семейства ЭБУ не поддерживают программатор без полного удаления иммобилайзера. Данные о типах памяти и их особенностях пригодятся при самостоятельном использовании прошивки.
3 Оборудование и технология перепрограммирования
Самые современные ЭБУ не имеют внешнего блока FLASH-памяти. Программа изначально внедрена в память процессора и состоит из таких частей:
- бутлоадер – управление запуском и обновлением применяемой версии прошивки;
- основная программа по управлению двигателем;
- калибровочные программы.
Используя программатор, вы обновляете все части ЭБУ, кроме бутлоадера. Если вдруг после установки новой прошивки с отличным от исходного бутлоадером появляется запись об ошибке, то необходимо эту прошивку открыть в специальном редакторе для калибровок – CTPro. Там её необходимо сохранить и в этом виде снова попытаться внести в свой ЭБУ.
Рекомендуется тщательно следить за состоянием бутлоадера в процессе прошивки. Программатор будет производить запись новой программы после нажатия на соответствующую кнопку («запись»), а в этом процессе удерживание нажатой клавиши «Shift» вплоть до стирания флэш-памяти обновит бутлоадер. Если программатор сделает запись с ошибкой, то ЭБУ вообще перестанет отвечать на ваши команды. Именно для тех видов контроллеров, перезапись которых осуществляется через бутлоадер процессора, предназначен способ физического вмешательства в систему. Вы особым образом перепаиваете расположение резистора и возвращаете его на место после программирования.
Существует универсальный программатор CombiLoader, который обновит бортовой компьютер без усилий с вашей стороны.
Не будет необходимости что-то качать, потом заново закачивать через другие программы и так далее. Это хитрое оборудование даже позволяет редактировать прошивку в специальной программе Chip Tuning Pro, если вдруг возникнет такая необходимость. Но, увы, данное устройство подходит далеко не всем ЭБУ.
Чип-тюнинг – это сложный процесс. Такое оборудование, как программатор, требует много сопутствующих устройств и программ, а также хотя бы базового знания компьютера. При системном подходе вы за несколько месяцев освоите основные принципы работы бортового компьютера, а также возможности новых прошивок. Для тех, кто сталкивается с несовершенствами заводских настроек каждый день, не составит труда их понять и устранить. Специальное оборудование поможет сократить сам процесс в считанные часы, учитывая подготовку.
youtube.com/embed/qJe-wlQfSh8?rel=0″ frameborder=»0″ allowfullscreen=»allowfullscreen»>Программатор Громова | Электроника для всех
Самый простой вариант программатора для AVR это пять проводков, припаиваемых к порту контроллера и втыкаемых в LPT порт. Не спорю, можно и так. Но я все же не рекомендую этот способ. Даже схему подключения давать не буду — если надо будет сам найдешь. Так как данный метод не очень стабилен, возможны сбои при прошивке, длина проводков ограничена двадцатью сантиметрами (если больше, то будет глючить), поэтому придется шариться в комповой заднице. Да и LPT порт спалить проще простого. В общем не рулез.
Шарясь по инету, я нашел отличный программатор, работающий через RS232 он же COM порт. А также удобную программу для прошивки контроллера UniProf от Николаева. Схему программатора придумал Громов, создатель Algorithm Builder.
Саму программу UniProf можно скачать у меня, но лучше взять с сайта автора. Возможно там будет версия посвежее.
Так же, тебе потребуется чертеж печатной платы в формате Layout, для изготовления печатной платы данного программатора.
Это формат программы Sprint Layout которую можно скачать с моего сайта. Пустячок, а приятно. Впрочем, ее можно и на картонке спаять, слишком уж простая схема. Также есть альтернативная разводка платы которую прислал Shama, она на выводных резисторах
Для сборки программатора потребуется:
- Три диода, любых из маломощных. Например 1N4148.
- Семь резисторов на 1кОм. У меня резисторы типоразмера 1206
- Если будешь делать по моей печатной плате, то можешь еще купить 3 резистора на 0 ом — перемычки, они же пофигисторы.
Печатная плата либо рисуется маркером, либо, как у меня, делается методом лазерного утюга.
Спаянную платку я запихал в корпусок, а провод подключил к компьютеру. Длина провода у меня составила метра полтора-два, а от программатора до контроллера стараюсь провод делать покороче.
Разьем DB9, что на фотке, я поставил для удобства. У меня туда подключаются разные прошивающие шнуры либо вот такой вот адаптер:
Программатор запаян, контроллер к нему подключен. Пора убедиться в том, что все сделано верно.
Запускай UniProf.exe и выбирай номер СОМ порта к которому у тебя подключен программатор. Сразу же должен определиться тип контроллера и высветиться над левым окном кода.
Не получилось? Тут три варианта:
- Программатор спаян криво.
- Дохлый контроллер.
- Неправильно припаял проводки к микроконтроллеру.
Еще раз все досконально проверяешь и пробуешь снова. Должно получиться.
Дальше, если до этого ты никогда не работал с контроллерами, тебе возможно потребуется тестовая программа. Она не будет делать ничего полезного, зато позволит тебе точно быть уверенным, что все что ты сделал до этого ты сделал правильно.
Скачиваешь Atmel AVR Studio — это официальная среда для разработки программ под микроконтроллеры AVR. Студия поддерживает все микроконтроллеры семейства Atmel AVR. Найти ее последнюю версию можно на сайте Atmel.com
Далее создавай новый проект, в качестве языка программирования выбирай Assembler и укажи папку и имя где будет располагаться твой проект. В качестве отладчика бери AVR SIMULATOR и укажи с каким именно контроллером ты будешь работать. После чего забивай в текстстовое окно простейшую программу.
Вот ее примерный текст:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | .INCLUDE "m16def.inc" ; это подключается список макроопределений ; без него компилятор не будет знать под какой ; именно процессор мы собираем программу ; если у тебя другой контроллер, то подставь ; соответствующий инклюдник. Они находятся в ; папке AVR Studio по адресу ; "AVR Tools\AvrAssembler\Appnotes\" .MACRO outi LDI R16,@1 OUT @0,R16 .ENDMACRO ; задаем весьма удобный макрос, позволяющий ; записать произвольное заданное число в любой ; регистров за одну строку кода. .CSEG .ORG 0x0000 RJMP RESET .ORG 0x0030 ; Директива начала кода с адреса 0х0030 ; адрес взят с большим запасом, потому как ; у разных AVR разных размеров таблица ; прерываний. Так что уж чтобы наверняка! RESET: ; стартовая метка OUTI DDRA,0xFF OUTI DDRB,0xFF OUTI DDRC,0xFF OUTI DDRD,0xFF ; Конфигурируем направления портов на выход ; Если данный контроллер не имет, например, порта ; С, то эту строчку надо закомментировать. OUTI PORTA,0xAA OUTI PORTB,0xAA OUTI PORTC,0xAA OUTI PORTD,0xAA ; Выдаем на выходы 10101010, чтобы получить ; четкую картину того, что на портах произошли ; изменения. После выполнения программы ; на выходах микроконтроллера в шахматном порядке ; будут либо напряжение питания, либо земля. Что ; легко проверяется либо вольтметром, либо простейшим ; пробником на светодиоде. RJMP RESET ; Зацикливаем программу. |
А лучше не копипасти, а сразу скачай файл проекта.
Далее жми на кнопку компиляции (или F7) и лезь в папку своего проекта. Там тебя уже должен поджидать ****.hex файл с прошивкой.
Запускай UniProf.exe, жми на кнопочку с открытой папкой и надписью HEX. Выбирай свой свежескомпиленный проект и жми ок.
Вторым окном UniProf попросит тебя ввести данные EEPROM, у нас EEPROM не используется, поэтому нажимай отмену.
Все, теперь можно прошивать. Жми на красную стрелку с надписью Prog и жди. По окончании можешь нажать чтение и поглядеть что записалось в твой контроллер — должно показать то же самое, что и было уже загружено в окно.
Теперь тебе остается подать питание на свой микроконтроллер и посмотреть что появилось на портах. Увидел «гребенку» из высоких и низких уровней напряжения? Отлично! Ты прошил свой первый в жизни контроллер! Теперь ты можешь с головой занырнуть в изучение микроконтроллеров AVR.
Если не заработало, то вот возможные грабли и пути решения.
- Современные компьютеры, с гигагерцовыми процессорами, новомодными Вистами и Семерками очень плохо дружат с этим программатором. Мало того, что у вас может банально не обнаружиться COM порта, а если и будет так еще не факт что все заработает как надо. Рекомендую собрать себе для радиотехнических опытов из подручного хлама что то вроде PIII 800/Windows’98. Бесплатно нарыть такое чудо проблем не составит и сжечь не жалко, если что не так
- Данная схема не работает через переходники USB-COM или работает, но ОЧЕНЬ медленно. Скажем прошивка одного микроконтроллера может длиться часа полтора.
- Питание, на первый раз, лучше всего брать с блока компа. Меньше вероятность что либо сжечь или ошибиться
- Проверяте схему по 3-4 раза! Т.к., судя по комментам, большая часть проблем из-за кривого монтажа.
- Перед запуском программы в МК НУЖНО ОТКЛЮЧИТЬ ПРОГРАММАТОР и подать на вход RESET +5 вольт через резистор в 1..10кОм. С подключенным программатором ничего работать не будет, т.к. он прижимает RESET и не дает кристаллу стартовать.
- Если UniProf не определяет МК, возможно у вас слишком быстрый компьютер. Для компенсации этого «недостатка» нужно включить галочку «Тормоз» Она показывается если отключить снятием галки EEPROM панель отображения данных EEPROM.
- Если галка Тормоз не помогла, то пробуйте на другом компе. Т.к. тут СОМ порт обрабатывается в нештатном режиме, а значит не факт, что ваш СОМ порт поймет все правильно.
- На худой конец, если ничего не помогает, попробуйте программатор из 5 проводков или другую прошивающую программу, например avrdude. Провода делайте как можно короче! 10-15 сантиметров это МАКСИМУМ!
- Читайте комменты к записи. Там многие косяки уже были разобраны. Возможно и ваш окажется среди них.
Дополнение от Outsider:
1. Если сзади у компа нет разъема COM-порта, то это не на 100% означает, что такого порта нет на материнской плате в принципе. Пока еще на матерях встречаются разъемчики с 9 штырьками в два ряда — подробнее нужно смотреть документацию к материнской плате. Я на своей ASUS P5K SE нашел и успешно заюзал.
2. Да, +5 и GND это не земля и контакт из COM-порта, а именно внешнее питание. Проще всего его добыть в компе — +5 есть в красном проводе на любом из разъемов, питающих жесткие диски. А GND — на корпусе самого компа. Или на черном проводе того же разъема.
3. Если с UniProf что-то не срастается, то можно попробовать avrdude. Чтобы это сделать, нужно прописать в avrdude.conf следующее:
programmer
id = «nikolaew»;
desc = «serial port banging, reset=dtr sck=rts mosi=txd miso=cts»;
type = serbb;
reset = 4;
sck = 7;
mosi = 3;
miso = 8;
;
А затем запустить avrdude со следующими параметрами:
avrdude -n -c nikolaew -P com1 -p m16
где «com1» нужно заменить на твой порт (если, конечно, используется другой), а «m16» на нужный тип микроконтроллера. Список поддерживаемых программой контроллеров можно найти здесь:http://www.nongnu. org/avrdude/user-manual/avrdude_4.html
Если все в порядке, то программа скажет:
avrdude: AVR device initialized and ready to accept instructions
Дополнение от Riko
Эксприменатально было выяснено, что для правильной работы этого программатора напряжение питания МК должно быть не ниже 5 вольт (но не выше 5.5!!!). То есть если МК подключен к трем пальчиковым батарейкам, то вы обламываетесь, так как там 4.5 вольта! Запитывайте от компа!!!
Дополнение от SLY_DEr
Не работало. Сменил резисторы с 3к (не было на 1к) на 460ом’ные — заработало, но с ошибками.
Решил чисто ради спортивного интереса снизить скорость ком-порта в диспечере устроиств и о, чудо, все заработало как надо. Скорость порта снизил с 9600к до 4800к и плюс убавил буфер приема и передачи (там же) до значений 4 и 6 соответственно.
Если что непонятно, то не стесняйся спрашивать у меня в комментах.
З. Ы.
Если не получается ну никак, то может быть ваша материнска плата не поддерживает столь нестандартное обращение с COM портом и стоит попробовать другие программаторы? Например, STK200 или FTBB. Они хоть и сложней, но зато работают более корректно, без извратов.
TL866CS, универсальный программатор
$40.86
Перейти в магазин
Не скажу, что я часто пользуюсь программатором, но иногда приходится. Потому при «переезде» на новый компьютер возникла проблема, мои старые программаторы с ним не работают.
Собственно потому и был куплен более современный, которому не нужен COM или LPT порт.
Обзоры данного устройства здесь уже есть, потому мой обзор будет скорее небольшим
дополнением, а заодно и минуткой истории программаторов.
Купил я этот программатор еще летом, но вот заняться им решил только сейчас, в основном из-за того, что теперь у меня не привычная мне ХР, а Windows 7 x64. Но кроме этого я теперь сильно ограничен в плане разнообразия портов.
Программаторы делятся на несколько групп, хотя во многих случаях деление довольно условно, так как некоторые могут работать в разных режимах.
Для начала по способу управления, «программные», «аппаратные» и автономные.
Программные, это самые простые программаторы, они не содержат в себе никаких микроконтроллеров, всем процессом управляет только компьютер. Из недостатков — сильная привязка к «железу», почти полная невозможность работы через USB-COM и USB-LPT конвертеры.
Из достоинств — простота, иногда достаточно просто нескольких проводков, иногда одной или нескольких логических микросхем.
Аппаратные. Имеют на борту микроконтроллер, который является «прослойкой» между компьютером и программируемым чипом. В этом случае программа работает используя стандартный протокол передачи данных и можно пользоваться конвертерами. Кроме того такие программаторы обычно имеют более стабильный результат прошивки, стремящийся к 100%.
Автономные. Позволяют программировать вообще без участия компьютера.
Кроме этого есть еще деление на последовательные и параллельные.
Последовательный — информация записывается по одному биту, долго, но меньше проводов.
Также такой принцип используется и в внутрисхемном программировании.
Параллельный — пишем сразу по одному байту, выше скорость, но больше сложность и больше проводов. Часто такие программаторы «аппаратные», хотя были и версии с подключением к LPT порту. Кроме того параллельный программатор в некоторых ситуациях может помочь разблокировать микросхемы, которые не может последовательный.
Кроме этого еще бывают программаторы с высоковольтным программированием (например можно разблокировать контроллеры с отключенным выводом сброса), с режимом внутрисхемной отладки.
При очень большом желании программу записать можно даже при помощи обычных переключателей, вручную. Это очень долго, муторно, но реально.
Пока готовил обзор, проверял программатор, вспоминал чем я вообще пользовался раньше.
Если кому то интересно, то покажу, но слабонервным лучше не смотреть 🙂
Возможно кто то покажет свои варианты.
Минутка истории
Получил я программатор в небольшой картонной коробочке. Точно в таком же виде он показан на сайте производителя.
TL866CS, универсальный программатор
Программатор в минимальной комплектации, в которую входит:
1. Программатор
2. USB кабель
3. Диск с программным обеспечением
4. Гарантийный талон.
TL866CS, универсальный программатор
Гарантийная карта особого смысла не имеет, а что на диске я даже не смотрел, так как просто скачал необходимое мне ПО, ссылку на него дам в конце.
Из всего полезен разве что кабель, причем довольно качественный.
TL866CS, универсальный программатор
Программатор я раньше видел в других обзорах, потому уже ожидал что получу. Небольшая серая коробочка с панелькой сверху.
TL866CS, универсальный программатор
С одной стороны расположено гнездо USB, причем правильного типа, которое и должно устанавливаться на устройствах, а не мини или микро.
С другой стороны только место под разъем.
TL866CS, универсальный программатор
Сверху установлена так называемая панель с нулевым усилием. Чаще всего в самодельных устройствах применяют обычные панели. Я сам так делаю, это дешево и по своему удобно. Но правильная панель куда удобнее, особенно в универсальных устройствах. Открыл, положил микросхему, закрыл, все 🙂
Снизу только наклейка с серийным номером и адресом производителя.
TL866CS, универсальный программатор
Разбирал я его еще до первого включения, большей частью ради любопытства. Разбирается он предельно просто, четыре самореза и все. Правда не понравились две вещи, нет ножек и саморезы довольно короткие.
TL866CS, универсальный программатор
Печатная плата. А точнее «бутерброд» из двух плат. Внешне все просто отлично.
TL866CS, универсальный программатор
Бросается в глаза обилие компонентов, плата местами буквально усеяна ими.
TL866CS, универсальный программатор
Пайка качественная, все чисто, вот только зачем то стерли маркировку микроконтроллера. Насколько я знаю, это что то от фирмы Майкрочип, хотя по большому счету неважно.
TL866CS, универсальный программатор
Слева видны микросхемы преобразователей питания, ну а по центру просто толпа диодов. Все это обилие компонентов вызвано тем, что каждый контакт панели может управляться индивидуально, а если точнее, то полностью независимо, потому возможности программирования ограничены только программой.
TL866CS, универсальный программатор
Помимо разъемов, соединяющих платы, есть еще пара проволочных выводов, которыми платы спаяны вместе. Также рядом просматривается место для установки еще одного разъема.
TL866CS, универсальный программатор
С другой стороны также есть место под разъем. Я могу ошибаться, но насколько я понимаю, это разъем программирования микроконтроллера установленного в программаторе.
TL866CS, универсальный программатор
Первую часть осмотра закончил, пробую запустить.
Устанавливаю программу, потом заменяю родной файл программы на русифицированный и запускаю. Перед собственно запуском программы выдается такое вот окошко.
Если его закрыть, то ПО работает, но при каждом включении это уведомление раздражает.
К слову, установка ПО прошла на удивление гладко. Запустил установщик, он сам установил драйверы, после завершения все заработало. Даже удивило, так как морально я уже был готов к проблемам. Напмню, эксперимент проходил под Windows 7 x64.
После запуска видим вполне привычное многим окно программы управления программатором.
У разных программаторов оно может немного отличаться, но общая суть неизменна, вверху разные режимы работы (запись, чтение, проверка, стирание и т.п.), выбор микросхем.
Ниже окно в котором отображается записываемая или считанная информация, при этом как и в остальном ПО информацию можно редактировать.
Так как постоянно выскакивающее окно меня раздражало, то я первым делом решил обновить программу самого программатора.
Заходим в меню «инструменты» и выбираем — Новая прошивка.
Кстати, есть еще пункт — Самодиагностика, весьма полезная опция.
Дальше нас напугают страшным уведомлением, мол смотрите что делаете, если что не так, то мы ничем вам уже не поможем 🙂
Вообще дело действительно серьезное, при неудачной прошивке действительно могут быть большие сложности.
Нажимаем кнопку — Прошить и надеемся что компьютер не зависнет и не выключат электричество. В моем случае все прошло удачно, ПО обновилось без проблем.
Но на самом деле это была только половина процесса. Дальше я захотел превратить мой программатор TL866CS в более удобную версию TL866A.
Существуют два способа:
1. Перепрошивка микроконтроллера программатора с использованием другого программатора, а точнее при помощи нескольких проводков, LPT порта и специальной программы.
2. Перепрошивка загрузчика, по сути «программная» коррекция.
Первый способ считается более правильным, но и более сложным. Второй гораздо проще, но есть информация, что при обновлении программы придется опять повторять операцию. ТАк как программу я часто обновлять не планирую, то решил использовать второй способ. Информация и файл взяты отсюда.
Для этого запускаем файл TL866.exe из папки — Перепрошивка.
Затем находим файл update. dat. Он находится в папке куда мы установили ПО программатора
TL866CS, универсальный программатор
Нажимаем на кнопку — Reflash. Нам последний раз предлагают передумать, но мы не соглашаемся.
Надеюсь все понимают, что любые действия вы делаете на свой страх и риск?
В конце мы должны получить такое окошко. Если не получили, то скорее всего дальше придется пользоваться проводками и LPT портом.
Все, теперь у нас TL866A.
Данный апгрейд дает нам возможность прошивать микроконтроллеры не только в панели самого программатора, а и внутрисхемно. Можно конечно выпаять контроллер из платы и прошить его в самом программаторе, но если это надо делать более одного раза, то куда проще подключить шесть проводов и делать это без выпаивания.
Но мало обновить ПО, надо ведь еще запаять сам разъем. Я делал это в последнюю очередь, так как не было 100% уверенности в результате перепрошивки.
Порывшись дома в загашнике, нашел разъемы и провод.
TL866CS, универсальный программатор
Вообще, изначально производителем задумывалось, что будет применяться такой разъем.
Он называется NS25-W6K.
Причем установить его можно даже не разбирая бутерброд из плат. Например я даже без применения пинцета и прочих инструментов установил его на место. правда у меня был только трехконтактный, но сути дела это не меняет.
TL866CS, универсальный программатор
Но в наличии правильного разъема у меня не было и я применил другой, тоже с шестью контактами и похожим шагом (мой 2.5мм, а надо 2.54мм).
Хотя на мой взгляд гораздо удобнее было бы применить разъем типа IDC.
Такой разъем имеет большой плюс в том, что у него нет фиксатора, а также то, что кабель в нем жестко фиксируется и его не получится вырвать.
Но есть проблема, чтобы красиво установить такой разъем, надо чтобы он был на 12 контактов, но они есть на 10 или 14. Потому надо либо использовать 10 и один из выводов соединять проводом, либо 14 но лишний не использовать (если задействовать только один ряд выводов).
Такие разъемы я использовал в своем старом программаторе и они показали что лучше и искать не стоит. На фото разъем BH-10R на 10 контактов.
Разъем, который изначально должен был стоять, немного выступает за пределы платы, но как по мне, то выступать он должен еще больше, потому это еще одна причина применения другого типа разъемов.
TL866CS, универсальный программатор
В моем случае без паяльника уже не обойтись.
Для начала выпаиваем светодиоды, предварительно запомнив как они были впаяны. Хотя на плате плюсовой контакт помечен квадратным «пятачком».
TL866CS, универсальный программатор
Затем постепенно прогревая два вывода, которые удерживают половинки вместе, и одновременно разжимая платы, рассоединяем их.
TL866CS, универсальный программатор
Теперь можно осмотреть что кроется внутри.
А внутри видно кучу мелких транзисторов, разъемы и дроссели системы питания.
TL866CS, универсальный программатор
Повышающие преобразователи питания. Вообще, на мой взгляд, узел питания сделано весьма неплохо. Да и сама конструкция хорошо продумана.
TL866CS, универсальный программатор
Случайно заметил самовосстанавливающийся предохранитель по линии питания USB, это также хорошо, меньше шансов спалить порт компьютера в случае нештатной ситуации.
TL866CS, универсальный программатор
На второй плате также кучка мелких транзисторов, скорее всего те, которые не влезли на первую плату.
TL866CS, универсальный программатор
Осмотрели, идем дальше.
Перед следующим шагом я уже было приготовил инструменты чтобы выломать заглушку для разъема, но внезапно оказалось, что она просто вынимается, приятно 🙂
TL866CS, универсальный программатор
Припаиваю залуженный провод к разъему. Сначала думал просто взять выводы от каких нибудь деталей, но потом подумал, что если поставить жесткие залуженные провода, то разъем можно не приклеивать. У родного разъема хватает жесткости выводов чтобы его удерживать на плате.
TL866CS, универсальный программатор
Собираем все в кучку, припаиваем светодиоды и устанавливаем в корпус.
TL866CS, универсальный программатор
А вот перед следующей операцией надо определиться, по какой распиновке разъема мы будем делать.
Если для Майкрочипа все просто и понятно, то с Атмелом не все так просто. Для него существует два стандартных варианта ICSP разъема, шести и десятиконтактный.
Я обычно стараюсь использовать шесть контактов, он компактнее, но десятиконтактный считается более правильным и был предложен собственно фирмой Атмел. Конечно никто не мешает сделать переходник или просто два кабеля, но в любом случае лучше ориентироваться на эти два стандарта, потом может помочь в работе.
Возможно кому нибудь будет так проще понять как разводить разъем.
Я выбрал в итоге вариант с шестью контактами, хотя сам разъем у меня с десятью, потому расшиваю только средние шесть контактов.
TL866CS, универсальный программатор
Все переплетения проводов я оставляю на стороне разъема подключения к программатору. Обжимки у меня нет, пришлось паять.
TL866CS, универсальный программатор
Конечно же проверяю то, что получилось. Беру плату из этого обзора и пробую считать содержимое.
TL866CS, универсальный программатор
Для работы с разъемом внешнего программирования выбираем соответствующую опцию в настройках программы. Кстати попутно можно выбрать, подавать питания на устройство или нет.
Ток ограничен и у меня почему то постоянно выдавало ошибку перегрузки порта программатора, пришлось принудительно удерживать кнопку включения программируемого устройства, а в настройках программатора отключить подачу питания.
Скорость чтения в таком режиме не очень высокая, Atmega644 прочиталась за 13 секунд.
Поигравшись немного с другими микроконтроллерами и выяснив что все работает, я перешел к более редким проверкам, хотя это уже скорее любопытство.
Беру ПЗУ 27С256 от старого компьютера, читаю.
Кстати, для микросхем с УФ стиранием есть удобная опция — проверка чистоты, в этом режиме программатор проверяет что микросхема полностью стерта.
TL866CS, универсальный программатор
Микросхеме около 30 лет, но она читается 🙂 Правда я почти уверен, что читается со сбоями, так как со временем такие ПЗУ имеют свойство «течь».
Ладно, беру ради эксперимента еще одну похожую микросхему, от какого то древнего 80286 компа.
TL866CS, универсальный программатор
Здесь похоже что сбои уже в самом начале чтения и более явные, это видно по прочтенному тексту.
Из удобного могу отметить то, что есть список последних использовавшихся микросхем.
TL866CS, универсальный программатор
В процессе тестов проверял и старые Атмелы, например 89C2051, проблем обнаружено не было.
Вообще список микроконтроллеров довольно большой.
Дальше хотел найти свой старый Синклер, чтобы прочитать его ПЗУ, но мне под руку он не попался и я перешел к тому, что меня очень приятно обрадовало в этом программаторе. Причем странно то, что никто особо и не акцентировал на этом внимание.
Прибор позволяет производить проверку логических микросхем, а также микросхем статического и динамического ОЗУ.
Для меня это было открытием, так как всегда относился к данному устройству только как к программатору.
Дальше я проверял все, что попадалось под руку. Сначала простая логика.
Так как большинство наших микросхем (хотя далеко не все) являются аналогами импортных, то можно проверять и их.
Затем микросхему статического ОЗУ К537РУ10. Правда она является аналогом импортной 6216, но ее я не нашел в списке и проверил как 6116.
Затем шел сдвиговый регистр 555ИР27, но проверив две микросхемы прибор в обоих случаях выдавал ошибку. Причем ошибки были разные у обоих микросхем и результат был «плавающим». Микросхемы были паяные и выдраны из какого то устройства, потому возможно что и неисправны.
Берем нашу КР1533ИР9, находим соответствующий аналог, здесь все отлично.
Попалась еще 155ИЕ9В, здесь также все хорошо.
Хотел еще проверить наши К565РУ7, но импортного аналога в списке микросхем программатора не нашел 🙁
Кроме того хотелось проверить разблокирует ли программатор микроконтроллеры ATtiny15L (и похожие) у которых отключен вывод сброса, но найденные мной микросхемы не были заблокированы (или разблокировались), а единственная найденная ATtiny15L которая не читалась и не стиралась была паяная. Конечно можно попробовать сначала заблокировать, а потом стереть, но этих контроллеров у меня мало, а в продаже их сейчас не найти, потому я их оставил на возможные замены.
На этом можно сказать, что все. Выделять какие то плюсы или минусы не буду, так как программатор очень понравился. Переделка в версию А оказалась предельно простой, но добавляющей полезный функционал. Полной неожиданностью было то, что программатор может проверять логические микросхемы, кому то покажется мелочью, но для меня это очень полезная мелочь. ОЗУ я вряд ли проверять буду, так как редко с ними сталкиваюсь, но для возможной диагностики может пригодится.
Качество сборки также на отлично, конструкция несколько неудобна для разборки, так как платы в двух местах спаяны между собой, но в жизни разбирать их вряд ли придется.
Как и обещал, в качестве дополнения программа с драйвером, а также программа перепрошивки, схема, и список поддерживаемых микросхем. Список постоянно пополняется, потому уже может быть больше. Ссылка для скачивания.
С купоном TL866CSS программатор стоит 37 долларов, мне правда обошелся чуть дороже, так как на тот момент купона не было, а я пользовался поинтами.
На этом все, как всегда жду вопросов, а в качестве бонуса предлагаю небольшую загадку, тому кто первый ответит правильно + в карму (если еще не ставил).
Загадка
$40.86
Перейти в магазин
Универсальный программатор для микроконтроллеров AVR и PIC. Радиотехника, электроника и схемы своими руками.
ПрограмматорыКакие первые шаги должен сделать радиолюбитель, решивший собрать схему на микроконтроллере? Естественно, необходима управляющая программа — «прошивка», а также программатор.
И если с первым пунктом нет проблем — готовую «прошивку» обычно выкладывают авторы схем, то вот с программатором дела обстоят сложнее.
Цена готовых USB-программаторов довольно высока и лучшим решением будет собрать его самостоятельно. Вот схема предлагаемого устройства (картинки кликабельны).
Основная часть.
Панель установки МК.
Исходная схема взята с сайта LabKit.ru с разрешения автора, за что ему большое спасибо. Это так называемый клон фирменного программатора PICkit2. Так как вариант устройства является «облегчённой» копией фирменного PICkit2, то автор назвал свою разработку PICkit-2 Lite , что подчёркивает простоту сборки такого устройства для начинающих радиолюбителей.
Что может программатор? С помощью программатора можно будет прошить большинство легкодоступных и популярных МК серии PIC (PIC16F84A, PIC16F628A, PIC12F629, PIC12F675, PIC16F877A и др. ), а также микросхемы памяти EEPROM серии 24LC. Кроме этого программатор может работать в режиме USB-UART преобразователя, имеет часть функций логического анализатора. Особо важная функция, которой обладает программатор — это расчёт калибровочной константы встроенного RC-генератора некоторых МК (например, таких как PIC12F629 и PIC12F675).
Необходимые изменения.
В схеме есть некоторые изменения, которые необходимы для того, чтобы с помощью программатора PICkit-2 Lite была возможность записывать/стирать/считывать данные у микросхем памяти EEPROM серии 24Cxx.
Из изменений, которые были внесены в схему. Добавлено соединение от 6 вывода DD1 (RA4) до 21 вывода ZIF-панели. Вывод AUX используется исключительно для работы с микросхемами EEPROM-памяти 24LС (24C04, 24WC08 и аналоги). По нему передаются данные, поэтому на схеме панели программирования он помечен словом «Data». При программировании микроконтроллеров вывод AUX обычно не используется, хотя он и нужен при программировании МК в режиме LVP.
Также добавлен «подтягивающий» резистор на 2 кОм, который включается между выводом SDA и Vcc микросхем памяти.
Все эти доработки я уже делал на печатной плате, после сборки PICkit-2 Lite по исходной схеме автора.
Микросхемы памяти 24Cxx (24C08 и др.) широко используются в бытовой радиоаппаратуре, и их иногда приходится прошивать, например, при ремонте кинескопных телевизоров. В них память 24Cxx применяется для хранения настроек.
В ЖК-телевизорах применяется уже другой тип памяти (Flash-память). О том, как прошить память ЖК-телевизора я уже рассказывал . Кому интересно, загляните.
В связи с необходимостью работы с микросхемами серии 24Cxx мне и пришлось «допиливать» программатор. Травить новую печатную плату я не стал, просто добавил необходимые элементы на печатной плате. Вот что получилось.
Ядром устройства является микроконтроллер PIC18F2550-I/SP .
Это единственная микросхема в устройстве. МК PIC18F2550 необходимо «прошить». Эта простая операция у многих вызывает ступор, так как возникает так называемая проблема «курицы и яйца». Как её решил я, расскажу чуть позднее.
Список деталей для сборки программатора. В мобильной версии потяните таблицу влево (свайп влево-вправо), чтобы увидеть все её столбцы.
Название | Обозначение | Номинал/Параметры | Марка или тип элемента |
Для основной части программатора | |||
Микроконтроллер | DD1 | 8-ми битный микроконтроллер | PIC18F2550-I/SP |
Биполярные транзисторы | VT1, VT2, VT3 | КТ3102 | |
VT4 | КТ361 | ||
Диод | VD1 | КД522, 1N4148 | |
Диод Шоттки | VD2 | 1N5817 | |
Светодиоды | HL1, HL2 | любой на 3 вольта, красного и зелёного цвета свечения | |
Резисторы | R1, R2 | 300 Ом | |
R3 | 22 кОм | ||
R4 | 1 кОм | ||
R5, R6, R12 | 10 кОм | ||
R7, R8, R14 | 100 Ом | ||
R9, R10, R15, R16 | 4,7 кОм | ||
R11 | 2,7 кОм | ||
R13 | 100 кОм | ||
Конденсаторы | C2 | 0,1 мк | К10-17 (керамические), импортные аналоги |
C3 | 0,47 мк | ||
Электролитические конденсаторы | C1 | 100 мкф * 6,3 в | К50-6, импортные аналоги |
C4 | 47 мкф * 16 в | ||
Катушка индуктивности (дроссель) | L1 | 680 мкГн | унифицированный типа EC24, CECL или самодельный |
Кварцевый резонатор | ZQ1 | 20 МГц | |
USB-розетка | XS1 | типа USB-BF | |
Перемычка | XT1 | любая типа «джампер» | |
Для панели установки микроконтроллеров (МК) | |||
ZIF-панель | XS1 | любая 40-ка контактная ZIF-панель | |
Резисторы | R1 | 2 кОм | МЛТ, МОН (мощностью от 0,125 Вт и выше), импортные аналоги |
R2, R3, R4, R5, R6 | 10 кОм |
Теперь немного о деталях и их назначении.
Зелёный светодиод HL1 светится, когда на программатор подано питание, а красный светодиод HL2 излучает в момент передачи данных между компьютером и программатором.
Для придания устройству универсальности и надёжности используется USB-розетка XS1 типа «B» (квадратная). В компьютере же используется USB-розетка типа «А». Поэтому перепутать гнёзда соединительного кабеля невозможно. Также такое решение способствует надёжности устройства. Если кабель придёт в негодность, то его легко заменить новым не прибегая к пайке и монтажным работам.
В качестве дросселя L1 на 680 мкГн лучше применить готовый (например, типов EC24 или CECL). Но если готовое изделие найти не удастся, то дроссель можно изготовить самостоятельно. Для этого нужно намотать 250 — 300 витков провода ПЭЛ-0,1 на сердечник из феррита от дросселя типа CW68. Стоит учесть, что благодаря наличию ШИМ с обратной связью, заботиться о точности номинала индуктивности не стоит.
Напряжение для высоковольтного программирования (Vpp) от +8,5 до 14 вольт создаётся ключевым стабилизатором. В него входят элементы VT1, VD1, L1, C4, R4, R10, R11. С 12 вывода PIC18F2550 на базу VT1 поступают импульсы ШИМ. Обратная связь осуществляется делителем R10, R11.
Чтобы защитить элементы схемы от обратного напряжения с линий программирования в случае использования USB-программатора в режиме внутрисхемного программирования ICSP (In-Circuit Serial Programming) применён диод VD2. VD2 — это диод Шоттки . Его стоит подобрать с падением напряжения на P-N переходе не более 0,45 вольт. Также диод VD2 защищает элементы от обратного напряжения, когда программатор применяется в режиме USB-UART преобразования и логического анализатора.
При использовании программатора исключительно для программирования микроконтроллеров в панели (без применения ICSP), то можно исключить диод VD2 полностью (так сделано у меня) и установить вместо него перемычку.
Компактность устройству придаёт универсальная ZIF-панель (Zero Insertion Force — с нулевым усилием установки).
Благодаря ей можно «зашить» МК практически в любом корпусе DIP.
На схеме «Панель установки микроконтроллера (МК)» указано, как необходимо устанавливать микроконтроллеры с разными корпусами в панель. При установке МК следует обращать внимание на то, чтобы микроконтроллер в панели позиционируется так, чтобы ключ на микросхеме был со стороны фиксирующего рычага ZIF-панели.
Вот так нужно устанавливать 18-ти выводные микроконтроллеры (PIC16F84A, PIC16F628A и др.).
А вот так 8-ми выводные микроконтроллеры (PIC12F675, PIC12F629 и др.).
Если есть нужда прошить микроконтроллер в корпусе для поверхностного монтажа (SOIC), то можно воспользоваться переходником или просто подпаять к микроконтроллеру 5 выводов, которые обычно требуются для программирования (Vpp, Clock, Data, Vcc, GND).
Готовый рисунок печатной платы со всеми изменениями вы найдёте по ссылке в конце статьи. Открыв файл в программе Sprint Layout 5.0 можно с помощью режима «Печать» не только распечатать слой с рисунком печатных проводников, но и просмотреть позиционирование элементов на печатной плате. Обратите внимание на изолированную перемычку, которая связывает 6 вывод DD1 и 21 вывод ZIF-панели. Печатать рисунок платы необходимо в зеркальном отображении .
Изготовить печатную плату можно методом ЛУТ, а также маркером для печатных плат , с помощью цапонлака (так делал я) или «карандашным» методом .
Вот рисунок позиционирования элементов на печатной плате (кликабельно).
При монтаже первым делом необходимо запаять перемычки из медного лужёного провода, затем установить низкопрофильные элементы (резисторы, конденсаторы, кварц, штыревой разъём ISCP), затем транзисторы и запрограммированный МК. Последним шагом будет установка ZIF-панели, USB-розетки и запайка провода в изоляции (перемычки).
«Прошивка» микроконтроллера PIC18F2550.
Файл «прошивки» — PK2V023200.hex необходимо записать в память МК PIC18F2550I-SP при помощи любого программатора, который поддерживает PIC микроконтроллеры (например, Extra-PIC). Я воспользовался JDM Programmator’ом JONIC PROG и программой WinPic800 .
Залить «прошивку» в МК PIC18F2550 можно и с помощью всё того же фирменного программатора PICkit2 или его новой версии PICkit3. Естественно, сделать это можно и самодельным PICkit-2 Lite, если кто-либо из друзей успел собрать его раньше вас:).
Также стоит знать, что «прошивка» микроконтроллера PIC18F2550-I/SP (файл PK2V023200.hex ) записывается при установке программы PICkit 2 Programmer в папку вместе с файлами самой программы. Примерный путь расположения файла PK2V023200.hex — «C:\Program Files (x86)\Microchip\PICkit 2 v2\PK2V023200.hex» . У тех, у кого на ПК установлена 32-битная версия Windows, путь расположения будет другим: «C:\Program Files\Microchip\PICkit 2 v2\PK2V023200.hex» .
Ну, а если разрешить проблему «курицы и яйца» не удалось предложенными способами, то можно купить уже готовый программатор PICkit3 на сайте AliExpress. Там он стоит гораздо дешевле. О том, как покупать детали и электронные наборы на AliExpress я писал .
Обновление «прошивки» программатора.
Прогресс не стоит на месте и время от времени компания Microchip выпускает обновления для своего ПО, в том числе и для программатора PICkit2, PICkit3. Естественно, и мы можем обновить управляющую программу своего самодельного PICkit-2 Lite. Для этого понадобится программа PICkit2 Programmer. Что это такое и как пользоваться — чуть позднее. А пока пару слов о том, что нужно сделать, чтобы обновить «прошивку».
Для обновления ПО программатора необходимо замкнуть перемычку XT1 на программаторе, когда он отключен от компьютера. Затем подключить программатор к ПК и запустить PICkit2 Programmer. При замкнутой XT1 активируется режим bootloader для загрузки новой версии прошивки. Затем в PICkit2 Programmer через меню «Tools» — «Download PICkit 2 Operation System» открываем заранее подготовленный hex-файл обновлённой прошивки. Далее произойдёт процесс обновления ПО программатора.
После обновления нужно отключить программатор от ПК и снять перемычку XT1. В обычном режиме перемычка разомкнута . Узнать версию ПО программатора можно через меню «Help» — «About» в программе PICkit2 Programmer.
Это всё по техническим моментам. А теперь о софте.
Работа с программатором. Программа PICkit2 Programmer.
Для работы с USB-программатором нам потребуется установить на компьютер программу PICkit2 Programmer. Это специальная программа обладает простым интерфейсом, легко устанавливается и не требует особой настройки. Стоит отметить, что работать с программатором можно и с помощью среды разработки MPLAB IDE, но для того, чтобы прошить/стереть/считать МК достаточно простой программы — PICkit2 Programmer. Рекомендую.
После установки программы PICkit2 Programmer подключаем к компьютеру собранный USB-программатор. При этом засветится зелёный светодиод («питание»), а операционная система опознает устройство как «PICkit2 Microcontroller Programmer» и установит драйвера.
Запускаем программу PICkit2 Programmer. В окне программы должна отобразиться надпись.
Если программатор не подключен, то в окне программы отобразится страшная надпись и краткие инструкции «Что делать?» на английском.
Если же программатор подключить к компьютеру с установленным МК, то программа при запуске определить его и сообщит нам об этом в окне PICkit2 Programmer.
Поздравляю! Первый шаг сделан. А о том, как пользоваться программой PICkit2 Programmer, я рассказал в отдельной статье. Следующий шаг .
Необходимые файлы:
Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы ATMEL , то досконально пришлось ознакомится с тем что предлагают производители. Предлагают они много всего интересного и вкусного, только совсем по заоблачным ценам. К примеру, платка с одним двадцатиногим микроконтроллером с парой резисторов и диодов в качестве обвязки, стоит как «самолет». Поэтому остро встал вопрос о самостоятельной сборке программатора. После долгого изучения наработок радиолюбителей со стажем, было решено собрать хорошо зарекомендовавший себя программатор USBASP , мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48). Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку.
Раз решено было собрать миниатюрный программатор, то перерисовал схему под микроконтроллер Atmega8 в корпусе TQFP32 (распиновка микроконтроллера отличается от распиновки в корпусе DIP):
Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дёргаю, а постоянно шью с ней.
Стабилитроны D1 и D2 служат для согласования уровней между программатором и USB шиной, без них работать будет, но далеко не на всех компьютерах.
Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования. Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-ти пинового ISP разъема:
На этот разъем выведены контакты для питания программируемых устройств, здесь оно берется напрямую с USB порта компьютера, поэтому нужно быть внимательным и не допускать кз. Этот же разъем применяется и для программирования управляющего микроконтроллера, для этого достаточно соединить выводы Reset на разъеме и на мк (см. красный пунктир на схеме). В авторской схеме это делается джампером, но я не стал загромождать плату и убрал его. Для единичной прошивки хватит и простой проволочной перемычки. Плата получилась двухсторонняя, размерами 45х18 мм.
Разъем для программирования и перемычка для снижения скорости работы программатора вынесены на торец устройства, это очень удобно
Прошивка управляющего микроконтроллера
Итак, после сборки устройства осталось самое важное — прошить управляющий микроконтроллер. Для этих целей хорошо подходят друзья у которых остались компьютеры с LPT портом:)
Простейший программатор на пяти проводках для AVR
Микроконтроллер можно прошивать с разъема программирования, соединив выводы Reset микроконтроллера (29 нога) и разъема. Прошивка существует для моделей Atmega48, Atmega8 и Atmega88. Желательно использовать один из двух последних камней, так как поддержка версии под Atmega48 прекращена и последняя версия прошивки датируется 2009 годом. А версии под 8-й и 88-й камни постоянно обновляются, и автор вроде как планирует добавить в функционал внутрисхемный отладчик. Прошивку берем на странице немца. Для заливки управляющей программы в микроконтроллер я использовал программу PonyProg. При программировании необходимо завести кристалл на работу от внешнего источника тактирования на 12 МГц. Скрин программы с настройками fuse перемычек в PonyProg:
После прошивки должен загореться светодиод подключенный к 23 ноге микроконтроллера. Это будет верный признак того, что программатор прошит удачно и готов к работе.
Установка драйвера
Установка велась на машину с системой Windows 7 и никаких проблем не возникло. При первом подключении к компьютеру выйдет сообщение об обнаружении нового устройства, с предложением установки драйвера. Выбираем установку из указанного места:
Выбираем папку где лежат дрова и жмем Далее
Мигом появится окно с предупреждением о том, что устанавливаемый драйвер не имеет цифровой подписи у мелкомягких:
Забиваем на предупреждение и продолжаем установку, после небольшой паузы появится окно, сообщающее об успешном окончании операции установки драйвера
Все, теперь программатор готов к работе.
Khazama AVR Programmer
Для работы c программатором я выбрал прошивальщик Khazama AVR Programmer. Замечательная программка, с минималистичным интерфейсом.
Она работает со всеми ходовыми микроконтроллерами AVR, позволяет прошивать flash и eeprom, смотреть содержимое памяти, стирать чип, а также менять конфигурацию фьюз-битов. В общем, вполне стандартный набор. Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность залочить кристалл по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, и это тоже большой плюс в плане безопасности.
Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All. Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную. Правда я так и не смог придумать практического применения этих кнопок. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).
В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности и скорости работы. Он без проблем заработал как на древнем стационарном пк так и на новом ноутбуке.
Скачать файл печатной платы
в SprintLayout можно по этой ссылке
22 сентября 2011 в 20:11
- Программирование микроконтроллеров
Как театр начинается с вешалки, так программирование микроконтроллеров начинается с выбора хорошего программатора. Так как начинаю осваивать микроконтроллеры фирмы ATMEL, то досконально пришлось ознакомится с тем что предлагают производители. Предлагают они много всего интересного и вкусного, только совсем по заоблачным ценам. К примеру, платка с одним двадцатиногим микроконтроллером с парой резисторов и диодов в качестве обвязки, стоит как «самолет». Поэтому остро встал вопрос о самостоятельной сборке программатора. После долгого изучения наработок радиолюбителей со стажем, было решено собрать хорошо зарекомендовавший себя программатор USBASP, мозгом которого служит микроконтроллер Atmega8 (так же есть варианты прошивки под atmega88 и atmega48). Минимальная обвязка микроконтроллера позволяет собрать достаточно миниатюрный программатор, который всегда можно взять с собой, как флэшку.
Автором данного программатора является немец Thomas Fichl, страничка его разработки со схемами, файлами печатных плат и драйверами.
Раз решено было собрать миниатюрный программатор, то перерисовал схему под микроконтроллер Atmega8 в корпусе TQFP32 (распиновка микроконтроллера отличается от распиновки в корпусе DIP):
Перемычка J1 применяется, в случае если необходимо прошить микроконтроллер с тактовой частотой ниже 1,5МГц. Кстати, эту перемычку вообще можно исключить, посадив 25 ногу МК на землю. Тогда программатор будет всегда работать на пониженной частоте. Лично для себя отметил, что программирование на пониженной скорости на доли секунды дольше, и поэтому теперь перемычку не дёргаю, а постоянно шью с ней.
Стабилитроны D1 и D2 служат для согласования уровней между программатором и USB шиной, без них работать будет, но далеко не на всех компьютерах.
Светодиод blue показывает наличие готовности к программированию схемы, red загорается во время программирования. Контакты для программирования выведены на разъем IDC-06, распиновка соответствует стандарту ATMEL для 6-ти пинового ISP разъема:
На этот разъем выведены контакты для питания программируемых устройств, здесь оно берется напрямую с USB порта компьютера, поэтому нужно быть внимательным и не допускать кз. Этот же разъем применяется и для программирования управляющего микроконтроллера, для этого достаточно соединить выводы Reset на разъеме и на мк (см. красный пунктир на схеме). В авторской схеме это делается джампером, но я не стал загромождать плату и убрал его. Для единичной прошивки хватит и простой проволочной перемычки. Плата получилась двухсторонняя, размерами 45х18 мм.
Разъем для программирования и перемычка для снижения скорости работы программатора вынесены на торец устройства, это очень удобно
Прошивка управляющего микроконтроллера
Итак, после сборки устройства осталось самое важное — прошить управляющий микроконтроллер. Для этих целей хорошо подходят друзья у которых остались компьютеры с LPT портом:) Простейший программатор на пяти проводках для AVR
Микроконтроллер можно прошивать с разъема программирования, соединив выводы Reset микроконтроллера (29 нога) и разъема. Прошивка существует для моделей Atmega48, Atmega8 и Atmega88. Желательно использовать один из двух последних камней, так как поддержка версии под Atmega48 прекращена и последняя версия прошивки датируется 2009 годом. А версии под 8-й и 88-й камни постоянно обновляются, и автор вроде как планирует добавить в функционал внутрисхемный отладчик. Прошивку берем на странице немца. Для заливки управляющей программы в микроконтроллер я использовал программу PonyProg. При программировании необходимо завести кристалл на работу от внешнего источника тактирования на 12 МГц. Скрин программы с настройками fuse перемычек в PonyProg:
После прошивки должен загореться светодиод подключенный к 23 ноге микроконтроллера. Это будет верный признак того, что программатор прошит удачно и готов к работе.
Установка драйвера
Установка велась на машину с системой Windows 7 и никаких проблем не возникло. При первом подключении к компьютеру выйдет сообщение об обнаружении нового устройства, с предложением установки драйвера. Выбираем установку из указанного места:
Мигом появится окно с предупреждением о том, что устанавливаемый драйвер не имеет цифровой подписи у мелкомягких:
Забиваем на предупреждение и продолжаем установку, после небольшой паузы появится окно, сообщающее об успешном окончании операции установки драйвера
Все, теперь программатор готов к работе.
Khazama AVR Programmer
Для работы c программатором я выбрал прошивальщик Khazama AVR Programmer . Замечательная программка, с минималистичным интерфейсом.
Она работает со всеми ходовыми микроконтроллерами AVR, позволяет прошивать flash и eeprom, смотреть содержимое памяти, стирать чип, а также менять конфигурацию фьюз-битов. В общем, вполне стандартный набор. Настройка фьюзов осуществляется выбором источника тактирования из выпадающего списка, таким образом, вероятность залочить кристалл по ошибке резко снижается. Фьюзы можно менять и расстановкой галок в нижнем поле, при этом нельзя расставить галки на несуществующую конфигурацию, и это тоже большой плюс в плане безопасности.
Запись фьюзов в память мк, как можно догадаться, осуществляется при нажатии кнопки Write All. Кнопка Save сохраняет текущую конфигурацию, а Load возвращает сохраненную. Правда я так и не смог придумать практического применения этих кнопок. Кнопка Default предназначена для записи стандартной конфигурации фьюзов, такой, с какой микроконтроллеры идут с завода (обычно это 1МГц от внутреннего RC).
В общем, за все время пользования этим программатором, он показал себя с наилучшей стороны в плане стабильности и скорости работы. Он без проблем заработал как на древнем стационарном пк так и на новом ноутбуке.
Скачать файл печатной платы в SprintLayout можно по
Универсальный программатор для микроконтроллеров AVR и PIC
В радиолюбительских журналах и сети Интернет приводится множество схем программаторов. Они отличаются способом подключения к компьютеру: через LPT, COM, USB. Программаторы для порта LPT наиболее простые, для COM — чуть сложнее. Для программатора, подключаемого к USB-порту, нужно иметь либо микроконтроллер, либо специализированную микросхему, преобразователь USB — UART. Кроме этого, разные программаторы предназначены для прошивки разных микроконтроллеров: AVR или PIC, при том, что алгоритм программирования этих двух типов микроконтроллеров отличается незначительно. Поэтому само собой напрашивается желание собрать универсальный программатор для любых микроконтроллеров — AVR и PIC.
Оптимальной нам показалась приведённая ниже схема программатора. Он подключается к COM-порту компьютера и содержит известную микросхему MAX232, которая корректно работает с любым COM-портом (у разных компьютеров уровни порта могут существенно отличаться от стандарта), защищая его при случайных ошибках монтажа или подключения. Программатор имеет панельки для разных корпусов микроконтроллеров, а также возможность для внутрисхемного программирования ICSP, когда программатор подключается проводами к плате с микроконтроллером или непосредственно к ножкам микроконтроллера без установки его в панельку. Программатор видится программами как JDM, поэтому проблем с программным обеспечением не возникает. Можно рекомендовать программу IC-PROG 1.06В.
Переключение режимов AVR — PIC производится микропереключателем. Процесс работы устройства индицируется четырьмя светодиодами. Программатор прост и не требует наладки, используются очень распространённые детали.
Вместо микросхемы 74LS00 можно поставить К555ЛА3 или КР1533ЛА3, транзисторы, в принципе, заменимы на похожие. У данной схемы есть одна странность — номиналы токоограничительных резисторов для светодиодов. Так как светодиоды подключены к разным участкам схемы, напряжения на этих участках также разные, из-за чего светодиоды светятся с разной яркостью. Для того, чтобы это исправить, можно попробовать подобрать резисторы, в частности — уменьшить R4 и R7. Вместо КД523 можно использовать распространённые 1N4148.
Печатная плата.lay (для Sprint Layout) Разводка выполнена под SMD-резисторы, остальные компоненты — в обычном исполнении.
Внимание! На печатной плате проводки MOSI и MISO к панельке ATMEGA8 показаны неправильно, их нужно перекинуть. Также C7 и C9 имеют перемычки — их нужно убрать.
Работа с IC-PROG
Скачивать программу нужно с официального сайта:
http://www.ic-prog.com/index1.htm
В каталоге программы должны находиться следующие файлы:
icprog.exe — непосредственно программа
icprog.sys — драйвер доступа к портам под XP
Необходимо нажать правой клавишей мыши на файле icprog. exe и выбрать «свойства». На вкладке «совместимость» необходимо поставить галочку «запустить в режиме совместимости» и выбрать Windows 2000.
Далее необходимо зайти в меню «Настройки» и выбрать пункт «Программатор». Тип программатора необходимо установить JDM и указать COM-порт, к которому физически подключен программатор. Для очень быстрых компьютеров можно также установить задержку ввода-вывода. В этом же окне необходимо указать интерфейс «Прямой доступ к портам». Все галочки параметров сигналов должны быть сняты.
Затем необходимо зайти в меню «Настройки» и выбрать пункт «Опции», вкладку «Общие», где установить галочку «Включить NT/2000/XP драйвер». При этом появится окно подтверждения установки драйвера и программа перезапустится.
После этого программа готова к работе с программатором.
Когда-то давно пару лет назад, в очередной раз пересмотрел подшивку како-го радиотехнического журнала и задумался: а не пора ли осваивать микроконтроллеры? С этим проблем не было, литературы много, примеров достаточно. Изучил матчасть, написал свою первую ПРОГРАММУ. Потом начались поиски того, чем эту программу запихнуть в контроллер, тоесть программатора. Нужна была схема простая, чтоб собрать из того, что под рукой и надежная, без глюков так сказать. После долгих поисков выбор пал на схему программатора из журнала «РАДИО» №10 2007г. ст. 31. Описывать эту схему не стану, для желающих в архиве есть оригинал статьи. Скажу лишь, что схема отлично работала, шила все подряд без проблем, только почему-то иногда вилетал МАХ232 (заменил 3 шт., может бракованые попались). Тот программатор подарил коллеге и решил собрать себе такой-же, но у меня не оказалось еще одного управляемого стабилизатора K78R12C, опять начались поиски замены… В результате родилась вот такая схема, это результат «скрещивания» журнальной схемы и фирменного программатора SI-PROG:
MAX232 заменил на более быстродействующий ST232, управляемый стабилизатор заменил обычным 7812 и транзисторным ключем после него, транзисторы — ВС547, все остальные детали — по рекомендациям из оригинальной статьи. Также добавил отдельную подключаемую плату с панельками для разных типов контроллеров (так как в основном юзаю РІС-и, то плата пока только под них, а если нужно прошить AVR — то проводочками:-)). Монтируется все это на вот такой плате:
А это сменная плата для ПИК-ов и микросхем памяти:
Из панелек все неиспользуемые контакты удалить, чтобы не сверлить много лишних отверстий. Вот фото собраной платы:
Программатор собрал в поляцком корпусе, который обозначается Z50, собственно под него и проектировалась плата, ниже несколько фото:
На фото видно в корпусе трансформатор питания, я его потом выкинул, так как он оказался слабоват (сделал светодиодную подсветку передней панели из сверхярких светодиодов, и трансформатор не осилил:-). Сейчас используется внешний блок питания 15В, и током до 1А. Программатор работает с программами PonyProg, Si-prog, WinPic800. Используя для управления программу PonyProg следует выбрать в соответствующем ее окне программатор SI Prog I/O и задать инверсию сигналов в соответствии с таблицей 1, для программ Si-Prog и WinPic 800 следует выбрать программатор JDM Programmer, а инверсию сигналов задать в соответствии с таблицами 2 и 3.
Самодельный программатор Muscle-Memory — IEEE Spectrum
Сжатие данных без потерь немного похоже на фокус. Его двоюродный брат, сжатие с потерями, легче понять. Алгоритмы с потерями используются для преобразования музыки в популярный формат MP3 и преобразования цифрового изображения в стандартный файл JPEG. Они делают это, выборочно удаляя биты, используя то, что ученые знают о том, как мы видим и слышим, чтобы определить, какие биты мы меньше всего пропустим. Но никто не может утверждать, что полученный файл является идеальной копией оригинала.
Не так со сжатием данных без потерь. Биты действительно исчезают, делая файл данных значительно меньше и, следовательно, его легче хранить и передавать. Важным отличием является то, что биты снова появляются по команде. Это как если бы кусочки — это кролики в фокусе, исчезающие и снова появляющиеся из-под шляпы по мановению палочки.
Место рождения: Тверия, Палестина, управляемая британцами (ныне Израиль)
Рост: 172 сантиметра
Семья: Женат на Шошана, четверо детей, девять внуков
Образование: BSc, Dip-Eng, MSc, все в области электротехники, Технион, в 1954, 1955, 1957; Доктор философии, Массачусетский технологический институт, 1962 г.
Любимые книги: Детективные истории, особенно с участием Перри Мэйсона.
Любимый вид музыки: классическая, особенно Бах; джаз
Любимая еда: Фалафель, мороженое
Как он начинает день: Чашка эспрессо и кусочек темного шоколада
Любимый фильм: Касабланка (1942)
Членство в организациях: Израильская академия наук и гуманитарных наук, Национальная инженерная академия США, Национальная академия наук США, Американское философское общество, член IEEE.
Основные награды: Почетная медаль IEEE «за фундаментальный вклад в теорию информации и технологию сжатия данных, а также за выдающееся руководство исследованиями»; Премия BBVA Foundation Frontiers of Knowledge; Премия Клода Э. Шеннона Общества теории информации IEEE.
В следующем году два исследователя выпустили уточнение, LZ78. Этот алгоритм стал основой для программы сжатия Unix, использовавшейся в начале 80-х; WinZip и Gzip, родившиеся в начале 90-х; и форматы изображений GIF и TIFF. Без этих алгоритмов мы, скорее всего, рассылали бы большие файлы данных на дисках вместо того, чтобы отправлять их по Интернету одним щелчком мыши, покупали бы нашу музыку на компакт-дисках вместо потоковой передачи и просматривали бы ленты Facebook, в которых нет скачущих анимированных изображений.
Зив продолжал сотрудничать с другими исследователями по другим инновациям в области сжатия. Именно его полная работа, охватывающая более полувека, принесла ему Почетная медаль IEEE 2021 г. «за фундаментальный вклад в теорию информации и технологию сжатия данных, а также за выдающееся лидерство в исследованиях».
Зив родился в 1931 году в семье русских иммигрантов в Тверии, городе, который тогда находился в Палестине, управляемой британцами, а теперь является частью Израиля. Электричество и гаджеты — и мало что еще — очаровывали его в детстве. Например, играя на скрипке, он придумал, как превратить свой пюпитр в лампу. Он также пытался построить передатчик Маркони из металлических частей фортепиано. Когда он подключил устройство, весь дом погрузился во тьму. Он так и не заставил этот передатчик работать.
Когда в 1948 году началась арабо-израильская война, Зив учился в средней школе. Призванный в Армию обороны Израиля, он некоторое время служил на передовой, пока группа матерей не провела организованные акции протеста, требуя, чтобы самых молодых солдат отправили в другое место. Переназначение Зива привело его в ВВС Израиля, где он выучился на специалиста по радарам. Когда война закончилась, он поступил в Технион — Израильский технологический институт, чтобы изучать электротехнику.
После получения степени магистра в 1955, Зив вернулся в оборонный мир, на этот раз присоединившись к Израильской исследовательской лаборатории национальной обороны (сейчас Rafael Advanced Defense Systems) для разработки электронных компонентов для использования в ракетах и других военных системах. Проблема заключалась в том, вспоминает Зив, что ни один из инженеров в группе, включая его самого, не разбирался в электронике более чем на базовом уровне. Их электротехническое образование было больше сосредоточено на энергосистемах.
«У нас было около шести человек, и нам приходилось учить себя, — говорит он. — Мы выбирали книгу, а затем учились вместе, как религиозные евреи, изучающие еврейскую Библию. Этого было недостаточно».
Цель группы состояла в том, чтобы построить систему телеметрии, используя транзисторы вместо электронных ламп. Им нужны были не только знания, но и детали. Зив связался с Bell Telephone Laboratories и запросил бесплатный образец своего транзистора; компания отправила 100.
«Это покрыло наши потребности на несколько месяцев, — говорит он. — Я отдаю должное тому, что первым в Израиле сделал что-то серьезное с транзистором».
В 1959 году Зив был выбран в качестве одного из немногих исследователей из израильской оборонной лаборатории для обучения за границей. Эта программа, по его словам, изменила эволюцию науки в Израиле. Его организаторы не направляли отобранных молодых инженеров и ученых в определенные области. Вместо этого они позволили им продолжить любое обучение в аспирантуре в любой западной стране.
«В то время для запуска компьютерной программы приходилось использовать перфокарты, а я их ненавидел. Вот почему я не стал заниматься настоящими компьютерными науками.»
Зив планировал продолжить работу в области связи, но его больше не интересовало только оборудование. Недавно он прочитал Теория информации (Prentice-Hall, 1953), одна из первых книг Стэнфорда Голдмана на эту тему, и он решил сосредоточить свое внимание на теории информации. И где еще можно изучать теорию информации, как не в Массачусетском технологическом институте, где начинал Клод Шеннон, пионер в этой области?
Зив прибыл в Кембридж, штат Массачусетс, в 1960 году. Его докторская степень. исследование включало метод определения того, как кодировать и декодировать сообщения, отправляемые по зашумленному каналу, сводя к минимуму вероятность и ошибку и в то же время сохраняя простоту декодирования.
«Теория информации прекрасна, — говорит он. — Она говорит вам, что является лучшим, чего вы можете достичь, и [она] говорит вам, как приблизить результат. наилучший возможный результат».
Зив противопоставляет эту уверенность неопределенности алгоритма глубокого обучения. Может быть ясно, что алгоритм работает, но никто не знает, является ли он наилучшим возможным результатом.
Во время работы в Массачусетском технологическом институте Зив подрабатывал у американского оборонного подрядчика. Melpar, где он работал над программным обеспечением для исправления ошибок. Он нашел эту работу менее красивой. «В то время для запуска компьютерной программы приходилось использовать перфокарты, — вспоминает он. — И я их ненавидел. Вот почему я не занимался настоящими компьютерными науками».
Вернувшись в лабораторию оборонных исследований после двух лет пребывания в США, Зив возглавил отдел связи. Затем в 1970 году вместе с несколькими другими сотрудниками он поступил на факультет Техниона.
Там он познакомился с Авраамом Лемпелем. Они обсудили попытки улучшить сжатие данных без потерь.
В то время передовым методом сжатия данных без потерь было кодирование Хаффмана. Этот подход начинается с поиска последовательностей битов в файле данных и последующей их сортировки по частоте появления. Затем кодировщик строит словарь, в котором наиболее распространенные последовательности представлены наименьшим количеством битов. Та же идея лежит в основе азбуки Морзе: наиболее часто встречающаяся в английском языке буква e представлена одной точкой, в то время как более редкие буквы имеют более сложные комбинации точек и тире.
Кодирование Хаффмана, хотя и используется сегодня в формате сжатия MPEG-2 и формате JPEG без потерь, имеет свои недостатки. Требуется два прохода через файл данных: один для вычисления статистических характеристик файла, а второй для кодирования данных. А хранение словаря вместе с закодированными данными увеличивает размер сжатого файла.
Зив и Лемпель задались вопросом, смогут ли они разработать алгоритм сжатия данных без потерь, который будет работать с любыми данными, не требует предварительной обработки и обеспечит наилучшее сжатие этих данных, цель, определяемая чем-то, известным как энтропия Шеннона. Было неясно, возможна ли вообще их цель. Они решили выяснить.
Зив говорит, что он и Лемпель были «идеальной парой» для решения этого вопроса. «Я знал все о теории информации и статистике, а Абрахам хорошо разбирался в булевой алгебре и информатике».
Им пришла в голову идея, чтобы алгоритм искал уникальные последовательности битов одновременно со сжатием данных, используя указатели для ссылки на ранее просмотренные последовательности. Этот подход требует только одного прохода через файл, поэтому он быстрее, чем кодирование Хаффмана.
Зив объясняет это так: «Вы просматриваете входящие биты, чтобы найти самый длинный участок битов, для которого есть совпадение в прошлом. Предположим, что первый входящий бит равен 1. Теперь, поскольку у вас есть только один бит, вы никогда не видели его в прошлом, поэтому у вас нет другого выбора, кроме как передать его как есть».
«Но затем вы получаете еще один бит, — продолжает он. — Скажем, это тоже 1. Итак, вы вводите в свой словарь 1-1. Допустим, следующий бит — 0. Итак, в вашем словаре теперь есть 1-1, а также 1-0″.
Вот тут-то и появляется указатель. В следующий раз, когда поток битов будет включать 1-1 или 1-0, программа не будет передавать эти биты. Вместо этого он отправляет указатель на место, где эта последовательность впервые появилась, вместе с длиной совпадающей последовательности. Количество битов, необходимых для этого указателя, очень мало.
«Теория информации прекрасна. Он говорит вам, что является лучшим, чего вы можете достичь, и (оно) говорит вам, как приблизить результат».0005
«В основном это то, что они делали при публикации TV Guide , — говорит Зив. — Они запускали синопсис каждой программы один раз. Если программа появлялась более одного раза, они не публиковали синопсис повторно. Они просто говорили: вернитесь к странице x ».
Декодирование таким способом еще проще, потому что декодеру не нужно идентифицировать уникальные последовательности. Вместо этого он находит расположение последовательностей, следуя указателям, а затем заменяет каждый указатель копией соответствующей последовательности.
Алгоритм сделал все, что намеревались сделать Зив и Лемпель, — он доказал, что универсально оптимальное сжатие без потерь без предварительной обработки возможно.
«В то время, когда они опубликовали свою работу, тот факт, что алгоритм был четким и элегантным, а также его легко реализовать при низкой вычислительной сложности, почти не имел значения», — говорит Цахи Вайсман, профессор электротехники в Стэнфордском университете, специализирующийся на теории информации. «Это было больше о теоретическом результате».
В конце концов, однако, исследователи признали практическое значение алгоритма, говорит Вайсман. «Сам алгоритм стал действительно полезным, когда наши технологии начали работать с файлами большего размера, чем 100 000 или даже миллион символов».
«Их история — это история о силе фундаментальных теоретических исследований, — добавляет Вайсман. — Вы можете установить теоретические результаты о том, что должно быть достижимо, и десятилетия спустя человечество извлечет пользу из реализации алгоритмов, основанных на этих результатах».
Зив и Лемпель продолжали работать над технологией, пытаясь приблизиться к энтропии для небольших файлов данных. Эта работа привела к LZ78. Зив говорит, что LZ78 кажется похожим на LZ77, но на самом деле сильно отличается, потому что предвосхищает следующий бит. «Допустим, первый бит равен 1, поэтому вы вводите в словарь два кода, 1-1 и 1-0, — объясняет он. Эти две последовательности можно представить как первые ветви дерева».
«Когда приходит второй бит, — говорит Зив, — если он равен 1, вы отправляете указатель на первый код, 1-1, а если он равен 0, вы указываете на другой код, 1-0. расширить словарь, добавив еще две возможности к выбранной ветви дерева. Если вы делаете это неоднократно, последовательности, которые появляются чаще, будут увеличивать длину ветвей».
«Оказывается, — говорит он, — это было не только оптимальным [подходом], но и настолько простым, что сразу стало полезным».
Джейкоб Зив (слева) и Абрахам Лемпель опубликовали алгоритмы сжатия данных без потерь в 1977 и 1978 годах, оба в IEEE Transactions on Information Theory. Эти методы стали известны как LZ77 и LZ78 и используются до сих пор. Фото: Джейкоб Зив/Technion
Пока Зив и Лемпель работали над LZ78, они оба находились в творческом отпуске в Технионе и работали в американских компаниях. Они знали, что их разработка будет коммерчески полезной, и хотели ее запатентовать.
«Я работал в Bell Labs, — вспоминает Зив, — и поэтому подумал, что патент должен принадлежать им. Но они сказали, что невозможно получить патент, если это не аппаратное обеспечение, и они не были заинтересованы в попытках». (Верховный суд США не открывал двери для прямой патентной защиты программного обеспечения до 1980-х годов.)
Однако работодатель Лемпеля, Sperry Rand Corp., был готов попробовать. Компания обошла ограничения на патенты на программное обеспечение, создав аппаратное обеспечение, реализующее алгоритм, и запатентовав это устройство. Сперри Рэнд последовал за этим первым патентом с версией, адаптированной исследователем Терри Уэлчем, которая называется алгоритмом LZW. Именно вариант LZW получил наибольшее распространение.
Зив сожалеет, что не смог напрямую запатентовать LZ78, но, по его словам, «нам нравился тот факт, что [LZW] был очень популярен. Это сделало нас знаменитыми, и нам также понравились исследования, к которым они нас привели».
Одна из последующих концепций стала называться сложностью Лемпеля-Зива, мерой количества уникальных подстрок, содержащихся в последовательности битов. Чем меньше уникальных подстрок, тем сильнее можно сжать последовательность.
Эта мера позже стала использоваться для проверки безопасности шифровальных кодов; если код действительно случайный, его нельзя сжать. Сложность Лемпеля-Зива также использовалась для анализа электроэнцефалограмм — записей электрической активности мозга — для определения глубины наркоза, для диагностики депрессии и для других целей. Исследователи даже применили его для анализа поп-лирики, чтобы определить тенденции повторяемости.
За свою карьеру Зив опубликовал около 100 рецензируемых статей. В то время как статьи 1977 и 1978 годов являются самыми известными, у теоретиков информации, пришедших после Зива, есть свои фавориты.
Для Шломо Шамая, выдающегося профессора Техниона, именно статья 1976 года представила Алгоритм Винера-Зива, способ определения пределов использования дополнительной информации, доступной декодеру, но не кодеру. Эта проблема возникает, например, в видеоприложениях, которые используют тот факт, что декодер уже расшифровал предыдущий кадр и, таким образом, его можно использовать в качестве дополнительной информации для кодирования следующего.
Для Винсента Пура, профессора электротехники Принстонского университета, это статья 1969 года, описывающая граница Зива-Закаи, способ узнать, получает ли процессор сигналов наиболее точную возможную информацию из данного сигнала.
Зив также вдохновил ряд ведущих экспертов по сжатию данных на курсах, которые он вел в Технионе до 1985 года. Вайсман, бывший студент, говорит, что Зив «глубоко увлечен математической красотой сжатия как способа количественного измерения информации. Пройдя курс у него в 1999 сыграл большую роль в том, чтобы поставить меня на путь моих собственных исследований».
Он был не единственным, кто был так вдохновлен. «Я прошел курс по теории информации у Зива в 1979 году, в начале учебы в магистратуре, — говорит Шамай. — Прошло более 40 лет, а я до сих пор помню этот курс. Мне захотелось взглянуть на эти проблемы, провести исследование и получить докторскую степень».
В последние годы глаукома лишила Зива большей части зрения. Он говорит, что статья, опубликованная в IEEE Transactions on Information Theory , январь этого года — его последний. Ему 89.
«Я начал писать статью два с половиной года назад, когда у меня еще было достаточно зрения, чтобы пользоваться компьютером, — говорит он. — В конце концов, Юваль Кассуто, младший преподаватель Техниона, завершил проект». В работе рассматриваются ситуации, в которых требуется быстрая передача больших информационных файлов в удаленные базы данных.
Как объясняет Зив, такая необходимость может возникнуть, когда врач хочет сравнить образец ДНК пациента с предыдущими образцами того же пациента, чтобы определить, была ли мутация, или с библиотекой ДНК, чтобы определить, была ли у пациента генетическое заболевание. Или исследователь, изучающий новый вирус, может захотеть сравнить последовательность его ДНК с базой данных ДНК известных вирусов.
«Проблема в том, что количество информации в образце ДНК огромно, — говорит Зив, — слишком много, чтобы сегодня по сети можно было отправить его за считанные часы или даже, иногда, за дни. Если вы, скажем, пытаетесь для выявления вирусов, которые очень быстро меняются во времени, это может быть слишком долго».
Подход, который он и Кассуто описывают, включает использование известных последовательностей, которые обычно появляются в базе данных, чтобы помочь сжать новые данные, без предварительной проверки на конкретное соответствие между новыми данными и известными последовательностями.
«Я очень надеюсь, что это исследование может быть использовано в будущем», — говорит Зив. Судя по его послужному списку, Cassuto-Ziv — или, возможно, CZ21 — добавит к его наследию.
Эта статья появилась в печатном выпуске за май 2021 года под названием «Создатель сжатия».
Связанные статьи в Интернете
- Введение в генеративное искусство: что это такое и как его создать ›
- Создание искусства с кодом ›
Программирование рук
Разработчики программного обеспечения, такие как пианисты, полагаются на свои руки, чтобы практиковать свое мастерство . Я одержимо клавиатурой и мышью с раннего подросткового возраста. К счастью, у меня никогда не было проблем с болью в руке или запястье, а также у меня не было повторяющихся стрессовых травм, включая синдром запястного канала. Но другим не так повезло.
Итак, что вы можете сделать, чтобы ваши руки и запястья оставались сильными под давлением Экстремальные вычисления? *
Сделай зарядку
Настоящее упражнение . Удивительно, но этот материал полезен для вас, или так мне сказали:
Хотите быть немного умнее? У вас лучше память? Оставаться умственно острым? Улучшить высшую функцию мозга? Бегать. Те, кто занимается спортом, имеют умственное преимущество перед теми, кто этого не делает.«…тренирующиеся продемонстрировали значительные улучшения в высших психических процессах памяти и в «исполнительных функциях», которые включают планирование, организацию и способность мысленно жонглировать различными интеллектуальными задачами одновременно. Что мы нашли настолько захватывающим, так это то, что упражнения имели свои особенности». благотворное влияние на определенные области когнитивной функции, которые уходят корнями в лобные и префронтальные области мозга».
Воздействие физических упражнений на мозговую стимуляцию (и предотвращение его угасания) было изучено почти до смерти. Запутанная часть заключается в том, почему так много людей не занимаются спортом.
Однажды я посещал занятия в колледже, которые вел клинический психиатр. Он так твердо верил в связь между физическим здоровьем и психическим здоровьем, что заставлял всех своих пациентов выполнять режим физических упражнений. И его уроки тоже. Часть нашей оценки определялась еженедельным журналом упражнений. В журнале мы записывали, какое упражнение мы выбрали, и как мы себя чувствовали до и после. И будь я проклят, если я не чувствовал себя лучше после тренировки – каждый раз!
Конечно, легко говорить о многочисленных преимуществах физических упражнений. Настоящая трудность состоит в том, чтобы преодолеть инерцию и делать это регулярно. У нас, гиков, есть определенный подход к упражнениям, который… уникален.
Меняйте рабочее положение
Это называется повторяющихся стрессовых травм не просто так. Старайтесь регулярно что-то менять:
- Получите более эргономичное кресло.
- Отрегулируйте положение вашего стола.
- Смени позу. Коррекция осанки может помочь.
- Попробуйте другую клавиатуру. Их миллионы, и мне больше всего нравятся эргономичные модели. Или вы можете поэкспериментировать с альтернативными раскладками клавиатуры, например, с Дворжаком.
- Попробуйте другое указывающее устройство. Если вы используете мышь, переключитесь на трекбол или трекпад. Даже у мышей существуют сотни различных форм-факторов; некоторые люди здесь используют мышь в форме джойстика. Вы даже можете пойти с отслеживанием глаз.
Если ничего другого, просто делайте перерыв, чтобы потянуться каждый час или около того. Некоторые из растяжек для предотвращения запястного канала довольно быстро и легко интегрируются в ваш день.
Для разнообразия было бы неплохо использовать дома другую мышь и клавиатуру, а не на работе. Экспериментировать с разными мышами и клавиатурами не только весело, но и полезно для здоровья.
Тренируйте руки
Теперь мы переходим к забавным вещам.
Thinking Putty Безумного Аарона — моя любимая настольная безделушка. У них есть несколько новых цветов супер-иллюзий, которые потрясающие .
Putty — увлекательная, бесконечно податливая игрушка; это также законная форма упражнений для рук. Кроме того, с ним можно выполнять множество крутых экспериментов и трюков.
Powerball — еще один хит в офисе. Это основная гироскопическая тренировка рук.
Обязательно приобретите модель с показаниями числа оборотов, потому что вам будет очень весело бросить вызов коллегам, чтобы увидеть, как быстро они могут заставить ее вращаться. Попробовав несколько раз, они не сомневаются, что эта маленькая гироскопическая игрушка — серьезная тренировка для рук, запястий и предплечий! Единственным недостатком Powerball является то, что он немного шумный.
Gripmaster — еще один популярный тренажер для рук. Первоначально он был популяризирован альпинистами, которые использовали этот инструмент для укрепления своих зацепов. Но это также полезно для тех, кто работает своими руками. Он поставляется с несколькими вариантами жесткости пружины.
Игрушки, особенно с терапевтической ценностью, доставляют удовольствие. Но если вы испытываете боль в руках или запястьях во время программирования, вы должны отнестись к этому очень серьезно — это одна из немногих вещей, которые могут вывести вас из строя как программиста.
* Я не врач. Я просто случайный парень в интернете. Так что примите этот совет с зерном, более того, склад полон соли.
Далее
Сделал ли IE6 Web 2.
0 возможным?Назад
Не задавайте нам вопросов. Мы просто проигнорируем вас.
Руки программиста — Блог Скотта Хансельмана
просмотреть по категории или дате
21 сентября 2004 г. Опубликовано в Говоря | ИнструментыЯ уже говорил кое-что о Спине Программиста. Ну, когда идет дождь, он льет. Я уверен, что у всех нас есть боль, но, поскольку я являюсь центром своей собственной вселенной, моя боль имеет приоритет. За годы программирования у меня были проблемы с руками и запястьями. Однако в последнее время это стало довольно нелепо, поскольку я могу печатать только несколько минут за раз, прежде чем мои пальцы и запястья начинают болеть.
У меня есть натуральная клавиатура и мышь с трекболом, но в основном Я ограничен вводом-выводом, когда дело доходит до моих рук .
Если вы когда-нибудь видели меня в присутствии, то знаете, что я быстро печатаю. Это не гипербола, это просто факт, мои пальцы двигаются очень быстро, и теперь я расплачиваюсь за это. Я тоже не особенно спортивен, и 10 лет без тренировок, без сомнения, создали слабость в моих руках и предплечьях, которую больше невозможно скрыть. Возможно, у меня просто обострение, но, тем не менее, пора с этим бороться.
Я просмотрел все виды причудливых клавиатур, которые утверждают, что имеют Единый Истинный Способ набора текста, но я решил, что набор текста не там, где он есть. Мне достаточно одного слога, чтобы сказать что-то вроде «кода», но это четыре нажатия клавиш между двумя руками, и это кажется мне смешным. Так что в последнее время я увлекся распознаванием голоса, сначала со встроенным программным обеспечением для распознавания голоса от Microsoft, а теперь с NaturallySpeaking от Dragon. Я прошел несколько онлайн-тестов по набору текста с помощью программного обеспечения для распознавания голоса и набрал до 100 (в одном случае 160) слов в минуту, что примерно равно моей скорости набора текста на пике. Качество настолько лучше, чем пять лет назад, когда я пробовал предыдущие версии программного обеспечения для распознавания голоса, что, по крайней мере, я чувствую, что в будущем распознавание голоса принесет положительные результаты.
На самом деле весь этот пост был полностью продиктован Dragon NaturallySpeaking версии 7, и я должен сказать, что не полностью разочарован. Для диктанта это фантастика. Точность легко составляет 95+%, и единственные странные вещи случаются, когда есть такие слова, как «Кориллиан», которые слишком странны, чтобы их можно было понять. Однако он смягчает некоторые из этих проблем, сканируя все ваши электронные письма и все ваши документы в поисках потенциальных словарных слов.
Не знаю, смог бы я им эффективно пользоваться, если бы у меня вообще не было рук, так как большинство его команд состоят из одного-двух словесных аккордов и, кажется, у него проблемы с очень маленькими словами. Например ветер насильно бьет по микрофону, он может сказать «вверх» или «хлоп». Он знает о большом количестве приложений, за исключением того, что он не знает о Firefox, что делает просмотр немного проблематичным. Однажды мне придется поискать в Google дополнительные наборы команд для инструментов и программ, которые я использую.
Похоже, многие люди перенесли операцию по освобождению запястного канала и продолжают испытывать проблемы. Это кажется ужасно радикальным шагом. Кажется, единственный ответ — «отключить» клавиатуру.
Кому-нибудь еще приходилось опускаться до этого уровня и использовать программное обеспечение для распознавания голоса вместо клавиатуры? Кто-нибудь нашел вертикальную клавиатуру или какую-то странную альтернативную клавиатуру, которая изменила их жизнь и вдруг открыла новые возможности для их поврежденных рук? Я единственный программист с больной спиной и плохой парой рук, который уже 12 лет в своей карьере и задается вопросом, что будет в следующие 12 лет? Или я просто чертовски быстро печатаю?
(P. S. Стоит отметить, что я использую USB-микрофон для этой диктовки, и я не могу представить, чтобы кто-то получил такую точность с аналоговым микрофоном.)
(P.P.S. Оглядываясь назад на это сообщение в блоге, я содрогаюсь от огромного количества символов и нажатий клавиш, которые потребовались бы, если бы я сделал это вручную. Возможно, распознавание голоса откроет для меня новую плодотворную эру в ведении блога. Или я просто буду много болтать в мой блог. 🙂 )
О Скотте
Скотт Хансельман — бывший профессор, бывший главный архитектор в области финансов, ныне спикер, консультант, отец, диабетик и сотрудник Microsoft. Он неудавшийся стендап-комик, угловой и автор книг.
О нас Информационный бюллетень
Хостинг От:
Отказ от ответственности: мнения, выраженные здесь, являются моими личными мнениями и никоим образом не отражают точку зрения моего работодателя.
Подкаст
- Гензельминуты
- Жизнь этого разработчика
- Рэтчет и Компьютерщик
Разговор
- Разговор/Видео
- Советы по проведению презентаций
Книги
- ASP.NET 4.5
- ASP.NET MVC 4
- лайфхаки для отношений
© Copyright 2022, Скотт Хансельман. Дизайн @jzy, Работает на .NET 6.0.3 и развернут из коммита 5c6a80 через сборку 20220310.1
Как начать программирование для робототехники
FutureLearn использует файлы cookie, чтобы улучшить ваше взаимодействие с веб-сайтом. Все файлы cookie, кроме строго необходимых, в настоящее время отключены для этого браузера. Включите JavaScript, чтобы применить настройки файлов cookie для всех необязательных файлов cookie. Вы можете ознакомиться с политикой FutureLearn в отношении файлов cookie здесь.
В этой статье мы расскажем о программировании, важных языках и о том, как начать работу с такими инструментами, как Arduino и Raspberry Pi.
© The University of Sheffield
Программирование — ключевой навык, который необходимо развивать для работы в области робототехники. В этой статье мы расскажем о программировании, важных языках и о том, как начать работу с такими инструментами, как Arduino и Raspberry Pi.
Что такое компьютерная программа?
Роботы обрабатывают данные датчиков, осуществляют познание и планируют действия с помощью компьютерных программ, которые выполняются на процессоре. Компьютерные программы, по сути, представляют собой набор инструкций, которые обрабатывают входные данные для получения выходных данных.
Пример : Программа распознавания лиц в роботе будет:
1. принимать изображение человека в качестве входных данных,
2. сканировать изображение на наличие определенного набора функций,
3. сравнивать эти функции с библиотекой известные лица,
4. найти совпадение, затем
5. вернуть имя человека в качестве вывода.
Программа будет выполнять один и тот же набор инструкций при каждом выполнении.
Большинство языков программирования написаны обычным текстом, который легко понять людям. Затем программы компилируются в машинный код для выполнения процессором (или байтовый код для выполнения виртуальной машиной).
Языки программирования
Доступно множество языков программирования, напр. C/C++, Java, Fortran, Python и т. д. Наиболее популярным языком в робототехнике, вероятно, является C/C++ (C++ — объектно-ориентированный преемник языка C). Python также очень популярен из-за его использования в машинном обучении, а также потому, что его можно использовать для разработки пакетов ROS — см. ниже.
Существуют дополнительные важные программные инструменты, используемые в робототехнике, в частности:
- Операционная система для роботов (ROS) — это набор программных библиотек и инструментов, помогающих создавать приложения для роботов. Вы также можете написать свои собственные программы для ROS, например. на C/C++ или Python.
- Matlab используется для анализа данных и взаимодействия с ROS (также Octave — это бесплатный эквивалент Matlab с открытым исходным кодом, доступный здесь.)
Программирование на C и микроконтроллер Arduino
Язык C/C++ — один из наиболее широко используемых языков программирования в робототехнике. В микроконтроллере Arduino используется язык программирования, основанный на C, и это отличный способ изучить основы этого важного языка, одновременно занимаясь робототехникой.
Микроконтроллер Arduino MEGA 2560. На самом деле микроконтроллер — это просто большая микросхема в центре Arduino — это компонент, который вы программируете: код высокого уровня, который вы пишете, компилируется в машинный код, встроенный в эту микросхему. Контакты вверху и внизу предназначены для подключения устройств ввода, таких как датчики, и устройств вывода, таких как двигатели.
Базовая плата Arduino (Uno) стоит около 19 евро, а среду разработки программы можно бесплатно загрузить с веб-сайта Arduino, где вы также найдете множество примеров проектов и руководств.
Python и Raspberry Pi
Язык Python полезен для изучения, так как он широко используется в компьютерных науках и машинном обучении. Python — это язык, который используется с Raspberry Pi. Это делает его очень актуальным для робототехники, потому что вы можете использовать Raspberry Pi для управления роботом.
Фонд Raspberry Pi разработал ряд бесплатных онлайн-курсов для обучения использованию Raspberry Pi в робототехнике. Посетите страницу их партнера для получения дополнительной информации и ссылок на курсы.
Raspberry Pi 3, модель B. Raspberry Pi похож на обычный ПК, но намного меньше. Этот Raspberry Pi 3 имеет четырехъядерный процессор ARM с тактовой частотой 1,2 ГГц, Ethernet, беспроводную связь, Bluetooth, HDMI и 4 порта USB.
В чем разница между Arduino и Raspberry Pi?
Arduino и Raspberry Pi полезны для проектов робототехники, но имеют некоторые важные отличия.
ArduinoArduino — это микроконтроллер, похожий на простой компьютер, но запускающий и зацикливающий одну программу, которую вы написали на ПК. Эта программа компилируется и загружается в микроконтроллер как машинный код. Arduino хорошо подходит для низкоуровневого управления роботами и имеет такие функции, как аналого-цифровое преобразование для подключения аналоговых датчиков.
Raspberry PiRaspberry Pi (RPi) похож на обычный ПК и поэтому более универсален, чем Arduino, но не имеет таких функций, как аналого-цифровое преобразование. RPi работает под управлением операционной системы Linux (обычно Raspian). Вы можете подключить к RPi клавиатуру, мышь и монитор, а также периферийные устройства, такие как камера, что очень полезно для робототехники. (Поскольку RPi работает под управлением Linux, вы также можете установить ROS, хотя это может быть немного сложно настроить. )
Если вы хотите узнать больше о программировании для робототехники, ознакомьтесь с полным онлайн-курсом от The Университет Шеффилда, внизу.
© Университет Шеффилда
Эта статья из бесплатного онлайн-ресурса
Строим будущее с помощью роботов
Создано
Присоединяйся сейчас
Наша цель — изменить доступ к образованию.
Мы предлагаем широкий выбор курсов от ведущих университетов и учреждений культуры со всего мира. Они предоставляются поэтапно и доступны на мобильных устройствах, планшетах и компьютерах, поэтому вы можете приспособить обучение к своей жизни.
Мы считаем, что обучение должно быть приятным, социальным опытом, поэтому наши курсы дают возможность обсудить то, что вы изучаете, с другими, помогая вам делать новые открытия и формировать новые идеи.
Вы можете разблокировать новые возможности с неограниченным доступом к сотням коротких онлайн-курсов в течение года, подписавшись на наш безлимитный пакет. Развивайте свои знания в ведущих университетах и организациях.
Узнайте больше о том, как FutureLearn меняет доступ к образованию
Автономный программаторRaspberry Pi — Learn.sparkfun.com
Авторы: QCPete
Избранное Любимый 11
Введение
Используя возможности Raspberry Pi, Python, avrdude, специальной HAT с кабельным адаптером, мы разработали собственный подход к программированию AVR, который оказался чертовски надежным. В дополнение к созданию автономного решения, это был отличный эксперимент, чтобы узнать больше о запуске Raspberry Pi «без головы», автоматическом запуске модулей Python при загрузке, управлении файлами, анализе файлов, общем управлении GPIO с использованием встроенного SPI. оборудование на Raspberry Pi и даже некоторое преобразование логического уровня.
Если вы хотите создать свой собственный «безголовый» программатор AVR, все файлы дизайна оборудования и код размещены на GitHub здесь:
SparkFun Pi AVR Programmer Github Repository
История коммитов многое говорит об этом story, но этот учебник заполняет некоторые пробелы и включает более общую информацию, полезную за пределами нашего конкретного приложения.
Фон
За последние 10 с лишним лет мы использовали программатор AVR ISP MKII в SparkFun Production. Он сослужил нам хорошую службу, но из-за пары болевых точек и, наконец, уведомления об окончании срока службы пришло время обновиться.
На первый взгляд можно подумать: «Хорошо, а какой последний программатор от ATMEL? Нельзя ли просто поменять их на старые?» С нашими нынешними методами программирования это оказалось немного сложнее. Кроме того, мы много программируем AVR в SparkFun для более чем 50 продуктов, так что на самом деле проблема была довольно серьезной и требовала надежного и долгосрочного решения.
Мы часто используем пакетные файлы в производстве. Если есть исполняемый графический интерфейс, который нам нужно запустить для программирования микросхемы на продукте, мы немедленно пытаемся найти версию этой программы для командной строки и максимально автоматизировать.
С программистами MKII у нас было два доступных варианта: использовать графический интерфейс (AVR Studio) или делать все это в командной строке. Как только вы узнаете свои команды, вы можете поместить их в пакетный файл, и технический специалист может просто дважды щелкнуть пакетный файл, чтобы начать программирование — вау!! Вот как мы сделали это навсегда.
(Oldschool Memory Lane Side Note) Ну, на самом деле, как только я пришел на борт в 2007 году, мы вручную вырезали и вставляли команды из текстовых файлов в наше окно командной строки и читали весь вывод, чтобы найти «Flash проверено». Дэн, какая боль. Я помню, как подумал: «Должен быть лучший способ!». Затем я сошел с ума по пакетным файлам, а три года спустя сделал довольно шаткое групповое программирование своими руками. Посмотрите на этого зверя:
Вы также можете ознакомиться с развитием методов тестирования здесь:
Постоянные инновации в области контроля качества
11 декабря 2013 г.
В этой статье мы расскажем о наших последних достижениях в области контроля качества. Наряду с тем, что мы сделали наши тесты более точными, мы также сделали их более эффективными и надежными.
Избранное Любимый 7
Итак, все это говорит о том, что проблема оказалась серьезнее, чем мы думали. В то время каждая из наших процедур программирования для чипов AVR использовала специальный пакетный файл, который назывался 9.0043 STK500.exe , который был похоронен глубоко в файловой структуре студии AVR.
Изучив несколько готовых продуктов, мы быстро пали жертвой проклятия классического инженера и подумали: «Эй, я мог бы разработать это лучше сам!» Как всегда ~~обычно~~ такое приключение превратилось в долгое путешествие.
Автономное решение для программирования микросхем AVR всегда было моей мечтой. Если бы существовало готовое решение (похожее на PICkit3 для PIC), то мы, вероятно, мигрировали бы раньше. Но не было, поэтому мы продолжали использовать MKII. С повседневными делами и появлением множества новых продуктов трудно найти время для таких проектов. И именно это решение (известное здесь как Pi_Grammer) было моим проектом в течение почти двух лет.
Хотя не совсем корректно называть его «нашим собственным», потому что он действительно основан на многих уже доступных инструментах с открытым исходным кодом. Это наш рассказ о том, как создать автономный программатор AVR. Итак, в настоящей моде с открытым исходным кодом, вот руководство, чтобы поделиться тем, что мы узнали на этом пути!
Болевые точки с AVR ISP MKII
В целом, программаторы MKII справились неплохо, учитывая, как долго и как часто мы их использовали. Мы бережно относимся к нашему оборудованию, но после программирования десятков тысяч ИС приходится ожидать некоторой шаткости как в железе, так и в программном обеспечении.
В SparkFun я и моя команда известны как отдел контроля качества. Одной из наших обязанностей является проектирование, изготовление, документирование и техническое обслуживание испытательного оборудования для производства. Это включает в себя не только тестовые приспособления, которые мы разрабатываем, но также включает в себя проверку того, что их настольные компьютеры с Windows работают и имеют обновленные (или взломанные и работающие) драйверы для всех наших потребностей в тестировании.
Если производство видит какие-либо проблемы, они звонят нам, и мы пытаемся решить проблему в этот момент. Обычно это довольно чувствительно ко времени, потому что мы запускаем такой скудный корабль в производстве. Какая бы сборка ни задерживалась, она, вероятно, исчезнет со склада в ближайшие несколько часов, поэтому очень важно, чтобы мы немедленно встали и приступили к программированию!
Раньше (в 2008 году) это происходило ежечасно. Когда я был единственным специалистом по контролю качества в производстве, я помню, что ответ на производственный вопрос съедал большую часть моего дня. День с одним выпуском считался хорошим! Теперь мы, вероятно, видим только пару выпусков в месяц.
Зная это, становится ясно, что любая проблема, возникающая в процессе производства, причиняет много боли QC.
Основные болевые точки:
Водители — Обновления Windows конфликтуют с драйверами устройств. Слишком часто мы видели следующее сообщение в наших пакетных файлах программирования:
Причиной этого обычно был тот факт, что Windows выполняла автоматическое обновление в выходные дни, а затем в понедельник утром приходил технический специалист, чтобы увидеть этот сбой в своем пакетном файле. ФУ!
В качестве примечания: последним обходным решением, которое позволило нам использовать MKII в Windows 7, был отличный небольшой инструмент под названием Zadig. Я рекомендую проверить это, если вам нужно заставить ваш компьютер использовать именно тот чертов драйвер, который вам нужен:
Zadig — простая установка USB-драйвера
Версии AVR Studio — Новые версии AVR Studio конфликтуют со старыми версиями. Мы начали использовать Atmel ICE для некоторого программирования чипов SAMD21, и для этого нужна последняя версия AVR Studio 6 или 7 (которая поставляется с новой программой под названием « ATPROGRAM »). Все наши старые пакетные файлы называются « STK500.exe ». так что это была проблема. На компьютерах каждого технического специалиста начались танцы относительно того, какую версию они установили, в каком порядке они были установлены и какая «фактическая» деинсталляция произошла правильно. Не весело.
Износ ленточных кабелей — ленточные кабели не подключаются после слишком большого количества циклов. Ленточные кабели отлично подходят для 20, 30, 50? циклов, но по прошествии стольких лет эти соединения без пайки, как лезвия бритвы, ослабевают и больше не соединяются.
Внутренние серверы не работают . Последнее случалось довольно редко, но иногда наши внутренние серверы отключались, и пакетные файлы не запускались, потому что не было доступа к шестнадцатеричному файлу, размещенному в сети.
Решение: Автономные программисты AVR
Как мы устраняем все эти проблемы навсегда? Сделайте новое решение собственными силами и полностью автономным! Больше никаких автоматических обновлений!
Первая попытка — программирование между микросхемами
Мой первый подход заключался в использовании другой микросхемы AVR для программирования. Это было сделано раньше несколькими другими и довольно хорошо задокументировано.
Это то, с чем я столкнулся первым:
Автономный программатор Adafruit AVR Chip Programmer Tutorial
Я обнаружил, что некоторые из наших объединенных шестнадцатеричных файлов не помещаются во флэш-память. Кроме того, процесс получения шестнадцатеричных данных в массив и в скомпилированный код, который живет в программаторе, был немного утомительным. В любом случае, я прыгнул в эту кроличью нору и подумал, что это будет решением для RedBoard Programming. Это был зверь из двенадцати за раз, который я придумал:
Мое приспособление для программирования Redboard по 12 штук готово на 99%. Я не могу дождаться, чтобы отправить его в дикую природу завтра утром! pic.twitter.com/2BkhlOFp3p
— QCPete (@qcpete) 14 октября 2015 г.
Ух ты, с ума сойти, если подумать, что это был октябрь 2015 года. Ого, время пролетело незаметно!
После детального отслеживания выхода продукции мы в конце концов решили, что нам все еще нужно тестировать платы по отдельности, и поэтому мы обнаружили, что этот программатор не дал нам никакого сокращения трудозатрат. Немного разочаровал, но это также доказало, что этот метод программирования был слишком ненадежным. Проверив через эту штуку несколько тысяч плат, мы обнаружили, что платы часто не справляются с программированием с первой попытки. Неприемлемо для производственного использования. Немного облом, но эй, вы не можете бояться потерпеть неудачу, и мы многому научились! Кроме того, это был отличный повод попробовать нашу линейку продуктов Actobotics.
Вход в Raspberry Pi — программирование через GPIO
Изучив вариант программирования между чипами и обнаружив, что он не работает для нашего приложения, мы искали другое решение. На этот раз мы задались вопросом, сможет ли Raspberry Pi справиться с этой задачей. Быстрый поиск в Интернете привел нас к отличному руководству от Adafruit, в котором используется GPIO для «битового» программирования на чипах AVR.
Учебное пособие Adafruit: Программирование AVR или Arduino с помощью Raspberry Pi GPIO В восторге! Сделали специальную шляпу, чтобы мы могли запускать ее без головы, и начали перенос некоторых процедур программирования комплекта. Немного медленнее, чем MKII, но он был полностью автономным и очень надежным — я в деле!
Мой последний проект @Raspberry_Pi: автономное программирование AVR @sparkfun. 3 живут в производстве. Осталось всего 100 🙂 pic.twitter.com/6ci5N5gcCI
— QCPete (@qcpete) 6 сентября 2016 г.
Затем я обнаружил, что на секунду или две дольше на самом деле много труда, и производство действительно не копало это.
Глядя на прицел, я увидел, что тактовый сигнал летит на 84К. Это приводило к некоторому времени программирования около 4 или 5 секунд, а затем еще 4-5 секунд для проверки. К сожалению, это не сработало в продакшене, и нам нужно было найти более быстрое решение.
Жажда скорости — аппаратный SPI
В поисках более быстрых решений мы нашли еще одно руководство по использованию аппаратного SPI на Raspberry Pi.
Кевин Кузнер: Raspberry Pi как программист AVR
Круто. Это должно сработать. Ну, также обнаружил, что вам нужно также открыть аппаратное обеспечение SPI на Pi. Посмотрите этот урок ниже, чтобы узнать, как это сделать. Спасибо Байрон!
Учебник SparkFun по Raspberry Pi SPI и I2C
Благодаря этому новому методу программирования через аппаратный SPI мы смогли добиться гораздо более высоких скоростей программирования. На самом деле нам нужно было только до 2 МГц для большинства наших чипов (рекомендуется менее 1/4 тактовой частоты).
Увидев некоторое странное поведение тактовых частот, мы обнаружили, что эта статья хорошо объясняет это и показывает все доступные скорости:
Документация Raspberry Pi: SPI
RC.LOCAL + Python + HAT = Headless Operation!
RC.LOCAL
Быстрая модификация rc.local
для вызова Python при загрузке означает, что мы можем запускать эту штуку без головы. Ваху!
язык: bash #!/бин/ш -е # rc.local # Этот сценарий выполняется в конце каждого многопользовательского уровня выполнения. # Убедитесь, что скрипт "выйдет из 0" в случае успеха или любой другой # значение при ошибке. # Чтобы включить или отключить этот скрипт, просто измените выполнение # бит. # По умолчанию этот скрипт ничего не делает. # Распечатать IP-адрес _IP=$(имя хоста -I) || истинный если [ "$_IP" ]; тогда printf "Мой IP-адрес: %s\n" "$_IP" фи питон /home/pi/test. py & выход 0
Python Script
Обратите внимание на самую важную строку здесь:
язык: bash питон /home/pi/test.py &
И не забывайте, что « &
» и конец команды — это фактически позволит вашему pi продолжить загрузку и запустить ОС!
Test.py в основном ждет нажатия «кнопки» для включения программирования ( pi_program.sh ). В этом случае на самом деле это микросхема capsense, которая отправляет HIGH/LOW на GPIO на пи. Чтобы прочитать все test.py , вы можете проверить это в репозитории здесь:
Pi-Grammer GitHub Repo: test.py
И файл pi_program.sh — это, по сути, единственный вызов avrdude , чтобы фактически выполнить программирование. На большинстве наших производственных машин это выглядит примерно так:
язык: bash #запрограммировать flash и lock биты sudo avrdude -p $DEVICE -C /home/pi/avrdude_gpio.conf -c linuxspi -P /dev/spidev0.0 -b 2000000 -D -v -u -U flash:w:$firmware:i -u -U замок:w:$LOCK:m 2>/home/pi/flash_results. txt
Pi-Grammer GitHub Repo: pi_program.sh
Pi_Grammer HAT
Последний ингредиент — это настраиваемая шляпа, которая позволяет пользователю запускать триггеры и светодиодные индикаторы. Кроме того, добавили кнопку выключения, ради всего святого!
Синтаксический анализ вывода avrdude с Python
Для того, чтобы мигать этими прекрасными новыми светодиодами на HAT, нам понадобится модуль Python, который сможет анализировать вывод avrdude и мигать светодиодом успеха или неудачи по мере необходимости. О человек, Какой сон! Python делает это так просто.
Немного предыстории синтаксического анализа
Часто вывод из программы может быть довольно длинным (с полезной информацией), но когда вы программируете тонны и тонны плат, вы просто хотите увидеть успех или неудачу в выводе и не нужно просматривать тонны текста.
Это то, что мы добавили в наши пакетные файлы много лет назад. Используя наши старые пакетные файлы, мы анализируем «токены», возвращенные из stk500. exe , и код является загадочным. Вот как может выглядеть типичный командный файл:
язык: bash FOR /F "tokens=*" %%i IN ('"%step1%"') DO ( if "%%i" == "Фьюз-биты успешно проверены" echo Успех на %$step1% ) & ( if "%%i" == "Целевое напряжение находится в пределах 5%% от желаемого значения" (эхо целевого напряжения в норме) ) & ( if "%%i" == "Заданное напряжение НЕ находится в пределах 5%% от желаемого значения" (эхо %%i) и перейти в меню ) & ( if "%%i" == "ВНИМАНИЕ! Одна или несколько операций завершились неудачно! Пожалуйста, проверьте выходной журнал выше!" (эхо не удалось на %$step1%) и перейти в меню ) & ( если "%%i" == "Не удалось подключиться к STK500 V2 через USB" (эхо %%i) и перейти в меню ) & ( если "%%i" == "Не удалось подключиться к AVRISP mkII через USB" (эхо %%i) и перейти в МЕНЮ )
О, черт возьми, это ужасно. В Python я сначала отправил вывод в текстовый файл с помощью этой команды:
language:python # стереть, а затем записать биты FUSE sudo avrdude -p $DEVICE -C /home/pi/avrdude_gpio. conf -c linuxspi -P /dev/spidev0.0 -b 125000 -D -v -e -u -U hfuse:w:$HIGH_FUSE:m -u -U lfuse:w:$LOW_FUSE:m -u -U efuse:w:$EXT_FUSE:m 2>/home/pi/fuse_results.txt
Обратите внимание на небольшой трюк с использованием » 2>
«:
язык: python 2>/home/pi/fuse_results.txt
Именно здесь вся отладочная информация avrdude сохраняется в текстовом файле.
Наконец, мы можем выполнить синтаксический анализ текстового файла в Python следующим образом:
language:python f = открыть ('/home/pi/fuse_results.txt', 'r') для строки в f: если в строке 'avrdude: 1 байт hfuse проверено': линия печати hfuse = Истина elif 'avrdude: 1 байт lfuse проверено' в строке: линия печати lfuse = Истина elif 'avrdude: проверено 1 байт efuse' в строке: линия печати излияние = Истина elif 'avrdude: устройство AVR не отвечает' в строке: линия печати е. закрыть()
Так чище! Спасибо, Питон!
Чтобы узнать больше об обработке файлов, вот отличный учебник, который помог нам начать работу:
Python для начинающих: работа с файлами
Поистине прекрасное свойство Python заключается в том, что все, что вы хотите сделать, обычно находится на расстоянии поиска в Google. Удивительно, насколько велика поддержка инструментов Python. В паре с безголовым пи, и нет предела возможностям!
Лучше перестраховаться, чем сожалеть
Логические уровни
В какой-то момент во время моего исследования я прочитал, что аппаратные контакты SPI на Raspberry Pi никогда не должны видеть логический уровень выше 3,3 В. Ой! Я программировал цели 5V весь день.
Я решил, что лучше перестраховаться, чем потом сожалеть. И разве весь смысл моей конструкции не в том, чтобы быть надежным? Поэтому я какое-то время возился с конвертером TXB, но не смог заставить его работать. Я также пробовал двунаправленный преобразователь логических уровней, и он просто работал, поэтому я решил пойти по этому пути. В дизайн были добавлены несколько удобных перемычек, чтобы выбрать, откуда я хочу получить целевой логический уровень.
Перезапуск / завершение работы безголового Pi с использованием Python
Еще одна вещь, возникшая в этой конструкции HAT, заключалась в том, как правильно отключить Raspberry Pi из модуля Python. Ах да, это был просто еще один поиск в Google:
язык: питон перезагрузка защиты (): command = "/usr/bin/sudo /sbin/shutdown -r сейчас" подпроцесс импорта процесс = подпроцесс.Popen(command.split(), stdout=subprocess.PIPE) вывод = процесс.общаться()[0] вывод на печать
Решения Ridge: Raspberry Pi — перезапуск/выключение вашего Pi из кода Python
Надежный кабель адаптера
Я также решил использовать специальную плату адаптера. Ленточные кабели на MKII всегда умирали, поэтому я хотел убедиться, что мы не увидим ни одной из этих проблем. Я пошел с соединительным кабелем 1×6 и специальной платой адаптера для соединения со стандартным разъемом для программирования AVR 2×3.
Это сработало очень хорошо, но по мере того, как масштаб расширялся, я все же пересмотрел это один раз. У V2 целевой VCC возвращался на 6-й контакт, так что это можно было использовать при настройке целевого логического уровня.
Эта добавленная функция на самом деле сопровождалась второй функцией, которую я не ожидал. Если вы соедините перемычкой как «целевой» VCC, так и один из перемычек, поставляемых Raspberry Pi (3,3 В или 5 В), вы можете подать питание на цель. Это было очень удобно для тех процедур программирования голых ИС. Теперь нашим техникам нужно подключить только один кабель для программирования и питания. Ваху!
Capsense для победы!
Давным-давно мы перешли от использования механической кнопки для включения тестирования к колодкам Capsense. Даже если механическая кнопка рассчитана на 100 000 циклов, она, скорее всего, сдохнет раньше, а заменить ее будет мучением.
Во всех наших тестовых приспособлениях мы используем библиотеку capsense и два контакта ввода/вывода на Arduino для «считывания» площадки capsense. Вместо того, чтобы идти по этому пути на Raspberry Pi, я решил поместить специальную микросхему Capsense в HAT, а затем просто считывать ввод-вывод, как цифровой пин, для программирования.
Это прекрасно работало… до… чертова микросхема EOL. Эй!
Выяснилось, что только конкретный пакет микросхемы capsense стал EOL, и что производитель собирался продолжать выпускать уменьшенную версию микросхемы QFN. Итак, мы пересмотрели HAT, и все хорошо. Эта красивая корзина со шляпами прибыла на мой стол. Спасибо производство!!
Последним шагом было надеть эти шляпы на более чем 60 Raspberry Pi, стоящих на моем столе, и развернуть их в рабочей среде!
Извлеченные уроки — как новичок в Raspberry Pi
До этого я не использовал Raspberry Pi ни в одном проекте, и вау, я был удивлен тем, какие они классные! Мне потребовалось некоторое время, чтобы привыкнуть выполнять так много работы в командной строке (сначала права доступа к файлам были болезненными), но как только я начал вводить sudo
перед всеми, я был готов к работе! Вот несколько советов, которые я бы порекомендовал любому новичку в Raspberry Pis. Есть так много всего, что нужно узнать, и обычно это можно сделать только с помощью поиска в Google. Я надеюсь, что они пригодятся.
Суперпользователь Do — Используйте «
sudo
» перед каждой командой.Pi GPIO — управление/чтение GPIO в камнях питона. Ознакомьтесь с учебным пособием здесь.
«Пакетные» файлы — файлы « .sh » на Pi похожи на файлы « .bat » в MSDOS.
Полезная команда — «
sudo killall python
» очень удобна. »sudo killall avrdude
» тоже! Это оказалось ключевым ингредиентом для решения маленькой хитрой проблемы, которая всплыла позже в процессе производства.Невидимые символы — Не редактируйте файлы на компьютере с Windows. Чертовски невидимые персонажи ( NL и CF ). Гримленс, я тебе говорю!! Действительно странное поведение происходит, когда эти дополнительные невидимые символы существуют в файле pi_program. sh .
В конце концов я решил отредактировать все файлы на Raspberry Pi, чтобы избежать этих проблем. Встроенный текстовый редактор довольно удобен. Один из моих сотрудников в команде контроля качества хорошо разбирается в VIM и может найти несколько серьезных путей.
Headless Pis —
rc.local
— довольно крутой способ запуска некоторых вещей при загрузке. Мы вызываем модуль Python с именем test.py для всех наших потребностей в программировании. Вы действительно можете поместить туда любые команды, которые хотите. Мы находим это очень удобным, потому что мы запускаем эти Pi_grammers в производстве без монитора, клавиатуры или мыши — «без головы», как они говорят.Истечение времени ожидания последовательной загрузки — Если что-то пойдет не так во время последовательной загрузки, avrdude может пройти НАВСЕГДА до истечения времени ожидания. Это может выглядеть так, будто безголовый пи заморожен. В конце концов мы исправили это, сделав снимок upload_results.txt , анализируя его, а затем вызывая «
sudo killall avrdude
», если казалось, что это не удастся.** Аппаратный SPI** — Открытие линий SPI в
raspi-config
. Ознакомьтесь с учебным пособием здесь.Клавиатура для английского языка (США) — Остерегайтесь, здесь очень много окон, в которых можно щелкать/выбирать, но в конечном итоге вы можете получить стандартную английскую американскую клавиатуру, если хотите. Это в
raspi-config
.Ограничения привода/приемника GPIO — Имейте в виду, что существуют контакты ввода/вывода, которые не могут управлять/приемником светодиода. В моем первом прототипе HAT я выбрал несколько входов/выходов, которые не подходили для светодиодов, и мне пришлось заменить их. У меня до сих пор нет окончательного списка, но я точно знаю, что 9 GPIO в текущем дизайне отлично работают!
Приветствуем Open Source и спасибо!
Самый важный вывод, который мы извлекли из этого эпического путешествия, заключается в том, что у нас была мечта (супернадежное автономное производственное программирование), и это стало возможным только благодаря большой работе, проделанной многими другими людьми в сообществе открытого исходного кода. Здоровья и спасибо!
Готовы использовать Raspberry Pi в качестве автономного программатора? Попробуйте проверить шляпу программиста Pi AVR!
Программатор SparkFun Pi AVR HAT
В наличии DEV-14747
24,95 $
2
Избранное Любимый 24
Список желаний
Ресурсы и дальнейшее развитие
Для получения дополнительной информации о Pi_Grammer и , ознакомьтесь со следующими ресурсами:
- Pi_Grammer GitHub Repo
- SparkFun Raspberry Pi GPIO: Пример Python RPiGPIO
- SparkFun Raspberry Pi SPI и I2C Учебное пособие: SPI на Pi
- Двунаправленный преобразователь логических уровней SparkFun
- SparkFun AT42QT101X Руководство по подключению емкостного сенсорного разъема
- Zidag — простая установка USB-драйвера.
- AdaFruit: автономный программатор микросхем AVR
- AdaFruit: программирование AVR или Arduino с помощью Raspberry Pi GPIO
- Кевин Кузнер: Raspberry Pi как программист AVR
- Документация Raspberry Pi: Аппаратный SPI
- Python для начинающих: Памятка по работе с файлами в Python
- Решения Ridge: Raspberry Pi — перезапуск/выключение вашего Pi из кода Python
Хотите ознакомиться с некоторыми другими производственными процессами SparkFun или информацией о записи загрузчиков на микроконтроллеры? Ознакомьтесь с некоторыми из этих связанных руководств:
Установка загрузчика Arduino
В этом руководстве вы узнаете, что такое загрузчик и зачем его устанавливать или переустанавливать. Мы также рассмотрим процесс записи загрузчика путем прошивки шестнадцатеричного файла в микроконтроллер Arduino.
Избранное Любимый 25
Постоянные инновации в области контроля качества
В этой статье мы расскажем о наших последних достижениях в области контроля качества. Наряду с тем, что мы сделали наши тесты более точными, мы также сделали их более эффективными и надежными.
Избранное Любимый 7
Руководство по подключению программатора Pocket AVR
Пропустите загрузчик и загрузите свою программу прямо на AVR с помощью AVR Pocket Programmer.
Избранное Любимый 10
Язык программирования Котлин
Начать Почему Котлин
Разработано JetBrains и участники с открытым исходным кодом
Мультиплатформенный мобильный
Делитесь логикой своих приложений для Android и iOS, сохраняя при этом нативный UX
На стороне сервера
Современный опыт разработки с использованием знакомой технологии JVM
Веб-интерфейс
Расширьте свои проекты в Интернете
Андроид
Рекомендуется Google для создания приложений для Android
Мультиплатформенность для других платформ, Наука о данных
Попробуйте Kotlin
Простой
Асинхронный
Объектно-ориентированный
Функциональный
Идеально подходит для тестов
5"> веселая главная () { val name = "stranger" // Объявите вашу первую переменную println("Привет, $name!") // ...и пользуйся! print("Текущее количество:") for (i in 0..10) { // Цикл в диапазоне от 0 до 10 распечатать("$я") } }импортировать kotlinx.coroutines.* suspend fun main() { // Функция, которую можно приостановить и возобновить позже val start = System.currentTimeMillis() coroutineScope { // Создаем область для запуска сопрограмм для (я в 1..10) { launch { // Запустить 10 одновременных задач delay(3000L - i * 300) // Приостановить их выполнение log(начало, "Обратный отсчет: $i") } } } // Выполнение продолжается после завершения всех сопрограмм в области видимости log(начало, "Взлет!") } журнал развлечений (начало: длинное, сообщение: строка) { println("$msg" + "(на ${Thread. currentThread().name}) " + "после ${(System.currentTimeMillis() - start)/1000F} с") }
абстрактный класс Person (имя val: String) { абстрактное веселое приветствие () } интерфейс FoodConsumer { весело есть () fun pay(amount: Int) = println("Вкусно! Вот $amount баксов!") } класс RestaurantCustomer (имя: строка, значение блюда: строка): человек (имя), FoodConsumer { fun order() = println("$dish, пожалуйста!") переопределить fun eat() = println("*Ест $блюдо*") переопределить fungreet() = println("Это я, $name.") } веселая главная () { val sam = RestaurantCustomer("Сэм", "Салат") sam.greet() // Реализация абстрактной функции sam.order() // Функция-член sam.eat() // Реализация функции интерфейса sam.pay(10) // Реализация по умолчанию в интерфейсе }5"> веселая главная () { // Кто отправил больше всего сообщений? val FreightSender = сообщения .groupBy(Сообщение::отправитель) .maxByOrNull { (_, сообщения) -> messages.size } ?.key // Получить их имена println(frequentSender) // [Ма] // Кто отправители? val отправители = сообщения .asSequence() // Делаем операции ленивыми (для длинной цепочки вызовов) .filter { it.body.isNotBlank() && !it.isRead } // Использовать лямбда-выражения... .map(Message::sender) // ...или ссылки на элементы .отчетливый() .сортировано() .toList() // Преобразование последовательности обратно в список для получения результата println(senders) // [Адам, Ма] } Сообщение класса данных( // Создаем класс данных val отправитель: строка, тело val: Строка, val isRead: Boolean = false, // Предоставляем значение по умолчанию для аргумента ) val messages = listOf( // Создаем список Сообщение("Ма", "Эй! Где ты?"), Message("Адам", "Сегодня все идет по плану?"), Сообщение("Ма", "Пожалуйста, ответьте. Я вас потеряла!"), )
// Тесты // Следующий пример работает только для JVM импортировать org.junit.Test импортировать kotlin.test.* класс SampleTest { @Тест fun `test sum`() { // Пишем имена тестов с пробелами в обратных кавычках значение а = 1 знач б = 41 assertEquals(42, sum(a, b), "Неверный результат для суммы($a, $b)") } @Тест весело `проверить вычисление`() { assertTrue("Ошибка вычисления") { setup() // Используем лямбду, возвращающую испытуемый вычислить() } } } // Источники забавная сумма (a: Int, b: Int) = a + b забавная установка () {} весело вычислить () = правда
Другие примеры ↗
Современный, лаконичный и безопасный язык программирования
Легко подобрать, так что вы можете сразу создавать мощные приложения.
Краткий
класс данных Сотрудник ( имя val: строка, val электронная почта: строка, val компания: Строка ) // + автоматически сгенерированные equals(), hashCode(), toString() и copy() object MyCompany { // Одноэлементный константное имя: String = "MyCompany" } fun main() { // Функция верхнего уровня val employee = Employee("Алиса", // Нет ключевого слова `новое` "[email protected]", MyCompany.name) println (сотрудник) } 906:40
-
Сейф
забавный ответ (условие: логическое значение): String? = // Обнуляемость является частью системы типов Kotlin if (условие) "Я в порядке" else null fun error(): Nothing = // Всегда генерировать исключение выбросить IllegalStateException("Здесь быть не должно") веселая главная () { val condition = true // Попробуйте заменить `true` на `false` и запустите образец! val message = ответ(условие) // Результат может быть нулевым // println(message. uppercase()) // Эта строка не компилируется println(message?.replace("отлично", "хорошо")) // Безопасный доступ к значению, допускающему значение NULL if (message != null) { // Если вы проверите правильность типа, println(message.uppercase()) // компилятор сделает это за вас. } val nonNull: String = // Если нулевой регистр выдает ошибку, answer(condition = true) ?: error() // Kotlin может сделать вывод, что результат не равен нулю println(ненулевой) } 906:40
-
Выразительный
весело main() { // начало выборки val map = mapOf (от 1 до «одного», от 2 до «двух») for ((k, v) in map) { // Обходим карту или список пар println("$k -> $v") } fungetKnowledge() = Pair("The Answer", 42) // Функции с одним выражением val (описание, ответ) = getKnowledge() // Деструктурировать в пару двух переменных println("$описание: $ответ") getText()?. let { // Применяем действие к выражению, допускающему значение NULL sendEmailTo("[email protected]", it) // если не null } создатьпустое окно() .apply { // Настраиваем свойства объекта ширина = 300 высота = 200 Видимый = Истина }.also { w -> // Выполняем дополнительную операцию над цепочкой вызовов показатьокно(ж) } val fixedIssue = issueById["13456"] ?.takeIf { it.status == Status.FIXED } // Использовать значение, только если условие истинно println (фиксированная проблема) //конец выборки } Окно класса данных (ширина переменной: Int, высота переменной: Int, переменная isVisible: логическое значение) весело createEmptyWindow() = Окно (0, 0, ложь) весело showWindow(окно: Окно) { println("Показано $окно") } весело getText(): Строка? = "Привет! Вы выиграли в лотерею! Оплатите приложенный счет, чтобы получить приз." весело sendEmailTo (кому: строка, сообщение: строка) { println("Отправка письма на адрес $to:\n$message") } Статус класса enum {OPEN, FIXED, IN_PROGRESS} Проблема класса данных (val status: Status) val issueById = mutableMapOf( "13456" для выдачи (Статус. ИСПРАВЛЕНО) ) 906:40
-
Интероперабельный
// Использовать любую существующую библиотеку или фреймворк JVM // Вызов кода Kotlin из Java без проблем @SpringBootApplication демонстрационное приложение класса весело main(аргументы: Array
) { runApplication (*args) } @RestController класс MessageResource { @GetMapping забавный индекс(): Список<Сообщение> = listOf( Сообщение("1", "Привет!"), Сообщение("2", "Добрый день!"), Сообщение("3", "Привет!"), ) } Сообщение класса данных (действительный идентификатор: строка?, допустимый текст: строка) // Напишите код Kotlin, скомпилируйте его в JavaScript и запустите в браузере // Использовать существующие API и библиотеки JavaScript импортировать kotlinx.browser.window веселая главная () { Вал тело = окно.документ.тело body?.innerHTML += "Привет, Котлин" окно. setInterval({ тело?.innerHTML += "!" }, 1000) }
// Используйте оболочки Kotlin для создания приложений с помощью фреймворков JavaScript, таких как React импортировать реакцию.* импортировать реакцию.дом.* импортировать kotlinx.html.js.onClickFunction val counter = functionComponent
{ val (счетчик, setCount) = useState (0) кнопка { attrs.onClickFunction = {setCount (количество + 1)} +count.toString() } } 906:40 -
Мультиплатформенный
// Общий // Объявить подписи, чтобы использовать их в общем коде // Предоставление специфичных для платформы реализаций в модулях платформы ожидать веселья randomUUID(): String ожидать класса PlatformSocket( URL-адрес: строка ) { весело openSocket (слушатель: PlatformSocketListener) весело closeSocket (код: Int, причина: строка) весело отправить сообщение (msg: строка) } интерфейс PlatformSocketListener { весело на Open () удовольствие от неудачи (t: Throwable) весело onMessage (msg: String) весело при закрытии (код: Int, причина: строка) }
импорт java. util.* фактическое удовольствие randomUUID() = UUID.randomUUID().toString() фактический класс PlatformSocket фактический конструктор (url: String) { // Использовать okhttp3 в реализации }
// iOS импортировать платформу.Foundation.NSUUID фактическое удовольствие randomUUID(): String = NSUUID().UUIDString() фактический класс PlatformSocket фактический конструктор (url: String) { // Использовать в реализации platform.Foundation }
// JS // Использовать пакет `uuid` из npm в качестве зависимости фактическое развлечение randomUUID(): String = uuidv4() фактический класс PlatformSocket фактический конструктор (url: String) { // Реализация поверх WebSockets } 906:40
Продуктивный способ написания серверных приложений
Совместимость с экосистемой Java. Используйте свои любимые фреймворки и библиотеки JVM.
Узнать больше →Кроссплатформенный уровень для собственных приложений
Совместно используйте логику приложения между веб-, мобильными и настольными платформами, сохраняя при этом привычный для пользователей опыт.
Сэкономьте время и получите неограниченный доступ к функциям, характерным для этих платформ.
Узнать о мультиплатформе Kotlin → Узнать больше →Большое, дружелюбное и полезное сообщество
У Kotlin отличная поддержка и множество участников в быстрорастущем глобальном сообществе. Воспользуйтесь преимуществами богатой экосистемы с широким спектром библиотек сообщества. Помощь всегда рядом — обратитесь к многочисленным ресурсам сообщества или напрямую обратитесь к команде Kotlin.
Присоединяйтесь к сообществу →Gradle представляет Kotlin как язык для написания скриптов сборки
Corda — это платформа распределенного реестра с открытым исходным кодом, поддерживаемая крупными банками и полностью построенная на Kotlin
.