Veja a página da tarefa em grupo
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.
O processo vai ser dividido em fases: fresagem, montagem dos componentes, depuração e programação:
Nesta fase vou usar o seguinte:
- Comecei baixando as imagens Traces (1000 dpi) e Outline Cutout (1000 dpi) do circuito, que vêm no tutorial do Brian.
Selecionei a opção "image (.png)"
Escolhi o arquivo de imagem
Com a imagem carregada, selecionei "output format" e depois "G-codes (.nc)"
Em Process, selecionei "PCB traces (1/64)"
Antes de calcular, mudei a profundidade de corte para 0.05, metade do valor padrão, porque estava sendo um pouco cauteloso.
Depois cliquei em calculate
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.
Segurando o botão direito do mouse, dava até para ver de outra perspectiva.
Por fim, salvei o arquivo para a fresagem.
Para o contorno, segui os mesmos passos de antes, só que escolhi "PCB outline (1/32)" em vez de traces.
Comecei preparando a CNC fresando um rebaixo (pocket) do tamanho da placa virgem (76x50x1.5 mm).
Fresando o rebaixo
Rebaixo pronto
Colando fita dupla-face na placa de FR1
O resultado final é este.
Fresando o recorte de um dos ISPs
Tirando a placa do rebaixo.
Usei um estilete e uma lixa para tirar as rebarbas que sobraram da fresagem.
Tirei a fita dupla-face do verso da placa.
Com base no tutorial da página do ISP do Brian, comecei criando uma planilha com os componentes e as posições deles.
|
Componentes |
Posição |
Digikey ou Mouser Código da peça |
Código do fabricante |
|
- ATtiny45 ou ATtiny85 |
U1 |
ATTINY45V-10SUR |
|
|
- 2x resistores de 1kΩ |
R1, R6 |
RC1206FR-071KL |
|
|
- 2x resistores de 499Ω |
R2, R5 |
RC1206FR-07499RL |
|
|
- 2x resistores de 49,9Ω |
R3, R4 |
RC1206FR-0749R9L |
|
|
- 2x diodos Zener de 3,3V |
D1, D2 |
BZT52C3V3-7-F |
|
|
- 1x LED vermelho |
D4 |
LTST-C150CKT |
|
|
- 1x LED verde |
D3 |
LTST-C230TBKT |
|
|
- 1x capacitor de 100nF/0,1uF |
C1 |
C1206C104KARACTU |
|
|
- 1x barra de pinos 2x3 |
ISP |
71600-006LF |
Depois disso, soldei todos os componentes no lugar.
Comecei com uma inspeção visual.
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.
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."
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
Com o comando anterior, os programas foram baixados.
Depois baixei o código-fonte do firmware para uma pasta. Em seguida, rodei o comando make
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.
Depois rodei
make flash
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"
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.
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
Desta vez, depois de rodar lsusb, deu para ver que o aparelho estava lá.
Rodei
make
para compilar o firmware.
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.
Isso me obrigou a tirar o tubo termorretrátil que eu tinha colocado antes.
Então soldei!
E funciona!
Em seguida, rodei
make fuses
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.
Comando final make rstdisbl
Funcionou! Agora tiro o jumper!
Funciona! A prova é a detecção do USBtiny pelo comando Linux lsusb, como aparece na imagem acima e ampliado abaixo:
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".
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.
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:
avrdude, é o nome do programa.-c usbtiny define o nome do programador; "usbtiny" é o nome do programador que fabriquei.-p at90usb1286 é o CI alvo a ser programado, aqui o AT90USB1286 que está na minha Printrboard.-U flash:w:BootloaderHID.hex:i define o nome/local do firmware a ser carregado, neste caso "BootloaderHID.hex".
-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) →