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/