Produção Eletrônica


Tarefa em Grupo

Tarefa individual

Resultados de aprendizagem:

Você:


Tarefa em Grupo

Veja a página da tarefa em grupo

Tarefa Individual


Esta semana vou fazer um ISP (In-system programming), ou programador in-circuit.

Escolhi fazer o ISP do Brian. Escolhi pela simplicidade e pelo custo, já que ele é reduzido ao mínimo de componentes.

Imagem 1 do ISP do Brian Imagem da página do ISP do Brian

Imagem 2 do ISP do Brian Imagem da página do ISP do Brian

O processo vai ser dividido em fases: fresagem, montagem dos componentes, depuração e programação:

Fresagem

Nesta fase vou usar o seguinte:

Fab Modules

- Comecei baixando as imagens Traces (1000 dpi) e Outline Cutout (1000 dpi) do circuito, que vêm no tutorial do Brian.

Trilhas do ISP do Brian (1000 dpi) Imagem da página do ISP do Brian

Contorno de corte do ISP do Brian (1000 dpi) Imagem da página do ISP do Brian

- No Fab Modules

Selecionei a opção "image (.png)"

Formato de entrada no Fab Modules Captura de tela do meu computador

Escolhi o arquivo de imagem

Escolhendo o arquivo de imagem Captura de tela do meu computador

Com a imagem carregada, selecionei "output format" e depois "G-codes (.nc)"

Formato de saída no Fab Modules Captura de tela do meu computador

Em Process, selecionei "PCB traces (1/64)"

Escolha do processo no Fab Modules Captura de tela do meu computador

Antes de calcular, mudei a profundidade de corte para 0.05, metade do valor padrão, porque estava sendo um pouco cauteloso.

Ajuste da profundidade de corte Captura de tela do meu computador

Depois cliquei em calculate

Calculando o toolpath Captura de tela do meu computador

Depois do cálculo, fiz uma inspeção do toolpath para garantir que todas as trilhas estavam cobertas. Segurando o botão esquerdo do mouse, dava para mover a imagem, e com a rodinha dava para dar zoom e conferir melhor o toolpath.

Inspeção do toolpath Captura de tela do meu computador

Segurando o botão direito do mouse, dava até para ver de outra perspectiva.

Toolpath em perspectiva Captura de tela do meu computador

Por fim, salvei o arquivo para a fresagem.

Salvando o arquivo do toolpath Captura de tela do meu computador

Arquivo do toolpath salvo Captura de tela do meu computador

Para o contorno, segui os mesmos passos de antes, só que escolhi "PCB outline (1/32)" em vez de traces.

Toolpath do contorno da placa Captura de tela do meu computador

2- Mach3

Comecei preparando a CNC fresando um rebaixo (pocket) do tamanho da placa virgem (76x50x1.5 mm).

Rebaixo no Mach3 para a placa virgem Captura de tela do meu computador

Fresando o rebaixo

CNC fresando o rebaixo Foto da minha CNC fazendo o rebaixo para a placa virgem

Rebaixo pronto

Rebaixo pronto Foto da minha CNC terminando o rebaixo

Colando fita dupla-face na placa de FR1

Fita dupla-face no verso da placa virgem Verso da placa virgem

O resultado final é este.

Fresando o ISP Terminando o contorno do ISP

Fresando o recorte de um dos ISPs

Fresando o recorte Foto da minha CNC fresando o recorte

Tirando a placa do rebaixo.

Tirando a placa do rebaixo Foto da placa sendo tirada do rebaixo

Usei um estilete e uma lixa para tirar as rebarbas que sobraram da fresagem.

Placa limpa Foto da placa limpa

Tirei a fita dupla-face do verso da placa.

Verso da placa com fita dupla-face Foto do verso da placa

3- Montagem dos componentes

Com base no tutorial da página do ISP do Brian, comecei criando uma planilha com os componentes e as posições deles.

Esquemático do ISP Captura de tela do meu computador

Layout da placa do ISP Imagem da página do ISP do Brian

BOM

Componentes

Posição

Digikey ou Mouser

Código da peça

Código do fabricante

- ATtiny45 ou ATtiny85

U1

ATTINY45V-10SU-ND

ATTINY45V-10SUR

- 2x resistores de 1kΩ

R1, R6

311-1.00KFRCT-ND

RC1206FR-071KL

- 2x resistores de 499Ω

R2, R5

311-499FRCT-ND

RC1206FR-07499RL

- 2x resistores de 49,9Ω

R3, R4

311-49.9FRCT-ND

RC1206FR-0749R9L

- 2x diodos Zener de 3,3V

D1, D2

BZT52C3V3-FDICT-ND

BZT52C3V3-7-F

- 1x LED vermelho

D4

160-1167-1-ND

LTST-C150CKT

- 1x LED verde

D3

160-1889-1-ND

LTST-C230TBKT

- 1x capacitor de 100nF/0,1uF

C1

399-4674-1-ND

C1206C104KARACTU

- 1x barra de pinos 2x3

ISP

649-95278-101A06LF

71600-006LF

Depois disso, soldei todos os componentes no lugar.

4- Pré-depuração

Comecei com uma inspeção visual.

ISP semiacabado Foto do meu ISP semiacabado

OK, preciso limpar mais um pouco.

Com o multímetro, procurei curtos, principalmente entre Vcc e GND, e não encontrei nada.

No geral, a placa parecia boa, então parti para a programação.


5- Programação

Para programar o programador que fabriquei, usei um hardware chamado USBasp. No site dele, Thomas Fischl descreve assim:

"O USBasp é um programador in-circuit USB para controladores Atmel AVR. Ele consiste simplesmente em um ATMega88 ou um ATMega8 e alguns componentes passivos. O programador usa um driver USB só em firmware, não precisa de nenhum controlador USB especial."

Meu programador USBasp Meu velho e fiel USBasp

Você usa igualzinho ao USBtiny.

Os pinos saindo da capa de plástico transparente são o jumper de "slow SCK": ele baixa o clock de programação para o USBasp conseguir falar com chips rodando com clock lento (abaixo de uns 1,5 MHz). O USBasp que tenho não detecta a velocidade sozinho, então é só colocar o jumper para mudar o modo de velocidade. Isso é necessário, por exemplo, para programar um ATtiny44 ou 45 ainda rodando com o clock de fábrica de 1 MHz, enquanto um chip mais rápido como o AT90USB1286 pode ser programado na velocidade normal. O firmware novo desses programadores normalmente consegue detectar a velocidade do chip sozinho, como nos que são vendidos hoje no AliExpress por menos de 2 dólares.

Voltando ao software: no Ubuntu para Windows 10 (Windows Subsystem for Linux), comecei instalando o ambiente de programação com o comando sudo apt-get install avrdude gcc-avr avr-libc make

Instalando avrdude, gcc-avr, avr-libc e make Captura de tela do meu computador

Com o comando anterior, os programas foram baixados.

Pacotes baixados Captura de tela do meu computador

Depois baixei o código-fonte do firmware para uma pasta. Em seguida, rodei o comando make

Rodando make Captura de tela do meu computador

No Sublime Text, editei o Makefile e troquei a linha "PROGRAMMER ?= usbtiny" por "PROGRAMMER ?= usbasp".

Como expliquei antes, como eu estava fazendo um USBtiny, não tinha outro programador além do USBasp, por isso troquei o código pelo compatível com o meu aparelho.

Editando o Makefile Captura de tela do meu computador

Depois rodei

make flash

Erro no make flash Captura de tela do meu computador

Mas não deu certo. Então rodei lsusb para ver a lista de dispositivos USB disponíveis.

E recebi a mensagem "unable to initialize libusb: -99"

Erro de libusb no lsusb Captura de tela do meu computador

Depois de uma busca rápida no Stack Overflow, descobri que ainda não havia suporte a USB no shell do Ubuntu do Windows 10! Argh!

Obs.: ainda não confirmei, mas parece que em 2020 o USB já é suportado no Windows Subsystem for Linux, só que não era na época em que fiz estes exercícios.

Resposta do Stack Overflow sobre USB no WSL Captura de tela do Stack Overflow

Aí desisti do Bash do Ubuntu para Windows 10 e rodei uma cópia do Ubuntu no VMware Player. No Ubuntu, rodei:

sudo apt install avrdude gcc-avr avr-libc make

Instalando a toolchain no Ubuntu no VMware Captura de tela do meu computador

Desta vez, depois de rodar lsusb, deu para ver que o aparelho estava lá.

Rodei

make

para compilar o firmware.

Compilando o firmware Captura de tela do meu computador

Depois rodei

make flash

Mas de novo deu uma mensagem de erro.

Percebi que o ISP do Brian precisa ter um jumper instalado para programar o ATtiny45, e sim, esqueci de soldar o jumper.

Jumper que precisa ser soldado O programador precisa estar com o jumper soldado durante a programação e depois ele tem que ser removido.

Isso me obrigou a tirar o tubo termorretrátil que eu tinha colocado antes.

ISP semiacabado sem o tubo termorretrátil Foto do meu ISP semiacabado

Então soldei!

E funciona!

make flash funcionando Captura de tela do meu computador

Em seguida, rodei

make fuses

Gravando os fuses Captura de tela do meu computador

Depois de carregar o firmware e gravar os fuses, meu ISP novo não era reconhecido.

Então, de volta à depuração…

Acabei medindo o valor de cada resistor e trocando o ATtiny por um novo. Com um multímetro, descobri que o resistor R1 de 1K não estava funcionando. Troquei, e voilà! Placa detectada!!! Ah, e também resolvi colocar um conector USB que cortei de um cabo velho, e depois de uma lavada, ficou assim.

ISP pequeno sem capa Foto do meu ISP pequeno sem capa

ISP pequeno com capa, programando Foto do meu ISP pequeno com capa, programando

Comando final make rstdisbl

make rstdisbl Captura de tela do meu computador

Funcionou! Agora tiro o jumper!

USBtiny detectado pelo lsusb Captura de tela do meu computador

Funciona! A prova é a detecção do USBtiny pelo comando Linux lsusb, como aparece na imagem acima e ampliado abaixo:

Zoom na detecção do USBtiny Captura de tela do meu computador

6- Teste Final

Não satisfeito em trocar de plataforma, resolvi testar no Windows. Aqui vai um print de como carrego o driver do meu USBasp. Uso este software muito útil que deixa a instalação de drivers no Windows 10 menos traumática.

Para carregar o driver no Windows, uso a ferramenta "Zadig_2.2.exe".

Tela de instalação do driver Captura de tela do meu computador

Aqui mostro um print recente que prova que o USBtiny é detectado no Windows. Como fiz este exercício anos atrás, não tenho o passo a passo da instalação do driver no Windows, mas já mostrei a detecção no Linux e agora no Windows.

USBtiny no Gerenciador de Dispositivos do Windows Captura de tela recente do meu computador

Depois de instalar o driver, testei no Windows a gravação do firmware da placa da minha impressora 3D. O firmware que gravei, como acabei de dizer, foi o de uma Printrboard que fiz anos atrás a partir dos projetos open source.

No vídeo horrível abaixo, dá para ver isso acontecendo com o comando avrdude -c usbtiny -p at90usb1286 -U flash:w:BootloaderHID.hex:i -U lfuse:w:0xDE:m -U hfuse:w:0xdb:m -U efuse:w:0xF0:m

Para não ficar dúvida se o USBtiny que fabriquei grava ou não, vamos dissecar o código acima:

  1. A primeira parte, avrdude, é o nome do programa.
  2. Depois, -c usbtiny define o nome do programador; "usbtiny" é o nome do programador que fabriquei.
  3. Em seguida, -p at90usb1286 é o CI alvo a ser programado, aqui o AT90USB1286 que está na minha Printrboard.
  4. -U flash:w:BootloaderHID.hex:i define o nome/local do firmware a ser carregado, neste caso "BootloaderHID.hex".
  5. -U lfuse:w:0xDE:m -U hfuse:w:0xdb:m -U efuse:w:0xF0:m é a parte do comando que grava os fuses.

Tudo isso aparece no vídeo horrível ;-) abaixo.

Tudo funcionando!

← (19 fev) Corte Controlado por Computador · todas as semanas · Escaneamento e Impressão 3D (04 mar) →