Default Fuse & Uno Bootable
Há um tempo atrás realizei uma placa para programar em “paralelo” alguns micros AVR, mais para desbloqueá-los e repor os fuses, que por vezes dá borrada quando mal inseridos e não existe outra forma a ter acesso senão em modo paralelo, já que o ISP não comunica com ele.
O resultado foi satisfatório, alimentado com um transformador de 12V (ou mais), basta colocar o micro bloqueado no socket, ligar o interruptor e carregar no switch, depois é só esperar que o LED vermelho se apague e está feito.
Pois é, se ficou bem-feita a operação ou não, ninguém sabe, só testando-o via ISP, por isso resolvi fazer uma nova versão deste aparato mas com alguma inteligência, de preferência alimentado a pilhas.
Outro pormenor é que se o micro tiver algum lockbit programado, não se consegue alterar os fuses sem se apagar totalmente a memória.
---//---
Longe da electrónica por alguns anos, resolvi esta semana pegar num projecto de 2013 que tinha ficado a meio:
Funções:
- Verifica a assinatura
- Apaga as memórias flash e eeprom
- Coloca os fuses de origem (default fuses)
- Grava o bootloader Uno com os respectivos fuses e lockbit
- Verifica o estado da bateria ao ligar >7V
Em programação paralela, são necessárias duas tensões, 5V, e 12V que liga ao RST no momento certo.
Para os 5V, a partir dos 9V da bateria basta um simples 78L05 ou similar; já os 12V tive de recorrer a um elevador de tensão (ST662AB, 5V to 12, 0.03A).
---//---
É-me bastante difícil, dar continuidade a circuitos antigos em que já não me lembro de certos pormenores.
Destreinado mas com alguma vontade de por mãos à obra para ver no que vai dar…
Ok, 1º vamos soldar os fios do ISP às pistas, desta vez não coloquei nenhuma ficha para a placa ficar mais reduzida e não comprometer a salganhada de ligações que não são poucas; pelo menos podia ter colocado uns pontos de teste, sempre identificava onde ter de soldar e não ir buscar terminais minúsculos do micro.
Hora de imprimir toda a documentação, começar a programar e… já fiz mé
Então todas as portas do Atmega8 são de entrada/saída desde quando?! e já agora como é que vou medir a tensão da alimentação com um pino apenas digital… fds devia estar a dormir quando fiz este circuito.
Pequena revisão da borrada e alterações a fazer:
Não me agrada mesmo nada remendar pistas, soldar uns fios + duas resistências de pullup aos switchs que também ficaram esquecidas (entradas apenas analógicas, não permitem pullup via software), poderia usar entradas digitais para os switchs, infelizmente não restam mais disponíveis.
Aqui referenciadas como ADC6 e ADC7, unicamente para entrada de sinais analógicos, não existindo na versão PDIP do Atmega8.
Nova placa já com os pontos de teste para soldar os fios do ISP para o programar.
Afinal o “Paulinho das placas” ainda está em forma hehehe
(alcunha que me deram num curso do ISQ, não liguem…)
A impressora que tinha da HP deu o berro e arranjei outra da Epson, entretanto a opacidade deixa muito a desejar, outra coisa é que a tinta nos acetatos parece que nunca seca, seja muita ou pouca… saudades da minha HP baratucha
O acetato de cima é o da Epson:
Vou ter de reaproveitar todos os componentes, pois não tenho outros, de alguma forma tenho receio em estragar algum IC… a ver se a pistola de ar quente me pode ajudar
Sobreviveram todos os componentes, apenas não gostei que alguns ficassem levantados devido ao excesso de solda por baixo. Adiante, programação.
Diagrama criado em “yEd Graph Editor”, agradecimentos ao @Tech_JA pela divulgação.Este é o diagrama de fluxo de acordo com o programa escrito.
O mais difícil programar foi, como escrever na flash, procurei na net alguns exemplos e apenas encontrei um, bastante confuso com bastantes dependências, em que tinha de abrir vários ficheiros para ver a continuidade do código… fazer debug desta forma deve ser frustrante.
Bem, com a ajuda da ficha técnica (que também é uma… para decifrar), lá consegui, não estava à espera que para escrever fosse completamente diferente do que é para ler.
Então, a memória está formatada em words, cada página tem 64 words, sendo um total de 256 páginas no Atmega328.
1º temos de escolher qual a página que queremos aceder, depois gravar num buffer as 64 words, definimos offset da página e só depois é que se pode passar para a flash este buffer. O que não cheguei a entender foi a necessidade deste offset, ora temos um boot de 512 bytes (256 words) necessitando de 4 x 64 words para tal; seriam necessárias 4 páginas, entretanto para gravar no endereço correcto, tenho de definir a última página (e não 4 páginas antes), daí só conseguir aceder à memória posterior com offsets… contrariamente, só acedo a uma única página, complicado, não, possivelmente a secção flash dedicada ao boot funciona de forma diferente?!
ps: mudei agora a fonte das fotos, parece que não se pode publicar fotos aqui pela galeria da google