Fork me on GitHub

19/09/13

PIC: Bootloader USB HID

PIC: Bootloader USB HID



Quando se está trabalhando com microcontroladores PIC é muito chato ter que ficar retirando o PIC da protoboard para ficar regravando o firmware enquanto efetua seus testes. Utilizando PIC's com suporte a USB facilita muito essa tarefa.

Após instalar um bootloader no PIC, é possivel carregar um novo firmware através da porta USB.

EXPLICAÇÃO DO BOOTLOADER

O Bootloader deve ser a primeira coisa a ser executada no PIC. Por isso o vetor BOOTLOADER RESET VECTOR apontará para o início do código do bootloader.

Ao conectá-lo ao PC, durante 7 segundos ficará na espera do usuário clicar no botao CONECTAR no software. Caso estoure este tempo, ele iniciará o programa do usuário. Depois de conectado ele estará pronto pra receber o novo firmware.

Depois de gravado, ele iniciará o programa do usuário, apontando para o vetor APPLICATION RESET VECTOR. Nesse vetor foi gravado o endereço inicial do firmware.

O bootloader ocupa o final da memória. Então os programas a ser gravado no PIC, não devem ultrapassar essa área.

O código foi compilado para um cristal de 20Mhz. Mas é possível utilizar outros valores de cristais configurando o fusível PLL Prescaler Selection.

Veja que para poder utilizar o bootloader, antes tem que gravá-lo utilizando um gravador convencional.

Pode ser possível utilizá-lo para outros dispositivos PIC18. Fiz somente o teste com o PIC18F4550.

CÓDIGO DO BOOTLOADER
MikroC PRO PIC

SOFTWARE - Nova versão 2.3




DOWNLOAD
Firmware+Software+Código-Fonte (atualizado 03/05/2014):
Link1: BootProg2.3.rar
Link 2: BootProg2.3.rar




151 comentários:

  1. Cara você é fera mesmo! Hein! Achei que fosse só mais um Hobbysta, mas você manda muito em programação.show! !

    ResponderExcluir
  2. Muito Show! Obrigado por compartilhar o seu conhecimento!

    ResponderExcluir
  3. No arquivo para download faltou o Firmware e o projeto poderia colocar de novo.

    Obrigado

    ResponderExcluir
  4. Blog show d+. Esses artigos tem me ajudado mt. Mt obrigado.

    ResponderExcluir
  5. Esse bootloader aceita códigos de qualquer compilador? É necessário redirecionar vetores, ou incluir alguma coisa no código, para não ter conflito com esse bootloader?

    ResponderExcluir
    Respostas
    1. Pode utilizar qualquer compilador. nao ha necessidade de alterar nada no codigo.

      Excluir
  6. Dá pra fazer esse bootloader funcionar usando apenas o botão de reset, ou seja, sem o botão boot? Poderia dizer como fazer?

    ResponderExcluir
  7. Respostas
    1. Esse bootloader foi feito para o PIC18F2550 e 18F4550. Não é necessário modificar, até porque esse microcontroladores são idênticos.

      Excluir
  8. Cara, o que é o Built_in.h? Devo alterar isto para 18f2550.h para poder gravar no pic18f2550?

    ResponderExcluir
    Respostas
    1. Não precisa alterar nada. O bootloader serve tanto pro PIC18F4550 quanto para o PIC18F2550.
      O arquivo "Bult_in.h" é um arquivo interno no compilador MikroC que contém alguns macros, como por exemplo Lo() e Hi(), utilizados no código.

      Excluir
  9. Qual o arquivo do bootloader que devo mandar gravar no PIC 18F4550?

    (Desculpe pela pergunta "idiota", pois ainda não tenho familiaridade com isso. Estou aprendendo)

    ResponderExcluir
  10. Depois de adicionar o bootloader tem como remover ele e eu tenho que usar somente o mikroC como compilador ou posso usar outro???

    ResponderExcluir
    Respostas
    1. O código do boot foi feito no MikroC, mas dá pra modificá-lo pra usar em outro compilador.
      Pra remover o boot é só gravar um outro programa nele, utilizando um gravador convencional.

      Excluir
  11. Muito obrigado pelo conteúdo,está me ajudando muito!!!!!!!!

    ResponderExcluir
  12. Então eu sou posso usar o compilador com qual eu escrevi programa de bootloader?

    ResponderExcluir
  13. fiz a placa, instalei a firmware, conectei no pc, porém o pc mostrou a mensagem "dispositivo USB não reconhecido", mas mostrou no pc o nome do dispositivo "BOOTLOADER HID", o q eu fiz de errado, vc pode me ajudar?

    ResponderExcluir
    Respostas
    1. Mostrou tbm a mensagem "drive não instalado com êxito".

      Excluir
    2. Voce configurou corretamente os fusiveis na hora de gravar.
      Veja: Clique Aqui

      Excluir
    3. Eu uso o CCS compiler pra compilar, mas usei direto o seu bootprog.hex que veio no arquivo rar, onde configuro estes fuses?

      Excluir
    4. Voce deve configurar os fusiveis na hora de GRAVAR o PIC

      Excluir
    5. Amigo, consegui fazer funcionar, você fez um excelente trabalho, está perfeito! Obrigado mesmo, vc não sabe o qto me ajudou!!!!!

      Excluir
  14. Qual o valor fe frequência que usa para criar o projeto? O valor do cristal 20MHz ou 48MHz ??? ;)obrigado

    ResponderExcluir
  15. Boa noite Tiago, meu cristal é de 16 MHz, onde eu devo mudar essa configuração?
    Obrigado

    ResponderExcluir
    Respostas
    1. Na hora de gravar você deve alterar o fusível PLL Prescaler Selection para Divide by 4 (16 Mhz...)

      Excluir
  16. Cara, fiz a a plaquinha, e realmente funcionou, mas somente o meu PC de mesa reconheceu, o meu notebook não reconheceu e ficou mostrando a frase "Dispositivo desconhecido", vc sabe se esta faltando algum driver ou coisa parecida?

    ResponderExcluir
    Respostas
    1. Não, o bootloader não funciona no meu notebook, que é o Windows 7 (64 bits), mas no meu PC de mesa funciona, que é o Windows 7 (32 bits).

      Excluir
    2. Amigo, vc sabe se dá pra corrigir este problema?

      Excluir
    3. Amigo, estou com um problema semelhante, no PC de onde faço o curso, que é WinXP funciona sem problemas. mais no pc de casa que é win7 64 bits e no meu note que também é win7 64 bits, vc ouve o barulho de reconhecimento da placa ao conectá-la, mais o software bootprog 2.1 não consegue se comunicar com a placa não se conectando pra poder fazer upload do hex. No software bootprog 2.1 não acusa nada, nem na faixa vermelha em baixo na janela não acusa nada.

      Excluir
    4. como nao tenho windows de 64bits fica dificil de corrigir o erro. Voce ja testou se o HidTerminal funciona?

      Excluir
    5. Se o erro persistir, o problema é com a dll que nao tem suporte para 64bits

      Excluir
    6. No software bootprog 2.1 não acusa nada, nem na barra de status vermelha em baixo na janela. Mais o HIDterminal aparece na barra de status ao clicar em reset na placa, as mensagens Conectado depois de um tempo desconectado, presumindo-se que o software bootprog não consegue se comunicar com a placa em sistema operacional win7 64 bits nem utilizando o modo de compatibilidade pra winxp sp3. Abraços

      Excluir
    7. Ola! vc tem algum email pra contato?. Se nao for te encomodar, queria te passar o bootprog, pois dei uma mexida nele e queria que vc testasse.

      Excluir
    8. Ok, não é encomodo nenhum. meu e-mail é wilparadoxo@gmail.com agradeço sua disposição em ajudar. obrigado

      Excluir
    9. Obrigado Tiago. O BootProg 2.2, funcionou no meu Win7 64 Bits, sem problemas. E a dica que você me passou de alterar no projeto, o clock de 20MHz Para 48MHz solucionou o problema de velocidade e gravação na minha placa. Abraços

      Excluir
  17. Ola, estou com um problemam, quando eu simulo no proteus seu bootprog.hex ele funciona, o windows reconhce, quando recompilo os arquivos que estao na pasta do firmware, ele não funciona mais, pode me dizer por que isso ocorre? eu recompilo sem modificar nada, porem mesmo assim o windows sequer reconhece que o dipositivo esta conectado, quando retorno ao bootprog.hex que vem no .rar ele reconhece.

    ResponderExcluir
  18. Bom artigo amigo. Parabéns. Você pode disponibilizar o código fonte do HID Terminal?

    ResponderExcluir
    Respostas
    1. Posso sim.
      Ja coloquei a disposição!!!
      Abraços,
      Tiago.

      Excluir
    2. Valeu cara, você é d+. Obrigado novamente.

      Excluir
  19. Olá, estou usando um PIC 18F2550 com um cristal de 8Mhz, uso o CCS para compilar os meus programas e o MPLAB para enviar o programa pelo Pickit3. Não consigo achar onde muda o cristal.
    Grato pela ajuda

    ResponderExcluir
    Respostas
    1. ... no caso estou tentando enviar o bootprog.hex pelo MPLAB porém não consigo achar onde muda o oscilador.

      Excluir
    2. No MPLAB vai em - Configure -> Configuration Bits

      Excluir
  20. Olá, vc consegue mudar o botão do boot para o pino 13 (RC2) do PIC 18F2550 ? Pois não consigo fazer mudanças no programa. Assim te passo meu e-mail, pode ser?

    ResponderExcluir
    Respostas
    1. Pode ser, mas vc nao esta conseguindo alterar o código por qual motivo?

      Excluir
    2. Não consigo pois eu uso o CCS e ele não tem a biblioteca built_in.h, mas estou pensando em baixar o microC pro PIC, para fazer as mudanças que preciso. Que acha ?

      Excluir
  21. Olá, fiz toda a placa certinho, enviei o .hex e mudei para 8 Mhz que é o meu oscilador, aperto o botão o computador le, instala o driver mas no programa para enviar pelo USB fica como dispositivo desconhecido. Pode ajudar ?

    ResponderExcluir
    Respostas
    1. Pode ser q o computador nao instalou corretamente o drive, ou algum outro programa esta atrapalhando-o, ou o numero VID e PID no código do MikroC está diferente do VID e PID do software.

      Excluir
    2. Estranho é que tentei num de 32 bits ai funcionou. Vc consegue enviar o código fonte do software de programação do pic pela USB ? Muito bom o projeto, parabéns por manter ele aberto ! Abraços

      Excluir
  22. Olá, poderia passar o código fonte do programa que envia o programa pela usb? pois precisava fazer umas alterações para o meu projeto.

    ResponderExcluir
    Respostas
    1. Desculpa, mas eu não vou passar o código-fonte do programa pra ninguém!

      Excluir
    2. Ok, o problema é que estou tendo dificuldades em rodar no windows 64 bits, poderia me dizer o que devo fazer ?

      Excluir
  23. Olá, qual a versão do mikroC que você usa nesse projeto?

    ResponderExcluir
  24. Oi, você pode adicionar o código fonte do software "BOOTPROG". Muito obrigado pela contribuição, o grupo continua a melhorar e crescer Mikroelectronica obrigado.

    ResponderExcluir
  25. ola amigo. posso gravar o bootloader direto pela usb, ou preciso de um gravador?

    ResponderExcluir
  26. Fala Tiago, testei o hex que esta no seu zip, funcionou perfeitamente.
    mas queria mudar o boot para o pino RC1, quando abro o seu projeto no mikroC e compilo não funciona mesmo sem alterar nada. sabe porque? instalei a mesma versão sua 6.01 pro.

    ResponderExcluir
    Respostas
    1. descobri que o programa trava quando entra na função StartBootloader();
      Fiz um teste comentando esta função no main, e piscando um led e funcionou de boa.
      mas quando deixo esta função rodar ele trava!
      Se alguém tiver a solução posta ai... Obrigado.

      Excluir
    2. Olá! Lembro de um dia ter acontecido o mesmo comigo.
      Faz o download novamente do código, pois esse funcionou aqui!!!

      Excluir
    3. Tem toda rasão! Fiz o download e modifiquei novamente o pino, e funcionou perfeitamente!
      Obrigado, e parabéns pelo site.

      Excluir
  27. Alguém, sabe se gravando com bootloader é possivel fazer programas de comunicação usb?, pois o bootloader já reserva uma parte da memoria para isso, não estou conseguindo.Desde ja agradeço, parabéns pelo site

    ResponderExcluir
    Respostas
    1. É possível sim. O código do bootloader não interfere no código do usuário.

      Excluir
    2. Caro Tiago estou usando o kit da smart radio Proton pic 18f4550, ele já vem com o bootloader gravado e para gravar meus programas neles tenho que colocar no inicio a instrução #pragma orgall 0x1000 sem isso os programas não funcionam.Isto é normal com o uso do bootloader? Sera este um empecilho pois a usb destina o endereço 500 - 540.
      Agradeço muito seu site esta sendo de grande ajuda para meu TCC.
      abç

      Excluir
    3. Olá. É a mesma placa que eu utilizo pra fazer os testes aqui. o bootloader que vem junto com a placa, foi uns dos motivos para que eu criasse este outro bootloader. No bootloader que criei, reservei o ultimo espaço de memoria para o bootloader. Entao o codigo do usuario, que normalmente começa pelo endereço 0x0000, pode ser gravado no início sem precisar da diretiva "#pragma orgall".
      Neste outro bootloader da Proton, o bootloader inicia no endereço 0x0000 e tanto o vetor de interrupção quanto o codigo do usuário deve iniciar a partir do endereço 0x1000.

      Os endereços reservados pela usb, 0x500 e 0x540, são da memoria RAM. O bootloader é gravado na memoria Flash.

      Excluir
    4. Tiago agradeço muito sua ajuda,uma ultima pergunta não sei se você teve este mesmo problema mas, é o seguinte fiz o programa e simulei ele no proteus e funcionou perfeitamente,logo gravo no pic pelo pronton tudo ok, mas quando eu leio o arquivo do pic (atraves do proton) e pego este e simulo no protheus não funciona.Sabe qual pode ser o problema?Obs.passou a ter este problema depois que adicionei a comunicação USB.
      Agradeço muito seu site esta sendo de grande ajuda para meu TCC.
      abç

      Excluir
    5. Olá a Tiago e tymos, meu nome é Djeison e será que vcs poderiam me dar uma luz de como utilizar essa função #pragma orgall 0x1000 ?
      Pois eu utilizo essa mesma plaquinha de vcs, a proton, porem como eu não tenho um gravador externo, não consigo utilizar esse bootloader do tópico, sendo assim prescisava utilizar a função #pragma orgall 0x1000, mas pesquisei em um monte de lugar mas não achei nada a respeito de como utilizar ela. Será que vcs poderiam me ajudar? Desde já muito obrigado.

      Excluir
  28. Amigo, estou com um problema semelhante aos dos amigos que tem win7 64 bits instalado no pc. No PC de onde faço o curso, que é WinXP funciona sem problemas o bootprog. mais no pc de casa que é win7 64 bits e no meu note que também é win7 64 bits, vc ouve o barulho de reconhecimento da placa ao conectá-la, mais o software bootprog 2.1 não consegue se comunicar com a placa não se conectando pra poder fazer upload do hex. No software bootprog 2.1 não acusa nada, nem na barra de status vermelha em baixo na janela. Mais o HIDterminal aparece na barra de status ao clicar em reset na placa, as mensagens Conectado depois de um tempo desconectado, presumindo-se que o software bootprog não consegue se comunicar com a placa em sistema operacional win7 64 bits nem utilizando o modo de compatibilidade pra winxp sp3. Abraços

    ResponderExcluir
  29. Primeiramente, quero dar os parabéns pelo blog, tá excelente, mt bom mesmo. Quero tb tirar algumas dúvidas a respeito desse código:
    *A simulação funciona no proteus?
    *Pode ser feito no windows 7 x64?
    Testei no meu notebook, mas a interface que vc fez não reconhece o dispositivo do proteus, conectado na usb. Será que estou errando alguma coisa?
    Agradeço desde já qualquer ajuda. E mais uma vez, parabéns pelo excelente trabalho.

    ResponderExcluir
    Respostas
    1. Depois fiz testes no windows 7 x64 e percebi que os drivers do proteus não funcionam , mesmo sendo os drivers próprios. Recorri a uma máquina virtual para poder simular dispositivos hid usb, e só assim deu certo.
      *Testei outras interfaces encontradas na internet, e obtive os mesmos resultados.

      Excluir
  30. Tiago, por algum acaso você já tentou ou conseguiu fazer comunicação HID com o labview? se sim poderia me passar. reinoso360@gmail.com

    Grato.

    ResponderExcluir
  31. Tiago, tudo beleza? Parabéns pela divulgação do artigo. Então estou adaptando seu código para o PIC18F87j50 porém, o firmware funcionou mas estou tendo dificuldades com o Software em C#, consegui compilar no Win7 64bits, mas ao conectar o Software trava... no caso para escrever na flash são 64 bytes para escrita e 1024 para apagar... poderia me ajudar? Meu email é carloseduardo1984@gmail.com

    ResponderExcluir
    Respostas
    1. Fiz o código pensando nisso, ser compatível com outros modelos de PIC, mas não cheguei a fazer os testes.

      Excluir
  32. Nessa nova versão do software host, o nome do pic18f4550 aparece como vaáios caracteres ilegíveis. Como corrigir isso?

    ResponderExcluir
  33. Eu uso o CCS, será que você pode me ajudar a migrar esse projeto para ele? Excelente post!!!

    ResponderExcluir
  34. Olá a Tiago e tymos, meu nome é Djeison e será que vcs poderiam me dar uma luz de como utilizar essa função #pragma orgall 0x1000 ?
    Pois eu utilizo essa mesma plaquinha de vcs, a proton, porem como eu não tenho um gravador externo, não consigo utilizar esse bootloader do tópico, sendo assim prescisava utilizar a função #pragma orgall 0x1000, mas pesquisei em um monte de lugar mas não achei nada a respeito de como utilizar ela. Será que vcs poderiam me ajudar? Desde já muito obrigado.

    ResponderExcluir
    Respostas
    1. Até onde sei, sem gravador externo, esquece.

      Excluir
    2. Olá Djeison!
      Voce deve colocar no inicio do codigo. Exemplo:

      #pragma orgall 0x1000

      //declaracao de variaveis, etc

      void main()
      {
      //seu código...
      }


      Outro modo é utilizar a "função" OrgAll(0x1000);. Mas essa voce deve colocar dentro no void main(). Assim:


      //declaracao de variaveis, etc

      void main()
      {
      OrgAll(0x1000);

      //seu código...

      }


      Abraços.

      Excluir
    3. Djeison, pq não monta um gravador? É até bem simples, só precisa de um pouco de conhecimento de eletrônica.

      Excluir
  35. Olá Tiago,
    também tenho esta placa proton e uso o #pragma orgall 0x1000, mas fui fazer um teste com as bibliotecas da Mikroc, como a lcd.h e a placa não executa nada. No programa mando uma mensagem para o lcd e no loop mando o RA5 piscar, mas nada funciona. É como se tivesse alguma incompatibilidade do bootloader da smartradio com o compilador MikroC. Você pode me ajudar? Meu e-mail é annanuntius@hotmail.com.

    ResponderExcluir
    Respostas
    1. No seu projeto vc setou a frequência de clock do projeto em 48MHz. Pois tive problemas de gravação numa placa por ter esquecido deste detalhe. Eu testei numa placa parecida com essa Proton, mais utilizando o PIC18F2550 e um lcd 16x2 e funciona legal. utilizando o Bootloader BootProg daqui.

      Excluir
    2. Obrigada pela resposta. Eu fiz isso sim, usei as mesmas configurações do projeto exemplo feito no compilador ccs e que funciona. O problema é que no Mikroc se comento as linhas que usam a bliblioteca lcd padrão a placa funciona e o RA5 pisca, mas caso contrário a placa fica com um comportamento diferente. Por isso estava querendo saber a opinião do Tiago para saber se a placa dele funciona normalmente com bootloader da smartradio.

      Excluir
    3. Fiz um teste aqui na minha Placa SanUsb com o PIC18F2550 com o Bootloader daqui. Realmente quando aciono um botão, para acionar o LED na saída RA5, ele pisca de vez de permanecer ligado e não desliga sem ter no iniciar a placa. não tinha percebido isso. Utilizo o MikrC pro.

      Excluir
    4. Gravei o mesmo programa utilizando um gravador pickit2 e depois colocando o pic18f2550 novamente na placa SanUsb. Obtive o mesmo erro que vc mencionou a saída RA5 fica piscando ao pedir que ela somente acenda o LED. Então pode ser descartada a hipótese de ser um erro do bootloader. talvez a saída RA5 pisque por estar sendo utilizada por alguma outra função que teria que desabilitar. No momento não sei o que pode ser, pois no meu programa, desabilitei as portas analógicas e as interrupções. Vou fazer mais uns testes e se encontrar alguma solução posto aqui.

      Excluir
  36. olá tiago, tudo bem?
    vão aí algumas perguntas:
    1-eu uso a picdemboard usb com o bootloader da microchip. e instalei o mesmo driver do gravador pickit2. uso o compilador basic swordfish, e o mikrobasic (pra família 16f).
    preciso usar algum driver para este boootloader (botprog)? ele vem junto com o bootprog.rar? como proceder a instalação do driver no win7?
    2-na picdemusb, bem como no pinguino pic, temos que segurar o botão boot e pulsar o reset. como fazer no caso do bootprog?
    3-quando uso o picdemboard, devo (no caso do compilador ccs e do swordfish basic) usar a instrução org0x800. como ficaria no caso de usar o bootprog com o mikrobasic (ou C ou pascal)? e preciso desta instrução org quando usar o bootporg?

    obrigado pela paciência e dedicação. parabéns pelo trabalho.

    ResponderExcluir
    Respostas
    1. Olá tudo bem!!
      1 - Esse bootloader não necessita de drivers, pois ele utiliza o protocolo USB HID, o mesmo dos mouse e teclados USB.
      2 - Nessa segunda versão eu retirei o botao de boot, entao primeiro voce deve abrir o software e conectar o pic ao PC. Logo o software ira reconhecer e voce deve clicar no botao conectar, caso contrario, depois de 7 segundos e iniciara o firmware antes gravado. Clique no botao abrir e carregue o hexadecimal. Clique no botao upload para gravar.
      3 - Este não precisa da instrucao org, pois o bootloader e gravado no final da memoria, entao toda a parte desde o inicio da memoria esta disponivel.

      Abraços,
      Tiago.

      Excluir
  37. Olá pessoal!
    Tive muitos problemas para rodar o bootloader. Vou relatar como consegui pra ver se ajudo quem está com problemas...
    Baixei o bootloader BootProg versão 2.3, descompactei a pasta e ativei o BootProg2.3.
    Carreguei (importei) o programa BootProg.hex compilado em 17/02/2014 que está na pasta Firmware no MpLab e usei o ICD2br para gravar no PIC18F4550.
    ATENÇÃO - Não consegui fazer funcionar com o BootProg2.hex de jeito nenhum.
    Fiz um programinha de teste no MpLab pra piscar um led no pino RE2.
    Não consegui fazer a USB ser reconhecida e aliás dava um problema de driver sem colocar o capacitor de 100nF no pino VUSB e VSS. Achei que era "acessório" e perdi um tempão nisso.
    Aí vai outra dica - Tive que desabilitar TODAS as diretivas #pragma config.
    Quanto ao driver da USB o Win7 encontrou o driver sozinho e instalou. Tive que acionar o reset do uC novamente para que no Win7, o BootProgUsb.exe, reconhecesse a porta USB.
    Hoje uso assim:
    1 - Faço um programa no MpLab (ainda uso a versão 8.33) e gero o hex.
    2 - Clico no BootProgUsb.exe.
    3 - Conecto a USB e alimento a placa do PIC. O botão conectar fica vermelho, o ícone do pendrive fica azul e aparece a msg "Dispositivo Conectado" por uns 7 segundos. Se eu resetar o uC o processo se repete.
    4 - Clico no botão Conectar e no topo aparece o código do uC "PIC18F4550".
    5 - Clico no botão Abrir, encontro o arquivo hex e clico no botão Upload.
    O uC é gravado, reinicia e executa o meu programa.
    O Bootloader é muito bom, funciona e parabéns para os desenvolvedores.

    Espero ter ajudado. Um abraço a todos e sucesso!
    Mario.

    ResponderExcluir
    Respostas
    1. Oi Mario.. Muito Obrigado pelas dicas...
      Aqui não estava funcionando até desabiltiar as diretivas #pragma config!

      Pra quem for usar configurações diferentes da do bootloader, a dica é alterar no codigo fonte e compilar de novo..

      Muito obrigado ao Thiago tbm pelo bootloader.

      Excluir
  38. Cara, o link para download não está funcionando!

    ResponderExcluir
  39. to usando um pic com bootloader, Tenho um display 16×2, modelo JHD 162A, quando ligo ele ao pic 18F4550, com a rotina normal, o display nao exibe nada em sua primeira linha, e sua segunda linha apresenta blocos preenchidos, gostaria de uma ajuda para que conseguisse imprimir algo no display, no proteus o programa funciona corretamente, mas quando coloco no protoboard acontece isto.

    ResponderExcluir
  40. O bootloader etá funcionando perfeitamente no windows 8.1, sem qualquer alteração, com fonte externa e usb. Agradeço e parabenizo o Tiago Henrique pelo excelente código. Eu gostaria de tirar uma ultima dúvida: Em versões anteriores desse bootloader havia um led de controle no código. Seria possível implementar esse led na versão atual?

    ResponderExcluir
  41. Eu gostaria de saber se o Windows detecta automaticamente, como um dispositivo HID, pois no meu computador não apareceu nada. Será que o PIC esta queimado, eu tenho bastante conhecimento em eletrônica e fiz uma plaquinha e comparei com o esquema e esta perfeito.

    ResponderExcluir
    Respostas
    1. Qual o seu windows? No meu 7,8 e 8.1 foi detectado automaticamente

      Excluir
    2. já testei em todos, é como se eu não tivesse conectado nada, nem aparece um dispositivo desconhecido. Fiz um código pra pisca um led só pra ver se ele tava funcionando e não deu em nada, mas o pic esta gravando normal.

      Excluir
  42. Cara estou com um problema aqui e não estou conseguindo resolve-lo, acontece que eu montei o circuito a cima, gravei o pic, e ele e reconhecido no pc normalmente, mais no momento que eu carrego um programa e clico upload ele desconecta do pc e não chega a gravar nada, por favor alguém poderia me ajudar com esse problema ?

    ResponderExcluir
  43. Olá amigo, gostei muito do seu post, mas estou com um problema com o oscilador... Minha placa tem um cristal de 10MHz e o código foi compilado para 20, o mikroc demo não compila e o crackeado dá erro. Você sabe como mudar esse valor? Se eu mudo no meu programa não faz diferença nenhuma...

    ResponderExcluir
    Respostas
    1. Olá, obrigado.
      Não é possivel utilizar um clock de 10MHz. Utilize o clock de 20MHz ou um dos seguintes valores: 4, 8, 12, 16. Caso não consiga compilar, é só ir até a penúltima linha do arquivo "BootProg.hex" e alterar o valor "24" por outro valor. Abrindo as configurações do projeto e alterando o "PLL Prescaller" voce pode ver pra qual valor você deve ajustar( veja o valor do CONFIG1L ).
      Qualquer dúvida, estou a disposição.
      Abraços.

      Excluir
  44. quando vou compilar no mikroC, ele dá esse erro "0 360 Unresolved extern 'USB_Init_Desc' __Lib_USB_genHID.c".
    O que é e como arrumar...

    ResponderExcluir
  45. Boa Noite Tiago! Estou utilizando Windows 8.1 64bits, mas o bootprog 2.3 não reconhece o PIC (apesar do windows reconhecer). Existe alguma solução?
    Obrigado!

    ResponderExcluir
    Respostas
    1. Olá! Também utilizo o Windows 8.1 x64 e não tive problemas. Tente verificar as ligações, cabo USb, etc, e veja se REALMENTE o Windows reconheceu, porque quando reconhece pela primeira vez, aparecerá a janela de instalação do dispositivo. Tente executar BootProg em modo de compatibilidade, às vezes resolve.
      Abraços.

      Excluir
    2. Olá Tiago! Deixa eu tentar explicar melhor o que ocorre. Ao conectar o USB no PC, ele reconhece e aparece um dispositivo de entrada no Gerenciador de Dispositivos, fica durante 7 segundos, e desconecta novamente. Ao pressionar reset do PIC, acontece a mesma coisa. O que achei estranho apenas, é que o Dispositivo de entrada USB que aparece fica com um sinal de exclamação na frente, como se o driver não pudesse ser instalado. Na primeira vez que liguei, apareceu a janela de instalação como você disse. Já tentei executar o Bootprog como administrador e em modo compatibilidade, mas não funcionou.

      Excluir
  46. Boa tarde! Muito obrigado pelo blog, está me ajudando muito!

    Uma dúvida, o Bootloader funciona somente com USB ou outras formas de comunicação (ex.: Serial) também funcionam?
    Se não, é possível eu colocar um outro microcontrolador para fazer fazer isso (como um gravador)?


    Mais uma vez muito obrigado!

    ResponderExcluir
  47. Tiago, eu te mandei um e-mail no endereço microcontrolandos2012@gmail.com. Estou precisando de fazer um bootloader para um equipamento meu. Tenho interesse em te pagar pelo seu serviço. São 2 pics, inclusive 1 já é a 18F4550. Por favor me dá um retorno. Meu e-mail é contato@leomodulos.com.br Confere se chegou. abraço.

    ResponderExcluir
  48. Amigo, parabéns, muito bom mesmo, poderia me passar um tutorial com os comandos para a interface com o BootProg2.exe? gilvan.leal@yahoo.com.br

    ResponderExcluir
  49. Amigo estou utilizando o WinPic para gravar, tenho dúvidas quanto aos fusíveis, pois o pc Win7 32 no máximo reconhece como Unknow Device e não sai disso...

    ResponderExcluir
  50. Amigo adquiri a placa ustart for pic mas meus códigos são em assembly, o que tenho que alterar neles para poderem funcionar? Tem como vc me enviar um exemplo em assembly?

    ResponderExcluir
  51. Amigo estou tentando fazer uma placa destas para programação em pic , mas já tentei de tudo que encontrei na internet e meu pc não reconhece o pic minhas unicas diferenças são que estou usando um cristal de 16Mhz e meu gravador é um minipro tl 866cs Desde já agradeço a atenção!

    ResponderExcluir
  52. Olá Amigo! Parabens pelo programa! Eu só tenho um problema, quando seto o bit 14 do Config6, pra evitar que o PIC perca o BootLoader, ele não funciona, creio eu que por ele tentar gravar em uma região que eu acabei de protejer.. Você tem os endereços dos vetores? Obrigado!

    ResponderExcluir
  53. Amigo teria como adicionar o hex a ser gravado diretamente no c# sem carregar um arquivo.se sim vc poderia mostrar como eu faço isso desde ja agradeço.

    ResponderExcluir
  54. Tiago, a galera da faculdade não consegue gravar o bootloader usando o gravador K150(soft microburn)...único problema que achamos ter eh os fuses, ao abrir eles ficam assim:

    http://i.imgur.com/CKNT5qh.png

    ResponderExcluir
  55. Voce utilizou o clock de 48Mhz do código do bootloader né? Como faço para alterar o valor para 20Mhz? Uso o microC msm

    ResponderExcluir
  56. Olá tiago, tudo bem?

    Já pensou em criar uma interface botprog em linux, com python ou java?

    Abraços

    ResponderExcluir
    Respostas
    1. Olá, tudo bem e você?
      Estou pensando sim, até porquê o Windows ( 8 e depois o 10 ) parou de funcionar...fiquei então, só com o Ubuntu.
      Abraços.

      Excluir
    2. Puxa vida, Tiago, como é bom falar contigo denovo! Pensei que você nem me responderia...
      Sabe, sempre que falamos de linux não temos muitas respostas nos fóruns kkk

      Enfim, eu deixei de usar windows tem um tempo, justamente devido esta instabilidade, e achei no Ubuntu uma solução bem mais confiável...

      Quanto á interface botprog, sei que funciona bem no windows, e tive que ficar horas procurando por ferramentas pra rodar meus dispositivos no linux (como o mikrobasic, picdemusb, pickit2 clone, etc).

      Fato é que eu vi algumas receitas diferentes, algumas talvez mais simples, pra que se use uma solução em linux...

      Vai demorar um pouco, mas preparo um email e te mando com alguns links que vi sobre a 'briga' pra não se desenvolver em linux.

      O que achei de mais simples (creio que você vai gostar) pra se fazer em linux, usa o phyton. Todas as outras soluções usam eclipse, java, etc, ou linha de comando. O interessante de phyton é que não precisa instalar nenhum pacote adicional á um computador recem formatado.

      Veja esta simpática interface pra pickit2(dwarf- é a que eu uso hoje):
      http://www.nathandumont.com/blog/dwarf-a-pickit-2-gui-for-linux
      https://github.com/hairymnstr/dwarf

      Claro, isso na verdade roda o pk2cmd, em linha de comando, mas a interface gráfica funciona muito bem e é simples, pena que eu não sei programar pra criar esta interface (ou algo assim) com o mikroHIDbootloader ou sua interface botprog.

      Infelizmente, Tiago, todas as interfaces de bootloader HID disponíveis pra linux, são baseadas na PICDEMSUB, ou seja, pra trabalhar com mikroe (basic, C, pascal) tem que ficar mudando o vetor de reset ou adicionando 020000040000FA ao código hexa. POR ISSO SERIA TÃO IMPORTANTE um bootloader 100% compatível com os compiladores mikroe.

      pra linux, só tem o mikroe-uhb, mas estou no aguardo de uma resposta do autor...
      http://www.libstock.com/projects/view/790/mikroe-uhb-open-source-cross-platform-usb-hid-bootloader-programmer
      https://github.com/thotypous/mikroe-uhb
      https://pypi.python.org/pypi/mikroe-uhb/0.2
      https://www.mikroe.com/forum/viewtopic.php?f=12&t=56367

      Pra finalizar, veja que não há expectativa da mikroeletronica desenvolver em linux:
      https://www.mikroe.com/forum/viewtopic.php?f=93&t=54346

      Obrigado pela atenção. Se tiver forças, sua interface vai ajudar muito quem usa compiladores mikroe e S.O. linux, como eu!

      Abraços

      Excluir
  57. Gostaria de dizer que o boot funcionou muito bem!

    Vou descrever os testes que fiz no linux UBUNTU, win98SE e windows7.
    linux UBUNTU:
    O computador tinha uma conexão com a internet.
    Gravamos no nosso cpu (com pic18f4550 e xtal20Mhz) o firmware disponível em botprog> firmware> botprog.hex. No linux usamos a interface dwarf com o gravador pickit2 clone.
    Continuando, fomos ao terminal, digitamos lsusb, não acho nada. Pressionando o botão preto (reset mclre), antes de 7s redigitando lsusb e dando enter, apareceu na lista este device com vid 0x0001 e pid 0x0001
    Bus 003 Device 009: ID 0001:0001 Fry's Electronics
    Ou seja: o hardware está funcionando.
    Como não temos a biblioteca hid no linux, fomos a um outro pc.

    win98SE:
    No windows98SE (offline), copiamos no desktop a pasta completa botprog2.3.
    Conectando o hardware, o sistema pediu um driver. Como o windows98 não vem com a biblioteca hid, instalei o aplicativo USBmouse. Mesmo assim a instalação de dispositivos hid não é automática, então dei o caminho C:> windows> system32> drivers> hidcab5. Instalou tudo com sucesso e pediu pra reiniciar a máquina.
    Deu erro na reinicialização da máquina. Forcei, e reiniciei. Agora, mesmo com o driver instalado, não aparece o kit nem no gerenciador de dispositivo, nem na caixa de diálogo da barra de notificações (inferior) do windows. E ao abrir a interface botprog ou hidterminal, apareceu um erro:
    'To run this application, you first must install one of the following of the .Net Framework:
    v4.0.30319.'
    Fui á um computador mais novo...

    windows7:
    O computador tinha uma conexão com a internet, mas era da minha irmã, não tinha nada relativo á microcontrolador instalado (mikroc, mplab, proteus, nada!). Testamos SOMENTE a interface BOTPROG. O objetivo foi verificar as dependências.
    Denovo, copiamos no desktop a pasta completa botprog2.3.
    Conectando o hardware, o sistema instalou automáticamente o driver pelo windows update. Demorou uns 5min.
    Ao abrir a aplicação, pediu .Net Framework: v4.0.30319.
    Fui ao baixaki, baixei o pacote e deixei instalar. Demorou uns 15min.
    Depois de tudo instalado, abri a interface botprog.
    Ao clicar no botão de reset (da placa), o sistema dá a opção de conectar (botão conectar do pc). Se utilizar esta opção, o sistema indica 'conectado' e dá a opção de abrir um arquivo .hex (usei um que já tinha compilado no mikro basic e testado no proteus-tudo em linux- estes arquivos eu transferi com o pendrive).
    Ao clicar em carregar, ele carrega e desconecta automáticamente.
    No meu caso, que pisca o led em RC0, assim que acabou de carregar, o led já começou a piscar.

    Obrigado, Tiago, por fornecer esta ferramenta gratuitamente!

    ResponderExcluir
  58. Amigo como configura os fuses para o pic18f4550?

    ResponderExcluir
  59. erro:
    line: 1290
    message no: 324
    message text: undeclared identifier 'Flash_Write_32 ' in expression

    como resolver ? windows 8.1 - mikroc pro for pic 6.1

    ResponderExcluir
  60. olá, bom dia, eu li o tutorial e mesmo assim estou tendo problemas, compramos uma gravador usb k150, e precisamos sim usar o PIC 18F4550, mas mesmo gravando como foi descrito, não aparece nada, será que pode me dar uma passo a passo mais detalhado, dizendo até mesmo a ordem de programas que devo abrir? Por que sei que parece ignorância minha, mas em nenhum momento eu usei o HIDterminal.
    Por favor, aguardo desesperadamente sua resposta. se quiser enviar também no email : indianara.santosh@gmail.com

    ResponderExcluir
  61. Bom dia,
    Estou utilizando um 18F2550 e windows 10, acabei de testar em um windows 7, está tudo funcionando corretamente mas quando eu tento com o meu computador o pic simplesmente não grava.
    Quando abro o BootProg, o microcontrolador é reconhecido. As informações de FLASH, EEPROM, ... parecem corretas MAAAS quando eu mando gravar, o programa desconecta o dispositivo e fica por isso mesmo, não consigo gravar nada com esse pc.
    Pode me ajudar?
    se preferir mande a resposta para o meu email
    jv.predebon@gmail.com

    ResponderExcluir
  62. amigo sou iniciante em programação e acabei transformando o pino de acionamento do bootloader da placa que uso em saida o C1, agora ela não liga mais o USB , eu clicava reset e C1 depois soltava reset assim ela acionava o USB , agora não aciona mais como resolvo isso já estou quebrando cabeça a 1 semana ... a placa é uma da ACEPIC só com 1 potenciometro , 2 botoes C1 e C2 e um sensor de temperatura .

    ResponderExcluir
  63. Amigo, agradeço o trabalho, mas queria deixar uma pergunta, compilo o c mas nao funciona, já o seu .hex funciona maravilhosamente. Quais as config. dos fuses e clock do microC?

    Obrigado!!!

    ResponderExcluir
    Respostas
    1. Olá, tudo bem?

      vc pode abrir o código .hex do bootloader com um programa de gravação (por exemplo o winpic800) e verificar os bits dos quais vc tem dúvida.
      pode fazer o download do projeto (bootloader) e abri-lo no mikroC, dai confere os fuses.

      Abraços!

      Excluir
  64. alguem poderia me ajudar? comprei uma placa da proton'n ... posso usar o programa fornecido pelo fabricante para gravar o bootloader direto nesta placa atraves do usb?

    ResponderExcluir
    Respostas
    1. vc já deve ter sanado sua dúvida faz tempo, mas vamos lá:
      em poucas palavras, o bootloader é um programa que, ao ligar seu sistema, pergunta 'se tem alguém querendo escrever na memória do chip'. caso não tenha, ele salta ao programa principal, e roda normalmente.
      suponhamos que seu programa pisque um led. ao ligar, roda o bootloader, e caso ninguém tente modificar seu código, ele roda o tempo do bootloader, e depois vai ao programa principal piscar o led. entendeu?

      e qual o problema (neste caso) da placa proton? O bootloader é o da microchip. ele está no INICIO da memória, e o bootloader da mikroe (tiago) está no FINAL da memória.

      Por proteção, provávelmente o programa nem será gravado, pois iria SOBREESCREVER o bootloader, entende?

      Eu sugiro que vc use um bootloader compatível com o seu compilador.
      Bootloader pinguino para pinguino ide
      boot ccs para compilador ccs
      boot microchip para mplab
      boot jal para o jaledit
      boot mikroe (ou o do tiago) para compiladores mikroe (mikroC, basic, pascal)

      O que vc pode fazer pra rodar os exemplos do blog, é fazer um backup do seu bootloader proton, gravar (com um gravador de pic) o bootloader da mikroe ou do tiago, e ai sim rodar os exemplos do blog SEM FAZER AQUELAS ALTERAÇÕES CHATAS NO SEU CÓDIGO

      Boa sorte!

      Excluir
  65. oi, eu estou usando a proto'n mas o pc e windows 10 e não esta identificando mesmo quando eu coloco o usb, a placa e alimentada, mas o software de graação não reconhece, e isso só acontece quando a placa esta conectada ao restante do circuito, pode me ajudar???

    ResponderExcluir
  66. Bom dia,
    O display LCD 16x2 não está mostrando os valores corretamente, com este bootloader.
    Está havendo uma demora na inicialização do programa,de forma que o envio dos dados para o display não estão sendo corretos, ou mesmo sua inicialização está sendo prejudicada.
    Gostaria da ajuda sobre o não funcionamento do display LCD 16x2 com este bootloader.

    ResponderExcluir
  67. telasmosquiteira-sp.com.br

    telas mosquiteira
    telas mosquiteiro

    As telas mosquiteira sp , telas mosquiteiro sp garantem ar puro por toda casa livrando-a completamente dos mosquitos e insetos indesejáveis. As telas mosquiteira garantem um sono tranquilo a toda família, livrando e protegendo-nas dos mais diversos insetos. Muitos destes insetos são transmissores de doenças e a tela mosquiteira é indispensável no combate a mosquitos transmissores de doenças.

    A dengue, por exemplo, já matou centenas de pessoas só na capital de São Paulo e um pequeno investimento em nossas telas mosquiteiras podem salvar vidas. As telas mosquiteiras também impedem a entrada de insetos peçonhentos como as aranhas e os escorpiões, estes insetos também oferecem risco, pois seu veneno em poucos minutos podem levar uma criança a morte.
    telas mosquiteira jundiai
    telas mosquiteiro jundiai
    telas mosquiteira aplhaville
    telas mosquiteiro alphaville
    telas mosquiteira granja viana
    telas mosquiteiro granja vinana
    telas mosquiteira cotia
    telas mosquiteiro cotia
    telas mosquiteira tambore
    telas mosquiteiro tambore

    A chegada da temporada Primavera/Verão traz consigo a elevação da temperatura e a maior ocorrência de chuvas. Mas não é só isso. As estações mais quentes do ano causam muita dor de cabeça e muitos zumbidos indesejáveis em função das pragas urbanas – pernilongos, baratas, cupins e outros insetos -, que afetam todas as regiões brasileiras.

    Nossa missão é oferecer telas mosquiteiras de qualidade a um preço acessível, fazendo com que as telas mosquiteiras sejam uma opção viável para muitas pessoas.

    telas mosquiteiras Jundiaí
    telas mosquiteiro Jundiai
    telas mosquiteiras jundiai
    telas mosquiteiro industria
    telas mosquiteira restaurante
    telas mosquiteiro restaurante
    telas mosquiteira empresa
    telas mosquiteiro empresa

    ResponderExcluir
  68. Amigo, estou com vontade de comprara o PIC 18F2550 para fazer um gravador pickit2. Como devo proceder? Estou iniciando em programação de pic e sei so o basico.
    Com o pic 18f4550 quero gravar o bootloader e gravar programas e fazer circuitos. Se eu gravar o bootloader tem como apagar? O pic funciona sem o bootloader?

    eng.marcos26@gmail.com

    Aceito conversas de ajuda nessa area que é tao complicada hehee

    ResponderExcluir
    Respostas
    1. 1- vc precisa de um gravador qualquer pra gravar o programa no seu gravador (ex: ao construir o pickit2, precisa de um gravador para gravá-lo. dai ele se comporta como um gravador)
      2-sim, pode apagar o bootloader depois, com o gravador que vc construiu.
      3-sim, o pic funfa sem bootloader, mas tem que usar o gravador sempre que vc quiser mudar o programa.
      Boa sorte!

      Excluir
  69. acho que o admin deste excelente blog ficou sem tempo... ou por alguma razão ficou desmotivado.. o trabalho dele com este blog merece muito mais que um obrigado.

    ResponderExcluir
    Respostas
    1. Olá davy.
      Nao conheço o tiago pessoalmente, mas me ajudou muito aqui pelo blog.
      Creio que ele esteja fazendo faculdade.
      Eu tbm acho, merece muito mais que um obrigado!

      Abçs

      Excluir
  70. Amigo, eu não tenho nenhum gravador para pic usb. O que eu uso aqui é a propria porta serial db9 do pc com o cabo db9 com alguns resistores, o software winpic e consigo carregar os .hex gerados do mplab com ccs.
    Porem eu quero progrmar via usb do note na faculdade, ainda ovu comprar esse pic 18f4550 virgem para eu mesmo gravar o bootloader como desafio.
    Minha duvida é a seguinte: para gravar o bootloader do amigo é so montar o circuito acima e usar os seus software? OU tem q gravar via serial(gravador jdm)como ja faço? abraços.

    ResponderExcluir
    Respostas
    1. Tenho essa mesma duvida que o Markus, é só montar o circuito acima conectar no usb e usar o programa???

      Excluir
    2. Markus, Bruce, olá.
      Voce pode montar o circuito do 18f4550 e usá-lo quando quiser. Talvez melhor que isso, testar seu funcionamento no proteus ANTES. Mas sem o bootloader, tem que usar um sistema de gravação toda vez.

      Pra responder a dúvida, sim, vc precisa de um gravador (jdm, tait, idc, pickit2, etc) pra gravar o bootloader a primeira vez, depois pode carregar os arquivos .hex via bootloader.
      Sabe, é que o chip vem 'apagado' de fábrica e não tem o bootloader. Sò isso.

      tem placas que compramos por ai que já trazem bootloader, como a proton da microgenius ou a pinguino4550.
      Mas pra usar os exemplos do blog, o bootloader que o tiago escreveu é melhor, pois dá certinho pra uso com compiladores mikroe (mikroCPRO, mikrobasic, mikropascal).

      Boa sorte!

      Excluir
  71. Boa tarde, Tiago.
    Tenho procurado muito opções de bootloader pela internet, usando compiladores mikroe. Isso facilita bastante para não ter que mudar o vetor de reset e de interrupção no código fonte, e não ter que inserir linhas mágicas no código hex.

    Descobri que na verdade, por usar linux, eu deveria utilizar um bootloader cdc, pois no linux esta classe usb não necessita de driver (ao contrário do hid, que em linux, nem tem suporte). E teria que ser um bootloader cdc, escrito com ferramentas mikroe (C, basic, pascal).
    è muito difícil desenvolver um bootloader cdc? O seu botprog, tiago, pode ser adaptado á cdc? se for, isso ficaria incrível, pois em cdc é fácil demais comunicar em linux.

    hoje, pra usar mikroe (eu uso o mikro basic), tenho que usar o bootloader microchip, e ajeitar meu código no mikroe pra ficar compatível, e dai subir isso com o picdembootloader via piklab.

    Obrigado

    ResponderExcluir
    Respostas
    1. Então, já estou fazendo o programinha, hehehe.
      O meu boot utiliza apenas o USB HID, vou ter que mudar o código do bootloader para usar o USB CDC.
      Ja escrevi uma API Java para ler/escrever nas portas seriais, funcionou bem com o Arduíno. Quanto terminar, posto lá no outro blog que criei.
      Abraços.

      Excluir

Postagens Relacionadas!!