2010-12-28

Stepper Motors library ported from Arduino to Pinguino


This library was ported from Stepper library from Arduino project,
Same samples works with minimum changes!
http://arduino.cc/en/Reference/Stepper

You need add a 1µF or 10µF capacitor between GND and VCC on pinguino board.
Tested with a PM35-048 stepper and ULN2003a / ULN2803a drivers.

DOWNLOAD


INSTALL
1- Copy Stepper.lib/stepper.c and Stepper.lib/stepper.h to pinguino/tools/share/sdcc/include/pic16/
2- Copy Stepper.lib/stepper.pdl to pinguino/lib

Sample:

/*
 * Based on MotorKnob Stepper Library from Arduino Project
 *
 * A stepper motor follows the turns of a potentiometer
 * (or other sensor) on analog input 0.
 *
 * http://www.arduino.cc/en/Reference/Stepper
 * 
 * Pinguino port by Anunakin 
 * For use this sample on Pinguino boards, 
 * you need add a 10uF or less capacitor 
 * between GND and VCC on pinguino board.
 */
#define PIC18F4550
#define LED 4
#define POT 13
// change this to the number of steps on your motor
// PM35S-048
#define STEPS 48
// specify the number of steps of the motor and the pins it's
// attached to
// the previous reading from the analog input
int previous = 0;
void setup()
{
  stepper(STEPS, 0, 1, 2, 3);
  //stepper(STEPS, 0, 1);
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(100);
  
  pinMode(POT,INPUT);
  pinMode(LED,OUTPUT);
}
void loop()
{
   // get the sensor value
  int val = analogRead(POT);
  val = (int)(val*1/16);
  
  // move a number of steps equal to the change in the
  // sensor reading
  if (val != previous){    
    stepper.step(val - previous);
  }
    
    digitalWrite(LED,HIGH);
    delay(50 + val);
  //}
  digitalWrite(LED,LOW);
  delay(50);
  
  //remember the previous value of the sensor
  previous = val;
}

GLCD Pinguino library revision 1.6.1

A small patch on PORTA/PORTC switch routine.

GLCD_pinguino_library_v1.6.1.zip

2010-12-27

GLCD Pinguino library new version 1.6


I made a new version of GLCD Pinguino library, this already tested with Pinguino beta 9.05, this have many improves on coding way.

Now we can:
- Use GLCD.PrintFloat(float number, presision) function for print decimal numbers, with #define USEFLOATS()

- Choose what port library uses for display control PORTA or PORTC, with #define USEPORTA()


Download GLCD 1.6 Here!

2010-12-20

2010-12-16

Pinguino i2c OLED Display




Thanks for help of JPMandon, we have OLED Display working
with libi2c on pinguino Board!

Pinguino full sourcecode here:
OLED.zip
//Program for I2C communication with a 128x64 OLED Display (http://www.seeedstudio.com)
//Marcus Fazzi 2010
#define LED 13
#define I2C_address 0x3c    //i2c address of Display
#include <libI2C.c>
//For working with strings strlen() function
// #include <string.h>
#include "data.c"
unsigned char fill_OLED = 0x55;
unsigned char fill_string1[13]="Pinguino OLED";
unsigned char fill_string2[11]="OLED 128x64";
unsigned char fill_string3[16]="0123456789ABCDEF";
unsigned char fill_string4[2]="SS";
//=======================
void sendcommand(unsigned char com)
{   
  short dt[2] =  { 0x80, com }; //command mode
  I2C_write(I2C_address, dt, 2);
  I2C_STOP(); //stop transmitting
}
//===================================
void SendChar(unsigned char dat)
{
  short dt[2] =  { 0x40, dat }; //data mode
  I2C_write(I2C_address, dt, 2);
  I2C_STOP();    //stop transmitting
}
//===================================
void setXY(unsigned char row,unsigned char col)
{
  sendcommand(0xb0 + row); //set page address
  sendcommand(0x00 + (8 * col & 0x0f)); //set low col address
  sendcommand(0x10 + ((8 * col >> 4) & 0x0f)); //set high col address
}
//==================================
void clear_display()
{
  unsigned char i,k;
  for(k=0;k<8;k++)
  {     
    setXY(k,0);    
    {
      for(i=0;i<128;i++) //clear all COL
      {
        SendChar(0);
      }
    }
  }
}
//==================================
void printChar(unsigned char ascii)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    SendChar(myFont[ascii-0x20][i]);
  }
}
//==================================
void sendStr(unsigned char *string, unsigned char len)
{
  unsigned char i, j;
  //setXY(0,0);    
  for(i=0;i<len;i++)
  {
    for(j=0;j<8;j++)
    {
      SendChar(myFont[*string-0x20][j]);
                //SendChar(*string);
      delay(10);
    }
    *string++;
  }
}
//=================================
void init_OLED(void)
{
  sendcommand(0xae);            //display off
  delay(50); 
//  sendcommand(0xa0);          //seg re-map 0->127(default)
//  sendcommand(0xa1);          //seg re-map 127->0
//  sendcommand(0xc8);
//        delay(1000);
  sendcommand(0xaf);            //display on
  delay(50);
}
void setup()
{
   delay(500);
   init_I2C();
        //SSPADD=19;  //Slow mode
        
   init_OLED();
        delay(10);
        clear_display();
   delay(50);
   
   pinMode(LED, OUTPUT);  
   
}
//========================
void loop()
{
  short i;
  
  clear_display();
  delay(50);
  sendcommand(0x20);          //Set Memory Addressing Mode
  sendcommand(0x02);          //Set Memory Addressing Mode ab Page addressing mode(RESET)  
 
  sendcommand(0xa6);                    //Set Normal Display (default)
  setXY(3,2);
  sendStr(fill_string1, 13);
  setXY(4,3);
  sendStr(fill_string2, 11);
  
  delay(2000);
  sendcommand(0xa7);                    //Set Inverse Display  
  delay(2000);
  clear_display();
  delay(50);  
  setXY(0,0);
  sendcommand(0xa6);                    //Set Normal Display
  sendcommand(0xae);                            //display off
  sendcommand(0x20);                    //Set Memory Addressing Mode
  sendcommand(0x00);                    //Set Memory Addressing Mode ab Horizontal addressing mode
  
  for(i=0;i<128*8;i++)                  //write a 128x64 picture
  {
    SendChar(logo[i]);
  }
  
  sendcommand(0xaf);                            //display on
  delay(2000);
  sendcommand(0xa7);                    //Set Inverse Display
  delay(2000);  
 /*
  while(1)
  {
    //sendcommand(0xa6);  Set Normal Display
    sendcommand(0x29);  //Vertical and Horizontal Scroll Setup
    sendcommand(0x00);  //dummy byte
    sendcommand(0x00);  //define page0 as startpage address
    sendcommand(0x00);  //set time interval between each scroll ste as 6 frames
    sendcommand(0x07);  //define page7 as endpage address
    sendcommand(0x01);  //set vertical scrolling offset as 1 row
    sendcommand(0x2f);  //active scrolling
    delay(3000);
  };
  */
}

You can see datasheet, arduino sample, and buy one at:
http://www.seeedstudio.com/depot

2010-11-12

Corrigindo Boot do N900!

Nos últimos dias saíram duas atualizações para o power kernel, as versões 44 e 45, que tiveram atualizações bastante problemáticas.

Logo de cara a versão 44 não era compatível com o uBoot e te jogava num loop infinito ao reinicializar o aparelho, para corrigir o boot tem de reinstalar o kernel:

1- Sigas os procedimentos para instalar apenas o kernel, e não ter de reinstalar tudo no Celular:
 
Baixe a firmware RX-51_2009SE_20.2010.36-2_PR_COMBINED_MR0_ARM.bin no link:
http://tablets-dev.nokia.com/nokia_N900.php



E grave somente o kernel com o comando (é uma linha só): 
sudo ./flasher-3.5 -F RX-51_2009SE_20.2010.36-2_PR_COMBINED_MR0_ARM.bin --flash-only=kernel -f -R


Tudo isso esta na wiki:
http://wiki.maemo.org/Updating_the_tablet_firmware

2- Após isso se você é realmente insistente vai querer tentar instalar o power kernel novamente, o segredo é que você tem de reinstalar todos os pacotes e também atualizar já à versão 45 que é compatível com o uBoot da PR1.3.


Acesse o N900 por ssh:
Acesse como root:
sudo gainroot --use-su
e Reinstale todos os pacotes associados (é só uma linha):
apt-get install --reinstall kernel-power kernel-power-bootimg kernel-power-settings kernel-power-modules multiboot u-boot-for-power-kernel multiboot-kernel-power
Após finalizar o procedimento verifique se tudo está OK e se não ocorreu nenhum erro e reinicialize o N900.

Aqui deu um erro associado a falta de espaço na rootfs, no wiki tem como solucionar isso:
http://wiki.maemo.org/Free_up_rootfs_space

Backing to FPGA, Basys 2 Xilinx FPGA now supports Linux!

Yeah Digilent, has released a Linux version for Adept tool!
Now I can remove some dusty from my Spartan 3E-100 (a less then $50 board).

There is a plugin for Linux Xilinx Software, for write your programs to FPGA board using Linux!

2010-11-11

Apresentação Arduino/Pinguino (Presentation)

Hoje farei duas palestras aos colegas também alunos do IESAM, aonde estou fazendo Engenharia da Computação, sobre as placas desenvolvimento arduino, no link abaixo a palestra em PDF.




Conheca_o_arduino.pdf

2010-11-10

Pinguino 32X no forno!

Galera já estamos a desenvolver a versão Pinguino com o PIC32MX460F512L e PIC32MX795F512L.

O compilador C já está funcional, estamos aguardando a Microchip liberar as licenças para uso de algumas bibliotecas deles com o projeto Pinguino que é Software Livre.

Já temos uns testes de UART e Blink a LED.

A Placa a ser usada é a UBW32 http://www.schmalzhaus.com/UBW32/

2010-10-28

Emulador CPS2emu + CPS2gui Lançados! para N900

Ai galera minha primeira aplicação totalmente em Qt4!
Screenshot:


Info do pacote aqui:
http://maemo.org/packages/view/cps2emu/

Fiz muitas alterações inclusive ao emulador, o qual não foi Eu quem criou e sim a galera do GP2X.

Forum:
http://talk.maemo.org/showthread.php?t=41158

Pagina do projeto no garage:
http://garage.maemo.org/projects/cps2emu/

Info do pacote aqui:
http://maemo.org/packages/view/cps2emu/

A versão 0.6-r1 tem praticamente todas as facilidades de outros emuladores famosos... divirtam-se!

O pacote já se encontra no extras-devel, e é instalável pelo Gerenciador de Aplicativos.

Changelog:
cps2emu (0.6-r1) unstable; urgency=high
  * postinst revised, again
  * We not need ~/MyDocs/ROMs/CPS2 anymore
  * State SAVE and LOAD working, use 'l' to show MENU
  * CPS2gui now can load from any folder
  * Last file and folder used, when reopen cps2gui.
  * HiScore working, romname.hi are saved to "./hi"
  * Save state on exit and load state on start a game, saved to "./state"
  * Autocreate ./nvram and ./hi
  * Config file at ~/.config/cps2emu/cps2gui.conf

 -- Marcus Fazzi (Anunakin)   Thu, 28 Oct 2010 15:56:13 -0300

cps2emu (0.5) unstable; urgency=high
  * postinst revised
  * first release for extras-devel
  * cps2gui package merged

 -- Marcus Fazzi (Anunakin)   Tue, 26 Oct 2010 10:11:55 -0300

cps2emu (0.4) unstable; urgency=low
  * romcnv renamed to cps2romcnv
  * cps2romcnv and cps2emu compiles with same Makefile
  * Now we have a cps2gui!
  * cps2gui, not in same Makefile and .deb, for now! ;)

 -- Marcus Fazzi (Anunakin)   Sat, 23 Oct 2010 22:38:13 -0300

cps2emu (0.3) unstable; urgency=low
  * Support to PS3 Dualshock/Sixaxis controlers.

 -- Marcus Fazzi (Anunakin)   Thu, 21 Oct 2010 09:36:45 -0300

cps2emu (0.2) unstable; urgency=low
  * XSBC-Bugtracker added to debian/control
  * extras-devel release
  * Insane ARM Cortex A8 CFLAGs!

 -- Marcus Fazzi (Anunakin)   Tue, 19 Oct 2010 14:46:15 -0300

cps2emu (0.1) unstable; urgency=high
  * Binaries and Sources from garage.maemo.org.

 -- Oriol Farras   Mon, 18 Jan 2010 09:34:34 -0300
Além dessas funcionalidades o emulador detecta se tens um controle da PS3 conectado por bluetooth! ;-)

2010-10-26

Nova firmware para N900! PR1.3 (20.2010.36)

Esta semana saiu a nova firmware PR1.3 para N900.

Para atualizar o sistema sem ter que formatar tudo, use o programa:
Faster Application Manager

Esta atualização é 4ª e ultima na lista obrigatória da Nokia, que se compromete a soltar até quatro atualizações de firmware.


São um total de 1025 pacotes a serem atualizados, por isso se preparem pois demora.

Segundo o povo no talk.maemo.org,o ganho de performance é significativo.

Após atualizar reinicialize seu N900, antes de fazer qualquer coisa, um detalhe interessante é que a atualização feita desta forma não solicita a reinicialização do sistema.


Outras formas para atualizar são:
Pelo Nokia PC Suite, e usando o NSU (Nokia System Updater)
ou baixando a firmware PR1.3 e atualizando pelo flasher-3

##### EDIT #####
Achei bem mais suave e rápido em tudo, notei que deu uns erros em alguns pacotes, após a atualização rodem na shell como root:
dpkg --configure -a 
e depois um:
apt-get update 
e um:
apt-get upgrade

Pois já tem pacote novo nos repos do PR1.3! ;-)

2010-10-22

CPS2 Emulator, para N900 a caminho!

Desta vez estou fazendo uma GUI para o emulador CPS2emu que foi portado pelo usuário Oriol Farras do forum Talk.Maemo.org, eis uma primeira shot:


Galera, Qt4 e o SDK da Nokia são excelentes, pode-se testar a aplicação em um emulador, no scratchbox, no aparelho e no desktop! muito show, e suporta Symbian, além do Maemo 5!

2010-09-30

Pacote da ROM para x48

Quem precisar da ROM da HP48G, pode usar este pacote.
x48-rom-r_0.48_armel.deb

Estou acertando com o Eric da hpcalc.org a possibilidade da ROM já ir junto com o pacote.

2010-09-28

x48 e x48-portrait, pacotes no extras-devel

Finalmente após alguns pedidos da galera do forum da nokia, estou postando os aplicativos portados no extras-devel...

Já tenho uma conta da Nokia, há algum tempo, nunca postei pois é muito complicado fazer todo o aparato dos pacotes debian, em geral Eu gerava o pacote com um dpkg-deb mesmo e pronto, contudo postar no extras-devel é muito mais complicado, bom agora já sei o rumo certo, novidades a caminho.

2010-09-23

x48 para N900, pacote "optify"

Fiz umas pequenas alterações ao pacote debian, do x48 para N900, agora os arquivos ficam na área de programas (/opt) do N900 e não na flash (/).
x48_0.6.3_armel.deb

Motivo? Ontem meu N900 apresentou 99.9% da rootfs em uso e parou de instalar programas no N900, bom além de migrar um monte de coisas pro /opt, também refiz o meu pacote...

Nesse ponto a solução do Zaurus era melhor, o gerenciado de pacotes te perguntava aonde você gostaria de instalar e saia criando links simbólicos...

2010-09-22

N900 da Nokla! huhauhauhauhua! (clone wars)

Esse ai engana até mesmo o proprietário de um N900, ao menos até o momento em que ligar o aparelho! Reparem que é NOKLA a marca! hehe!






N900 da Nokla!!!

x48 para N810! com modo portrait!

Atualizei o pacote x48 para N810, agora usando as correções que fiz no pacote do N900, só lembrando que o modo portrait só fica utilizável usando o tema que fiz para ficar "widethemed" usando a tela toda do N810 . Vejam as shots para terem uma idéia de como fica!




x48_0.6.3_armel.deb

2010-09-21

x48 for N900! Agora com modo portrait!

Com base nos patchs do usuário Electric Lungfish ,  agora temos o modo portrait do emulador da HP48GX para N900!

Fiz umas alterações ao arquivo emulate.c, voltado ao original, antes do patch para funcionar no N810, pois é, tinha ficado rápido demais no N900! :-)


x48_0.6.3_armel.deb

2010-09-18

Emulador de HP48GX (x48) para N900!

Iniciando os ports, um programa básico para todo Geek! Um emulador da clássica HP48GX!


Pacote debian aqui x48_0.6.3_armel.deb

Fiz algumas otimizações extremas  e vejam só 8 segundos para rodar o teste!

2010-09-16

N810 com inveja?

"Coisas estranhas acontecem em lugar nenhum!"
Pois é bem no dia que chegou meu N900, o touchscreen do N810 parou de funcionar..

Lá fui Eu regravar a firmware, e beleza, funcionou, acho que ele só queria um pouco de atenção!

:-)

HOWTO Flash Latest Nokia Image with Linux

DUAL Boot

2010-09-15

Greener Electronics

Antes de comprar um novo gadget! saiba que a Nokia e a Sony Ericsson são as que mas se destacam na preservação do meio ambiente.

fonte: Guide to Greener, do GeenPeace!

Compilação Nativa no 900!

Essa tarefa já não é tão simples quanto no N810, mas vamos lá, de certa forma as instruções estão na própria página do SDK para Maemo 5 da Nokia, não de forma muito clara! :P


1. Acesse o link abaixo:
http://repository.maemo.org/#sdk_repositories

2. Você deve aceitar o EULA da Nokia para ter acesso ao repositório de binários restritos da Nokia.
http://tablets-dev.nokia.com/eula/index.php

Aceite, caso concorde, e anote o token.


3. Insira as configurações abaixo, no gerenciador de aplicativos:
    1. Nome: Maemo SDK
    2. Endereço da web: http://repository.maemo.org/
    3. Distribuição: fremantle/sdk
    4. Componentes: free non-free
    5. [Salvar]  
    1. Nome: Maemo Tools
    2. Endereço da web: http://repository.maemo.org/
    3. Distribuição: fremantle/tools
    4. Componentes: free non-free
    5. [Salvar]  
    1. Nome: Binarios Nokia
    2. Endereço da web: http://repository.maemo.org/
    3. Distribuição: fremantle/XXXXXXXXXXX seu token XXXXXXXXXXXX
    4. Componentes: nokia-binaries
    5. [Salvar]  
 4. Usando o apt, como root instale os pacotes:

 $ sudo gainroot
 $ apt-get update
 $ apt-get install build-essential

 5. Pronto, temos o necessário para começar a compilar programas direto no N900, em muitos casos é a única alternativa, pois o ScratchBox e QEmu não fazem milagres.

 $ gcc --version
gcc (GCC) 4.2.1
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Advanced Shell no N900 (BASH 3.2)

Como todo bom viciado em Bash, e Gentoo Linux, resolvi deixar o N900 mais próximo de um ambiente Gentoo:

0) Presumo que você já tenha acesso modo root, com o gainroot (pacote rootsh) e openssh instalados, reparem o gainroot é parte da FW original do N900, contudo o gainroot que vem instalado apenas lhe exibe uma mensagem de alerta!

$ /usr/sbin/gainroot
Enable RD mode if you want to break your device

1) Instale o pacote bash3, olhe só o description do pacote, fiz um pacote mais ou menos assim para o N810, está no meu repositório.
Description: The GNU Bourne Again SHell branch 3.x, tuned for maemo
 Bash is a command-line program which may replace your standard
 command-line shell with a improved, feature-rich interface.
 .
 Bash is an sh-compatible command language interpreter that executes
 commands read from the standard input or from a file.  Bash also
 incorporates useful features from the Korn and C shells (ksh and csh).
 .
 This is a special version for the Maemo platform, with everything
 that is not too useful on a Internet Tablet stripped off.
2) Rode o comando bash-setup, logado em cada usuário que deseja a Advanced Shell, o modo mais fácil é logar pelo ssh como root, rodar o script, depois definir uma senha para o usuário user (isso mesmo!), e em seguida entrar no ssh como user, e rodar o script novamente.


ATENÇÃO: Nunca remova o Busybox, isso irá detonar o N900.

3) Instalae o vim, e não remova o link simbólico do busybox para o vi!

4) Quem já usou Gentoo deve sentir muita falta da Advanced Shell, agora mais uns ajustes finos, faça nos dois usuários (root e user)

4.1) Ajustes do vim, não são perfeitos mas ajudam muito:
Crie o arquivo ~/.vimrc , com o seguinte conteúdo:
set nocompatible        " Use Vim defaults (much better!)
set bs=2                " Allow backspacing over everything in insert mode
set history=100          " keep 50 lines of command history
set ruler               " Show the cursor position all the time


set viminfo='20,\"500   " Keep a .viminfo file.


syntax on
set hlsearch
4.2) Ajustes da BAsh, esses sim fazem falta, sempre coloco no Ubuntu e outras distros... com os 3 arquivos abaixo a bash fica muito legal e com a cara do Gentoo!

4.2.1) Crie o arquivo ~/.bashrc
if type -P dircolors >/dev/null ; then
   if [[ -f ~/.dir_colors ]] ; then
        eval $(dircolors -b ~/.dir_colors)
   elif [[ -f /etc/DIR_COLORS ]] ; then
        eval $(dircolors -b /etc/DIR_COLORS)
   fi
fi


if [[ ${EUID} == 0 ]] ; then
    PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
else
    PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
fi


umask 022
export PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH


export HISTSIZE=1000
export HISTFILESIZE=1000


PROMPT_COMMAND="history -a; $PROMPT_COMMAND"


# Change the window title of X terminals
case ${TERM} in
        xterm*|rxvt*|Eterm|aterm|kterm|gnome*|interix)
                PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
                ;;
        screen)
                PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
                ;;
esac


shopt -s checkwinsize
# Enable history appending instead of overwriting.  #139609
shopt -s histappend
4.2.2) Crie o arquivo ~/.profile
# ~/.profile: executed by Bourne-compatible login shells.


if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi
mesg n
4.2.3) Para autocompletar comandos já usado, crie o arquivo ~/.inputrc
"\e[5~": history-search-backward
"\e[6~": history-search-forward 
Comece a digitar um comando já usado e toque em PageUp e PageDown para completar o comando, oh coisa boa!

Ficaremos com um prompt vermelho para o root e verde para outros usuários e com histórico de 1000 comandos, dentre outras coisas!

5) Altere o gainroot para usar a bash, como root:
$ vim /usr/sbin/gainroot


Edite a linha:
HISTFILE=/root/.ash_history /bin/ash

Para:
HISTFILE=/root/.bash_history /bin/bash

Agora só por o X Terminal com fundo preto e letras brancas! :P