Outro tópico sobre gravação de bootloader

Não são poucos os tópicos sobre gravação de bootloader por aqui. Estou postando este tópico na intenção de relatar minha experiência e também perguntar sobre alternativas e possibilidades de melhoramento do programador serial.
Montei o Severino e tive dificuldades de gravar o bootloader, após seguir todos os passos acabei desistindo à noite e no outro dia de manhã, quando fui tentar novamente, simplesmente funcionou. A partir deste momento utilizei o cabo serial para gravar sketches normalmente até comprar o adpatador serial->usb.
Final de semana passada estava testando um motor de passo, ligado numa fonte em 20Volts, com ligação da massa em comum com o Arduino, por um erro idiota fiz uma ligação errada na protoboard e o Arduino parou de se comunicar com a porta serial....
Burrice feita, encomendei 2 Atmega8 e 1 Atmega168, quando chegaram coloquei o Atmega8 novo no soquete e surpresa, não consegui mais gravar o bootloader. Desconfiando de ter danificado algo mais que apenas o Atmega, substituí todos os componentes da placa, que tinha comprado dobrado na época. Pra finalizar o teste sem dúvidas coloquei o outro Atmega8 novo, no soquete e bam! Nada do cabo serial funcionar.
Já tentei de tudo, encurtar os fios do cabo, tirar os resistores do cabo, trocar a fonte de alimentação do Arduino.
Isto se tornou um pouquinho frustrante, pois final de semana está chegando e eu sem o Arduino funcionando... mas só um pouco frustrante porque funcionou da outra vez (mesmo que de uma hora pra outra), e agora não consigo nem por reza brava.

Minhas dúvidas são:
1-> Quais maneiras alternativas eu tenho para gravar o bootloader?
2-> Parece que a gravação via ISP é uma coisa delicada, se tiver algum ruído, interferência no sinal, isto prejudica o correto funcionamento da coisa. Teria alguma maneira ou algum filtro que poderia ser implementado no cabo original da página do Arduino, tornando-o mais seguro?
3-> Lí inúmeros relatos na internet sobre este problema, pessoas que conseguem trocando a interrupção da porta paralela, encurtando o cabo entre outros e ainda pessoas relatando que às vezes funciona e às vezes não funciona. Este tipo de procedimento, usando este cabo paralelo é realmente totalmente instável? Se sim, preciso arrumar alguma alternativa pois não é nada legal ficar na mão da sorte.

Alternativamente, se eu não for capaz de gravar o bootloader novamente, quem eu poderia procurar para que grave o dito cujo para mim?

Obrigado,

Rodrigo

O problema da porta paralela é que os dados são colocados lá quando o windows quer, ou seja, não há uma temporização confiável. Além disso, algumas placas mãe colocam lá uma voltagem menor que os 5 volts que deveria ter.

Nesta página (link abaixo) tem um trecho que fala "It still doesn't work! (parallel programmer on Windows XP)" e aí tem uns links para 'patches' que devem fazer o windows xp tratar a porta paralela do jeito que a gente quer:

Eu hoje estava pesquisando justamente isso, e achei os seguintes links interessantes:

relação de diferentes programadores:
http://www.dl1dow.de/inhalt/arduino/bootloader/e_arduino_bootloader.htm

Os links abaixo são sobre programadores feitos usando um arduino (precisam de pelo menos um arduino funcionando, claro):

boot cloner que copia o bootloader de um arduino em outro:
http://www.arduino.cc/playground/BootCloner/BootCloner

mega isp - programador isp com arduino:

http://www.arduino.cc/playground/Code/MegaISP

programmer 2, um programador isp com arduino:
http://www.arduino.cc/playground/Code/Programmer2

Outra opção seria tentar usar a porta paralela de outro computador, de preferência bem velho, com um windows antigo. Sei lá, de repente a configuração é mais favorável.

Olá Tacho,

Eu retiro grande parte do que falei no post inicial.
Após a última tentativa, numa máquina rodando Linux, e com o mesmo erro, comecei a desconfiar que algo a mais poderia estar errado. Retirei o Atmega do soquete e comecei a conferir os contatos do ISP com o soquete, para minha surpresa os pinos 1 e o logo debaixo dele estavam em curto. Como eu fabriquei minha placa e ela não tem proteção alguma nas trilhas elas já começam a dar "zinabre", alguns dias atrás passei uma palha de aço de leve nela, mesmo sabendo dos riscos e apesar de ter soprado bastante parece que ficaram alguns fragmentos não desejáveis. Passei uma escova seca na placa e nos contatos do ISP (tenho a impressão que tinha algo alí), e tudo voltou a funcionar normalmente.
Como minha última tentativa tinha sido na máquina Linux, usei a mesma para gravar o bootloader em todos os três chips.
Esse negócio não vai dar certo, acho que vou passar um verniz na parte das trilhas e se algun dia precisar trocar algum componente, paciência.
Resumindo: O cabo paralelo funcionou para mim.

Da página que você listou http://www.dl1dow.de/inhalt/arduino/bootloader/e_arduino_bootloader.htm a útima opção de programador me pareceu legal, poucos componentes e tem os esquemas em EAGLE. Se eu não achasse o problema aqui acho que tentaria aquilo, mesmo sem saber ao certo onde isso iria dar.

Valeu !!

Rodrigo

Que alívio, hein!?

Parabéns. Mas eu continuo sem entender a razão daqueles resistores no programador paralelo. Postei no fórum em inglês perguntando para que ele servem, espero que alguém me explique. Vou montar um programador paralelo hoje a noite e tentar gravar usando um laptop antigo e windows XP. Tem tudo para dar errado.

Hahahah, alívio mesmo Tacho :slight_smile:

Já nem sei mais dizer se tem tudo pra dar errado ou não, espero que dê tudo certo por aí.
Acho que você já deve estar careca de saber dessas coisas, de qualquer forma parece fazer sentido usar comprimento de cabo o menor possível e, trançar os cabos pode reduzir interferência? Vi numa página um cara que colocou uma argola de ferrite no cabo, daquelas pra minimizar ruído.
De qualquer forma, como você mesmo disse, não esquecer do "patch" do Windows e o driver "giveio". Além disso tudo não custa nada rezar um pai nosso :slight_smile:

Falando em língua inglesa, tem o canal #arduino na rede IRC do freenode, tem bastante gente por lá, já joguei umas perguntas no canal e tem alguns bastante inteirados no assunto.

Sorte,

Rodrigo

Pois é Rodrigo, não consegui. Lendo seu post agora de manhã me deu o estalo: não instalei o tal do 'giveio'! Pesquisei no google e descobri que é o driver que permite o acesso de baixo nível à porta paralela.

Por via das dúvidas montei meu programador com os resistores. Se não funcionar depois de instalar o giveio, aí eu tiro.

Vou te contar, viu, esse negócio de bootloader é o grande ponto fraco da idéia toda de arduino. Eu comprei uma placa Cerne AVR-Lab que usa um chip sem bootloader nenhum e os programas são colocados lá via porta serial sem nenhum problema.
O saco é que tem que usar um compilador para gerar o hex, depois um outro software para gravar na placa (o ponyprog). Além disso, como não programa os fuses, a gente fica limitado ao clock interno de 1Mhz, o que impede o uso de quase todos os sketchs do arduino.

Acho que depois do arduino severino, criado pelo Adilson Akashi, eu vou criar o arduino burrinho, que não é lá muito rápido nem versátil, mas pelo menos não precisa de bootloader.

Tacho,

Sem sombra de dúvida a gravação do bootloader foi o que mais "gastou" meu tempo aqui, mas como disse minha experiência é limitada pra afirmar a confiabilidade desse processo, uma coisa é certa: Esse programador paralelo é muito fresco, inúmeras firulas e detalhes a serem olhados em caso de falha.
Tô postando pra dizer o seguinte, se não der certo, antes de tirar ele, tenta na BIOS configurar a porta paralela em ECP apenas, parece ser a configuração correta. Em todos os casos, da primeira vez aqui só consegui gravar depois de setar na BIOS: "Load Default Settings", que também é uma pra você tentar aí.

Sorte !! Espero que consiga gravar o dito cujo maledito aí

Tenta este processo é super simples e funciona sempre

http://www.geocities.jp/arduino_diecimila/bootloader/index_en.html

Cristal, já vi outras pessoas referenciando este site. Não me pareceu lá muito simples, mas é uma idéia interessante. De qualquer forma, obrigado.

Consegui! Obrigado Rodrigo, segui suas dicas. Verifiquei minha bios e a porta paralela estava no modo ECP, instalei o giveio e alterei o registro usando aquele link. Usei o programador paralelo com resistores e consegui gravar o bootloader. Ufa!

A próxima etapa será aprender a gravar programas usando o gravador paralelo em chips sem bootloader para ganhar o espaço. Mas isso fica para depois depois.

Tacho,

Achei outro gravador pra AVR que parece muito interessante: http://www.arnerobotics.com.br/eletronica/gravador_AVR.html

Aproveitando o bonde, na mesma página tem uma descrição bem legal dos microcontroladores Atmel: Microcontroladores AVR - Noções Básicas

Lembrei do seu post sobre os resistores do programador paralelo, na mesma página do Arne ele cita: "No modo ISP não é necessário nenhuma “tensão específica” em qualquer dos pinos do microcontrolador para se efetuar a gravação. Uma outra grande vantagem deste modo, é que o mesmo é feito In-System, ou seja, diretamente no circuito onde o microcontrolador está instalado (respeitando-se algumas regras). Desta forma, não é necessário retirar o microcontrolador do circuito para gravá-lo. Essa vantagem reflete-se diretamente na velocidade de desenvolvimento. A grande maioria dos compiladores do mercado aceitam gravadores ISP e trazem o devido suporte aos mesmos."

No cabo paralelo, não seriam então os resistores escolhidos "ao acaso", apenas para evitar sobretensão? Não tenho capacidade de afirmar isto mas é a primeira coisa que me vem à cabeça...

Valeu !!

Interessantes os links, especialmente a descrição resumida dos AVR. Obrigado.

Humm, não sei não. Continuo achando aqueles resistores um mistério. São usados em alguns (não todos!) os sinais que saem da porta paralela e também no sinal que vai do AVR para a porta paralela. Bem, meu programador está funcionando com eles, então tudo bem.

Tenho um arduino severino e estou tentando gravar o bootloader nele.
Li algumas coisas a respeito e notei que também posso gravá-lo usando a entrada serial, bastando apenas configurar os jumps de tal forma que isto seja possivel.
Alguem já tentou fazer isso?