Diego Manenti Martins

PIL e libjpeg no Snow Leopard (Mac OS X 10.6)

18/12/2010

Tentando instalar a Python Imaging Library (PIL) no Mac OS X 10.6 obtia o seguinte erro:

Symbol not found: _jpeg_resync_to_restart

Depois de pesquisar um pouco e não achar nada que resolvesse o problema, resolvi tentar compilar a libjpeg para x86_64.

$ CC="gcc -arch x86_64" ./configure --enable-static --enable-shared
$ make
$ sudo make install

Depois é só instalar a PIL:

$ python setup.py build

Verifique se o suporte a JPEG foi habilitado, então:

$ sudo python setup.py install

Utilizei a versão padrão do python no sistema (2.6), libjpeg 8b e PIL 1.1.7.

Agora tudo funcionando:

$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import PIL
>>> import Image
>>> import _imaging
>>>

Tags: python


DOSBox

12/04/2010

Descobri o DOSBox quando precisei rodar um programa em modo DOS no Windows Vista e descobri que este não suporta console DOS fullscreen.

Funciona bem, inclusive com o conversor USB/Serial, já que o programa que eu precisava rodar usa a porta serial para enviar dados para um CNC.

Para quem, em 2010, ainda precisa usar softwares mal feitos em DOS é uma mão na roda.

http://www.dosbox.com

Tags: DOSBox


Arduino e LCD

12/04/2010

Depois de botar pra funcionar meu arduino feito em casa abri o exemplo da biblioteca LiquidCrystal, que vem na instalação padrão do arduino.

A utilização da biblioteca é bem simples, basta indicar os pinos RS, RW, EN e os pinos de dados. Pode ser utilizado o controle em 4 bits e 8 bits.

Liguei os pinos do LCD no arduino, configurado para controle com 4 bits, baixei o programa e … não funionou! Azarado.

Verifiquei as ligações, tudo certo. Resetei a placa algumas vezes e o tal do 'hello, world!' apareceu.

Olhando o código da LiquidCrystal, vi que faltavam alguns comandos de inicialização para o controlador do display (HD44780). Deixei uma mensagem no forum Bugs & Sugestions mas não teve nenhuma resposta.

Resolvi os problemas de inicialização do LCD e coloquei o código em http://code.google.com/p/arduinolcd/. Para utilizar baixe o arquivo ZIP, descompacte e copie a pasta 'HD47660′ para a pasta 'hardware/libraries/' da instalação do Arduino.

Depois de instalada a biblioteca, vamos aos exemplos.

Abra o exempl HelloWorld em 'File>Sketchbook>Examples>Library>HD44780>HelloWorld', baixe para a placa, …

HD44780

… agora sim. :)

O exemplo SerialDisplay também funcionou. Demorei um pouco pra testar pois não tinha achado ainda um cristal de 16 MHz e queria também testar a porta serial. Como moro em Santa Catarina e longe da capital, não é muito fácil encontrar componentes eletrônicos por aqui. Não estava disposto a pagar mais pelo frete que pelo componente e não tinha nenhuma compra em vista para incluir alguns cristais. Achei em uma placa MiniDrangon que tenho aqui e agora posso testar as bibliotecas corretamente (as que utilizam temporização e porta serial).

Estou esperando chegar os fios para wire wrap para montar a placa ethernet e ver o que dá pra fazer com o Arduino na rede.

Tags: arduino, embedded, lcd


Arduino feito em casa

09/04/2010

Há algum tempo estava querendo testar o Arduino, pelo menos descobrir o que era e por que chamava tanto a atenção do pessoal.

Depois de descobrir do que se tratava, a vontade de testar passou um pouco, não comprei um arduino pronto, pois mesmo o preço não sendo muito alto lá fora, com os impostos de importação mais o frete acaba ficando um preço bem alto por uma placa tão simples.

Montagem

Decidi montar meu próprio arduino. Tinha um Atmega8 sobrando, uma placa padrão para montagem do circuito e o resto é regulador de tensão, alguns resistores e um max232 para comunicação serial (no arduino oficial usa apenas alguns transistores, mas eu prefiro soldar um max232 :). Ah, acrescentei um display LCD e algumas chaves que também tinha à disposição.

componentes

Depois de algumas horas soldando, cortando fios, resoldando, mudando componentes de lugar, surge o Arduino:

frente

E o trabalho sujo:

13-03-09_0013

As fotos ficaram bem ruins, estava sem câmera e utilizei a do celular. Mas dá pra ter uma idéia do trabalho.

Problemas

Depois de montado, o primeiro problema. Eu não tinha um cristal de 16Mhz. No lugar dele, usei um de 12Mhz, mas o arquivo hex do bootloader não funcionaria. Tudo bem, só recompilar, certo? Errado!

Já tinha o avr-gcc instalado, tinha o código fonte, botei pra compilar e:

../../avr/bin/ld.exe: address 0x205e of ATmegaBOOT.elf section .text is not with in region text

make: *** [ATmegaBOOT.elf] Error 1

Isto é, o arquivo bootloader ultrapassava a memória do arduino. Pesquisei em alguns fóruns e vi que era culpa da versão mais nova do gcc que gerava arquivos maiores. Resolvi utilizar o gcc que vem no arduino e descobri que era a mesma versão que eu tinha instalado.

Mais algumas pesquisas e resolvi mudando uma linha do Makefile. Onde tem:

OPTIMIZE = -Os

Substituí por:

OPTIMIZE = -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \

    -ffunction-sections -fdata-sections -fno-split-wide-types -Wl,--relax \

    -fno-inline-small-functions -mcall-prologues

Resolvido o problema, funcionou o bootloader e comecei a brincadeira, que contarei outra hora.

Conclusão

Confesso que tinha um certo preconceito contra o Arduino. Depois de mexer um pouco com ele, descobri que a brincadeira é bem divertida.

Uma coisa interessante no Arduino, é que as bibliotecas são escritas em C++, pelo menos as que dei uma olhada. Nos meus projetos microcontrolados, uso sempre C e, quando não tem outra saída, assembly. Usar orientação a objetos, mesmo que minimamente, parece interessante.

Tags: arduino, embedded