Índice:

Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!): 4 etapas
Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!): 4 etapas

Vídeo: Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!): 4 etapas

Vídeo: Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!): 4 etapas
Vídeo: HARDWARE DO ARDUINO UNO | Curso de Arduino #017 2024, Julho
Anonim
Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado a partir do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!)
Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado a partir do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!)
Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado a partir do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!)
Arduino autônomo de 3,3 V / relógio externo de 8 MHz sendo programado a partir do Arduino Uno por meio de ICSP / ISP (com monitoramento serial!)

Objetivos

  • Para construir um Arduino autônomo que funciona com 3,3 V de um clock externo de 8 MHz.
  • Para programá-lo via ISP (também conhecido como ICSP, programação serial no circuito) a partir de um Arduino Uno (rodando a 5V)

    Para editar o arquivo bootloader e gravar o bootloader (via ISP)

  • Ser capaz de ler informações seriais do Arduino independente via cabo FTDI

    Ser capaz de ler informações seriais do Arduino independente sem o cabo FTDI

Preâmbulo:

Eu estava tentando construir meu projeto autônomo, mas não vi nenhum guia abrangente sobre como executar, programar e monitorar um Arduino autônomo - particularmente um rodando com um clock externo de 8 MHz e 3,3 V e programado por um Arduino UNO. Reuni vários guias separados e tentei fazer referência de onde obtive as informações para dar crédito a quem o merece. Este guia é o resultado de muitos dias procurando soluções e encontrando partes delas ao mesmo tempo enquanto eu estava construindo meu próprio projeto. Além disso, vinculei vários produtos úteis que viriam em mãos, não porque eu seja afiliado a algum as empresas, mas porque é relevante incluir os itens específicos a que me refiro.

Perguntas comuns antes de começarmos:

Por que você precisa programá-lo com o ISP e monitorar via FTDI? Por que você não pode simplesmente programá-lo via FTDI?

Teremos que alterar as configurações do fusível gravando um novo bootloader e você não pode fazer isso via comunicação serial. Você deve gravar o bootloader via ISP. Isso também é útil para aqueles que não possuem um chip ATMEGA328 pré-inicializado.

Por que não uso apenas um cabo ISP com monitoramento serial, como este?

Talvez, como eu, você simplesmente não tenha um e, em vez de esperar que um seja enviado, você gosta de usar o que tem! Acontece que tenho um cabo FTDI (embora você descubra que, no final das contas, nem precisa dele: ele apenas torna sua vida mais fácil).

Não preciso de um deslocador de nível lógico do Uno para o Arduino autônomo?

Sim, você precisa, mas vou mostrar como fazer um você mesmo. Como o cabo ISP, por acaso não tenho um.

Eu quero funcionar com energia externa. Como faço isso?

Existem muitos guias que mostram como executar um Arduino autônomo com a energia da bateria. Vou escrever como fiz e colocar um link aqui [inserirei mais tarde].

O GUIA

Etapa 1: Construindo o Arduino independente

Construindo o Arduino Independente
Construindo o Arduino Independente
Construindo o Arduino Independente
Construindo o Arduino Independente

1) Construa o Arduino independente a partir deste link. A única parte do guia de que você precisa são os "Fundamentos do ATMEGA8 / 168/328".

  • você pode alimentar o Arduino autônomo de 3,3 V do Arduino Uno. (Você pode pular a primeira seção do tutorial intitulada "Adicionando circuito para uma fonte de alimentação".
  • Substitua o clock de 16 MHz por um clock de 8 MHz.
  • Adicione limites de 0,1 uF entre: VCC e Gnd (ambos os lados) VRef e Gnd.

    • Não os incluí na imagem, mas os tenho em meus projetos!
    • Eu sei que é um oscilador de 16 MHz na foto. Tirei a foto antes de descobrir tudo o que fiz no guia!

Fonte da imagem de pinagem ATMEGA328p aqui.

Dicas de solução de problemas comuns

  • Certifique-se de ter redefinido definido como alto por meio de um resistor de 10k do VCC para o pino 1 do ATMEGA. Se o pino estiver aterrado ou flutuando, ele não funcionará.
  • Verifique novamente se você inseriu os fios e o oscilador corretamente.
  • Certifique-se de usar capacitores de 22pF para o oscilador de 8 MHz. Não funcionará de outra forma.
  • Certifique-se de que o dispositivo esteja ligado.

Etapa 2: a fiação do ISP

A fiação do ISP
A fiação do ISP
A fiação do ISP
A fiação do ISP

2) Crie a parte do ISP

Você seguirá este guia aqui com uma etapa pequena, mas muito importante.

O motivo pelo qual você não pode simplesmente seguir o guia é porque está faltando uma parte crucial: você não pode programar um dispositivo de 3,3 V diretamente das conexões de 5 V. (Pelo menos, eu não poderia: não funcionaria até que eu fizesse isso). Você precisa inserir um deslocador de nível lógico que muda os sinais de 5 V do UNO para o Arduino padrão de 3,3 V.

Se você não tem uma placa de mudança de nível lógico, você pode fazer uma usando resistores. Tudo o que um deslocador de nível lógico realmente é (contanto que você esteja diminuindo) é um divisor de tensão. Você precisará de 6 resistores iguais, nada muito alto ou muito baixo. Usei resistores de 220 ohms, mas tenho certeza que mesmo resistores de 10k funcionariam.

Para SCK (pino digital 13) e MOSI (pino digital 11), use um divisor de tensão para cortar a tensão em um terço. Em essência, você terá um Uno SCK e MOSI, depois um resistor (220 ohm), depois SCK e MOSI conectado ao Arduino independente e 2 resistores (440 ohms no total) ao aterramento.

Portanto, leia o guia vinculado no início desta seção, mas inclua divisores de tensão entre SCK e MOSI. Lembre-se, SCK, MISO, MOSI e RESET são os pinos 13, 12, 11 e 10 no Uno, mas são os pinos 19, 18, 17 e 1 no Arduino independente!

Dicas de solução de problemas comuns

  • VERIFIQUE A FIAÇÃO

    • Se você estiver obtendo uma assinatura de dispositivo com todos os zeros ao tentar escrever um programa, é quase certo que sua fiação está desligada ou o Arduino autônomo não está recebendo energia.
    • Além disso, certifique-se de ter o fio de reset de 10 no Uno para 1 no Arduino autônomo
  • VERIFIQUE OS DIVISORES DE TENSÃO

    Certifique-se de ter divisores de tensão com uma proporção de 1: 2 (lado alto: lado baixo) para os resistores para SCK e MOSI. Por exemplo. um resistor de 220 no lado de + 5 V e, em seguida, 2 resistores de 220 ohms (440 ohms no total) em direção ao solo com o sinal em direção ao Arduino independente no meio

Etapa 3: edite o arquivo bootloader, grave o bootloader e envie seu esboço

Edite o arquivo do bootloader, grave o bootloader e envie o seu esboço
Edite o arquivo do bootloader, grave o bootloader e envie o seu esboço
Edite o arquivo do bootloader, grave o bootloader e envie o seu esboço
Edite o arquivo do bootloader, grave o bootloader e envie o seu esboço

3) Edite o arquivo bootloader (boards.txt) e queime o bootloader no Arduino independente. Faça upload do seu esboço

Editando o arquivo bootloader

Para colocar o Arduino autônomo em execução, você terá que editar as configurações do fusível de brownout do bootloader. Caso contrário, você poderá gravar um bootloader nele, mas não poderá executar nenhum esboço.

Você pode remover a detecção de queda de energia completamente, mas eu não recomendaria. Em vez disso, vamos reduzi-lo de 2,7 V (o que veio no meu chip como padrão) e substituí-lo por 1,8 V. Em última análise, no entanto, você pode escolher quais configurações de brownout deseja usando a calculadora de fusíveis aqui.

Meu arquivo de placas estava no seguinte local:

C: / Arquivos de programas (x86) Arduino / hardware / arduino / avr

No entanto, você pode ter mais de um arquivo boards.txt em sua pasta de hardware diferente de / arudino /. Você vai editar o arquivo boards.txt no local / arduino / porque vai modificar a seção ATMEGA328p (3,3 V, 8 MHz).

Você pode perder o arquivo boards.txt editado se reinstalar ou atualizar o IDE do Arduino (de acordo com este post). Isso significa que se você atualizar o IDE do Arduino, terá que alterar essas configurações novamente se quiser criar outro do mesmo Arduino autônomo.

No arquivo boards.txt, role para baixo ou pesquise "Pro Mini". A seção é intitulada "pro.name = Arduino Pro ou Pro Mini". Role para baixo até a subseção "pro.menu.cpu.8MHzatmega328 = ATmega328P (3.3V, 8 MHz)".

Procure a linha que diz "pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses = _"

Altere as configurações para xFE. (pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses = 0xFE).

Salvar e sair.

Gravando o Bootloader

Depois de fazer isso, você pode seguir a seção "Instruções" no guia do ISP das etapas 1 a 5.

Algumas coisas para esclarecer:

  • Ao fazer o upload do esboço "Arduino como ISP", você precisa garantir que tenha selecionado a porta COM e o processador corretos.

    Neste caso, significa que você selecionou a porta COM do seu Arduino em Ferramentas-> Porta: COM X (Arduino Uno) e a placa é Arduio Uno

  • Selecione o programador correto: em Ferramentas-> Programador-> Arduino como ISP.

    NÃO ArduinoISP ou ArduinoISP.org

  • Antes de gravar o bootloder, mude a placa "Pro ou Pro Mini" e o processador para "ATMEGA328p (3,3 V, 8 MHz)".

    Você não verá a seção do processador até selecionar o tipo correto de placa

Grave o bootloader no Arduino autônomo ANTES de tentar escrever esboços nele.

Carregando o esboço

Isto é muito importante. Agora você pode programar o Arduino: o Uno e o autônomo. Se você não fizer upload para o dispositivo correto, terá que repetir a seção acima e reescrever o Arduino como um programa ISP no Uno.

Ao carregar seu esboço, certifique-se de clicar em Ferramentas -> Carregar usando o programador OU clicar em Ctrl + Shift + U. Você também pode segurar a tecla shift e clicar no ícone de seta, mas não clique no ícone de seta sem segurar a tecla shift.

Dicas de solução de problemas comuns

  • Ative a saída detalhada para solução de problemas.
  • "O dispositivo assinado é todo 0's!" [É muito provável que ocorra.]

    • consulte a seção Fiação do ISP. Ou você conectou o Arduino autônomo incorretamente ou ele não está sendo ligado.
    • Certifique-se de ter selecionado a porta COM e a placa / processador corretos. Quando você estiver gravando o bootloader, você DEVE certificar-se de que está gravando o bootloader Pro Mini 3.3V 8 MHz nele ou os fusíveis não serão configurados corretamente.
  • "Eu editei o arquivo boards.txt, mas não vejo as edições"

    Certifique-se de ter editado o arquivo boards.txt correto. Tente atualizar o IDE do Arduino se as edições não estiverem funcionando ou remova outras pastas em seu / hardware / pasta temporariamente

  • "Não consigo encontrar a mini seção profissional de boards.txt!"

    Você não está procurando no arquivo boards.txt certo. Verifique a pasta Arduino // hardware / arduino /

Etapa 4: comunicação serial

4) Monitore o dispositivo independente via comunicação serial

Você pode realmente fazer isso por meio de 2 métodos, então, se você nem mesmo tiver um cabo / placa breakout FTDI, não é o fim do mundo. E lembre-se, o esboço que você carregou no Arduino independente deve ter instruções Serial.print para você ler: se você não o escreveu no programa, não verá nada!

Se você não tiver um cabo FTDI

Depois de queimar o bootloader e escrever o programa desejado, você pode (com muito cuidado e lembrando-se da orientação em que ele volta) remover o chip ATMEGA328 DIP do Arduino Uno. Eu recomendo usar uma cabeça chata para isso.

Você pode conectar o RX do Arduino autônomo ao RX do Uno e o TX ao TX. Sim, normalmente é o oposto, mas você pode pensar no Uno como "encaminhando" as informações para o monitor serial do IDE. É por isso que você não conecta RX a TX e TX ro RX neste caso. Quando estiver executando seu programa, certifique-se de ter a porta COM do Arduino Uno escolhida e abra o montor serial. Você poderá ver a saída serial do Arduino independente.

(Esta solução é creditada a Robin2 aqui.)

Se você tiver um cabo / placa FTDI

(Estou usando a placa FTDI do Sparkfun, que converti para 3,3 V usando a almofada de solda na parte traseira)

Simplesmente conecte o GND da placa de breakout ao aterramento do Arduino autônomo e conecte o RX da placa de breakout ao TX do Arduino e TX ao RX. (Se você estiver apenas monitorando serial e não estiver escrevendo nada de volta, basta conectar o RX da breadoutboard ao Arduino TX).

Tenha em mente que neste ponto você tem a opção de alimentar o Arduino independente por meio do Uno OU do cabo FTDI. Não conecte as duas fontes de alimentação ao mesmo tempo! Observe que você terá que alterar a porta COM, pois ela será diferente da porta COM do Arduino Uno.

Dicas de solução de problemas comuns

  • "Eu não estou vendo nada!"

    • Verifique se a porta COM correta está ativada.
    • Verifique se você possui os drivers FTDI mais recentes.
    • ASSEGURE-SE DE QUE O TERRA ESTÁ LIGADO.
  • "Tudo o que vejo é uma saída de lixo no monitor serial!"

    • Você está recebendo algo que é um bom sinal.
    • No entanto, verifique a tensão da placa FTDI.
    • O Arduino autônomo está produzindo 3,3 V em seu TX e a placa FTDI pode não detectá-lo se estiver esperando 5 V.
    • Verifique a taxa de transmissão.
    • Certifique-se de ter o aterramento conectado e apenas uma fonte de alimentação conectada! (Ou seja, não ligue o Arduino autônomo do Uno E de sua placa FTDI.

Recomendado: