quarta-feira, 20 de junho de 2012

A odisséia do programador de PICs (clone do K150)

O programador comprado

Já possuo um programador de PICs nacional (clone do PicKit 2), mas como estou entrando em um projeto crítico resolvi a 1 mês atrás comprar um segundo gravador pelo ebay, semana passada quando o recebi (foto ao lado) foi quando a batalha começou, achei melhor deixar registrado aqui como fiz para conseguir resolver os problemas que vieram de brinde.






O gravador


Ao o que tudo indica o gravador é uma versão clone (pirata) do K150 (site oficial aqui), um projeto meio antigo e com última atualização em 2007, mas segundo as especificações, suporta toda a linha 8 bits dos PICs (12F, 16F e 18F), o programador é baseado em um 16F628A e um CI conversor USB-serial da Profilic, é alimentado diretamente pela USB e utiliza um CI da texas (DIP de 8 pinos) como conversor DC-DC para provavelmente conseguir os 13V de tensão de programação, possui um soquete ZIF 40 pinos para  programação direta e uma saída de 6 pinos para programação por ICSP com o cabo já incluso, ou seja, aparentemente um bom programador.




A odisséia




Circuito pisca-led e os dois programadores
Pois bem, logo quando o recebi já tratei de tentar colocá-lo pra funcionar por ICSP em um circuito simples (pisca led) com um 18F4520 que já estava montado em uma protoboard, mas foi aí que percebi que o programador não veio com software, dei uma pesquisada na internet e achei o site do criador do original, lá encontrei a última versão do pacote para o K150, chamado DIYpack25EP, que inclui o software para o PC (chamado MicroBrn) e um firmware para cada um dos programadores suportados, dentre eles o K150, como o software do pacote não reconhecia o gravador como uma versão suportada, resolvi arriscar e com o meu outro programador (o clone do pickit 2 que aparece na foto acima) gravei o firmware que veio no pacote em um 16F628A avulso, ao substituir o 16F628A do programador por esse as coisas começaram a melhorar, o MicroBrn já reconhecia o gravador e já conseguia ler o conteúdo dos PICs, mas foi aí que percebi o segundo problema, ao tentar importar o arquivo .hex do pisca-led para o 18F4520 no programa de gravação do K150, ele apresentava o seguinte erro:

Error in HEX file - FUSE
Após mais alguma pesquisa descobri que o segundo executável que vinha no pacote, chamado fixhex2, servia justamente para corrigir isso, depois algum trabalho para conseguir rodá-lo (acusava a falta de um arquivo, algo resolvido com uma pesquisa no google e alguns comandos de console) consegui o utilizar para converter o arquivo .hex em algo compreensível pelo MicroBrn do K150, no caso, um segundo arquivo com o nome ~.fix.hex, nesse ponto acreditava que já estava tudo certo, mas aí veio o terceiro problema, o programa do K150 aceitava o arquivo corrigido pelo fixhex, mas não conseguia importar as configurações de fusíveis existentes no hexa original, algo que só percebi por ver que o led estava piscando bem mais lentamente quando gravava o mesmo código pelo K150 em relação à gravação (correta) feita pelo meu pickit2, ao comparar o arquivo .hex corrigido pelo fixhex com o .hex lido do pic gravado corretamente, percebi que todos os valores dos fusíveis estavam errados, inclusive o fusivel de seleção de cristal, motivo pelo qual o led piscava mais lentamente, segue a comparação:

Diferença no valor dos fusíveis


Algo totalmente desanimador, achei que esse seria o fim e que teria que ficar ajustando manualmente todas as configurações de fusíveis toda vez que quisesse gravar um código com esse programador, mas foi logo antes de abandoná-lo em um canto escuro que durante uma última pesquisa achei a solução, segundo uma dica dada em alguns posts nos fóruns sobre o gravador, quando você exporta o .hex pelo MPLAB o arquivo gerado é reconhecível pelo MicroBrn, sem nem mesmo ter que passar pelo fixhex2, e para a minha surpresa, ao utilizar o arquivo .hex exportado ao invés do arquivo gerado pela compilação e "corrigido" pelo fixhex2, o MicroBrn reconheceu todos os fusíveis perfeitamente e os gravou sem nenhum problema! 
Exportação do .hex

MicroBrn programando um PIC corretamente

Conclusões

  • O programador parece ser ótimo, a qualidade de construção é muito boa e profissional (bem superior ao clone do pickit2 que tenho aqui) e veio inclusive com os suportes feitos de parafuso para evitar o contato do programador com a bancada, o considerei uma ótima aquisição, ainda mais por menos de 12 dólares;
  • Depois que descobri como o utilizar, ele não apresentou nenhum erro até agora, sempre realizando as programações perfeitamente;
  • É um pouco mais lento do que o pickit2, algo natural considerando que não é um gravador USB nativo;
  • Apesar de ter sido uma ótima compra, não o indico para quem está começando e ainda não tem nenhum gravador, visto que se eu não tivesse nenhum outro não teria conseguido nem mesmo gravar o firmware alternativo para corrigi-lo, e não teria descoberto os erros posteriores;
  • O arquivo .hex gerado pela exportação é muito maior do que o arquivo gerado pela compilação, acredito que isso seja porque o .hex exportado contém os valores para todos os endereços de memória, enquanto o .hex resultante da compilação é "comprimido" para conter só os bits que foram alterados, deve ser por isso também que os fusíveis são lidos corretamente pelo MicroBrn apenas no arquivo "não comprimido";

Resumão

  • Caso a sua cópia pirateada do K150 comprada no ebay não funcione, grave um pic com o firmware mais atualizado fornecido no site oficial do K150 e o coloque no gravador, utilize o programa MicroBrn mais atual também, que vem no pacote junto do firmware, é o único inclusive que roda em Windows 64 bits;
  • Sempre exporte o .hex para realizar a gravação e utilize o formato INHX32 (já padrão do MPLAB);
  • Caso você possua um arquivo .hex gerado em outro compilador, você pode importá-lo no MPLAB e logo em seguida exportá-lo, assim o MPLAB o corrigirá e fornecerá uma versão "não comprimida" dele assim como ele faz com os gerados por ele próprio;

Bom, é isso pessoal, espero que esse post seja útil para outras pessoas que estejam na mesma situação em que fiquei.

Até mais o/

43 comentários:

  1. Muito bom este post. Obrigado!

    ResponderExcluir
  2. Parabéns pela postagem, passei exatamente por tudo isso que você passou, percebi a questão dos fúsiveis e quando ia encolsta-lo em um canto escuro achei seu post, ainda não testei mas não tenho duvidas que dará certo pois suas palavras estão clarissimas!!! Obrigado Maurício

    ResponderExcluir
  3. Olá Gustavo estou passando por tudo isso que vc mencionou e com este post tão bem explicado acredito que irei solucionar os problemas do ja enfatizado K-150...Vc está de parabens pela sua iniciativa de expor os seus conhecimentos,valeu mesmo!!!

    ResponderExcluir
    Respostas
    1. Olá
      fiz o blog com a intenção de poder expor os meus aprendizados, e saber que esses aprendizados podem ser uteis para os outros me deixa muito satisfeito!

      Obrigado!

      Excluir
  4. Boa noite...Gostaria que detalhasse melhor a exportação do MPLAB para o software do clone. Até cheguei nas telas que voce indicou, mas para importar arquivo do MPLAB para o software clone ele pede um patch. Alguém tem esse patch?

    ResponderExcluir
    Respostas
    1. Boa noite!

      Basicamente o que ocorre é que o arquivo .HEX gerado automaticamente pela compilação do MPLAB (ou por outros compiladores) não é reconhecido corretamente pelo programa do gravador (o microbrn) por ser uma versão "comprimida" do código, apresentando o tal "error in hex file",
      porém o MPLAB fornece uma alternativa permitindo ao usuário gerar uma versão "nao comprimida" do .HEX que é perfeitamente aceita pelo programa do gravador, para gerar essa versão "nao comprimida" voce deve seguir os passos explicados no post, através da opção de "exportação" do MPLAB.
      Esse novo arquivo .HEX gerado pela exportação será compatível com o programa de gravação sem ter que passar por nenhum tipo de correção.

      Caso você já possua um arquivo .HEX gerado por outro compilador e que não é aceita pelo programa do gravador por ser uma versão "comprimida", você pode importa-lo e logo em seguida exporta-lo pelo MPLAB para gerar uma versão desse arquivo compatível com o programa de gravação, para fazer isso, abra o MPLAB, vá em file > import e selecione o arquivo .HEX, logo em seguida vá em configure > "select device" e se selecione o modelo do PIC para o qual o arquivo .HEX foi criado, por ultimo, vá em file > export e salve o novo arquivo .HEX compatível com o programa do gravador.

      Espero ter ajudado,
      Gustavo

      Excluir
  5. Olá Gustavo! Sou bem leigo no assunto. Mas tb entrei na furada do gravador. Se puderes me passar as dicas de como exatamente eu faço para faze-lo funcionar, eu agradeço.

    ResponderExcluir
    Respostas
    1. Boa noite!
      Caso a versão mais nova do programa (que vem no "DIYpack25EP" citado no post) não reconheça o gravador, voce terá que regravar o pic presente no gravador com a versão mais nova do firmware presente no "DIYpack25EP", porém para isso você terá que ter a mão outro gravador de PICs que esteja funcionando, como eu citei no post!
      depois de seguir os passos explicados, o gravador deverá funcionar!
      só preste a atenção ao o que eu escrevi no post sobre os procedimentos que se deve ter para que o gravador funcione corretamente.

      Abraços

      Excluir
  6. Oi, seu blog é muito esclarecedor.

    Possuo um K150(pirata), que programa normalmente no PIC8F4550, mas que dá um erro com o PIC18F2331, você teve algum problema dessa natureza?

    Obrigado.

    ResponderExcluir
  7. Tenho este gravdor k150 também, comprei no ebay também.
    Fiz todo o processo mas estou achando ele muito lento. Sabe me dizer qual o tempo para se gravar um programa pequeno só para eu ter uma idéia?

    ResponderExcluir
  8. Ia comprar um desse no mercadolivre. Agora é que nao compro mesmo.

    Vlw pelas infos.

    ResponderExcluir
  9. olá amigo ! o meu gravador grava corretamente mas quando coloco o pic 16f628A no protoboard e o alimento, não sai tensão nas ports.será que é problema do programa ou apesar da gravação completar como ok ela ainda contem erro ?

    ResponderExcluir
  10. Boa noite Gustavo, estou tentando programar meu pic 18F4550 para que ele possa piscar um led, eu fiz passo a passo que você mencionou, mas esta dando este erro:ROM error at 0x0000 Good 0xEF0C Bad 0x0000, será que você poderia me ajudar a solucionar este problema, serei muito grato.

    ResponderExcluir
    Respostas
    1. Olá Diego, boa noite!

      Esse erro é da verificação, ou não está gravando ou nao está nem mesmo lendo o conteúdo, por acaso os fusíveis de "code protection" estão ativados? pois se não me engano, quando o code protection está ativo, o PIC retorna com 0x00 toda leitura de memoria feita pelo gravador.

      Excluir
  11. Olá Gustavo estou passando pelo mesmo problema para gravar meu pic 18f2550,mas esta aparecendo este erro:ROM error at 0x0000 Good 0xFFFF Bad 0x0000, será que você poderia me explicar o significa isso.

    ResponderExcluir
    Respostas
    1. Boa tarde!

      pelo o que eu sei, esse tipo de erro é gerado na checagem da gravação, quando o gravador começa a comparar os valores que ele vai lendo do PIC recém-gravado com os valores que deveriam ter sido gravados..

      no seu caso, ele indica que logo no primeiro endereço deveria conter 0xFFFF e ele encontrou 0x0000, aí entra duas possibilidades, ou ele nao conseguiu realizar a gravação e/ou a limpeza pré-gravação, ou ele gravou corretamente e ao ler o PIC retornou 0x0000 para tudo por estar com os fusíveis de code protection ativados.

      Excluir
  12. ROM error at 0x0000 Good 0xFFFF Bad 0x0000, será que você poderia me explicar o significa isso....


    Estou com mesmo problema, ja verifiquei os fusiveis de proteção. e estao todos desabilitados.

    O engraçado eh q o gravador apaga o chip e o le sem problemas, nao geram erros. Porem nao grava NUNCA... pqp

    ResponderExcluir
  13. Quando mando apagar o chip, ele conclui sem problemas.

    porem quando dou um erase check ... ele diz que a ROM, EEPROM, FUSE, estao not erase

    Somente o ID esta como erase OK

    Alguem sabe se isso é considerado um erro ?

    ResponderExcluir
  14. Olá Gustavo, comprei tb esse gravador k150 e estou bem arrependido. Para gravar no PIC16f877A que tenho aqui, a gravação ocorre sem problemas, mas quando vou gravar no PIC18F4550, sempre da erro na hora de gravar, mais precisamente na hora de verificar a ROM. O erro é este: EEPROM error at 0x0005, Good 0xFF, Bad 0x9E. Você tem alguma ideia do que pode ser o erro e como corrigi-lo? Obrigado.

    ResponderExcluir
    Respostas
    1. Amigo, vc resolveu o seu problema?
      Estou com o mesmo. Já tentei várias programações diferentes e nada funciona. Sempre ocorre este mesmo erro. Só mudando o end. da memória onde da erro.

      Excluir
  15. Olá!

    Esse post me ajudou a resolver o problema do meu, bastou regravar o pic 16f628a com o firmware baixado no site que vc indicou aki e tudo funcionou legal, inclusive até agora n foi necessário converter o arquivo hexa, porém as vezes ele perde a configuração com a porta COM, sendo necessário configurar no menu port.

    Valew pelas dicas!

    ResponderExcluir
  16. Boa Tarde Gustavo,

    Comprei um gravador k150 da betemcu no mercado livre, você poderia me informar qual o programa que eu posso usar para gravar um PIC 16F877 ou PIC 16F628

    ResponderExcluir
    Respostas
    1. Fera, utiliza o microbrn.
      Eu utilizo este software para gravar com este gravador.

      Excluir
  17. Boa noite.
    O meu funcionou de primeira !!
    O ruindows 7 - 64 configurou automaticamente para COM9, baixei e instalei o DIY25algumacoisa, coloquei um PIC 16F628A já gravado nele e mandei ler. Leu na boa. Aí eu mandei gravar e ele me disse que o PIC não estava vazio (claro) e eu mandei regravar assim mesmo. Aí ele deu OK gravação bem sucedida ou algo assim. Esse problema que vc. teve foi só com o ICSP ??
    Valeu !

    ResponderExcluir
  18. Boa noite. Amigo, estou precisando de um help sobre o assunto.
    No meu caso, está dando a seguinte falha:

    EEPROM error at 0x0000

    Good 0xFF
    Bad 0x9E

    Não consigo entender. Vc pode me ajudar?

    ResponderExcluir
  19. Muito obrigado, você salvou meus 12 dólares também. Vou fazer as correções necessárias e qualquer questão eu informo aqui.

    ResponderExcluir
    Respostas
    1. No windows 7 funcionou perfeitamente após o Windows atualizar o driver quando se conecta a placa. Porém, no Windows XP, não consigo atualizar o driver, nem encontrá-lo na internet. Pode me ajudar?

      Excluir
  20. Algo importante é que se vc usa o mikroC, é só gerar o arquivo .hex normalmente(Não funciona o software do gravado) depois é só importar(Botão LOAD) o arquivo gerado pelo programa de gravação que acompanha o mikroC e depois Salva-lo(Botão SAVE) em algum lugar. Conclusão o programa de gravação que acompanha o mikroC servirá como um conversor para habilitar o arquivo .HEX para importação pelo software do gravador.

    ResponderExcluir
  21. Muito bom tenho um gravador k150 (pirata) e não gravava o pic 18f4550 apos atualizar o firmware funcionou perfeitamente.

    ResponderExcluir
    Respostas
    1. RODOLFO BOM DIA PODERIA ME PASSAR O LINK DESSA FIRMEWARE?

      Excluir
    2. RODOLFO BOM DIA PODERIA ME PASSAR O LINK DESSA FIRMEWARE?

      Excluir
  22. Olá, meu problema com o k150 é que ele não reconhece os microcontroladores, me indicando na leitura tudo 0x00, depois disso o pc não consegue se comunicar mais com a placa, impossibilitando também o reset. alguém teria uma solução pra isso ou vou ter que conseguir outro gravador para o firmware do 16F628A?

    ResponderExcluir
  23. Quem estiver com problemas na gravação do pic 18f4550 com o gravador k150, recomendo olharem o post desse link que deixo abaixo, ensina certinho a fazer a atualização do firmware do gravador, só precisa ter um pic 16f628a a mais, pelo menos eu usei um outro e dps substitui o do próprio gravador flw..

    http://blog.filipeflop.com/pic/upgrade-firmware-k150.html

    ResponderExcluir
  24. Olá Gustavo, queria perguntar se com o programador k150 devo desligar LVP ou manter ligado?
    Uso o PIC 18f4550, quando comprei não tinha conseguido programar, dava sempre o erro, depois mexi em fuses e funcionou bem. Obrigado.

    ResponderExcluir
    Respostas
    1. você pode explicar o que você lograstes resolver o erro 18F4550? por favor me ajude alexandro18.89@hotmail.com

      Excluir
  25. O meu quando faço a checagem da versão diz que falta o chip PL2303, será que deu defeito no chip?

    ResponderExcluir
  26. Tenho um pequeno problema com PIC, poderia fazer contato por e-mail ? sergiojix@gmail.com

    ResponderExcluir
  27. muito bem explicado já estava ate trocando de microcontrolador mais com esse conteúdo consegui resolver o meu problema parabéns Gustavo pela iniciativa !!!

    ResponderExcluir
  28. Boa noite, isso tbm funciona para MIKROC?

    ResponderExcluir
  29. Olá. É muito boa sua postagem. Eu instalei este programa e ao configurar port o campo permite apenas um digito e minha instalação é na COM10. Como devo proceder?

    ResponderExcluir
  30. Boa tarde amigo, estou tento um problema com o microburn aqui:
    Reset Failed. Please check...
    Communications port, currently [COM 3]
    Board connectoins and power
    Mode = [K150], make sure this setting matches programmer board.

    ResponderExcluir