Страница 46 из 151

Параллельный программатор

Добавлено: Пн июл 20, 2009 09:01:48
Chi-Nick
Здравствуйте все! Решил я повторить программатор HVProg по схеме:http://www.der-hammer.info/hvprog/dl/hvprog_05.gif
Плату взял готовую HVProg_05.lay (см. вложение), ничего не переделывал кроме замены резистора 36кОм на 34кОм (небыло другого)
Плату адаптеров - одностороннюю: ISP_20.lay (см. вложение)

Проблемма тут ранее поднималась, но толком не решалась... Дело вот в чем: программатор нормально работает в ISP режиме, но категорически не хочет нормально работать в параллельном! AVRStidio 4.16 его видит замечательно в обоих режимах, но в параллельном даже сигнатуру правильно не читает (тренировал mega8 и mega16) Пробывал разные студии-результат одинаковый. При попытке поменять фьюзы, студия вываливает окно (см. вложение ОшибкаHV)

Кто-нибудь подскажет алгоритм настройки HVProg на работу в HV

P.S. Конечно же наличие всех напряжений и нормальной связи программатора и адаптера, а так же отсутсвие КЗ проверялось!

Добавлено: Пн июл 20, 2009 09:56:54
htscooter
Тот самый R6 36k вместе с R7 150k (схема hvprog_05 от 25.04.05) образует делитель напряжения на входе АЦП. Вполне возможно, что программатор видит "не то" напряжение и не хочет работать как положено.

Добавлено: Пн июл 20, 2009 11:32:28
Chi-Nick
Тот самый R6 36k вместе с R7 150k (схема hvprog_05 от 25.04.05) образует делитель напряжения на входе АЦП. Вполне возможно, что программатор видит "не то" напряжение и не хочет работать как положено.
Пробывал и 33кОм, и 39кОм в итоге нашел 36кОм - во всех случаях ничего не поменялось. При чтении сигнатуры - 0x00 0x00 0x00, при чтении фьюзов - стоят все галочки, при попытке записи измененного любого фьюза - ошибка (см выше)! Когда снимаю перемычку HV- сигнатура выглядит так: 0xFF 0xFF 0xFF

Добавлено: Пн июл 20, 2009 11:54:38
htscooter
Ну поскольку и программатор в данном варианте печатки, и плату адаптеров уже собирали, и проблем не было, то стоит все-таки еще раз проверить монтаж на наличие кз и отсутствие пропая. У меня была похожая проблема - оказалось непропаяны пара ножек на смд меге.

Добавлено: Пн июл 20, 2009 16:05:08
Chi-Nick
Проверяю уже в который раз! Что-то мне кажется, что Mega8535 не так работает. Хотя прошивка без ошибок в нее заливается. Вообщем хз что за ботва! :( Вообщем пока ищу бубен!

Еще, если не затруднит, скажите свое напряжение на 33, 34 ногах Mega8535 (тот самый делитель) У меня 4.04В - это так и должно быть?

Добавлено: Пн июл 20, 2009 18:01:37
htscooter
Мой "китаец" показывает 4,00 вольта. Теоретически должно быть 4,03 с копейками. Что еще может быть - даже не знаю, впринципе сдесь все уже обсосано донельзя - монтаж, напряжения, фьюзы, правильность печатки...

Добавлено: Пт июл 31, 2009 11:37:44
viktor110668
я сделал паралельный програматор elm chan
вот только софт работает из под дос
с командной строки немного неудобно зато микрухи оживают
попробую прикрепить макет платы которую я нарисовал
у меня усё работает

ParaProg

Добавлено: Ср авг 05, 2009 08:35:23
RA3VIE
Всем Привет!!!
Закончил сборку программатора "ПараПрог", подключил к компу, в итоге программа из трёх ATMega8
(У одной отключён SPI-режим, у второй напутаны LOW-биты, третья заведомо рабочая) программа увидела только вторую
Мегу, но програмировать Low-биты отказывается - пишет что вроде всё ОК! А в итоге все Low-биты остаются по старому
(во всех клетках галки), другие фузы программирует нормально!
Затем подключил новую (ни разу не програмировалась) Мегу16,
програматор ее увидел сразу, фузы показал заводские (не однои краснои
надписи небыло). Решил в порядке эксперимента заблокировать фуз
SPIEN, поставил на него галку и нажал "Записать", после повторного
чтения МК я увидел что этот фуз заблокировался успешно, но вместе с
ним галки появились во всеи колонке Low-фузов. Штобы проверить состоя
ние Low-фузов, я обратно разблокировал SPIEN и подключил МК к
програматору 5 проводков, в Унипрофе я увидел что на всех Low-фузах
дествительно стоят галки! Следовательно напрашивается вывод, что либо
программатор, либо программа принудительно записывает эти фузы! Не
случалось ли ни у ког из вас такого прикола, и что с этим можно сделать?
Да, забыл сказать, что по светодиодам, впаянным вместо опто-реле
видно, что на программируемыи МК с момента включения программатора
непрерывно подаётся 12В, а светодиод (5В) кратковременно моргает
только при чтении-записи МК (на контактах 5-6 и 7-8 стоят перемычки),
я попробывал выпаять перемычку 5-6(5В), в результате неизменилось
ровным счетом ничего - МК также читается и пишется (не считая
Low-фузов)без напряжения питания (5В)! Может что-то не так с прошивкои
самого программатора (В принципе она же из статьи)?
Что вы можете подсказать по этому поводу?

Добавлено: Ср авг 05, 2009 11:40:34
Алексей П
Chi-Nick проверь есть ли 12В на ресете, возможно причина в этом.

Добавлено: Ср авг 05, 2009 11:41:38
DiGiCat
Биты защиты в каком состоянии? Пробовалось выполнить "Стереть кристалл"? С некоторыми установленными битами защиты чтение и перезапись Flash и EEPROM заблокированы как для параллельного, так и для последовательного режимов программирования, изменение Fuse-битов так же не возможно, возможно из-за этого траблы возникают.
По какой схеме программатор собран не совсем понятно..

Добавлено: Ср авг 05, 2009 12:43:38
RA3VIE
DiGiCat писал(а):Биты защиты в каком состоянии? Пробовалось выполнить "Стереть кристалл"? С некоторыми установленными битами защиты чтение и перезапись Flash и EEPROM заблокированы как для параллельного, так и для последовательного режимов программирования, изменение Fuse-битов так же не возможно, возможно из-за этого траблы возникают.
По какой схеме программатор собран не совсем понятно..
Это мне вопрос? Если мне, то фузы установленны как на рисунке (см. приложение). ParaProg собирал по схеме с MAX232 на плате от Sailansera

Добавлено: Ср авг 05, 2009 17:03:09
Chi-Nick
Алексей П писал(а):Chi-Nick проверь есть ли 12В на ресете, возможно причина в этом.
Проверял. Импульс очень короткий! Осциллографом видно, что есть, но успевает ли обработаться неясно!. При нажатии и удерживании reset (для программатора, т.е. когда желтый светодиод горит) на адаптере (на программируемой МС) на resete 11.85V есть!

Добавлено: Сб авг 08, 2009 13:46:30
htscooter
В высоковольтном режиме без 12-ти вольт у меня тоже всякий бред показывает и во фьюзах все галки стоят. Так что, как сказал Алексей П, смотри в эту сторону. В процессе программирования 12 вольт должны быть все время, а не импульсом.
Я вот тут поигрался с драйверами на FT-шку. Довольно интересный результат получился :) На производительность конешно не влияет :)) , но глаза радует :))). Результат во вложении :)

Добавлено: Сб авг 08, 2009 20:27:31
sema
прикольно! :) а описать подробнее "игры" можете, у меня руки никак до этого не доходят :roll:

Добавлено: Сб авг 08, 2009 20:55:50
htscooter
В папке с драйверами (у меня CDM 2.04.06 WHQL Certified называется) в файлах ftdibus.inf и ftdiport.inf нужно прописать что нужно, там в самом низу:

Код: Выделить всё

[Strings]
Ftdi="FTDI"
DESC="CDM Driver Package"
DriversDisk="FTDI USB Drivers Disk"
USB\VID_0403&PID_6001.DeviceDesc="HV_Prog"
USB\VID_0403&PID_6010&MI_00.DeviceDesc="USB Serial Converter A"
USB\VID_0403&PID_6010&MI_01.DeviceDesc="USB Serial Converter B"
SvcDesc="USB Serial Converter Driver"
ClassName="USB"
и

Код: Выделить всё

[Strings]
FTDI="FTDI"
DESC="CDM Driver Package"
DriversDisk="FTDI USB Drivers Disk"
PortsClassName = "Ports (COM & LPT)"
VID_0403&PID_6001.DeviceDesc="HV_Prog"
VID_0403&PID_6010.DeviceDesc="HV_Prog"
SvcDesc="USB Serial Port Driver"
SerEnum.SvcDesc="Serenum Filter Driver"
Если микрух больше одной, то, как я понял, нужно выставлять VID/PID у каждой свой (в MProg'е). Ну и соответственно в драйверах (эти же файлы, и еще ftd2xx.h) VID/PID нужно править на свой. Получится отдельные папки с дровами под каждую микруху. Может я что-то и не так понял, но работает :)))

Добавлено: Сб авг 08, 2009 21:12:43
sema
кстати я наконец то довел до "ума" свой программатор (читать - упаковал в корпус) :)) 8)
Изображение

Добавлено: Сб авг 08, 2009 21:44:26
htscooter
Красиво! А меня все время что-то отвлекает :(

Добавлено: Вс авг 09, 2009 15:46:51
Cyber
Собрал программатор по следующей схеме. На вход RESET с КТ361Б почемуто подается 9,8В вместо 12В. Уже пробовал подбирать номиналы резистора в базе 361 - не помогает. Вроде у кого-то была такая проблема здесь, как решили? Или я с транзисторами вообще не дружу? :oops:
Что интересно на запрос сигнатуры у mega8 мега отвечает последним принятым байтом(т.е. адресом байта сигнатуры). Причем напряжение на ее выходах 4.5В почти как Vcc от USB (у меня оно как раз =4,6В), в то время как на входы данных меги подаются не более 3.3В. Этот глюк меги связан с заниженым Vpp?

Добавлено: Пн авг 10, 2009 08:16:46
Chi-Nick
htscooter писал(а):В высоковольтном режиме без 12-ти вольт у меня тоже всякий бред показывает и во фьюзах все галки стоят. Так что, как сказал Алексей П, смотри в эту сторону. В процессе программирования 12 вольт должны быть все время, а не импульсом.
В том то и дело, что если я правильно понял, то 12В подается как только в прогамме нажимаешь кнопку читать или прогаммировать, а не постоянно... Если не так-поправьте, может у меня только в этом и проблемма! У меня желтый светодиод только при нажатии Reset prog на плате или кнопок чтение/запись в программе загорается на полсекунды примерно, и выскакивает ошибка. Я думал, что при нажатии в прогамме запиись или чтение, сначала проверяется готовность программируемой МС и только если все готово, то начинается процесс программирование, где 12В уже не импульсом, а пока идет процесс...
Как, все-таки, должно хотябы внешне выглядеть HV программирование на HVProg?!

Добавлено: Пн авг 10, 2009 10:34:21
Cyber
У кого-нибудь вообще avrpp заработал?
Уже решил проблему с питанием, но все равно не хочет работать.
Вот как выглядит процедура инициализации у avrpp:

Код: Выделить всё

int init_devices ()
{
	DWORD adr;
	char *const DetMode[] = {"PAR", "HVS", "HVS15" };
        char tmp_str[50];

	/* Execute initialization if not initialized yet */
	if(Device != NULL) return (0);
	if(initialize_port()) return (RC_INIT);

	MESS("Put a device on the socket...");
//	getchar();
        for (int i = 0; i < 10; i ++) {
          MESS(".");
          delay_ms(1000);
        }
        MESS("\n");

	for (CtrlPort.Mode = 0 ; CtrlPort.Mode < 3; CtrlPort.Mode++) {
		power_on(1);
		/* read device signature */
		for(adr = 0; adr <3>ID != N0000; Device++) {
			if(memcmp(SignBuff, Device->Sign, 3) == 0) break;
		}
		if (Device->ID != N0000) break; /* Break if a device is detected */
		power_on(0);
//		fprintf(stderr, "%s->Unknown device (%02X-%02X-%02X).\n",
//				DetMode[CtrlPort.Mode], SignBuff[0], SignBuff[1], SignBuff[2]);
т.е. 12В подается на время считывания:

Код: Выделить всё

void power_on (int sw)
{
	WORD d;
	int n;


	if(!sw) {	/* Power OFF */
//		_outp(LPT_CTL, RegCtl |= B_VPP);	/* Vpp off */
                PIO_Clear(&pinVPP);
                PIO_Set(&pinLED17);                 //
		delay_ms(1);						/* 1ms */
//		_outp(LPT_DAT, RegDat = 0);			/* Signals = L */
                PIO_Clear(&pinXT1);
                PIO_Clear(&pinOE);
                PIO_Clear(&pinWR);
                PIO_Clear(&pinBS1);
                PIO_Clear(&pinXA0);
                PIO_Clear(&pinXA1);
                //PIO_Set(&pinXA0);
                //PIO_Set(&pinXA1);
                PIO_Clear(&pinDATA0_DO);
                PIO_Clear(&pinDATA1_DO);
                PIO_Clear(&pinDATA2_DO);
                PIO_Clear(&pinDATA3_DO);
                PIO_Clear(&pinDATA4_DO);
                PIO_Clear(&pinDATA5_DO);
                PIO_Clear(&pinDATA6_DO);
                PIO_Clear(&pinDATA7_DO);
//		_outp(LPT_CTL, RegCtl |= B_VCC);	/* Vcc off */
                PIO_Clear(&pinVCC);
		delay_ms(10);						/* 10ms */
		return;
	}

	/* Power ON */

/* For parallel device */
//	_outp(LPT_CTL, RegCtl &= (BYTE)~B_VCC);	/* Vcc on */
        PIO_Clear(&pinXT1);
        PIO_Clear(&pinOE);
        PIO_Clear(&pinWR);
        //PIO_Set(&pinBS1);
        PIO_Clear(&pinBS1);
        PIO_Clear(&pinXA0);
        PIO_Clear(&pinXA1);
        //PIO_Set(&pinXA0);
        //PIO_Set(&pinXA1);
        PIO_Clear(&pinDATA0_DO);
        PIO_Clear(&pinDATA1_DO);
        PIO_Clear(&pinDATA2_DO);
        PIO_Clear(&pinDATA3_DO);
        PIO_Clear(&pinDATA4_DO);
        PIO_Clear(&pinDATA5_DO);
        PIO_Clear(&pinDATA6_DO);
        PIO_Clear(&pinDATA7_DO);
        
        PIO_Set(&pinVCC);
	if (!CtrlPort_->Quick) {
		IODLY(3000);                
		for (n = 0; n < 6; n++) {	//3		/* Toggle XTAL1 six times */
//			_outp(LPT_DAT, B_XT1);
//			_outp(LPT_DAT, 0);
                        PIO_Set(&pinXT1);
                        PIO_Clear(&pinXT1);
		}
	}
//	_outp(LPT_DAT, RegDat = B_OE);			/* OE = H */
        PIO_Clear(&pinXT1);
        PIO_Set(&pinOE);
        PIO_Clear(&pinWR);
        //PIO_Set(&pinWR);
        PIO_Clear(&pinBS1);
        PIO_Clear(&pinXA0);
        PIO_Clear(&pinXA1);
        //PIO_Set(&pinXA0);
        //PIO_Set(&pinXA1);
        PIO_Clear(&pinPAGEL);
//	_outp(LPT_CTL, RegCtl &= (BYTE)~B_VPP);	/* Vpp on */
        PIO_Set(&pinVPP);
        PIO_Clear(&pinLED17);         //
//	_outp(LPT_DAT, RegDat |= B_WR);			/* WR = H */
        PIO_Set(&pinWR);
	delay_ms(1);							/* 1ms */
	return;
}
вроде все по документации атмела (кроме некоторых вещей), уже вносил небольшие изменения, но не помогает.