Usando o Arduino para gravar códigos no PIC

Olá, sabe aquele PIC16F877 que precisa de um gravador específico? Pois é, não é mais necessário, com um Arduino seu problema está resolvido.

Bem mas, como funciona isso?

Bem, para quem não sabe o Arduino possui um conversor USB/Serial e um bootloader gravado no seu microcontrolador que é o Atmega328. É esse bootloader o responsável por gravar o código gerado na IDE do Arduino. Quando iniciado o atmega fica esperando algum dado pela serial (RX e TX), dessa maneira os dados recebidos são gravados na memória interna do micro.

O mesmo acontece com o PIC16F877, existe um bootloader que necessita ser gravado com um gravador específico (PicKit, etc.), após isso toda vez que o PIC é ligado ou após um reset, os 200 milissegundos iniciais ele espera por algum código pela comunicação serial (RX e TX).

Assim, gravando o bootloader uma única vez e você já terá um “pseudo-Arduino”. E como gravar os códigos utilizando um Arduino?

Então, como dito anteriormente no Arduino existe um conversor USB/Serial, então com o programa que você baixa aqui juntamente com o bootloader, é possível gravar o arquivo .HEX gerado na compilação do seu código, seja no MPLAB, CCS C Compiler, etc. Esse arquivo .HEX nada mais é que seu código convertido nos hexadecimais a serem gravados na memória do PIC. Com esse arquivo, sabendo a porta na qual o Arduino está conectado é possível gravar o código seguindo os passos abaixo.

Primeiramente, deve-se colocar o atmega328 em reset, dessa forma ele não influência na comunicação serial e fazer as ligações entre as seriais das placas como na figura abaixo;

arduino-pic

Após essas ligações, você deve pegar o arquivo .HEX do seu código já compilado. Para servir de exemplo, você pode usar o código abaixo para piscar um led no pino 33(código para um PIC com oscilador de 20 MHz).

:1000000000308A0018280000223084008313000882
:10001000031917280630F800F701F70B0D28F80B25
:100020000C287B30F700F70B1328800B0A280800F8
:1000300003081F39830083161F149F141F159F1177
:1000400007309C0083138613831286170230A100A9
:10005000FA30A2000420A10B2828831686138312ED
:1000600086130230A100FA30A2000420A10B33282D
:0600700083162328630043
:02400E00323F3F
:00000001FF
;PIC16F877A
;CRC=EA49  CREATED="27-mar-14 15:47"

Escolha o arquivo .HEX, a porta e a velocidade da porta serial. Após isso basta clicar em “write” e reiniciar o PIC. Quando concluído é exibido uma mensagem de confirmação.

pic_downloader_screenshot

 

O processo é simples porém existem alguns pontos interessantes a serem discutidos. No arquivo .zip baixado existem diversos bootloaders a serem gravados, o certo é escolher o que possui o mesmo modelo do seu PIC e a mesma velocidade de clock(do oscilador/cristal que se está usando). Também percebemos a existência do mesmo bootloader  mas com velocidades diferentes, essas velocidades se referem a comunicação seria, recomenda-se escolher a menor por existir uma baixa probabilidade de erro durante a comunicação.

Júnior Farrapo

Graduando de Engenharia da Computação pela UFC, gamer, fã da cultura nerd e curte o pop rock nacional.

16 thoughts to “Usando o Arduino para gravar códigos no PIC”

      1. “…Então, como dito anteriormente no Arduino existe um conversor USB/Serial, então com o programa que você baixa aqui juntamente com o bootloader, é possível gravar o arquivo .HEX gerado na compilação do seu código, seja no MPLAB, CCS C Compiler, etc. Esse arquivo .HEX nada mais é que seu código convertido nos hexadecimais a serem gravados na memória do PIC….”

        Eu nao tenho pratica nenhuma com PIC, mas tenho um aqui , e gostaria de usa lo, nem que seja pra brincar de “blink”,, só pra ele nao ficar aqui parado. Mas nao tenho um gravador de pic, estou tentando usar o arduino nano v3,0 pra fazer isso .
        baixei o mplab o pic compiler, ccs compiler e mesmo assim estou boiando no uso deles.para conseguir converter o codigo para hexadecimal.

        1. Como dito anteriormente, é necessário gravar o bootloader do pic com um gravador inicialmente. Sem isso não é possível gravar códigos usando o arduino, pois o pic não está preparado para receber dados pela serial.
          Vc deve usar gravar o bootloader disponível aqui http://dragaosemchama.com.br/wp-content/uploads/2014/05/PIC16F87xA_bootloader_v9-60.zip?93852b no pic com um gravador específico antes de usar o arduino para gravar códigos.

          1. Junior Farrapo.
            Eu , de verdade, agradeço todo seu esforço.
            Mas eu sou muito iniciante.
            Melhor deixar pra lá
            :D
            rs
            eu vou brincar com o arduino mesmo, até ter mais base e poder fazer algo assim.
            Agradecido

            :D
            Marcelo Pereira.

  1. Como vai, amigo ? tudo bem ? fico feliz em encontrar algo assim, em terra “brazuca”, achei muito maneiro ! Queria lhe perguntar uma coisa, que eu que sou muito “newbie” neste campo de microcontroladores e robótica, não entendi muito bem. Tipo assim…eu tenho um arduinozinho aqui. Aí, eu compro um PIC destes aí, talvez, um EEPROM, beleza ? certo…vamos supor que neste PIC, eu quero gravar um programa de pisca-pisca natalino com LEDs, pra dar pra minha tiazinha, beleza ? tá…eu gravo isso no Arduino mesmo, desenvolvendo uma Skecth lá mesmo, ou, tipo assim…é possível fazer com que um programa de programação de EEPROM ( “programa de programação”, nossa !) entenda o Arduino como uma interface para programação de EEPROM ? sacou ? tipo, eu posso usar o Arduino no lugar de um EEPROM Programmer ? se isso for possível, vou fazer um estrago só com a protoboard e o Arduino e mais uns jumpers. Bom post, amigo ! abraço e sucessos mil na carreira !

    1. Olá amigo, desculpa pela demora.
      Bem, a primeira vez você precisa ter acesso a um gravador de pic e gravar o bootloader disponilizado no post para o pic16f877.
      Após isso você vai usar o arduino pra gravar o código no pic através de sua serial. Você também podia utilizar um conversor usb-serial que podemos encontrar no mercado livre.
      O código que vai ser gravado no pic é o do próprio pic e não do arduino. C ou Assembler para PIC.
      Acho que deu pra pegar a ideia, se ficar confuso posso gravar um vídeo depois mostrando o processo.

      1. Lhe agradeço muito por sua atenção ! sim, foi plenamente esclarecedor. Eu preciso antes de mais nada, que o PIC tenha um bootloader gravado, eu entendi. Devo comprar um desses gravadores PICs mês que vem agora, tenho muitas curiosidades a serem analisadas neste tipo de microcontrolador. Mesmo esclarecido, quando lhe fosse possível, quando possuísse algum tempo, você bem que poderia gravar um video e postar, porque eu tenho plena certeza, de que haverá uma enorme quantidade de pessoas que gostarão muito de algo deste gênero. Valeu mesmo ! um grande abraço e muito sucesso pra ti !

  2. Bom dia Junior, tudo bem? Muito legal seu post, gostaria de saber se pra fazer gravação no PIC 16F628a seriam as mesmas portas utilizadas nesse ou estou enganado?
    Abraços

  3. eu gostaria de obter uma programaçao para o pic 16F628A para simular uma roda fonica de 36 dentes -1 ou variar personalizado como poderia obter isso ?

  4. Júnior, me tire uma dúvida,
    se eu criar um programa usando a placa arduino uno, eu posso depois salvar o código, comprar um atmega 328(o mesmo tipo utilizado na placa), e utilizando um programador universal, passar o .hex para esse novo chip? sem precisar gravar bootload? Pergunto isso pq eu tenho um programador universal aqui que aceita váaaarios chips, pic, avr, holtek, etc.

    1. velho, se seu Arduino for o UNO, você nem precisa tanto trabalho assim, isso, se seu arduino for o UNO. De fato, é muito fácil gravar bootloader em um Atmega328p com o próprio arduino, bastam alguns jumpers, uma protoboard e pronto. No Google tem muitos tutoriais sobre isso. Porém, vamos voltar ao assunto do “arquivo Hex”. Te sugiro a compra de um Atmega328p , já com bootloader. Tem uma loja fantástica no Mercado Livre que vende três chips juntos, incluindo capacitores e cristais por um preço ótimo. A loja chama-se “Instituto Digital, arte e sabedoria”. Bom, comprando o chip, deixe ele lá quietinho, não o use. Você deixa o hex file que você vai usar em algum diretório acessível e baixe este programa aqui, ó : http://russemotto.com/xloader/ . Amigo, baixe esse simples e fodástico programa dese site que te indiquei, o “Xloader”. Feito o download, você seleciona o arquivo hex, a placa Arduino que você usa, a porta COM e o Baud rate você deixa como está. Clica em upload e pronto ! daí, você retira o Atmega328p da placa, com muito carinho mesmo, com muito cautela e delicadeza. O chip que você retirou da placa, será o que você vai usar em seu projeto. Coloca o Atmega328p que você comprou, no lugar daquele que foi retirado. Eu faço isso em inúmeras vezes. Inclusive, uso o Arduino como ISP programmer para várias outras coisas e chips. Graças à esta matéria aqui do site, descobri que o Arduino programa uma série de outros microcontroladores. Espero ter te ajudado . Um abraço.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *