Problema ao gravar no Arduino Mega - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-28T21:29:59Zhttps://labdegaragem.com/forum/topics/problema-ao-gravar-no-arduino-mega?commentId=6223006%3AComment%3A739793&feed=yes&xn_auth=noolá RV.
De fato eu ima…tag:labdegaragem.com,2020-08-17:6223006:Comment:7400192020-08-17T12:12:57.931ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá RV.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> De fato eu imaginava que algumas pessoas mundo afora já tinham "topado" com esta questão dos <em><strong>três</strong></em> "<em><strong>!"</strong></em>. Isso porque isto está evidenciado logo no início do código do <em><strong>Bootloader</strong></em> do <em><strong>Mega</strong></em>, conforme vc pode ver na figura a seguir:…</span></p>
<p style="text-align: center;"></p>
<p><span style="font-size: 12pt;">olá RV.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> De fato eu imaginava que algumas pessoas mundo afora já tinham "topado" com esta questão dos <em><strong>três</strong></em> "<em><strong>!"</strong></em>. Isso porque isto está evidenciado logo no início do código do <em><strong>Bootloader</strong></em> do <em><strong>Mega</strong></em>, conforme vc pode ver na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/7499668085?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/7499668085?profile=RESIZE_710x" class="align-center"/></a></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Observe que em <em><strong>novembro</strong></em> de <em><strong>2010</strong></em>, "quem" mexia com <em><strong>Bootloader</strong></em> na época, tinha feito uma correção para tratar o problema. Mas então vem a questão: se já mexeram nisso (e já faz bastante tempo), como então ainda ocorre. A resposta pra isso, certamente está nos <em><strong>#define</strong></em> acrescentados no código pra "corrigir" o problema. É quase certo que antes da correção, não haviam os "<em><strong>#define</strong></em>" que permitiam <span style="text-decoration: underline;"><em>desabilitar</em></span> o "<em><strong>Modo Monitor</strong></em>", e aí a coisa era pior. Então a dita "correção" foi acrescentar os <em><strong>#define</strong></em>, e documentar isso. Assim para não usar o "<em><strong>Modo Monitor</strong></em>", basta ir lá no código do <em><strong>Bootloader</strong></em> e comentar a linha que habilita o mesmo. Esta linha é a que mostro na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/7499677681?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/7499677681?profile=RESIZE_710x" class="align-center"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Ocorre no entanto, que a chinesada não está fazendo isso, e quando gravam o <em><strong>Bootloader</strong></em> no <em><strong>Mega</strong></em>, estão gravando uma versão que foi compilada sem comentar a linha mostrada na figura anterior.</span></p>
<p><span style="font-size: 12pt;"> <span style="text-decoration: underline;"><strong><em>Conclusão</em></strong></span>: "resolveram" o problema, mas não eliminaram ele completamente, já que se não for comentada aquela linha no código, vai continuar exatamente do mesmo jeito.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Em minha opinião, até poderiam deixar o "<em><strong>Modo Monitor</strong></em>" habilitado, mas deveriam ter feito uma forma mais segura de entrar nele, como por exemplo detectando uma sequência improvável de 6 caracteres ou então uma mensagem também improvável. Ou seja, atualmente, a "senha" pra entrar no "<em><strong>Modo Monitor</strong></em>" é daquelas que o povo classifica como "fraca", e aí deu no que deu.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> E o maior problema disso, não é quando colocamos <em><strong>strings ASCII</strong></em> no código, pois veja vc que neste caso, aplicando técnicas corretas de depuração (que certamente foi o que o <em><strong>Murilo</strong></em> fez), as pessoas ainda poderão "descobrir" e contornar o problema, ainda que com algum sofrimento. O maior problema é se por uma coincidência, o <em><strong>código Assembly</strong></em> resultar em ter em qualquer lugar, a <em><strong>sequência de três bytes 0x21</strong></em> (<em><strong>código ASCII</strong></em> do "<em><strong>!</strong></em>"). Aí a coisa fica feia, pois como é que alguém vai desconfiar disso? Neste caso, mesmo que a pessoa conheça técnicas de depuração sofisticadas, também vai precisar de uma sorte imensa pra descobrir o problema (nem imagino o quanto de sorte).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja na figura a seguir a localização dos <em><strong>três</strong></em> "<em><strong>!</strong></em>" no <em><strong>HEX</strong> </em>do seu segundo código "<em><strong>TesteMega.ino</strong></em>" (o menor deles):</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/7499690462?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/7499690462?profile=RESIZE_710x" class="align-center"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Mas se vc alterar este <em><strong>HEX</strong></em>, acrescentando a sequência em qualquer lugar nele (e claro, ajustando o CheckSum do HEX de acordo), o problema vai ocorrer da mesma forma.</span></p>
<p><span style="font-size: 12pt;"> E se existir a possibilidade de no <em><strong>Assembly</strong></em> do <em><strong>AVR</strong></em>, aparecer alguma instrução que gere a sequencia de <em><strong>três 0x21</strong></em>, a coisa vai acontecer. Numa análise superficial, a resposta seria sim. Imagine que uma instrução qualquer acesse a Memória no <em><strong>endereço</strong></em> <strong>0x2121</strong> com um operando apontado via "<em><strong>Endereçamento Imediato</strong></em>" do valor <strong>0x21</strong>. Então já viu né? Iria dar zica, e daquelas. Mas eu fiz uma análise das <em><strong>instruções</strong></em> do <em><strong>AVR</strong></em>, e felizmente não encontrei essa possibilidade (ufa!). Mas isso não resolve o problema, pois nada vai impedir que a sequência apareça de uma outra origem qualquer. Então o melhor seria que o "<em><strong>Modo Monitor</strong></em>" estivesse de fato desabilitado no Mega, afinal, quem utiliza este modo? E se alguém fizer uso disto, poderá gravar uma versão com ele habilitado, já que esse uso é pra condições muito específicas.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Valeu pela explicação! Show d…tag:labdegaragem.com,2020-08-16:6223006:Comment:7397942020-08-16T19:29:36.809ZMURILO DE SOUZA ZANGIROLAMIhttps://labdegaragem.com/profile/MURILODESOUZAZANGIROLAMI
<p>Valeu pela explicação! Show de bola.</p>
<p>Demorei pra encontrar o problema, mas agora estou ciente para futuros programas.</p>
<p>Valeu pela explicação! Show de bola.</p>
<p>Demorei pra encontrar o problema, mas agora estou ciente para futuros programas.</p> Boa tarde Sr. EC,
obrigado pe…tag:labdegaragem.com,2020-08-16:6223006:Comment:7397932020-08-16T19:22:59.632Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Boa tarde Sr. EC,</p>
<p>obrigado pela ajuda, realmente "<strong> living and learning</strong>", </p>
<p>Quanto aos "reports",, be cool.</p>
<p></p>
<p>Depois do comentário do amigo MRZ, informando sobre o problema com os 3 sinais de</p>
<p>exclamação, fui pesquisar e descobri um post de um cara em 2012.</p>
<p>E confirma sua descrição, segue abaixo a tradução do texto do cara.</p>
<p>RV</p>
<p>"</p>
<p>Sim, é um bug conhecido no programa mega bootloader (onde se um fluxo de dados de upload…</p>
<p>Boa tarde Sr. EC,</p>
<p>obrigado pela ajuda, realmente "<strong> living and learning</strong>", </p>
<p>Quanto aos "reports",, be cool.</p>
<p></p>
<p>Depois do comentário do amigo MRZ, informando sobre o problema com os 3 sinais de</p>
<p>exclamação, fui pesquisar e descobri um post de um cara em 2012.</p>
<p>E confirma sua descrição, segue abaixo a tradução do texto do cara.</p>
<p>RV</p>
<p>"</p>
<p>Sim, é um bug conhecido no programa mega bootloader (onde se um fluxo de dados de upload tiver três caracteres! Consecutivos (e que podem ser strings constantes ou valores de char em seu esboço, ou apenas três valores de byte equivalentes é a parte do código do enviar o esboço) que faz com que o bootloader pule para um 'modo monitor' aguardando os comandos do monitor do usuário (que nunca virão), interrompendo a operação de carregamento.</p>
<p>Outro bug conhecido do megadoadloader é que ele não lida com interrupções do cronômetro de vigilância corretos como corrigiram no bootloader do Uno. Há mega bootloaders corrigidos / atualizados disponíveis há algum tempo (não tenho certeza de onde encontrá-los), mas no momento um mega bootloader "fixo" ainda não está sendo fornecido com a mega board, nem o IDE tem um mega bootloader atualizado como parte da distribuição do arduino IDE. Basta colocar o arduino mega não recebeu nenhum amor da empresa arduino por um longo tempo. Este bug existe há pelo menos tanto tempo quanto o original mega1280 começou a ser comercializado há vários anos.</p>
<p>"</p>
<p></p>
<p>Texto original</p>
<p>"</p>
<p>Yes, it's a known bug in the mega bootloader program (where if an upload data stream has three consecutive ! characters (and that can either be constant string or char values in your sketch, or just three equivalent byte values is the code part of the uploading the sketch) that causes the bootloader to jump into a 'monitor mode' awaiting user monitor commands (which will never come) thus hanging the up load operation. The other known mega bootloader bug is that it doesn't handle watch dog timer interrupts correct as they did fix in the Uno's bootloader. There has been corrected/updated mega bootloaders available for some time now (not sure where to find it though) but at present a 'fixed' mega bootloader is still not shipping with mega board, nor does the IDE have a updated mega bootloader as part of the arduino IDE distribution. Simply put the arduino mega just has received no love from the arduino company for a long while now. This bug has existed for at least as long as the original mega1280 started shipping several years ago.</p>
<p>"</p> Opa, parece que vc acertou na…tag:labdegaragem.com,2020-08-16:6223006:Comment:7397892020-08-16T19:00:52.913ZEduardohttps://labdegaragem.com/profile/EduardoHenriqueMarcondes
<p>Opa, parece que vc acertou na mosca, Elcids. </p>
<p>Mais uma vez..</p>
<p></p>
<p>Opa, parece que vc acertou na mosca, Elcids. </p>
<p>Mais uma vez..</p>
<p></p> olá grande RV.
Veja o…tag:labdegaragem.com,2020-08-16:6223006:Comment:7398992020-08-16T12:50:41.317ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá grande RV.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja o motivo da "loucura", conforme descrevo no post a seguir.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Estou te devendo alguns "reports". Não me esqueci.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p>
<p><span style="font-size: 12pt;">olá grande RV.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Veja o motivo da "loucura", conforme descrevo no post a seguir.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Estou te devendo alguns "reports". Não me esqueci.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> olá Murilo.
Parece que…tag:labdegaragem.com,2020-08-16:6223006:Comment:7398922020-08-16T12:45:04.611ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá Murilo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Parece que alguma "figurinha" (lá na China provavelmente), está compilando e gravando o <strong><em>Bootloader</em></strong> do <em><strong>Mega</strong></em>, com o "<strong><em>Monitor</em></strong>" habilitado. Ou seja, o <em><strong>Bootloader</strong></em> foi compilado e <span style="text-decoration: underline;"><em>gravado em Fábrica</em></span> com a possibilidade de se usar o…</span></p>
<p><span style="font-size: 12pt;">olá Murilo.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Parece que alguma "figurinha" (lá na China provavelmente), está compilando e gravando o <strong><em>Bootloader</em></strong> do <em><strong>Mega</strong></em>, com o "<strong><em>Monitor</em></strong>" habilitado. Ou seja, o <em><strong>Bootloader</strong></em> foi compilado e <span style="text-decoration: underline;"><em>gravado em Fábrica</em></span> com a possibilidade de se usar o "<em><strong>Modo Monito</strong></em>r", caso isto seja requerido via "<span style="text-decoration: underline;"><em>comando</em></span>" <span style="text-decoration: underline;"><em>recebido via Serial</em></span>.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> E adivinha como o <em><strong>Bootloader</strong></em> detecta que vc quer usar o "<em><strong>Modo Monitor</strong></em>" ?</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Ele simplesmente fica "trilhando" os caracteres recebidos via Serial, à procura de justamente <span style="font-size: 14pt;"><strong>três</strong></span> "<span style="font-size: 14pt;"><em><strong>!</strong></em></span>" ( três pontos de exclamação) consecutivamente enviados via <strong>Serial</strong> (apenas quando o <em><strong>Bootloader</strong></em> está executando). Assim, se durante o carregamento do seu código, isto for detectado, ele inicia o "<em><strong>Modo Monitor</strong></em>", e aí o carregamento propriamente dito do código, não prosseguirá.</span></p>
<p><span style="font-size: 12pt;"> Você pode ver isso ocorrendo no código do <em><strong>Bootloader</strong></em> para o <em><strong>Mega</strong></em>, conforme evidencio na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/7486175653?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/7486175653?profile=RESIZE_710x" class="align-center"/></a></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Claro, pode ser que todos os <em><strong>Bootloaders</strong></em> do <em><strong>Mega</strong></em>, gravados de Fábrica, estejam "saindo" com a opção do "<em><strong>Modo Monitor</strong></em>" habilitado (afinal o <em><strong>Mega</strong></em> tem muita <em><strong>Memória Flash</strong></em>, e o código a mais do <em><strong>Monitor</strong> </em>não representará nenhuma penalidade). Na sua placa Murilo, e na do RV, certamente está assim. Muito provavelmente a minha aqui também está (mas eu não tive curiosidade de fazer o teste dos <em><strong>três</strong></em> "<em><strong>!</strong></em>" pra saber).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Então qual a dica? provavelmente removendo um dos três "!", impedirá a detecção. Ou então coloque espaços estre os "!", caso vc realmente precise "levantar a voz".</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero ter ajudado,</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Bom dia MSZ,
eu já tinha fei…tag:labdegaragem.com,2020-08-16:6223006:Comment:7397812020-08-16T12:36:52.571Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Bom dia MSZ,</p>
<p></p>
<p>eu já tinha feito um teste com somente 3 linhas e dava erro qdo usava 3 sinais de !,</p>
<p>e não dava qdo usava somente dois sinais de !.</p>
<p></p>
<p>Testei este sketch com 2 megas diferentes.</p>
<p>O Mega original, que usa o Atmega 8U2 como USB/TTL, dá erro, o mega que não é</p>
<p>original e usa um CH340G como USB/TTL, não dá erro.</p>
<p></p>
<p>Ainda estou pesquisando a razão desta "loucura".</p>
<p></p>
<p>Exemplo super simplificado que estou…</p>
<p>Bom dia MSZ,</p>
<p></p>
<p>eu já tinha feito um teste com somente 3 linhas e dava erro qdo usava 3 sinais de !,</p>
<p>e não dava qdo usava somente dois sinais de !.</p>
<p></p>
<p>Testei este sketch com 2 megas diferentes.</p>
<p>O Mega original, que usa o Atmega 8U2 como USB/TTL, dá erro, o mega que não é</p>
<p>original e usa um CH340G como USB/TTL, não dá erro.</p>
<p></p>
<p>Ainda estou pesquisando a razão desta "loucura".</p>
<p></p>
<p>Exemplo super simplificado que estou usando.</p>
<p></p>
<p><strong><a href="https://storage.ning.com/topology/rest/1.0/file/get/7486091667?profile=original" target="_blank" rel="noopener">TesteMega.ino</a></strong></p>
<p></p>
<p><strong>RV</strong></p>
<p></p> Depois de muito pesquisar, de…tag:labdegaragem.com,2020-08-16:6223006:Comment:7398872020-08-16T00:20:03.872ZMURILO DE SOUZA ZANGIROLAMIhttps://labdegaragem.com/profile/MURILODESOUZAZANGIROLAMI
<p>Depois de muito pesquisar, descobri o problema!</p>
<p>Nas linhas para imprimir no serial monitor, tem a frase: </p>
<p></p>
<p>Serial.println("Relógio está desatualizado!!!");</p>
<p></p>
<p>É só tirar as !, que o problema é resolvido.</p>
<p>Não sei bem o porque do problema, mas acontece apenas com o arduino mega.</p>
<p>Tenta fazer o teste aí.</p>
<p>Retire as ! das seguintes linhas:</p>
<p></p>
<p>25. Serial.println("Relógio está desatualizado.");</p>
<p></p>
<p>48.…</p>
<p>Depois de muito pesquisar, descobri o problema!</p>
<p>Nas linhas para imprimir no serial monitor, tem a frase: </p>
<p></p>
<p>Serial.println("Relógio está desatualizado!!!");</p>
<p></p>
<p>É só tirar as !, que o problema é resolvido.</p>
<p>Não sei bem o porque do problema, mas acontece apenas com o arduino mega.</p>
<p>Tenta fazer o teste aí.</p>
<p>Retire as ! das seguintes linhas:</p>
<p></p>
<p>25. Serial.println("Relógio está desatualizado.");</p>
<p></p>
<p>48. Serial.println("Relógio está desatualizado.");</p> Estou testando esta bibliotec…tag:labdegaragem.com,2020-08-15:6223006:Comment:7398762020-08-15T17:20:06.270Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Estou testando esta biblioteca com este sketch.</p>
<p>E ao carregar trava o upload, ficando sempre " uploading".</p>
<p>Então fecho a IDE e abro novamente, ao abrir a serial qdo compilado com Serial.begin de 9600</p>
<p>fica impresso assim:</p>
<p></p>
<p>⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮<br></br>Relógio !!</p>
<p>Se mudo pra 115200 fica impresso assim:</p>
<p>tloader>' Huh?<br></br>Bootloader⸮⸮⸮…</p>
<p></p>
<p></p>
<p>Estou testando esta biblioteca com este sketch.</p>
<p>E ao carregar trava o upload, ficando sempre " uploading".</p>
<p>Então fecho a IDE e abro novamente, ao abrir a serial qdo compilado com Serial.begin de 9600</p>
<p>fica impresso assim:</p>
<p></p>
<p>⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮<br/>Relógio !!</p>
<p>Se mudo pra 115200 fica impresso assim:</p>
<p>tloader>' Huh?<br/>Bootloader⸮⸮⸮</p>
<p></p>
<p><span style="font-size: 12pt;"><strong><a href="https://storage.ning.com/topology/rest/1.0/file/get/7475481470?profile=original" target="_blank" rel="noopener">TesteMega.ino</a></strong></span></p>
<p></p>
<p><span style="font-size: 10pt;">Se outro amigo aqui tiver um Mega e puder fazer um teste serial legal.</span></p>
<p></p>
<p><span style="font-size: 10pt;">RV</span></p>
<p></p>
<p></p> Boa tarde MSZ,
Carreguei seu…tag:labdegaragem.com,2020-08-15:6223006:Comment:7397652020-08-15T16:39:47.176Zmineirin RVhttps://labdegaragem.com/profile/RuiViana
<p>Boa tarde MSZ,</p>
<p>Carreguei seu sketch no UNO e em um mini, e não tive problemas.</p>
<p>Mas não consegui carregar no Mega.</p>
<p>Tem algum problema com a biblioteca RtcDS3231.h.</p>
<p>pois ao gravar seu sketch em 2 Megas diferentes, eles "travaram" durante o upload.</p>
<p>Estou reduzindo ao máximo o sketch, mas ainda estou tendo travamento</p>
<p>Informarei aqui se descobrir a razão deste travamento.</p>
<p>RV</p>
<p>Boa tarde MSZ,</p>
<p>Carreguei seu sketch no UNO e em um mini, e não tive problemas.</p>
<p>Mas não consegui carregar no Mega.</p>
<p>Tem algum problema com a biblioteca RtcDS3231.h.</p>
<p>pois ao gravar seu sketch em 2 Megas diferentes, eles "travaram" durante o upload.</p>
<p>Estou reduzindo ao máximo o sketch, mas ainda estou tendo travamento</p>
<p>Informarei aqui se descobrir a razão deste travamento.</p>
<p>RV</p>