collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]


Focos LED SMD por almamater
[16 de Dezembro de 2023, 14:12]


I Belive por dropes
[15 de Dezembro de 2023, 13:59]


Carga de corrente eletrónica ZPB30A1 60W por jm_araujo
[11 de Dezembro de 2023, 13:27]

Autor Tópico: Default Fuse & Uno Bootable  (Lida 7466 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.185
Default Fuse & Uno Bootable
« em: 25 de Fevereiro de 2020, 19:07 »
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  :-[


« Última modificação: 26 de Fevereiro de 2020, 11:08 por dropes »

Offline SerraCabo

  • Mini Robot
  • *
  • Mensagens: 1.051
    • Serra Cabo
Re: Default Fuse & Uno Bootable
« Responder #1 em: 26 de Fevereiro de 2020, 08:58 »
Só vejo uma imagem, as outras são sinais de sentido-proibido. !

SC

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.185
Re: Default Fuse & Uno Bootable
« Responder #2 em: 26 de Fevereiro de 2020, 11:16 »
Só vejo uma imagem, as outras são sinais de sentido-proibido. !
SC
Obrigado SerraCabo, desde que a imageshack passou a ser paga, publicar fotos tem sido complicado...

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Default Fuse & Uno Bootable
« Responder #3 em: 26 de Fevereiro de 2020, 11:33 »
imgur, não gostas de utilizar?

E bom trabalho!
Avr fanboy

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.185
Re: Default Fuse & Uno Bootable
« Responder #4 em: 26 de Fevereiro de 2020, 11:50 »
imgur, não gostas de utilizar?

E bom trabalho!
Obrigado :)
Imgur é a que estou a usar agora, a ver se funciona melhor

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Default Fuse & Uno Bootable
« Responder #5 em: 26 de Fevereiro de 2020, 14:27 »
Não sei se sabes, mas existem uns quantos comandos não documentados, que dá para ler e escrever a zona de calibração(e do ID) do micro, dá para calibrar o clock interno e calibrar melhor(ou pior) o ADC sem ter de recorrer ao uso de EEPROM ou a valores hard-coded no programa.
Avr fanboy

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.185
Re: Default Fuse & Uno Bootable
« Responder #6 em: 26 de Fevereiro de 2020, 15:47 »
Na calibração do clock interno já conhecia, mas não estou a entender a que comandos te referes...  ::)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Avr fanboy

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.185
Re: Default Fuse & Uno Bootable
« Responder #8 em: 26 de Fevereiro de 2020, 19:18 »
Está boa, não fazia ideia que se podia alterar a assinatura, inventam cada coisa.
Tinha a ideia que haveria uma zona do micro só de leitura, acessível por um comando, assim como os restantes 10 comandos existentes.

Alguém encontrou a zona dos 256 bytes sem querer e descobriu a assinatura "estendida", se bem que me parecem mais parâmetros de calibrações específicas.
Até agora ainda não consegui bloquear um micro totalmente, será esta a zona 51 ;D