Прошивка Atmega 328P AU

DIGIUS
Offline
Зарегистрирован: 17.09.2015

Для уменьшения конечной платы вот этого проекта  я решил отказаться от платы Arduino pro mini и использовать Atmega328. 
Для прошивки и программирования Atmega я научился кидать схемы в Sprint-Layout и травить платы. Собственно найдя на просторах YouTube схему для прошивки я раскидал аналог и затравил, подключил к usbasp программатору и скачав  AVRDUDE_PROG и khazama AVR Programmer решил для проверки соединения прочитать что есть в чипе, в ответ я получил следующие сообщения из khazama:


Для программирования использовал следующую плату:

По прозвонке от ног программатора до ног Atmega 328 всё правильно, VCC>VCC,MISO>MISO,SCK>SCK, и.т.д. На программаторе перемычка стоит на 5 вольт, дрова ставил от сюда, в программаторе стоит Atmega 8. 
Подскажите где проблема?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

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

DIGIUS
Offline
Зарегистрирован: 17.09.2015

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

DIGIUS пишет:

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

обычно трабл в ДНК владельца программатора

DIGIUS
Offline
Зарегистрирован: 17.09.2015

Большое спасибо, очень полезно и информативно. Проверил именно в этом проблема, уже исправил и Atmega отрастила волосатые ноги изнасиловала попугая и прыгнула в окно с криками: "надо исцелить планету и уничтожить человечество" и побежала в сторону завода по производству ракет.
И конечно же тебе привет передала.

bwn
Offline
Зарегистрирован: 25.08.2014

Тебе ведь Клапауций прямо подсказал, ты его не услышал, теперь обижаешься.

DIGIUS
Offline
Зарегистрирован: 17.09.2015

"Тебе ведь Клапауций прямо подсказал" что подсказал?, что проблема во мне?, ну я это и так знаю и обратился за помощью в и поиске места где я промахнулся а не фразой: "сам дурак ищи проблему".

toc
Offline
Зарегистрирован: 09.02.2013

Digius,
если есть свободная ардуина (нано, уно, мега) сделайте из неё программатор. В примерах есть спец скетч ArduinoISP

DIGIUS
Offline
Зарегистрирован: 17.09.2015

Спасибо, это я и уже делаю.

bwn
Offline
Зарегистрирован: 25.08.2014

DIGIUS пишет:

"Тебе ведь Клапауций прямо подсказал" что подсказал?, что проблема во мне?, ну я это и так знаю и обратился за помощью в и поиске места где я промахнулся а не фразой: "сам дурак ищи проблему".

Перечитай еще раз его первый пост.

DIGIUS
Offline
Зарегистрирован: 17.09.2015

В общем переподключил Atmega 328 с программатора на arduino nano.

Настройки IDE такие:

Для подключения использовал следующую схему:

естественно с тем условием что я использую TQFP корпус.
Всё подключил верно, всё прозвонил и при прошивке бутлоадера получаю следующую ошибку:
 

avrdude: Expected signature for ATmega328P is 1E 95 0F
         Double check chip, or use -F to override this check.
Ошибка при записи загрузчика.

погуглив я понял что проблема в сигнатуре и лечиться она переписыванием 

1E 95 0F на вот это 1E 95 14

в файле  avrdude.conf который лежит в дирректори по пути (в моём случае):C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
только вот проблема сигнатура 1E 95 0F осталось только в одном месте (использую я IDE версии 1.8.3):
 

#------------------------------------------------------------
# ATmega328
#------------------------------------------------------------

part
    id			= "m328";
    desc		= "ATmega328";
    has_debugwire	= yes;
    flash_instr		= 0xB6, 0x01, 0x11;
    eeprom_instr	= 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
			  0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
			  0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode	= 0x86;
    # avr910_devcode	= 0x;
    signature		= 0x1e 0x95 0x14;
    pagel		= 0xd7;
    bs2			= 0xc2;
    chip_erase_delay	= 9000;
    pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
		 "x x x x x x x x x x x x x x x x";

    chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
		 "x x x x x x x x x x x x x x x x";

    timeout	= 200;
    stabdelay	= 100;
    cmdexedelay	= 25;
    synchloops	= 32;
    bytedelay	= 0;
    pollindex	= 3;
    pollvalue	= 0x53;
    predelay	= 1;
    postdelay	= 1;
    pollmethod	= 1;

    pp_controlstack =
	0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay	= 100;
    progmodedelay	= 0;
    latchcycles		= 5;
    togglevtg		= 1;
    poweroffdelay	= 15;
    resetdelayms	= 1;
    resetdelayus	= 0;
    hvleavestabdelay	= 15;
    resetdelay		= 15;
    chiperasepulsewidth	= 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    ocdrev              = 1;

    memory "eeprom"
	paged		= no;
	page_size	= 4;
	size		= 1024;
	min_write_delay = 3600;
	max_write_delay = 3600;
	readback_p1	= 0xff;
	readback_p2	= 0xff;
	read = " 1 0 1 0 0 0 0 0",
	       " 0 0 0 x x x a9 a8",
	       " a7 a6 a5 a4 a3 a2 a1 a0",
	       " o o o o o o o o";

	write = " 1 1 0 0 0 0 0 0",
	      	" 0 0 0 x x x a9 a8",
		" a7 a6 a5 a4 a3 a2 a1 a0",
		" i i i i i i i i";

	loadpage_lo = " 1 1 0 0 0 0 0 1",
		      " 0 0 0 0 0 0 0 0",
		      " 0 0 0 0 0 0 a1 a0",
		      " i i i i i i i i";

	writepage = " 1 1 0 0 0 0 1 0",
		    " 0 0 x x x x a9 a8",
		    " a7 a6 a5 a4 a3 a2 0 0",
		    " x x x x x x x x";

	mode		= 0x41;
	delay		= 20;
	blocksize	= 4;
	readsize	= 256;
    ;

    memory "flash"
	paged		= yes;
	size		= 32768;
	page_size	= 128;
	num_pages	= 256;
	min_write_delay = 4500;
	max_write_delay = 4500;
	readback_p1	= 0xff;
	readback_p2	= 0xff;
	read_lo = " 0 0 1 0 0 0 0 0",
		  " 0 0 a13 a12 a11 a10 a9 a8",
		  " a7 a6 a5 a4 a3 a2 a1 a0",
		  " o o o o o o o o";

	read_hi = " 0 0 1 0 1 0 0 0",
		  " 0 0 a13 a12 a11 a10 a9 a8",
		  " a7 a6 a5 a4 a3 a2 a1 a0",
		  " o o o o o o o o";

	loadpage_lo = " 0 1 0 0 0 0 0 0",
		      " 0 0 0 x x x x x",
		      " x x a5 a4 a3 a2 a1 a0",
		      " i i i i i i i i";

	loadpage_hi = " 0 1 0 0 1 0 0 0",
		      " 0 0 0 x x x x x",
		      " x x a5 a4 a3 a2 a1 a0",
		      " i i i i i i i i";

	writepage = " 0 1 0 0 1 1 0 0",
		    " 0 0 a13 a12 a11 a10 a9 a8",
		    " a7 a6 x x x x x x",
		    " x x x x x x x x";

	mode		= 0x41;
	delay		= 6;
	blocksize	= 128;
	readsize	= 256;

    ;

    memory "lfuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
	      	"x x x x x x x x i i i i i i i i";
    ;

    memory "hfuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
	      	"x x x x x x x x i i i i i i i i";
    ;

    memory "efuse"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
	       "x x x x x x x x o o o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
	      	"x x x x x x x x x x x x x i i i";
    ;

    memory "lock"
	size = 1;
	min_write_delay = 4500;
	max_write_delay = 4500;
	read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
	       "x x x x x x x x x x o o o o o o";

	write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
	      	"x x x x x x x x 1 1 i i i i i i";
    ;

    memory "calibration"
	size = 1;
	read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
	       "0 0 0 0 0 0 0 0 o o o o o o o o";
    ;

    memory "signature"
	size = 3;
	read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
	       "x x x x x x a1 a0 o o o o o o o o";
    ;
;

part parent "m328"
    id			= "m328p";
    desc		= "ATmega328P";
    signature		= 0x1e 0x95 0x0F; #-----Вот тут

    ocdrev              = 1;

И вот в чём дело, меняя сигнатуру в этом месте и сохраняя файл с последующей перезагрузкой IDE выходит та же проблема.

На случай что все эти действия я провожу не в той дирректории я проверил и по пути:
C:\Users\%Username%\Documents\Arduino\hardware b папки tools там нет.

Подскажите куда копать?
Заранее спасибо. 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

какое переписывание сигнатуры? - у вообще сигнатура не читается, ни правильная - никакая.

17486350_m.png

DIGIUS
Offline
Зарегистрирован: 17.09.2015

это была попытка с программатором, теперь пытаюсь шить через нанку, всё в моём последнем посте.

Я же написал:
 

avrdude: Expected signature for ATmega328P is 1E 95 0F
         Double check chip, or use -F to override this check.
Ошибка при записи загрузчика.

 

toc
Offline
Зарегистрирован: 09.02.2013

Digius,
1. это полный текст ошибки ? в #12
2. опишите словами что как подключено. раз картинка не в полной мере отражает действительность. плюс пару чётких фотографий дайте
3. в скетче arduinoisp используются светики

// Put an LED (with resistor) on the following pins:
// 9: Heartbeat - shows the programmer is running
// 8: Error - Lights up if something goes wrong (use red if that makes sense)
// 7: Programming - In communication with the slave

что они у вас показывают. до, во время, после?

я подключаю один rgb светик. сответственно: 9-синий, 8-красный, 7-зелёный.

4. а тут правильно?
http://arduino.ru/forum/obshchii/pin-mapping-sootvetstvie-vyvodov-i-regi...

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DIGIUS пишет:

это была попытка с программатором, теперь пытаюсь шить через нанку, всё в моём последнем посте.

Я же написал:

avrdude: Expected signature for ATmega328P is 1E 95 0F
         Double check chip, or use -F to override this check.
Ошибка при записи загрузчика.

Ну и? Там написано, что ожидаемая сигнатура для ATmega328P - 1E 95 0F. О том, какая сигнатура прочиталась на самом деле - там нет ни слова. Возможно она вообще не прочиталась - 000000, о чём и написал Клапауций.

Чтобы увидеть это, в настройках Arduino IDE ("Файл" - "Настройки") поставить галочку "Показать подробный вывод" - "Загрузка". Тогда будет видно, какая сигнатура прочиталась. Или вообще не прочиталась (000000), тогда никакое переписывание сигнатур в avrdude.conf не поможет.

DIGIUS
Offline
Зарегистрирован: 17.09.2015

Спасибо за ответ, забыл я про подробный вывод, уж обычно мешал он вот сообщение с подробным выводом:
 


avrdude: Version 6.3, compiled on Jun 22 2016 at 16:05:21
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Users\PC\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino2/etc/avrdude.conf"

         Using Port                    : COM10
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : STK500
         Description     : Atmel STK500 Version 1.x firmware
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Ошибка при записи загрузчика.
Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0xff0000
avrdude: Expected signature for ATmega328P is 1E 95 0F
         Double check chip, or use -F to override this check.

avrdude done.  Thank you.

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DIGIUS пишет:

от сообщение с подробным выводом:

avrdude: Device signature = 0xff0000

Ну о чём и говорили - сигнатура корректно не читается.

DIGIUS
Offline
Зарегистрирован: 17.09.2015

Если я правильно понял то на пол шишечки мк всё же прочитался:
 

eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
 flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff

Или нет?
И как же сделать читаемую сигнатуру?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Цитата:

Если я правильно понял то на пол шишечки мк всё же прочитался:

Или нет?

Х/з если честно... 

Цитата:

И как же сделать читаемую сигнатуру?

МК новый с магазина? Тогда там должны быть "заводские" фьюзы: МК настроен на тактирование от внутреннего осциллятора с частотой 1МГц. Из-за небольшой тактовой частоты, частота SCK программатора тоже должна быть не очень большой. Иначе могут быть проблемы с корректным считыванием МК. В частности на программаторе USBasp для этого есть джампер JP3, который понижает частоту SCK. Установите его. И ещё: длинна проводков от программатора к МК не должна быть слишком большой  - не более 10-15 см.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

проверь, плз, что у тебя в этой строке ArduinoISP:

#define SPI_CLOCK         (1000000/6)

может оказаться, что скорость великовата.

328ые могут с завода идти какие угодно. Должны идти - на 1 МГц, а на самом деле - х.з.

DIGIUS
Offline
Зарегистрирован: 17.09.2015

#define SPI_CLOCK (1000000/6) скорость такая, но вот что поставить в замен или какой диапазон использовать.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

DIGIUS
Offline
Зарегистрирован: 17.09.2015

Все я разобрался. Самое интерестное оказалось в том что на стационарнике с которого я заливал скетчи в нанку все хорошо работало в плане скетчей, и тут я что то вспомнил что на 3д принтер никак нормально не вставали дрова, при том что как мозги там используеться атмега. Подключаю я значит к ноуту где дрова на принтер нормально встали и о чудо все прошилось и залетают скетчи в атмегу замечательно.
Всем спасибо за потраченное время!