Como já foi mencionado nas aulas anteriores, o Arduino é uma placa que contem um microcontrolador. Em determinados casos, é interessante utilizar apenas microcontrolador fora da placa para economizar espaço ou deixar o projeto com um aspecto mais profissional. Portanto, vamos aprender como fazer isso.
Para entender melhor a ideia do post, é bom reler a aula 1 dessa série de Arduino para Iniciantes.
Na aula anterior, vimos como executar duas coisas ao mesmo tempo.
Informações importantes
É importante conhecer alguns detalhes antes de colocar a mão na massa. A placa mais conhecida do Arduino, é o Arduino UNO. Uma versão mais antiga dela (1ª imagem abaixo) possui o microcontrolador com encapsulamento PTH (versão grande que vem encaixada). E a mais nova (2ª imagem abaixo) possui o mesmo microcontrolador com encapsulamento SMD (versão pequena que não pode ser removida facilmente).
Nas versões PTH é muito simples usar o microcontrolador fora da plaquinha, porque basta remover o microcontrolador e usá-lo separadamente (com o circuito apropriado).
Porém, nas versões mais novas, é necessário usar a placa como um programador para programar o microcontrolador externamente. E na versão antiga também é possível utilizar a placa como um programador.
Como fazer - Versão antiga (microcontrolador removível)
Se o microcontrolador nunca foi programado e não possui o bootloader, este método não irá funcionar.
O procedimento é muito simples, basta fazer o upload da programação na placa como você está acostumado a fazer. Após isto, remova o microcontrolador com cuidado e insira em um outro circuito que deseja utilizar.
Em relação ao circuito externo, é necessário alimentar o microcontrolador: 1,8 V a 5,5 V no Vcc e AVcc (pinos 7 e 20); e GND nos pinos 8 e 22. Você terá que utilizar um cristal externo se não alterar o bootloader. Veja a imagem do atmega328p abaixo para referência dos pinos.
O cristal deve ser ligado entre os pinos 9-10 (XTAL1 e XTAL2). E, para ele funcionar corretamente, você deve ligar dois capacitores (cerâmicos de 22pF), um em cada um desses pinos. Sendo que, uma ponta do capacitor liga em um pino XTAL e a outra no GND.
Além disso, é possível utilizar um capacitor em paralelo com a alimentação para estabilizar qualquer ruído da fonte. Esse capacitor pode receber o nome de capacitor de desacoplamento e um valor comum de utilizar é 100nF.
Botão reset
Para adicionar o botão reset, basta ligar um resistência de pull-up (valor de 10KΩ) no pino 1 (reset) e ligar também um botão conectado ao GND. A resistência de pull-up serve para garantir que o Arduino não fique resetando constantemente.
Circuito completo
O circuito completo fica como mostrado abaixo:
Para saber qual pino do microcontrolador corresponde a qual do Arduino, basta observar a imagem lá em cima e ver as correspondências.
Como fazer - Versão nova (SMD)
O circuito externo apresentado acima é o mesmo, o que muda é a programação. Isso, porque vamos usar a placa do Arduino como uma programadora.
Bootloader (padrão)
Caso você utilize um microcontrolador novo que não veio no Arduino, será necessário instalar o bootloader nele. O bootloader é um código que ficar dentro do microcontrolador e é executado quando ele é energizado. O bootloader é independente do código que normalmente gravamos no microcontrolador (fica separado). Além disso, o procedimento de gravar o bootloader também configura os fuses do microcontrolador, que definem algumas configurações, como o uso do clock (externo/interno). Normalmente, os microcontroladores que são comprados separadamente, não possuem o bootloader (no contexto do Arduino).
Antes de montar o circuito, é necessário fazer o upload, para o Arduino, da sketch ArduinoISP que se encontra em Exemplos>ArduinoISP. Feito isso, monte o circuito mostrado abaixo (o botão reset não é necessário).
Mesmo que você deseje utilizar o clock interno do Arduino, é necessário utilizar um cristal externo para essa parte. Salvo os casos onde o microcontrolador nunca foi alterado. E ele não precisa ser de 16MHz, com um de 4MHz também funcionará.
Além das ligações mostradas anteriormente, será necessário ligar o Arduino ao microcontrolador. Sendo que os pinos 11-13 do Arduino são ligados nos pinos 17-19 do microcontrolador. Os pinos 17-19 são os correspondentes dos pinos 11-13. Além disso, é necessário ligar o pino 10 no pino Reset do microcontrolador.
No software do Arduino, vá em Ferramentas > Programador e selecione “Arduino as ISP”. Por fim, vá em Ferramentas > Gravar Bootloader. Alguns segundos depois, o procedimento deve estar concluído e o microcontrolador estará pronto para ser utilizado. Se acontecer algum erro, confira as ligações, a programação e não deixe de utilizar um cristal.
Bootloader (clock interno)
Para gravar um bootloader que utilize o clock interno do microcontrolador, será necessário baixar um arquivo. Entre neste link e baixe os arquivos. Com o zip baixado, vá na pasta onde ficam localizados as suas sketchs do Arduino (no meu caso é na pasta “Documentos/Arduino”). Feito isso, crie uma pasta chamada “hardware” se já não existir. Dentro desta pasta extraia o arquivo baixado.
Reabra o Arduino, vá em Ferramentas>Placa e clique em ATMega328. Quando fizer isto, várias opções irão aparecer no menu Ferramentas. Se você não conhece o que são, altere apenas a opção clock para “8MHz Internal”. Por fim, seguindo os procedimentos do tópico anterior, clique em “Gravar Bootloader” no menu Ferramentas.
Se acontecer algum erro, confira as ligações, a programação e não deixe de utilizar um cristal.
Fazer upload
É a mesma configuração do bootloader: a placa tem que estar com a sketch ArduinoIsp e a configuração de “Programador” tem que ser “Arduino as ISP”. O circuito também é o mesmo. Se você gravou o bootloader para usar o clock interno, agora não é mais necessário usar o cristal externo.
A última etapa é criar o seu código para inserir no microcontrolador. E antes de clicar em upload segure SHIFT e você verá uma mensagem ao lado “Carregar usando programador”. Se a mensagem apareceu, é só clicar no botão.
Agora basta usar a imaginação e tornar seus projetos mais profissionais. Lembrando que, no caso de usar o clock interno, o cristal de 16MHz e os capacitores não são necessários. O que não pode faltar é a alimentação e o resistor de pull-up no pino RESET.
Interrupções com Arduino – Aula 11 – AI
Muito legal este post. Vou tentar usá-lo no meu TCC. Depois aviso se consegui.
Abs.
Valeu, Sebastião! Avisa sim, pois quero saber se deu certo. Abraço!
É possível usar o ATMEGA n placa do arduino mesmo com o bootloader do cristal interno gravado? o fato da placa ter o cristal de 16mhz n entra em conflito com o interno não?
Olá, Danilo! É possível sim, pois quando você grava o bootloader do cristal interno, ele desabilita a função dos pinos de cristal externo (PB6 e PB7 ou XTAL1 e XTAL2) e eles funcionam como pinos normais (pino digital de entrada e saída). Com isto, o cristal externo da placa não faz diferença para o funcionamento do Arduino rodando com clock interno.
Mestre bom dia, ótimo tópico, excelente explicação e detalhes técnicos fáceis de serem compreendidos com os links ou explicações próprias colocadas. Vlw mestre, muito obrigado pelos seus conhecimentos. Se possivel depois vou lhe mandar um projeto simples mais bem atrativo sobre automação residencial que fiz. Controlando absolutamente todos os equipamentos e iluminação de uma casa somente com a voz. Tipo uma I.A. Oq imagino não ser nenhuma novidade pro senhor. Bem mais uma vez muito obrigado e tenha certeza q usar muito ainda essa sua página. vlw
Boa tarde, Renã. Caramba, sensacional seu comentário, muito obrigado! Eu já vi um projeto parecido, mas o seu parece bem completão. Pode me mandar sim, que vou ficar feliz de conhecer ele. Se quiser, pode me enviar por email: mundoprojetado@gmail.com. E espero que o site continue te ajudando!
Para usar um código em que utiliza a função millis() no microcontrolador separado, como seria?
Olá, Barbara. Acredito que não tenha diferenças para a forma que você faria normalmente. Por acaso você chegou a ter algum problema ao tentar utilizar a função millis() com o micro separado?
Ola Fábio!
Muito boa a explicação!!!
Olha, eu tenho uma dúvida…
Eu achava que o reset era conectado ao GND através de um resistor de 10k o botão aberto seria conectado ao VCC. Então quando acionado ele enviaria um sinal em alta, o que restaria o CI.
Muito obrigado pela explicação!
Olá, Hélio. Que ótimo, fico feliz que tenha gostado do conteúdo!
É justamente o contrário, pois a lógica de acionamento do pino de reset é invertida. Tanto é que o pino de reset é desenhado com uma barra acima dele: exemplo 1 e exemplo 2.