Integração entre Raspberry Pi e Atmega328P

Raspberry Pi e Atmega328P

Para os projetistas de embarcados, makers ou estudantes, uma pergunta bastante natural que já pode ter ocorrido seria a respeito de uma possível integração da placa Arduino UNO (microcontrolador AVR Atmega328P) e o Raspberry Pi, seja em sua versão 1, 2 ou 3. Muitos podem pensar que uma possível integração seria uma redundância de hardware embarcado ou desperdício de recursos, visto que é possível a programação e desenvolvimento de projetos utilizando Python e a GPIO do Raspberry Pi exclusivamente, sem a necessidade de um microcontrolador. Opiniões favoráveis ou contrárias possuem bons argumentos (sobre a viabilidade ou não), porem juntar as duas ferramentas makers (Arduino e Raspberry Pi) mais poderosas pode ser mais vantajosa do que você imagina.

 

Uma possível integração entre as plataformas já conhecida, e que pode ser realizada, é através da comunicação serial (pinos RX e TX de ambas plataformas). O que usualmente não é realizado pelos makers e projetistas é uma comunicação via protocolos SPI ou I2C. Pode parecer mais complicado em primeiro momento, mas os protocolos SPI e I2C transmitem de maneira eficiente e rápida dados de forma serial. Protocolos de comunicação a parte, qual seria a grande vantagem então da interconexão das duas placas (plataformas)? 

 

O Raspberry Pi possui 40 pinos digitais (nos modelos zero, 2 ou 3), I/O, e em muitas aplicações a falta de portas analógicas torna-se um problema critico. Uma possível solução seria o uso de conversores analógicos digitais (ADC) utilizando protocolos SPI ou I2C (usando o CI MCP3008). Infelizmente, para adquirir circuitos integrados ADC no Brasil pode-se tornar uma tarefa difícil e não muito viável economicamente. Assim, o uso de um microcontrolador AVR, como o Atmega328P, para realizar o processo de conversão analógico digital e posteriormente mandar a informação via protocolo SPI para o Raspberry Pi, pode ser vantajoso. Além do fato de incluirmos todas as outras funções de um microcontrolador AVR.

 

Neste tutorial a programação de microcontrolador AVR (Atmega328P) utilizando a IDE do Arduino modificada para Raspberry Pi é mostrada como possível solução para integração das plataformas. Posteriormente, em outro tutorial irei mostrar comunicação via protocolos entre as duas plataformas.

 

 

Programando um Atmega328P com IDE do Arduino modificada no Raspberry

 

O material necessário para este tutorial é: 

  • Circuito integrado Atmega 328P (o mesmo do Arduino UNO, com bootloader);
  • 01 Cristal oscilador de 16MHz e 02 capacitores cerâmicos de 22pF;
  • 01 resistor de 10k;
  • 01 LED (opcional);
  • Raspberry Pi conectado oa cabo ethernet.

 

Vamos dividir o tutorial em três partes: montagem do circuito standalone, ligação entre Raspberry Pi e Atmega328P e instalação da IDE modificada e teste.

 

 

Parte 1: Montando o circuito Arduino standalone

 

A primeira parte deste tutorial pode ser bem simples para alguns makers já acostumados com o circuito Arduino standalone, circuito composto por Atmega328P em uma protoboard com o menor número de componentes possíveis. Assim, siga as instruções da imagem abaixo para montagem do circuito. Você também pode usar qualquer circuito standalone em uma placa de circuito (PCB).

 

Circuito e esquemático para Arduino standalone com Atmega 328P
Figura 1 - Circuito e esquemático para Arduino standalone com Atmega 328P

 

Ressaltando que o jumper em vermelho na Figura 1 do esquemático se refere ao Vcc (+5 ou 3.3V) e o preto o terra (GND). Para testar se o circuito standalone esta funcionamento corretamente, recomendo programar com a placa Arduino UNO o Atmega328P o código exemplo blink e montar o circuito standalone (removendo após programar o chip Atmega328P da placa Arduino UNO, ou compatível). Para verificar o funcionamento, adicione um LED no pino 19 do microcontrolador (porta digital 13 com a interface Arduino) e verifique se o mesmo está piscando (cuidado para não adicionar o LED com polarização errada!).

 

Com o circuito standalone funcionando corretamente, vamos realizar a ligação dos fios entre Atmega328P e Raspberry Pi.

 

 

Parte 2: Realizando as ligações entre Atmega328P e Raspberry Pi

 

Nesta parte do tutorial, você precisará conectar alguns pinos do GPIO do seu Raspberry Pi aos pinos do microcontrolador Atmega328P. Antes de tudo, ressaltando que é importante a alimentação do Atmega328P com +3.3V. Esta limitação na tensão de alimentação deve-se ao fato de que os pinos digitais do RPi trabalharem em 3.3V.

 

Tabela 1 - Correspondência para ligação entre RPi e Atmega328P

GPIO Raspberry Pi

Pino do Atmega328P

Pino 24 (SPI0_CE0)

Pino 01 (RST)

Pino 23 (SPI0_SCLK)

Pino 19 (SCLK)

Pino 21 (SPI0_MISO)

Pino 18 (MISO)

Pino 19 (SPI0_MOSI)

Pino 17 (MOSI)

Pino 01 (+3.3V)

Pino 39 (GND)

Pino 7 e 20

Pino 8 e 22

 

 

O guia para o GPIO do Raspberry Pi (2 e 3) esta ilustrado na Figura 2.

 

GPIO do Raspberry Pi zero, 2 e 3
Figura 2 - GPIO do Raspberry Pi zero, 2 e 3

 

Caso você utilize este tutorial com o seu Raspberry Pi 1, favor desconsiderar a Figura 2 e a tabela 1. Assim, baseado no GPIO da Figura 3 e os nomes dos pinos (SPI0_MOSI etc) a conexão pode ser realizada.

 

GPIO do Raspberry Pi 1
Figura 3 -  GPIO do Raspberry Pi 1

 

Uma pequena ilustração de como pode ficar a conexão do seu Raspberry para o circuito com o Atmega328P pode ser vista na Figura 4.

 

Exemplo da ligação entre Raspberry PI 3 e circuito com Atmega328P
Figura 4 - Exemplo da ligação entre Raspberry PI 3 e circuito com Atmega328P

Com a ligação entre Atmega328P e placa Raspberry Pi realizada podemos partir para última etapa do tutorial, a instalação da IDE modificada para programação direto via GPIO.

 

 

Parte 3: Instalação da IDE modificada para programação via GPIO

 

A última etapa do tutorial pode ser vista como apenas a instalação da IDE modificada que permite a programação direto via GPIO do Raspberry Pi. A IDE modificada foi desenvolvida pelo site Gordon Projects e permite a programar direto, sem a necessidade de um cabo USB.

 

01) Instale a IDE do Arduino no seu Raspberry Pi (caso você não tenha). Para esta etapa vá no terminal do Raspbian e digite:

 

 

Instalação da IDE normal do Arduino via terminal do Raspberry Pi
Figura 5 - Instalação da IDE normal do Arduino via terminal do Raspberry Pi

 

02) Instale a IDE modificada do Gordon Projects. No terminal do Raspberry Pi e digite:

 

 

Instalação da IDE do Gordon Projects
Figura 6 - Instalação da IDE do Gordon Projects

Posteriormente, após o término da execução:

 

 

E rode o script:

 

 

Instalação da IDE Gordon Projects
Figura 7 - Instalação da IDE Gordon Projects

 

Apos a exibição de uma mensagem feito da Figura 7, você deve executar o reboot da placa:

 

 

Pronto! Agora você instalou a IDE modificada do Gordon Projects. O próximo passo fica a cargo da programação de um código para o Atemga328P pela GPIO.

 

Observação: Se no momento em que você tentar realizar o download dos dois arquivos do site projects.gordon.net e o mesmos estiverem fora do ar ou ocorrer algum erro, baixe os arquivos disponíveis no final do artigo. Você deve colocar eles na pasta /tmp do RPi e realizar a instalação como este tutorial.

 

03) Verifique a conexa do Atmega328P com o RPi. No terminal, verifique se o Atmega328P esta conectado digitando:

 

 

Caso tudo esteja certo você deverá ver uma mensagem igual à da Figura 8 (selecione Atmega328P), caso contrário verifique a conexão entre os pinos do Atmega328P e a GPIO da Raspberry Pi.

 

Verificando a conexão do Atmega328P com a Raspberry Pi
Figura 8 - Verificando a conexão do Atmega328P com a Raspberry Pi

 

04) Para programar o Atmega328P, abra a IDE do Arduino e selecione Gertboard with Atmega328 como placa a ser programada.

 

Programando com a IDE modificada
Figura 9 - Programando com a IDE modificada

 

Para a escolha do programador, escolha Raspberry Pi GPIO (vide Figura 10).

 

Escolhendo programador
Figura 10 - Escolhendo programador

 

Pronto! Agora esta tudo configurado para você programar seu Atmega328P via GPIO do Raspberry Pi. Em um próximo tutorial explicarei a conexão entre Atmega328P e a Raspberry Pi via protocolos SPI e I2C para o melhor aproveitamento da interconexão das duas plataformas makers mais populares.

 

 

Download

 

Os arquivos usados para esse post podem ser baixados aqui.

 

 

Referências

 

Drogon Projects website

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Eronides Da Silva Neto
Engenheiro da Computação no Centro de Estudos e Sistemas Avançados do Recife (C.E.S.A.R). Mestrando em Ciências da Computação no Centro de Informática da Universidade Federal de Pernambuco (CIn-UFPE). Engenheiro Eletrônico pela Universidade Federal de Pernambuco (DES-UFPE). Possui experiência profissional no desenvolvimento de sistemas embarcados e em Eletrônica Digital com dispositivos lógico programáveis (CPLDs e FPGAs).

Deixe um comentário

avatar
 
  Notificações  
Notificar