02 setembro, 2011

ATMEGA32U2 no Linux.

Baixar o codigo fonte do dfu-programmer:
cd /tmp
mkdir dfu
cd dfu
apt-get build-dep dfu-programmer
apt-get source dfu-programmer
cd dfu-programmer-0.5.1
Adicionar no arquivo "src/arguments.c", na "static struct target_mapping_structure target_map[]" antes do "{ NULL }", linha 101:
{ "atmega32u2", tar_atmega32u2, adc_AVR, 0x2FF0, 0x03eb, 0x08000, 0x1000, true, 128, true, false, 128, 0x0400 },

Adicionar no arquivo "src/arguments.h", na "enum targets_enum" antes do "tar_none };", linha 79:
tar_atmega32u2,

Gerar o pacote:
dpkg-buildpackage
Instale o pacote gerado:
dpkg -i ../dfu-programmer_0.5.1-1_amd64.deb

Baixar exemplo do site da ATMEL:
mkdir /tmp/atmel
cd /tmp/atmel
wget "http://www.atmel.com/dyn/resources/prod_documents/series2-usb_software_library_template-2_0_0-doc.zip"
unzip series2-usb_software_library_template-2_0_0-doc.zip
cd /tmp/atmel/series2-usb_software_library_template-2_0_0-doc/demo/series2-usb_software_library_template/gcc
Altere no arquivo "Makefile" a linha do compilador gcc, linha 9 para:
CC = /usr/bin/avr-gcc
Altere o arquivo "../conf/config.h". Os includes das linhas 72 e 74 estao com "\" e no linux eh "/":
#include "lib_board\stk_526\stk_526.h"
...
#include "lib_board/stk_600/stk_600.h"

Tente compilar. Se der erro como "clock_prescale_set" faca o seguinte:
Edite o arquivo "/usr/lib/avr/include/avr/power.h" e procure por "clock_prescale_set". Volte um pouco no
codigo e encontre o bloco "#if defined(...". Nele adicione a linha:
|| defined(__AVR_ATmega32U2__) \

Bug no codigo da ATMEL:
Edite o arquivo "usb_descriptors.h" e encontre a linha "#define EP_CONTROL_LENGTH 64". Altere o valor de 64 para 16.
No arquivo "usb_drv.c" da "lib_mcu/usb" encontre o codigo:
U8 usb_init_device (void)
{
Usb_select_endpoint(EP_CONTROL);
if(!Is_usb_endpoint_enabled())
{
return usb_configure_endpoint(EP_CONTROL, \
TYPE_CONTROL, \
DIRECTION_OUT, \
SIZE_32, \
ONE_BANK, \
NYET_DISABLED);
}
return FALSE;
}
Altere "SIZE_32" para "SIZE_16".


Testado com NooGroove ATMEGA32U2 




Buscando cotação de Dólar e Euro no Google Docs

Na planilha do google docs, use a função:

Euro/Real
=GoogleFinance("CURRENCY:EURBRL" ; "average")

Dolar/Real
=GoogleFinance("CURRENCY:USDBRL" ; "average")  

Converter arquivo do Nero (.ngr) para ISO (.iso) usando Linux

Em uma sessão de terminal (shell), execute:
dd bs=1k if=imagem.nrg of=imagem.iso skip=300

Criar arquivo .ico (ícone windows) usando LINUX/GIMP

1. Abrir a imagem no GIMP
2. Se a imagem não for um quadrado, ajustar o tamanho do canvas
3. Diminua a imagem para 16x16
4. Salve como um arquivo pnm (Ex: favicon.pnm)
5. Feche o GIMP
6. Converta o arquivo pnm usando a ferramente ppmtowinicon em shell
ppmtowinicon -output favicon.ico favicon.pnm

Script para facilitar o acesso ao RedBoot de alguns roteadores

# set the IP address and the port for the loader.
set target "192.168.0.1"
set port 9000
# 1. Start ping and wait for a response.
# 2. When RedBoot is alive, start the telnet session.
# 3. Allow .5 seconds after the connect for telnet
# to get his act in order.
# 4. Send the ^C and wait for the RedBoot prompt.
# 5. Get the version information.
# 6. Return control to the user.
spawn ping $target
set timeout -1
expect {
-re "time=.*$" close
}
spawn telnet $target $port
expect -re "Escape character is.*$" {
sleep .5
send \003
expect "RedBoot>" {
send "version\r"
}
}
interact


*Precisa ter o pacote "expect" instalado. No debian faça: apt-get install expect

Mplayer com controle via arquivo FIFO

Criar arquivo FIFO:
mkfifo /tmp/test.fifo
Iniciar o mplayer em segundo plano, mostrando a imagem em framebuffer (sem precisar do X11 instalado ou em execucao). Pode trocar a opcao "-vo" caso queira a saida do vídeo em outro dispositivo:
mplayer -slave -quiet -fs -zoom -vo fbdev -input file=/tmp/test.fifo -vf screenshot -tv noaudio:driver=v4l2:device=/dev/video0:hue=0:brightness=5:contrast=5 tv:// >/tmp/mplayer.log 2>/tmp/mplayer.err &
Exemplo de comando para controle:
echo "screenshot 0" > /tmp/test.fifo
Exemplo de como tirar um snapshot em intervalos regulares:
while true; do echo "screenshot 0" >/tmp/test.fifo identify shot*.png >/dev/null 2>&1; while [ $? -ne 0 ]; do identify shot*.png >/dev/null 2>&1; done name=`ls -tr shot*.png | tail -n1` mv $name /run/shm/live.png sleep 1 done