Zebra ao trocar um ATmega328-PU por um ATmega328P-PU

Comprei 2 ATmega328P-PU ‘s como backup do original ATmega328-PU dos meus UNO's Rev3 e Rev1. Eles já vieram com o bootloader e também com um sketch default que pisca um led. Quando eu faço o upload de um novo sketch, ambos funcionam certinho executando o novo código.

Mas, quando eu desligo os UNO's e depois os religo, o sketch que executa é o default (que pisca o led) e não o novo que fiz o upload.

Já procurei em vários foruns. O Ricardo Pedroso também já me ajudou. Poré, tudo sem sucesso. A melhor explicação que achei foi que, embora ambos sejam compatíveis (328P-PU e 328-PU), eles são diferentes e possuem parâmetros, certificados diferentes. Como eu não achei em lugar algum uma maneira de informar ao Arduino que o chip náo é mais o 328-PU, mas sim o 328P-PU, continuo tendo que fazer upload toda vez que ligo o UNO com os novos chips.

Algumas pessoas também disseram que é "pau" do bootloader e que eu deveria gravá-lo novamente. A própria ATmell nao quis responder, dizendo que era para ver com a turma do Arduino.

Ainda não quis tentar regravar com receio de perder os chips por falta de conhecimento que justifique o caso ou mesmo barbeiragem na hora de regravar.

Tenho os 2 arduinos, mas não tenho um gravador. Já vi tutoriais de como usar 2 Arduinos para regravar, mas a maioria não falava sobre esses MCU's.

E ai, pessoal, alguma orientação ?

Desde já obrigado.

Paulo Jericoh

Exibições: 3904

Responder esta

Respostas a este tópico

procura por optiloader, e´um sketch que identifica e grava o optiboot(padrão do arduino 1.0) no chip do atmega mesmo

sendo 8 , 168 328 e 328p é muito fácil.

Caros solidários de bootloader,

seguindo a experiência do Luis de gravar sem o crisal e eu ainda sem sucesso, encontrei esse link http://arduino.cc/en/Tutorial/ArduinoToBreadboard. Ele orienta a incluir um novo hardware na IDE. Essa nova board é a "Atmega328 numa breadboard com 8Mhz", isto é, com o clock interno de 8Mhz, sem o externo de 16Mhz.

Ele usa realmente um mínimo de componentes para funcionar o Atmega. No caso do UNO, eles ainda recomendam desabilitar o AutoReset. Agora entendo o porquê do Luis pontuar para me lembrar do capacitor de 10uF, pois é ele quem faz essa função ao ser ligado no RESET.

 

Fiz tudo e gravou perfeitamente, sem qualquer erro ! Mas...

 

Porém... todavia...quando fui fazer upload no chip com o bootloader novo, ele não fez o upload ! Até a mensagem de "Done uploading." ele apresenta e em seguida a "avrdude: stk500_getsync(): not in sync: resp=0x00", conforme imagem abaixo:

Pelo que já me informei, esse é um caso genérico de "não responder" e, de fato, ao fazer o upload, o RX pisca, mas o TX fica apagado.

O mais intessante: ao ligar, o sketch default de piscar é executado. Pensei que já tivesse ido par o espaço ao gravar o bootloader novo. Será que gravou ? 

Desde já agradeço a todos, mas a "novela" continua e já me sinto incompetente diante dessa reconhecida "facilidade"... com o cristal !

Para fazer o upload,  vc substituiu o chip novo pelo chip do UNO? deu o mesmo erro?

Na breadboard, vc  está usando o reset como: Conectado no reset do UNO  ou manualmente com o GND? 

abç

Ricardo, 

depois que passei a fase de não gravar e entrei no "não upload" após gravado, eu retirava o chip da breadbord e o colocava no arduino como se tivesse nascido lá.

Veja na explicação final que ainda ficou algo no ar, pois depois que caiu a ficha de que eu não tinha um cristal avulso, mas tinha outro arduino, acabou dando certo.

Contudo, quando copiei do original 328-PU para o 328P-PU não deu certo, apresentando a mensagem da imagem. Mas quando copiei do 328P-PU para o 328P-PU.. funcionou. Só faz sentido se estivesse faltando algum parâmetro que passou a ser preenchido pelo arduino quando os chips eram iguais. Valeu de qualquer forma.

Eu acho que você se perdeu nesse processo todo, se você conseguiu nós informe. 

Vamos por partes: 

1º) Tenha certeza que seu Arduino UNO está com o chip original instalado ATMEGA328P-PU;

2º) Você não precisa ter o Cristal de 16 MHz para gravar o bootloader no novo chip; 

3º) Monte numa protoboard o chip novo ATMEGA328-PU, conforme a imagem do link: http://arduino.cc/en/uploads/Tutorial/SimpleBreadboardAVR.png , coloque o capacitor de 10uF entre o GN e o RESET (no caso do UNO);

4º) Na IDE do Arduino, procure o sketch ArduinoISP, e carregue no Arduino;

5º) Na IDE altere o programador para Arduino as ISP;

6º) Na IDE, no menu Tools, escolha Burn Bootloader; as luzes do RX/TX irão piscar e está pronto o processo;

Agora troque o chip original do Arduino pelo backup, e faça os testes, tem que funcionar. 

Luís,

o chip original instalado é o ATMEGA328-PU, tanto no Arduino UNO Rev1, quanto no Rev3. Já os dois NOVOS são o ATMEGA328P-PU.

Realmente já devo ter me perdido, mas essa troca acima me chamou a atenção para o fato de que estou apanhando a toa, pois embora eu não tenha um cristal sobrando, eu tenho outro arduino. 

Então fiz tudo de novo de Arduino para Arduino. Coloquei o original 328-PU no arduino mais velho Rev1 e o 328P-PU no mais novo Rev3 e... não funcionou, conforme imagem abaixo.

Então tirei o velho 328-PU e coloquei o outro NOVO 328P-PU no Rev1. Copiei e.. funcionou. Ambos estão aceitando upload. Mas... por que ? Não entendi, mas estou feliz por ter funcionando.

Talvez tenha mais alguma "mágica" a ser feita que, ao usar os dois arduinos de um Rev1 para gravar no Rev3, "acerta" o que estava faltando. Pura sacação, mas estão funcionando.

Valeu a todos e, se quiserem fazer algum teste, estou à disposição, porque não ficou bem explicado, embora tenha dado certo.

Obrigado.

Note a mensagem: avrdude: Yikes! Invalid device signature. Isso quer dizer que o software não reconheceu o novo dispositivo que você tentou acessar. Cada modelo de chip tem uma assinatura, e isso tem que ser informado na configuração do  avrdude. 

Como acertar isso:

Abra o arquivo C:\arduino-1.0.1\hardware\tools\avr\etc\avrdude.conf e vá para o final do arquivo, e copie o seguinte para o mesmo:

#------------------------------------------------------------
# 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;

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 x x x x x 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";
;
;

// copie até o segundo ponto e vírgula. 

Cole no arquivo avrdude.conf e salve. 

Pronto, quando for gravar um bootloder nestes ATMEGA328-PU, o programa não dará mais erro. 

Note que neste mesmo arquivo você terá uma referência ao ATMEGA328P, sendo que este é chip que venho originalmente no Arduino. 

Feito isso, tente novamente o procedimento de gravação do bootloader para você praticar e ver que a coisa é muito simples de ser realizada. 

Uma boa dica que te dou é, observe sempre as mensagens de erros da IDE do arduino, caso não entenda o que quer dizer, copie e cole no google, normalmente aparece alguma solução, ou pelo menos te abre um plano de estudo do problema, evitando muita dor de cabeça. Claro que a medida do possível, nós aqui do fórum, estamos sempre dispostos a ajudar também. 

Nossa, Luís, como eu procurei o lugar onde se parametriza cada chip ! E eu já tinha visto esse arquivo a partir de outros foruns, mas sempre era um conteúdo não TXT. Agora que você falou, eu percebi que aparecia para mim um conteúdo "bagunçado" por causa da falta do CRLF no final de cada linha. Provavelmente esse arquivo deve ter vindo de um SO não Windows.

Curioso que você repete que o original é o 328P-PU, mas os meus UNOS vieram com o 328-PU. O Arduino MINI - sim - veio com o 328P-AU. Os novos que comprei são os 328P-PU e não os 328.

O mais interessante foi que tinha no AVRDUDE os parâmetros para o chip 328P-PU e eu não tinha esse hardware. Somente agora eu coloquei os parâmetros que você enviou para o 328-PU... que eu já tinha antes o hardware, tanto com a Rev1 quanto com a Rev3 e tudo funcionava certinho.

Obrigadão mesmo pela ajuda e esteja certo de que só consegui manter esse diálogo e acabar resolvendo porque li muito o que fui encontrando no "oráculo Google" antes de "pagar o mico" dessa surra.

Obrigadão !!!!

Será que eu me confundi também ! rs
Nos meus três UNOs vieram o ATMEGA328P-PU.


O outro ATMEGA328-PU, comprei,  sem bootloader, e quando fui gravar os mesmos, tive esse problema com assinatura do chip (hardware signature). 

Esse trecho do config que coloquei anteriormente, está no meu avrdude.conf. 

Na verdade é só configurar esse arquivo, que você usa um ou outro chip, e não faz a menor diferença para o Arduino.

Se você é o tipo de pessoa que pesquisa antes de perguntar, então ganhou mais 10 pontos...rs 
A gente leva umas "surras" mas pelo menos aprende.

É isso ai !

Permita-me mexer na sua frase: A gente leva umas "surras" e aprende !

Obrigado.

Valeu, Fábio. Obrigado.

Fico feliz pelo apoio e por saber que cada um teve sua facilidade.

Mas como existem várias versões, incluisve entre usar e/ou não usa o optiloader, vejo que é uma "simplicidade" relativa.

O importante é que "vários caminhos chegam até Roma!" e com um pouco de cada, o LdG se fortalece.

XIK !

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço