Программаторы для микроконтроллеров.

Тема в разделе 'Общий раздел', создана пользователем bamian, 17 май 2010.

  1. REKREAT0R

    REKREAT0R Новичок

    Если уж городить цапы и микроконтроллеры, то имеет смысл термопару туда прицепить и ток ограничивать при необходимости
     
  2. suslox

    suslox Пушистикс Staff Member

    термопару точно смысла нет ставить - проще очень маленький терморезистор или цифровой датчик в маленьком корпусе...
    хорошая термопара будет стоить дороже всего остального в схеме...
    инф, тип цапа не скажешь? ;)
    "А габариты? Она тоже 4х4мм? " делай сразу 2 варианта устройства: нормальный и для извров :lol: :lol: :lol: :lol:
     
  3. ArtDen

    ArtDen Пользователь

    А можно обновить lay-файл с исправлениями?
     
  4. INFERION

    INFERION Пользователь

    В МК есть термодатчик, а он сидит на одном полигоне с преобразователем. Да и какой смысл лепить термопару, если есть готовые цифровые термодатчики с I2C или SPI интерфейсом? Достаточно его подключить к шине МК (вместо RGB индикатора) и получить качественный термометр...
    Он уже давно обновлён. И скрин тоже обновлён. Сразу обновил как только исправил. Ещё скачал перекомпилированную кем-то "дудку", которая после прошивки ресет отпускает:[attachment=0:r3q4xe8v]avrdude-5.10-ftbb-reset.rar[/attachment:r3q4xe8v]Глюков пока не заметил. Программатор вещь! Вносишь изменения в студии, жмёшь на кнопку "компилировать", затем жмёшь на батник, 0,5 секунды и на мультиметре новое напряжение стабилизации :)...
     

    Вложения:

  5. ViNT

    ViNT Новичок

    Эта дудка отпускает ресет на схеме с одной FT232RL, без буфера?
     
  6. INFERION

    INFERION Пользователь

  7. INFERION

    INFERION Пользователь

    Допустил я случайно ошибку, ковыряясь во фьюзах 13-й тиньки. И упала у неё тактовая частота до 16кГц. Программатор мой такого эстонца не осилил. И ещё параллельно у меня возникла необходимость восстанавливать фьюз RSTDISBL, из-за которого МК невозможно прошить обычным способом. И решил я поковырять даташит на предмет HV программирования, и собрал вот такой девайс:[attachment=5:mad:9iz1ekv]PA213895.JPG[/attachment:mad:9iz1ekv][attachment=4:mad:9iz1ekv]PA213896.JPG[/attachment:mad:9iz1ekv][attachment=3:mad:9iz1ekv]PA213897.JPG[/attachment:mad:9iz1ekv][attachment=2:mad:9iz1ekv]PA213898.JPG[/attachment:mad:9iz1ekv]Гнездо не очень аккуратно получилось :(...
    Это HV программатор, который занимается восстановлением фьюзов. Больше он ничего не умеет, но больше от него и не требуется. Подобных схем в инете хватает. У многих есть такие девайсы, но мне они показались избыточными и громоздкими. Да и интерес был самому протокол программирования изучить. К тому же программатор нужен сейчас, а у меня в распоряжении только 8-ми лапые МК. Схема собиралась из подручного хлама, но мне всё равно понравилась :):[attachment=1:mad:9iz1ekv]Восстановитель фьюзов.PNG[/attachment:mad:9iz1ekv]Схема подключается к обычному последовательному программатору, питается и шьётся от него. Затем к ней подключается залоченый МК, точно так же как к обычному последовательному программатору + один тактирующий вывод, и шьётся высоковольтным методом. Этому методу не страшны ни заблокированный ресет, ни отключенный тактовый генератор, ни даже лок биты, блокирующие доступ к памяти (форматирование МК их снимает).
    Если прошивка и верификация прошли успешно - светодиод загорается. Если же что-то сбоит - светодиод мигает 3 раза в секунду, каждый раз пытаясь запрограммировать фьюзы МК. В программе пока что реализован только протокол и верификация. Можно записать в константу байт и его зальёт в Fuse Low Bits и затем проверит. И восстановил я им пока что только 13-ю тиньку. Но дописать инструкции, и даже определение МК по сигнатуре, с последующим заливанием в него инфы с собственной базы, не сложно. Может позже допишу программу, а пока мне нужно лишь восстанавливать RSTDISBL в 84-й тиньке :)...

    Вот код для быстрого просмотра:[spoiler:mad:9iz1ekv]
    Код:
    ;восстановитель фьюзов на ATtiny13. Тактовая 8МГц.
    
    	.INCLUDE "tn13def.inc"
    
    ;Векторы прерываний
    
    	rjmp	RESET
    	rjmp	INT_0
    	.ORG	0x0003
    	rjmp	over0
    	.ORG	0x000A
    
    
    ;Конфигурация
    
    RESET:	ldi	R16, 0b10000000	;Отключить аналоговый компаратор
    	out	ACSR, R16
    
    	Ldi	R16, LOW(RAMEND);инициализация стека
    	out	SPL, R16
    
    	ldi	R16, 0b100011	;Разрешить Sleep в режиме idle, INT0 на передний фронт
    	out	MCUCR, R16
    
    	sbi	PORTB, 4
    
    	ser	R16		;Все порты на выход
    	out	DDRB, R16
    
    	ser	R16		;Сбросить и остановить предделитель таймера
    	out	GTCCR, R16
    
    	ldi	R16, 0b101	;Предделитель таймера на 1024
    	out	TCCR0B, R16
    
    	ldi	R16, 0b00000010	;Включить over0
    	out	TIMSK0, R16
    
    	sei			;Разрешить прерывания
    
    
    ;Программа
    
    ;Задержка перед первой командой
    
    	clr	R16		;Запустить предделитель таймера
    	out	GTCCR, R16
    	sleep
    	ser	R16		;Сбросить и остановить предделитель таймера
    	out	GTCCR, R16
    
    
    ;Вход в режим программирования
    
    repeat:	cbi	PORTB, 1
    	sbi	DDRB, 1		;PB1 - выход
    
    	cbi	PORTB, 4	;Включить питание МК и подать 12V на RESET
    
    	clr	R16		;Запустить предделитель таймера
    	out	GTCCR, R16
    	sleep
    	ser	R16		;Сбросить и остановить предделитель таймера
    	out	GTCCR, R16
    
    	cbi	DDRB, 1		;PB1 - вход
    	sbi	PORTB, 1	;PB1 - подтягивание
    
    
    ;Команды
    
    	;R27 - SDO
    	;R28 - SDI
    	;R29 - SII
    
    	ldi	R28, 0b01000000	;Запись младшего фьюза
    	ldi	R29, 0b01001100
    	rcall	spi		;Write Fuse Low Bits, Instr.1
    	ldi	R28, 0b01111010	;Fuse Low Bits <-------------
    	ldi	R29, 0b00101100
    	rcall	spi		;Write Fuse Low Bits, Instr.2
    	ldi	R28, 0b00000000
    	ldi	R29, 0b01100100
    	rcall	spi		;Write Fuse Low Bits, Instr.3
    	ldi	R28, 0b00000000
    	ldi	R29, 0b01101100
    	rcall	spi		;Write Fuse Low Bits, Instr.4
    
    	sbic	PINB, 1
    	rjmp	error
    	ser	R16		;Убрать флаг INT_0
    	out	GIFR, R16
    	ldi	R16, 0b01000000	;Включить INT_0
    	out	GIMSK, R16
    	sleep
    
    
    	ldi	R28, 0b00000100	;Чтение младшего фьюза
    	ldi	R29, 0b01001100
    	rcall	spi		;Read Fuse Low Bits, Instr.1
    	ldi	R28, 0b00000000
    	ldi	R29, 0b01101000
    	rcall	spi		;Read Fuse Low Bits, Instr.2
    	ldi	R28, 0b00000000
    	ldi	R29, 0b01101100
    	rcall	spi		;Read Fuse Low Bits, Instr.3
    
    	cpi	R27, 0b01111010	;Верификация младшего фьюза
    	brne	error
    
    	sbi	PORTB, 4	;Выключить питание (конец работы)
    loop:	sleep
    	rjmp	loop
    
    
    ;Прерывание таймера
    
    over0:	reti
    
    
    ;Внешнее прерывание
    
    INT_0:	clr	R16		;Выключить INT_0
    	out	GIMSK, R16
    	ser	R16		;Убрать флаг INT_0
    	out	GIFR, R16
    	reti
    
    
    ;Перезагрузка при ошибке
    
    error:	ldi	R17, 7
    	clr	R16		;Запустить предделитель таймера
    	out	GTCCR, R16
    loope:	dec	R17
    	breq	oke
    	sleep
    	rjmp	loope
    oke:	sbi	PORTB, 4
    	ldi	R17, 7
    loope1:	dec	R17
    	breq	oke1
    	sleep
    	rjmp	loope1
    oke1:	ser	R16		;Сбросить и остановить предделитель таймера
    	out	GTCCR, R16
    	rjmp	repeat
    
    
    ;Программный SPI
    
    ;0
    spi:	clr	R27
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b10000000
    	cbi	PORTB, 2
    ;1
    	sbrc	R28, 7
    	sbi	PORTB, 0
    	sbrc	R29, 7
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b01000000
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;2
    	sbrc	R28, 6
    	sbi	PORTB, 0
    	sbrc	R29, 6
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b00100000
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;3
    	sbrc	R28, 5
    	sbi	PORTB, 0
    	sbrc	R29, 5
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b00010000
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;4
    	sbrc	R28, 4
    	sbi	PORTB, 0
    	sbrc	R29, 4
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b00001000
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;5
    	sbrc	R28, 3
    	sbi	PORTB, 0
    	sbrc	R29, 3
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b00000100
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;6
    	sbrc	R28, 2
    	sbi	PORTB, 0
    	sbrc	R29, 2
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b00000010
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;7
    	sbrc	R28, 1
    	sbi	PORTB, 0
    	sbrc	R29, 1
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	sbic	PINB, 1
    	ori	R27, 0b00000001
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;8
    	sbrc	R28, 0
    	sbi	PORTB, 0
    	sbrc	R29, 0
    	sbi	PORTB, 3
    	sbi	PORTB, 2
    	rcall	delay
    	cbi	PORTB, 2
    	cbi	PORTB, 0
    	cbi	PORTB, 3
    ;9
    	sbi	PORTB, 2
    	rcall	delay
    	cbi	PORTB, 2
    ;10
    	sbi	PORTB, 2
    	rcall	delay
    	cbi	PORTB, 2
    	ret
    
    delay:	ret
    [/spoiler:mad:9iz1ekv]Сильно не ругайте. Ну не спец я в этих делах. Пишу как могу :)...
    Вот архив со схемой и печаткой:[attachment=0:mad:9iz1ekv]Восстановитель фьюзов.rar[/attachment:mad:9iz1ekv]
     

    Вложения:

    mason нравится это.
  8. Armer

    Armer Пользователь

    Отличная работа. У меня валяется заблокированная парочка мега8 и тини26, но пока без надобности, вот и лежат. Как наберется кучка побольше, так и возьмусь за разблокирование :) Спасибо.
     
  9. suslox

    suslox Пушистикс Staff Member

    тоже однажды с другом столкнулись с залочившимся изза какогото бага мк атмеловским...тк были не в теме пришлось его выкинуть(((
     
  10. INFERION

    INFERION Пользователь

    Восстановил им RSTDISBL на 84-й тиньке. Теперь могу смело тестить умную кнопку на своём драйвере. Фьюзы теперь мне не страшны :)...
    Если на плате с МК стоит большая ёмкость на питании (более 10мкФ), то в программаторе не хило проседает напряжение в момент включения. Лечится танталом на 100мкФ. У меня в драйвере 40мкФ, без тантала МК программатора перезагружается от экстремальной просадки напряжения...

    Добавлено:
    Угробил МК в драйвере. Дёргал разъём во время восстановления RSTDISBL (надоело питание выключать при подключении восстановителя). Слетел младший байт фьюзов, вместе с тактовым генератором. Восстановитель всё успешно вернул на место и МК воскрес. Полезная штука, выручает :)...
     
  11. ArtDen

    ArtDen Пользователь

    Благодаря наводке INFERION-а спаял такой-же программатор, только с 2-мя светодиодами:
    [attachment=0:vc1cfv57]PB021764.jpg[/attachment:vc1cfv57]
    (на выходе у него AVR-ISP разъём)

    Правда, оказалось, что светодиоды при прошивке не горят, а только информируют о записи или чтении через UART :)
     

    Вложения:

    • PB021764.jpg
      PB021764.jpg
      Размер файла:
      97,2 КБ
      Просмотров:
      873
  12. Fonarik

    Fonarik Пользователь

    собрал и себе такой програматор, по разводке INFERION'a, только изменил под свой штекер.
    штука нереально удобная, вчера прошивал МК 3 или 4 раза. всё на столько просто что даже об этом не задумываешся. я как представил что бы было если бы я постоянно колупался в заднице компа.
     
  13. bamian

    bamian Пользователь

    Уважаемый INFERION а прошивка есть на схему, в смысле прошить тиньку13? собрался спаять а что то в архиве не нашел файла прошивки (hex).
     
  14. bamian

    bamian Пользователь

    Нашел схему:
    http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/

    «Atmega fusebit doctor» – это не высоковольтный программатор, а устройство которое предназначено только для одной цели – вернуть к жизни микроконтроллер с неправильно прошитыми фьзами. Преимущество - не нужен компьютер.
    Принцип работы:
    – подаем на плату 12 вольт, вставляем в панельку запорченный микроконтроллер, нажимаем кнопку «START».
    При нажатии кнопки «START» устройство читает сигнатуру микроконтроллера-пациента, при этом, если она не читается, делается несколько попыток прочитать различными способами. После того как сигнатура прочитана по базе определяется тип микроконтроллера и восстанавливаются заводские, для данного микроконтроллера, установки фьюз бит. Если сигнатура неизвестна или микроконтроллер выдает ее неверно устройство установит фьюз биты в такое состояние, при котором станет возможным последовательное программирование.
    Таким образом, через пару секунд получаем новенький, рабочий контроллер.
    При восстановлении фьюз бит прошивка микроконтроллера остается нетронутой.
    На плате есть перемычка «ALLOW ERASE«, при замыкании которой полностью «обнулится» микроконтроллер, если он залочен.

    Индикация - 2 светодиода – красненький и зелененький.
    - горит зеленый – AVR успешно вылечен, фьюз биты восстановлены до заводских. Если микроконтроллер «залочен» (LockBits включены), просто проверяются фьюз биты и если они совпадают с заводскими – загорается зеленый светодиод.
    - горит красный – проблемы с сигнатурой чипа, невозможно прочитать, нет микроконтроллера в панельке или нет такой сигнатуры в базе данных.
    - мигает зеленый – сигнатура в порядке, фьюз биты с ошибкой, но исправить их невозможно, так как микроконтроллер «залочен» (LockBits включены), необходимо полное стирание микроконтроллера (установить перемычку – «ALLOW ERASE»).
    - мигает красный – сигнатура в порядке, микроконтроллер «не залочен», но, по какой-то причине, невозможно восстановить фьюз биты.
    На плате есть выход UART
    Устройство поддерживает 138 микроконтроллеров:
    1kB: AT90s1200, Attiny11, Attiny12, Attiny13/A, Attiny15
    2kB: Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
    4kB: Atmega48, Atmega48P/A, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
    8kB: Atmega8515, Atmega8535, Atmega8, Atmega88, Atmega88P/A, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535
    16kB: Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164, Atmega164P/A, Atmega165/P/A/PA, Atmega168, Atmega168P/A, Atmega169/P/A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
    32kB: Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324, Atmega324P/A, Atmega325, Atmega3250, Atmega325P, Atmega3250P, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329P, Atmega3290P, AT90can32
    64kB: Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega640, Atmega644, Atmega644P/A, Atmega645, Atmega6450, AT90usb646, AT90usb647, AT90can64
    128kB: Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
    256kB: Atmega2560, Atmega2561
    Последняя версия (обновление № 8 от 05.03.2011 г.)
    ссылка битая я ее убрал
    в архиве схема устройства и адаптеров, прошивки, печатки.
    я пока не доделал устройство, но как сделаю отпишусь и выложу фото
     
  15. bamian

    bamian Пользователь

    Для прошивки микроконтроллера FUSEBITS:
    internal 1MHz clock, EESAVE enabled:
    M8 L:0xE1 H:0xD1
    M88,M168 L:0x62 H:0xD7 E:0xF9
    M328 L:0x62 H:0xD1 E:0xFF
     
  16. Fonarik

    Fonarik Пользователь

    габариты платы, конечно, внушительны :)
    будет не сложно переделать под питание от USB, чтоб не искать те самые 12 вольт... да и собрать на SMD будет самое то.
    я себе собрал высоковольтный программатор по схеме INFERION'a, доволен :)
     
  17. bamian

    bamian Пользователь

    По ссылке на обновление был какой то глюк, вот последнее обновление № 8 от 05.03.2011 г
    и плата и схема под smd и с usb-выходом на комп
     

    Вложения:

  18. bamian

    bamian Пользователь

    Да, кстати по печатке - ножки 40-ка пиновой панельки с 29 по 37 необходимо откусить а в плате не сверлить отверстия под эти ножки
     

    Вложения:

    • plate.jpg
      plate.jpg
      Размер файла:
      17,4 КБ
      Просмотров:
      856
    • plate-pic.jpg
      plate-pic.jpg
      Размер файла:
      9,6 КБ
      Просмотров:
      912

Поделиться этой страницей