Category: electronics

Como usar o modulo SparkCore – A Saga

Eu fui um dos muitos (mais de 5500) patrocinadores do projeto SparkCore no Kickstarter e fique muito ansioso para que o módulo chegasse logo.

Depois de uma longa espera meu SparkCore chegou e para minha surpresa ele não funcionou como o esperado. Assim que eu liguei ele acendeu na cor magenta (LEDs azul e vermelho acesos) e o aplicativo para Android não reconheceu meu dispositivo.

Tentei todas as dicas do site: https://community.spark.io/t/spark-core-troubleshooting-guide-spark-team/696, mas ele definitivamente não entrava no modo DFU e a função de restaurar configurações de fábrica não dava nenhum resultado. Contactei o pessoal do SparkLab e eles disseram que minha placa era uma das 1% que por algum motivo falhavam durante a produção.

Foi então que resolvi fazer alguma coisa, compilei o firmware deles a partir do código fonte e gravei usando uma placa STM32F4Discovery (st-linkv2) como programador SWD usando o OpenOCD, como expliquei aqui: https://acassis.wordpress.com/2014/01/19/flashing-spark-core-when-dfu-fails/

Este deu algum resultado, mas foi então que meu amigo David Sidrane sugeriu que eu gravasse o bootloader DFU no STM32 e a partir dele gravasse a memória serial flash externa.
Para entrar em modo DFU você deve pressionar ao mesmo tempo os botões MODE e RST, então solte o botão RST e mantenha o MODE pressionado por 3 segundos. E assim eu fiz:

$sudo dfu-util  -d 1d50:607f -a 0 -s 0x08000000 -D bootloader.bin
$sudo dfu-util  -d 1d50:607f -a 0 -s 0x08005000:leave -D core-firmware.bin

Com o bootloader gravado resolvi fazer um backup do conteúdo original da serial flash externa. Para minha surpresa ela estava limpa (cheia de 0xFF) indicando que estivesse formatada. Como eu não formatei, acredito que durante o processo de gravação do firmware na fábrica ela não chegou a ser gravada. Contactei o SparkLab novamente para explicar o problema e eles decidiram me enviar uma placa substituta, mas eu não precisaria mandar de volta a placa que estava comigo.

Após fazer o “backup” resolvi gravar o firmware na serial flash externa e criar os certificados, como explicado nesta página: https://community.spark.io/t/troubleshooting-my-core-is-flashing-yellow-red-lights-after-it-connects-to-wifi/627/2

Criando as chaves do certificado:

openssl genrsa -out core.pem 1024
openssl rsa -in core.pem -pubout -out core_public.pem
openssl rsa -in core.pem -outform DER -out core_private.der

Gravar o firmware na serial flash:

$sudo dfu-util -d 1d50:607f -a 1 -s 0x00020000 -D factory_firmware.bin

Gravar o certificado:

$ sudo dfu-util -d 1d50:607f -a 1 -s 0x00002000 -v -D core_private.der

Gravar a chave pública do servidor:

$ wget https://s3.amazonaws.com/spark-website/cloud_public.der
$ sudo dfu-util -d 1d50:607f -a 1 -s 0x00001000 -v -D cloud_public.der

Só precisei enviar minha chave pública (core_public.pem) e o ID do meu SparkCore para hello@spark.io e depois disso consegui conectar meu roteador wireless e criar as aplicações para a SparkCore.

Nota: Para ler o ID do seu SparkCore você deve entrar em “Listening Mode”, pressione o botão MODE por 3 segundos até o LED do seu módulo ficar azul. Use o minicom ou outro programa configurado para 9600 8N1 e pressione ‘i’ para exibir seu ID.

Replica do AGC

O computador usado no projeto Apollo era fascinante, mas comparado com a tecnologia atual ele é inferior a um microcontrolador de alguns centavos de dolares. Em termos comparativos ele seria equivalente a um microcontrolador com 2KB de RAM e 32KB de Flash (embora a ROM dele tivesse 36KB e as palavras fossem de 16bits).

É interessante ver que alguém criou uma réplica do computador AGC original:
http://agcreplica.outel.org

Você também encontrará muita informação e um emulador do AGC neste site:
http://www.ibiblio.org/apollo/

Ativando o Single Sequence ou Single Shot no meu osciloscopio

Sempre que tenho que ativar o Single Shot no meu osciloscópio (Uni-T UTD2062CE) gasto algum tempo até achar a configuração certa, apesar de ser algo teoricamente simples, a quantidade de opções atrapalha.

Para evitar ter que perder tempo novamente com isso, resolvi documentar os passos aqui no meu blog, assim quando precisar vai ser mais fácil olhar aqui.

Então vamos lá:

1) TRIGGER -> MENU
2) Type = Edge (F1)
3) Source = CH1 (ou o canal que você estiver interessado)
4) Slope = Rise (rampa positiva ou Fall para negativa ou Rise/Fall para ambas)
5) Mode = Single (apenas uma single sequence)
6) Coupling = DC
7) CURSOR
8) Type = Time
9) SELECT
10) Move SELECT Knob to adjust Cursor's end;
11) SELECT
12) Move SELECT Knob to adjust Cursor's start;
13 RUN/STOP

How to create an Open Source CNC

This is a nice post about how to create an open source CNC:

http://wyolum.com/shapeoko-desktop-cnc-mill-build/

This CNC uses an Arduino board with a CNC Shield. This CNC Shield could be replaced with this one:

http://blog.protoneer.co.nz/arduino-cnc-shield/

The software used to control the CNC is called GRBL and it was developed in C and could be flashed on Arduino board:
http://dank.bengler.no/-/page/show/5470_grbl

Unfortunately this software is not (yet) portable, this means it is optimized to run on AVR microcontroller only. Then it will not work directly on Raspi.

Other missing part is a graphical interface to use whit GRBL. I missed the GRBL Controller used to control and monitor it.

Update: Although you cannot run GRBL direclty on Raspi, you control the Arduino CNC from it:
http://zapmaker.org/raspberry-pi/running-grbl-controller-on-raspberry-pi/

Using the PCB photoresist APPELATION JH-1609

I bought this PCB photoresist from eBay:

http://www.ebay.com/itm/100g-Photoresist-Anti-etching-Blue-Paint-for-DIY-PCB-dry-film-replacement-/190741561459

Then I started searching about this product and found a nice site explaining how to replace the banana oil by lacquer thinner to dissolve the photoresist ink:

http://zapeleven.com/?p=91

Unfortunately this ebay package doesn’t came with the ‘developer’ powder, I’ll need to discover what this is chemical powder. Any help is welcome…