И снова о программаторах для AVR

ПРОЛОГ

На заре использования микроконтроллеров конечно же немаловажным было наличие программатора, а для новичка это было делом трудоемким. Прочитав кучу форумов, и не найдя какой-то универсальности случайно нашел в журнале Радио замечательный в то время проект PonyProg в тандеме с hardware JDM флешером подключаемым к COM порту персонального компьютера. Сразу же повторил базовый модуль, модуль под микроконтроллеры фирмы Atmel AVR и микроконтроллеры фирмы Microchip PIC. А сколько радости было, когда я запрограммировал им первый PIC (хороший флешер для PIC — WinPic800)!

7244f1

Собирал из того что было, даже разъемы от старого советского магнитофона. Естественно время не стоит на месте, у меня появился ноутбук, в котором COM port отсутствовал априори. Поискав в интернет, читая про простые USB программаторы для Atmel AVR выбор пал на USBasp, покупал на eBay за 2 доллара, а для PIC взял PickitII Light (с PIC вообще перестал работать, программатор в принципе лежит без дела).

ACTION!

Недавно заказывал на aliexpress.com полезные в хозяйстве датчики и платы, и нашел USB программатор в алюминиевом корпусе:

c2e282

По описанию вроде как USBasp, но в алюминиевом корпусе, немного меньших размеров, с распиновкой ISP – разъема и логотипом Atmel. Решил купить, за 400 рублей. “Будет основным, а старый отправлю на скамейку запасных”, — подумал я, и нажал «order». В общем дождался я его, радостно распаковал, инсертнул в USB, в дереве устройств отсутствовал мой любимый libusb. Ну естественно начал искать информацию в Google. Нашел Статью на easyelectronics. Но, у меня микроконтроллер в программаторе Atmega 88, на офф. сайте нашел source коды и HEX-файлы, сделал петлю между двумя программаторами:

3102ba

Запрограммировал последний HEX – файл, на программаторе загорелся вместо красного светодиода голубой, программатор перестал вообще определяться системой. Нашел несколько форумов, где люди под разные версии что-то там перепаивали и тд. Мне как-то не хотелось ковырять нормальный с виду девайс, продолжил поиски и нашел хорошую статью, а так же переработанный исходник в Atmel Studio 4. Hacking AVR programmer, судя по всему была проблема с этим программатором в этих строчках:

There are some tiny, yet important, differences to the original USBasp programmer: in the USBasp USB-D- is connected to pin PB0, USB-D+ to PB1 and PD2/INT0. Here also USB-D- was connected to a pin on port D: PD3/INT1. Well, this should not really make a difference, and I continued my search for differences. OK, for some reason, also the LEDs are connected in parallel to 2 port pins each – so what… In despair I decided to look into the source code of the USBasp firmware. The header files: OK – pin assignments were as expected, nothing special here. But let’s wait, where is the definition of the utilization of port D? Well, it was in the main.c file:

int main(void) {
  uchar i, j;

  /* no pullups on USB and ISP pins */
  PORTD = 0;
  PORTB = 0;
  /* all outputs except PD2 = INT0 */
  DDRD = ~(1 << 2);

Автор изменил его на:

All pins of port D are defined as output, except for PD2/INT0? I always tell my students to only define pins as output, which are really used as output… And what happens here? Since the modified design also connected USB-D- to PD3/INT1, the rather aggressiv definition of output pins leads to a unsolveable conflict, when suddenly PD2 is driving against the USB signals from the host!
Changing this little piece of code solved the problem. Rather conservative I set all pins of port D as input (none of them is currently used as output!):

int main(void) {
  uchar i, j;

  /* no pullups on USB and ISP pins */
  PORTD = 0;
  PORTB = 0;
  /* all PDx input */
  /* MK-USBISP v3.0 */
  DDRD = 0x00;

Пересобрал проект изменив в конфигураторе Atmega8 на Atmega88, снова залил своей петелькой из двух программаторов HEX, подключил и вуаля, программатор сразу же определился системой как libusb. Я тут же считал/записал код из Atmega16 (сердце моей отладочной паты) ExtremeBurner. На этом в принципе все. Исходя из количества покупаемых таких программаторов людьми из рунета (почему продавцы не пишут, что это не классический USBasp, а устройство с другой прошивкой видимой системой как HID-устройство, работающей только с софтом progisp).

ЗЫ: Что-то мне захотелось программировать все из под Codvision и Atmel Studio, нашел хорошую статью переделки USBasp в AVR-Doper (STK-500) — Статья, правда PonyProg не использовал, а взял любимый USBbasp. Все заработало на Windows 8 x64. USBasp на Atmega 8 — кварцевый резонатор на 12МГц.

ЗЫЫ: потестил AVR_DOPER с Atmel Studio 7 — программирует намного быстрее микроконтроллер, чем в CodeVision. Еще заметил один нюанс, в простом сеансе на Windows 8 отказывается работать, нужно перегрузиться отключив подпись драйверов. После таких манипуляций, все работает. Выложу еще пару скринов работы AVR_DOPER:
CodevisionAVR:

df309d

3803e5

Atmel Studio 7:

8d0f27af025e

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

PS: В связи с огромным количеством комментариев в интернете: «Ааааа спасите — помогите, мама дорогая не работает!!!». Всегда смотрите на какой тактовой частоте у вас работает микроконтроллер который необходимо запрограммировать. Если частота ниже 4 МГц, возможно придется в программе программаторе (например Khazama или Atmel Studio) изменить скорость шины SPI или переставить перемычку на программаторе USBasp (смотрите документацию к данному программатору).

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s