Ir ao conteúdo
  • Cadastre-se

Gravando Microcontroladores AVR com diversas opções


MOR_AL

Posts recomendados

Pessoal!

Estou reiniciando meus estudos com os microcontroladores AVR.

Depois de já começar a estudar, comecei a ter que gravar o arquivo.hex na flash do microcontrolador. O famoso PiscaLed.hex.

Aí recomeçaram os trabalhos mais chatos. Gravar um Atmega. Não quero usar a IDE do Arduino, pois já sei o procedimento. Quero conseguir gravar com outros programadores e outros gravadores.

Tenho os seguintes gravadores:

  • Serial conectado à porta COM. Esse eu montei dentro do conector DB9 mesmo. É tão simples, que não dava nada por ele, mas já tinha funcionado antes.
  • USBasp pirata, comprado no Ebay. Não funcionava. Esse eu penei para converter em USBasp. Ainda não testei, mas meu PC já o identifica como USBasp.
  • USB simulando a porta serial. Com saídas DTR, RxD, TxD, +5V, GND e +3,3V.

Baixei os seguintes programadores:

  • Arduino. Esse eu não vou testar, pois já tenho conhecimento de como fazê-lo.
  • AVRDUDESS
  • BascAvr
  • Extreme Burner AVR
  • ISP Programmer. Esse é para porta paralela do PC. Não quero usar.
  • PonyProg
  • PROGISP.

 

Agora que já passei um bom tempo atualizando os programadores e o gravador USBasp, comecei a tentar gravar mesclando programador com gravador.

Já terminei de testar o gravador serial conectado à porta COM. 

Funcionou com os seguintes programadores: AVRDUDESS, PonyProg e PROGISP.

Não consegui fazer funcionar com os seguintes programadores: Bascom e Extreme Burner AVR.

Caso alguém tenha interesse em saber como fiz funcionar, é só comentar.

Em seguida vou passar para o gravador USB simulando a porta serial.

MOR_AL

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 22/02/2020 às 16:31, MOR disse:

Não consegui fazer funcionar com os seguintes programadores: Bascom e Extreme Burner AVR.

De fato, o acesso ao hw do pc é meio que restrito a superusuários ou administradores. Dá uma pesquisada sobre.

Antigamente era mais fácil... e falando nisso, me fez lembrar...

 

Como o algoritmo de gravação do avr tende a não ser totalmente difícil, uma opção ao título do tópico seria criar seu próprio programa programador. Abaixo um trecho de um programa que fiz no Turbo C há... algum tempo atrás. Era pra a família 89Sxxx no qual tive sucesso total ao gravar um arquivo em binário puro em 89s8252, 89s8253,89s52 e outros seriais

#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <bios.h>
#define pport 0x378
#define iport 0x379
#define uchar unsigned char

void fim()
{
outportb(pport,0xff & ~8); //desliga vcc
textcolor(15);
_setcursortype(_NORMALCURSOR);
printf("\n");
exit(1);
}

void tempo(unsigned char t)
{
unsigned char j=0;

outportb(0x61,0);    //desliga contador timer2
outportb(0x43,0xb0); //timer2, modo 0, lsb -> msb
outportb(0x42,t);    //lsb
outportb(0x42,0);    //msb
outportb(0x61,1);    //liga contador

/*
nok:
asm {
    mov al,0xc8
    out     0x43,al
    in  al,0x42
    and al,0x80
    jz  nok
    }
*/
while(!j)
   {
    outportb(0x43,0xc8);    //read back
    j=inportb(0x42);        //status da saida
    j&=0x80;
   }
}

unsigned char shift(unsigned char d)
{
unsigned char i,p,resultado=0;
for (i=0;i<8;i++)
    {
    if (d&0x80) p=~5;    //bit3=vcc=1,bit2=reset=1,bit0=dado=1
    else p=~4;           //                   bit0=dado=0
//    outportb(pport,p);    //bit0=dado
    p&=~2;              //bit1=clock em 1
    outportb(pport,p);    //bit0=dado
    tempo(40);
    resultado<<=1;// shift the result to get it ready for the next bit
    if (!(inportb(iport)&0x40)) resultado|=0x01;// if result is one, then set LS bit
    p|=2;              //bit1=clock em 0
    outportb(pport,p);
    tempo(40);
    d<<=1;
    }
return resultado;
}

//escreve e le 1 byte
uchar rwbyte(uchar a1, uchar a2, uchar a3, uchar d)
{
shift(a1);shift(a2);shift(a3);   //envia o endereço
return shift(d); //envia e le o dado
}

O pulo do gato foi que ele funcionava bem em pc xt 8088  com rotinas de delay e asm('nop') pras temporizações. Mas logo apareceu o 286, 386 muito mais rápido. Uma estudadela dos registros dos timers e descobri como temporizar universalmente (note a parte assembly comentada e a acima em c mesmo). Funcionou até no 486 e pentium 200Mhz.

Bem trazendo isso ao presente, uma ideia é dominar bem sua usb a ponto de acender um led e ler um botão dela. Assim sendo, basta uma estudadela no algoritmo da gravação do avr pra criar algo personalizado.

Considerando o sucesso, já vislumbro um upgrade: o uso de um conversor bluetooth -> serial e gravar o mc wirelessmente...

Claro isso serve apenas a título da adrenalina de superar desafios. Na atual conjuntura mais vale mesmo é comprar o programador.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Isadora Ferraz disse:

Antigamente era mais fácil...

Por isso que apenas pra mexer nessas coisas, eu uso um PC mais antigo, obviamente com programas mais antigos. 

Nesses PCs, o suporte a portas paralela e serial é um pouco melhor. Já que antigamente as portas USB não eram tão usadas como hoje. 

O acesso a modo administrador nesses computadores é bem mais fácil. 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
4 horas atrás, Renato.88 disse:

um PC mais antigo, obviamente com programas mais antigos. 

Uma alternativa pra usar pc novo com programa antigo é uma máquina virtual p.ex. virtualbox. P.ex. tenho um plotter houston instruments de 1981 que ainda funciona. Bem pelo menos funcionou há uns 10 anos atrás. Ele conversa via serial através da também jurássica linguagem dmpl. Ideia em banho maria, qualquer momento num futuro não muito distante tento um windows 98 virtual no meu linux pra ver se ele enxerga uma porta serial usb pra falar com ele.

Link para o comentário
Compartilhar em outros sites

Olá pessoal!

Passando para um segundo programador.....
Instalei o drive do CP2102 com sucesso.
O problema é que ele não funciona em nenhum dos programadores da seguinte lista:
Arduino, Ponyprong, Avrdudess e outros.

Já fiz cerca de 50 tentativas e em nenhuma obtive sucesso.

Já troquei o ATmega 328 por outros. Com todos tive sucesso em gravar com um circuito simples via porta serial e com diversos programadores.
Inclusive tentei com outros pinos disponíveis na plaquinha de CI. Usei os seguintes pinos: RTS, DTR, TxD e CTS. Esta última configuração usando os pinos RST, SCK, Mosi e Miso, respectivamente. Para esta configuração usei o programador Avrdudess em um modo que refletia as relações entre as pinagens da plaquinha do gravador com as do microcontrolador.
Também segui fielmente os passos de um vídeo do YouTube, que mostra um procedimento de gravação usando esta plaquinha. No vídeo foi usado o Arduino, assim como em meu teste. Ocorre que no vídeo funcionou (gravou corretamente), mas aqui o problema se repetiu.
Tenho três gravadores idênticos, comprados no Ebay e com os três ocorre o mesmo problema. 
Já montei e desmontei o hardware com o microcontrolador e não consegui fazer gravar o microcontrolador.
Alguém teria alguma sugestão, além de jogar fora esses três programadores?
Grato.

Em tempo: O meu programador é semelhante a este do vídeo.


MOR_AL

Link para o comentário
Compartilhar em outros sites

31 minutos atrás, MOR disse:

Já troquei o ATmega 328 por outros. Com todos tive sucesso em gravar com um circuito simples via porta serial e com diversos programadores.
Inclusive tentei com outros pinos disponíveis na plaquinha de CI.

Acompanhando com interesse a saga. Está descartada a possibilidade do problema estar no 328? Me chamou a atenção o fato das placas terem funcionado com outros modelos.

Link para o comentário
Compartilhar em outros sites

@MOR ,

 

Faça um backup completo do seu Bascom.

Depois, baixe a última versão do Bascom, e Instale.

Ela tem suporte para vários programadores, inclusive o velho e barato USBASP, que é o que eu utilizo até hoje, pelo método do ICSP.

Quando usar um Arduino, mude o programador, assim pode programar direto nele pela porta USB, igual à IDE do Arduino. Leia o WiKI sobre isso na parte do Fórum do Bascom sobre usar os Arduínos.

 

Note que se você utiliza o Windows 10 tem de baixar um novo driver para os USBASP, os velhos não são mais compatíveis.

Em tempo, o velho ProgIsp 1.72 continua muito bom no Windows 10, mas também precisa do novo driver.

 

O novo driver é este :

USBasp-win-driver-x86-x64-v3.0.7.zip

 

 

adicionado 26 minutos depois

@Sérgio Lembo ,

 

Quer ver mais alguma coisa nos Avrs que vai fazer você ficar mais impressionado ?

 

As novas famílias  Attiny817 e Atmega4809 tem uma coisa

muito legal

 

https://www.microchip.com/design-centers/8-bit/peripherals/core-independent/event-system

 

Agora posso ligar os hardwares internos e fazer com que a partir de eventos físicos internos ou externos os hardwares atuem sózinhos, sem precisar de fazer essa atuação dentro de uma rotina de interrupção!

 

Posso configurar que um Timer inicie a contagem a partir de uma mudança de nivel em um determinado pino, e ao final da contagem o Conversor A/d faça uma leitura e só após do resultado estar disponível é que uma interrupção seja gerada, todo o resto foi feito sem nenhuma intervenção do software !

 

Isso nas mãos certas vale ouro !

 

Paulo

 

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

@aphawk

Paulo, a Silabs possue processador de 8 bits da série B3 com 6 unidades lógicas. Se bem me lembro (faz tempo que li isso) podem ser conectadas internamente a periféricos. Pena que o processador é o velho C8051 mas quando temos o hw trabalhando sem intervenção da CPU ficamos independentes da performance desta. Vou ler o datasheet dos modelos apontados, a pagina do link dá um brief muito resumido para a minha curiosidade. Valeu pela dica.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Já eu, que gosto de trazer a realidade pros tópicos, gostei do preço. Este recurso interessante tem que valer muito a pena e ser imprescindível pro projeto pra conseguir concorrer com o stm8s003f3 cujo preço é a metade e na digikey

 

Moris, há séculos não gravo avr. Este gravador daí grava direto, sem bootloader?(algo como uma bios pregravada no mc). Bacana...

 

Ah e me lembrei... certa feita um programador pic não gravava de jeito nenhum. Tive um insigth que o sinal vpp/reset que o prog enviava estava meio lento ou com pouca potência-corrente. Pra gravar, retirei o capacitor do pino reset (o mesmo vpp) e deu certo. Não é muito mas tentei-lhe um norte...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

13 horas atrás, aphawk disse:

@MOR ,

 

Faça um backup completo do seu Bascom.

Depois, baixe a última versão do Bascom, e Instale.

Meu Bascom está atualizado. A versão é 2.0.8.1

Ela tem suporte para vários programadores, inclusive o velho e barato USBASP, que é o que eu utilizo até hoje, pelo método do ICSP.

Meu gravador é XingLing e deu trabalho para alterar o firmware deles (comprei dois), mas agora o W8.1 o reconhece. Adiante seguem as fotos do programador e do Gerenciador de Dispositivos, mostrando que o W8.1 o reconhece como USBasp.

Quando usar um Arduino, mude o programador, assim pode programar direto nele pela porta USB, igual à IDE do Arduino. Leia o WiKI sobre isso na parte do Fórum do Bascom sobre usar os Arduínos.

Vou ler, mas já tentei gravar via Arduino e Bascom, sem sucesso. Mas gravo apenas utilizando o Arduino normalmente.

Note que se você utiliza o Windows 10 tem de baixar um novo driver para os USBASP, os velhos não são mais compatíveis.

W8.1

Em tempo, o velho ProgIsp 1.72 continua muito bom no Windows 10, mas também precisa do novo driver.

Meu SO é W8.1. Estou usando o avrdudess porque ele tem muitas opções de gravadores.

O novo driver é este :

USBasp-win-driver-x86-x64-v3.0.7.zip

Tive um certo trabalho com outro gravador para instalar o drive correto, mas consegui. Seguem as figuras do gravador e do W8.1 reconhecendo o USBasp.

 

USBasp_Hdw.thumb.JPG.5db5573cc155c4d43d2e050b5da2d60f.JPG

USBasp_DrivE.thumb.jpg.98da88c1eaa26d02faa7de040f5e69fb.jpg

adicionado 26 minutos depois

...

 

Paulo

 

 

 

Devo estar cometendo um erro sistemático. Pois tanto o programador USB-Serial, com CP2102, quanto o USBasp clonado, estão instalados corretamente (o W8.1 os reconhece). Porém, já gravei, com sucesso, em diversos Atmegas (m328p e m8) mais de uma vez, via porta física serial e com diversos programadores.

Já investi mais de 80 horas em ter mais de um modo de gravar o firmware no Atmega.

Estou quase desistindo desses dois gravadores via porta USB.

Talvez fosse melhor comprar um USBaps original, mas tenho medo de acontecer o mesmo, pois ainda não identifiquei o problema.

MOR_AL

 

  • Triste 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, Isadora Ferraz disse:

Ah e me lembrei... certa feita um programador pic não gravava de jeito nenhum. Tive um insigth que o sinal vpp/reset que o prog enviava estava meio lento ou com pouca potência-corrente. Pra gravar, retirei o capacitor do pino reset (o mesmo vpp) e deu certo. Não é muito mas tentei-lhe um norte...

@MOR, talvez seja isso. Quando toda a lógica falha costuma ser esses pelos de ovo a causa dos pesadelos.

Boa sorte.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, MOR disse:

Meu Bascom está atualizado. A versão é 2.0.8.1

 Não, não está ....:

 

453395069_Anotao2020-02-25121012.png.31c631dc1672966e1f5a58e3c6da3b50.png

 

2 horas atrás, MOR disse:

Meu gravador é XingLing e deu trabalho para alterar o firmware deles (comprei dois), mas agora o W8.1 o reconhece. Adiante seguem as fotos do programador e do Gerenciador de Dispositivos, mostrando que o W8.1 o reconhece como USBasp.

 

é quase idêntico ao meu de uso normal ...

 

2 horas atrás, MOR disse:

Meu SO é W8.1. Estou usando o avrdudess porque ele tem muitas opções de gravadores.

 

Dede 2010 só uso o USBASP como gravador.

A menos que esteja fazendo testes usando um Arduíno, aí tenho de mudar o gravador no Bascom, leia este excelente artigo que disponiilizo em anexo :

 

Getting started with Arduino UNO-mega2560 and bascom.pdf

 

Uma vez, faz muito tempo, aconteceu isso de não gravar com o USBASP, e parecia que tudo estava certo. Eu usava o Windows 7 naquela época.

Por um erro meu, instalei os drivers de 32 bits quando meu SO era de 64 bits.

Tive de procurar os arquivos um a um e apagar dos diretórios, aí foi só reinstalar o driver LIBUSB de 64 bits e pronto, funcionou.

 

Não precisa do USBASP original, sempre usei os clones e todos funcionam.

 

Paulo

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, aphawk disse:
6 horas atrás, MOR disse:

Meu Bascom está atualizado. A versão é 2.0.8.1

 Não, não está ....:

Poxa! Atualizei ele há cerca de uma ou duas semanas.

 

4 horas atrás, aphawk disse:

Dede 2010 só uso o USBASP como gravador.

Mas qual programador você usa? avrdudess?

 

4 horas atrás, aphawk disse:

Não precisa do USBASP original, sempre usei os clones e todos funcionam.

Você precisou fazer muita coisa, até poder gravar com o USBasp?

 

Bom!

Finalmente descobri como gravar com o gravador USBasp e com o programador avrdudess.

O zadig-2.4.exe resolveu. 
O que ocorria é que o drive estava quase correto. Apesar do W8.1 identificá-lo, ainda não era o suficiente. Vi num vídeo do YouTube como fazer.
Anotei integralmente o procedimento. Agora tenho duas maneiras de gravar o ATmega. Uma via serial física e outra via USB, via USBasp.

Para gravar com o USBasp tenho SEMPRE que colocar ANTES o drive via zadig-2.4.exe. O detalhe é que depois que retiro o gravador da porta USB, o drive via zadig também vai embora, retornando o anterior. 

 

@Sérgio Lembo  Valeu pelas dicas. Quando se tenta de tudo sem sucesso, parte-se para o improvável. Já tinha alterado o reset. Com capacitor em série, sem capacitor ...

 

Tenho uns 4 gravadores USB - Serial, que produz uma porta COM virtual. É com o CI CP2102. Este me custou cerca de 30 horas de dor de cabeça. Vou ver se o zadig.exe também resolve o problema.
Depois posto aqui.

Em tempo:
Depois de verificar se consigo gravar com este gravador via programador avrdudess e inclui-lo no trabalho que estou fazendo, vou dispor para quem estiver interessado.

 

[]'s
MOR_AL

  • Curtir 1
  • Triste 1
Link para o comentário
Compartilhar em outros sites

@MOR ,

 

Bom, se está usando o Zadig , é um problema do seu driver para o USBASP.

 

Foi justamente por causa disso que foi desenvolvido o novo driver que te passei, ele usa algo que foi desenvolvido para o Zadig !

 

Remova o seu driver velho e instale o novo que te passei, seus problemas irão acabar.

 

Em tempo, nunca precisei de nada além do programador USBASP e do ProgISP, só uso o Programador embutido do Bascom quando uso um Arduino Uno pois a porta USB facilita bastante ...

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, aphawk disse:

@MOR ,

 

Bom, se está usando o Zadig , é um problema do seu driver para o USBASP.

Tem razão.

Foi justamente por causa disso que foi desenvolvido o novo driver que te passei, ele usa algo que foi desenvolvido para o Zadig !

Eu tinha baixado um driver semelhante, que pensei ser o mesmo, mas agora que você mencionou, reparei que a minha versão era v1.2.5. A sua versão é mais nova (v3.0.7).

Remova o seu driver velho e instale o novo que te passei, seus problemas irão acabar.

Fiz isso. Retirei o gravador da porta USB e reiniciei o PC, para não ter mais nenhum dado remanescente. Realmente, agora não precisa mais usar o zadig. Funciona direto.

Em tempo, nunca precisei de nada além do programador USBASP e do ProgISP, só uso o Programador embutido do Bascom quando uso um Arduino Uno pois a porta USB facilita bastante ...

 

Paulo

 

Valeu pela dica.

Amanhã, se der tempo, vou tentar resolver o problema do gravador USB - Serial com o CP2102.

MOR_AL

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

Em 25/02/2020 às 07:41, Isadora Ferraz disse:

 

Moris, há séculos não gravo avr. Este gravador daí grava direto, sem bootloader?(algo como uma bios pregravada no mc). Bacana...


Todos esses gravadores gravam direto na Flash, sem necessidade de Bootloader.

 

Mas existem alguns bootloaders no site do Bascom, inclusive um que usa um ESP8266 para fazer atualização automática via Web !

A ideia me pareceu de pouco uso, mas depois olhei melhor e percebi que você pode customizar isso e permite que um produto desenvolvido por você faça uma atualização automática quando você disponibiliza o novo firmware !

Outros bootloaders permitem você enviar via serial o novo firmware, alguns até implementam protocolo x-modem, assim fica moleza o usuário atualizar o equipamento.

 

Paulo

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Bom.

Não consegui fazer os gravadores USB-to-TTL funcionarem de jeito nenhum. Aqueles que usam o CI CP2102. Pesquisei na internet e consegui que o meu PC identificasse o gravador. Criou uma porta virtual correta.

Videos literalmente copiados do YouTube com esse gravador, que gravaram direito, informavam erro na minha montagem. Depois tentei outros gravadores e com nenhum funcionou.

Aí observei as opções de conexão no avrdudess. Lá tinha uma configuração de conexões que estavam presentes nesse gravador. soldei terminais nos pontos certos e alterei os pinos para coincidir com a configuração do avrdudess. Também não funcionou.

Foi sugerido que eu fizesse um teste de loop back com o gravador. Liguei o TxD no RxD. Consegui uma taxa de 56200 (ou algo próximo a este valor).

Mas nas minhas montagens com o ATmega na protoboard não funcionava. Em tempo; consegui gravar com a mesma placa na protoboard, mas com outros gravadores (serial (DB9) e USBasp Xingling). Então não era a montagem na protoboard.

Acho que já investi cerca de 40 a 50 horas nesse gravador sem exito.

Finalmente desisti de fazer funcionar e, com certeza, os 4 gravadores que comprei vão ter um destino sombrio, quase que reduzidos às junções P e N, hehehe. 🤬👹🤬👹🤬👹🤬👹.

Grato a todos que contribuíram. 

Vou formar um arquivo.PDF da experiência de gravação e deixar na nuvem.

MOR_AL

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@MOR ,

 

Caramba ... eu nunca usei esse CP2102.

Uma vez eu fui em um cliente fazer um upgrade no firmware, mas o USBASP que levei pifou ( erro meu ... ) e não tinha outro  comigo, e a quase 250 KM de SP apelei para um Arduino Uno e com ele consegui gravar o Atmega48 do meu cliente depois de meia hora de tentativas...

 

Enfim, tem tanta maneira de gravar esses AVR’s que pode jogar fora esses CP2102 !

 

Paulo

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!