µPhone, min mobiltelefon

Berätta om dina pågående projekt.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: µPhone, min mobiltelefon

Inlägg av victor_passe »

Så, nu kan jag spara bilder (rgb565) från datorn via usb kontakten på sdkortet och visa bilderna på skärmen.
Har inte fotat ännu då jag inte orkar gå ur sängen.(Laptops FTW!)
Det är inte så snabbt, det tar ca 0.3sekunder att öppna en bild som täcker hela skärmen.
Pajn
Inlägg: 1160
Blev medlem: 6 juni 2008, 19:14:29
Ort: Nyköping
Kontakt:

Re: µPhone, min mobiltelefon

Inlägg av Pajn »

Kul :tumupp:
0.3 sekunder är ganska snappt. Om jag fick upp menyn på min Android så snabbt skulle jag vara glad. Sen ska vi inte prata om tiden det tar att öppna galleriet, nästan 10 sek!
Fast när man väl har kommit så långt går det faktiskt fort att visa bilden.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: µPhone, min mobiltelefon

Inlägg av victor_passe »

Jag kan nog få ner tiden en hel del men jag måste av någon anledning vänta ca 8µs mellan varje data byte till oled-skärmen. Sedan kan jag öka en buffer och få ner antalet läsningar från kortet.
Men härnäst ska jag nog försöka lista ut varför jag behöver vänta så "lång" tid mellan byten.
Om jag inte väntar eller väntar för kort tid så tar den inte emot alla pixlar.
Om någon vill hjälpa mig så kommer oled koden nedan:

Kod: Markera allt

#include "global_phone.h"
#include "oled.h"
#include "spi.h"
#include "font.h"
#include <math.h>

unsigned char oledOn=0;
unsigned char oledTermBuffer[128],oledTermX=0,oledTermY=0;
unsigned short oledTermColors[128];

void initOled()
{
    unsigned char i;
    OLED_CE=1;
    OLED_SCK=1;
    OLED_RESET=1;
    __delay_ms(10);

    OLED_RESET=0;
    __delay_ms(100);
    OLED_RESET=1;

    oledCommand(0xAE);
    OLED_12V_EN=1;
    __delay_ms(100);

    oledCommand(0xA0);
    oledCommand(0x72);
    oledCommand(0xA1);
    oledCommand(0x00);
    oledCommand(0xA2);
    oledCommand(0x00);
    oledCommand(0xA4);
    oledCommand(0xA8);
    oledCommand(0x3F);
    oledCommand(0xAD);
    oledCommand(0x8E);
    oledCommand(0xB0);
    oledCommand(0x0B);
    oledCommand(0xB1);
    oledCommand(0x31);
    oledCommand(0xB3);
    oledCommand(0xF0);
    oledCommand(0x8A);
    oledCommand(0x64);
    oledCommand(0x8B);
    oledCommand(0x78);
    oledCommand(0x8C);
    oledCommand(0x64);
    oledCommand(0xBB);
    oledCommand(0x3A);
    oledCommand(0xBE);
    oledCommand(0x3E);
    oledCommand(0x87);
    oledCommand(0x04);
    oledCommand(0x81);
    oledCommand(0x91);
    oledCommand(0x82);
    oledCommand(0x50);
    oledCommand(0x83);
    oledCommand(0x7D);
    oledCommand(0xAF);
    oledCommand(0x15);
    oledCommand(0);
    oledCommand(95);
    oledCommand(0x75);
    oledCommand(0);
    oledCommand(63);
    oledRectFill(0,0,95,63,0,0);

    for(i=0;i<128;i++)
     oledTermBuffer[i]=' ';

    __delay_ms(1);
    //oledOn=1;
}

void exitOled()
{
    oledCommand(0xAE);
    __delay_ms(200);
    OLED_12V_EN=0;
    __delay_ms(100);
}

void oledCommand(unsigned char cmd)
{
    OLED_DC=0;
    OLED_CE=0;
    WriteSPI2(cmd);
    while(SPI2_Tx_Buf_Full);
    __delay_us(10);
    OLED_CE=1;
}

void oledData(unsigned short cmd)
{
    OLED_DC=1;
    OLED_CE=0;
    WriteSPI2((cmd&0xFF00)>>8);
    while(SPI2_Tx_Buf_Full);
    __delay_us(8);
    OLED_CE=1;
    OLED_CE=0;
    WriteSPI2(cmd&0x00FF);
    while(SPI2_Tx_Buf_Full);
    __delay_us(8);
    OLED_CE=1;
}

void oledRectFill(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned short colorLine, unsigned short colorFill)
{
 oledCommand(0x26);
 oledCommand(0x01);
 oledCommand(0x22);
 oledCommand(x1);
 oledCommand(y1);
 oledCommand(x2);
 oledCommand(y2);
 oledCommand((colorLine&0xF800)>>10);
 oledCommand((colorLine&0x001F)<<1);
 oledCommand((colorLine&0x07E0)>>5);
 oledCommand((colorFill&0xF800)>>10);
 oledCommand((colorFill&0x001F)<<1);
 oledCommand((colorFill&0x07E0)>>5);    
}

void oledRect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned short colorLine)
{
 oledCommand(0x26);
 oledCommand(0x00);
 oledCommand(0x22);
 oledCommand(x1);
 oledCommand(y1);
 oledCommand(x2);
 oledCommand(y2);
 oledCommand((colorLine&0xF800)>>10);
 oledCommand((colorLine&0x001F)<<1);
 oledCommand((colorLine&0x07E0)>>5);
 oledCommand(0);
 oledCommand(0);
 oledCommand(0);
}

void oledLine(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned short colorLine)
{
 oledCommand(0x21);
 oledCommand(x1);
 oledCommand(y1);
 oledCommand(x2);
 oledCommand(y2);
 oledCommand((colorLine&0xF800)>>10);
 oledCommand((colorLine&0x001F)<<1);
 oledCommand((colorLine&0x07E0)>>5);
}



void oledBatt(unsigned char level)
{
 unsigned char boxes=ceil(level/20.0),i;
 oledRect(73,5,74,9,0xFFFF);
 oledRect(75,2,94,12,0xFFFF);
 oledRectFill(76,3,93,11,0xFFFF,0);
 if(level==200)
 {
  oledLine(86,5,88,5,0xFFFF);
  oledLine(85,6,90,6,0xFFFF);
  oledLine(79,7,88,7,0xFFFF);
  oledLine(85,8,90,8,0xFFFF);
  oledLine(86,9,88,9,0xFFFF);
 }
 else
 {
  for(i=0;i<5;i++)
  {
   if(boxes)
   {
    boxes--;
    oledRect(90-(i*3),5,91-(i*3),9,0xFFFF);
   }
   else
    oledRect(90-(i*3),5,91-(i*3),9,color(12,23,12));
  }
 }
}

void oledCSQ(unsigned char level)
{
 unsigned char boxes=ceil(level/6.0),i;
 for(i=0;i<5;i++)
 {
  if(boxes)
  {
   boxes--;
   oledRect(2+(i*3),10-(i*2),3+(i*3),12,0xFFFF);
  }
  else
   oledRect(2+(i*3),10-(i*2),3+(i*3),12,color(12,23,12));
 }
}

void oledPutChar(unsigned char x, unsigned char y, unsigned char chr, unsigned short color)
{
 unsigned char i,byte,j;
 oledCommand(0xA0);
 oledCommand(0x73);
 oledCommand(0x15);
 oledCommand(x*6);
 oledCommand(x*6+4);
 oledCommand(0x75);
 oledCommand(y*8);
 oledCommand(y*8+7);
 for(i=0;i<5;i++)
 {
  byte=font[(chr-' ')*5+i];
  for(j=0;j<8;j++)
  {
   if((byte<<j)&0x80)
    oledData(color);
   else
    oledData(0);
  }
 }
}

void oledPutStr(unsigned char x, unsigned char y, char *str, unsigned short color)
{
 while(*str)
  oledPutChar(x++,y,*str++,color);
}

void oledPushStr(char *str, unsigned short color)
{
 unsigned char i,j;
 while(*str)
 {
  switch(*str)
  {
   case '\n':
    oledTermX=0;
    /*for(i=oledTermX;i<16;i++)
    {
        oledTermBuffer[oledTermX+oledTermY*16]=' ';
        oledPutChar(oledTermX+i,oledTermY,' ',0);
    }*/
    oledTermY++;
    *str++;
    break;
   default:
    oledTermBuffer[oledTermX+oledTermY*16]=*str;
    oledTermColors[oledTermX+oledTermY*16]=color;
    oledPutChar(oledTermX++,oledTermY,*str++,color);
    break;
  }
  if(oledTermX>15)
  {
   oledTermX=0;
   oledTermY++;
  }
  if(oledTermY>7)
  {
   oledTermY=7;
   for(j=0;j<7;j++)
   {
    for(i=0;i<16;i++)
    {
     oledTermBuffer[i+j*16]=oledTermBuffer[i+j*16+16];
     oledTermColors[i+j*16]=oledTermColors[i+j*16+16];
     oledPutChar(i,j,oledTermBuffer[i+j*16],oledTermColors[i+j*16]);
    }
   }
   for(i=0;i<16;i++)
    oledPutChar(i,7,' ',0);
  }
 }
}


Användarvisningsbild
zeylon
Inlägg: 114
Blev medlem: 12 september 2007, 12:59:03
Ort: Oskarshamn

Re: µPhone, min mobiltelefon

Inlägg av zeylon »

zekkexavior skrev:
Antar att du skulle kunna lösa högtalardelen med nåt slags envägsmembran? Annars kanske du kan föra över ljudet med hjälp av resonans, vem vet?
Ericsson R310 använde(r) Gore-Tex.
Den klarar att vara under vatten i flera veckor.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: µPhone, min mobiltelefon

Inlägg av victor_passe »


Film på bild-visningen.
Användarvisningsbild
sm2wmv
Inlägg: 2291
Blev medlem: 6 maj 2008, 00:10:11
Ort: Burträsk
Kontakt:

Re: µPhone, min mobiltelefon

Inlägg av sm2wmv »

Riktigt nice! Jag kanske missat det tidigare i tråden och ber då om ursäkt, men hur ska du kunna knappa in nummer osv på den?
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: µPhone, min mobiltelefon

Inlägg av blueint »

Blir det någon form av app-miljö som inte drar ur batterierna på mindre än två dygn?
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: µPhone, min mobiltelefon

Inlägg av victor_passe »

Jag kommer inte ha onödigt bös som tex appar.
Jag hatar det ordet med hela mitt hjärta.

Nej, nu ska jag nog programmera meny system.
Användarvisningsbild
Anahka1975
Inlägg: 1295
Blev medlem: 30 augusti 2006, 21:49:46
Ort: Säffle

Re: µPhone, min mobiltelefon

Inlägg av Anahka1975 »

Riktigt kul tråd att följa. Stor :tumupp:
/AW
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: µPhone, min mobiltelefon

Inlägg av blueint »

app suger nog. Fast man kanske något sätt så att man enkelt kan programmera in funktioner man vill ha.

C-interpreterad Java på en processor som drivs med batteri kan kosta på en del batteritid..
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: µPhone, min mobiltelefon

Inlägg av v-g »

Vem behöver appar när man kan ändra i källkoden? ;)
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: µPhone, min mobiltelefon

Inlägg av blueint »

Det bör nog avgränsas med något API.
Blir lätt rörigt annars om man byter CPU, kringkretsar osv..
Användarvisningsbild
AntiZ
Inlägg: 321
Blev medlem: 22 februari 2007, 13:34:14
Ort: V. Husby
Kontakt:

Re: µPhone, min mobiltelefon

Inlägg av AntiZ »

Synd att skalet blir så ofantligt stort i förhållande till telefonen.

Vi har en Thing-O-Matic (http://www.makerbot.com/) på jobbet, om jag säger att jag ska skriva ut ett skal till en telefon är det nog ok att låna den för sådant här.

Så om du har en CAD-ritning på ett skal Victor, så kan jag nog skriva ut en prototyp.

Det blir ju inte en helt slät yta, men med lite slipning och sprutspackel kan man nog få en bra finish på den.

/M
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: µPhone, min mobiltelefon

Inlägg av victor_passe »

Hmm, låter mycket intressant!
Är det ABS-plast vi talar om?
Vad är minsta tjocklek på väggar? funkar ca 1mm?
Blir biten någorlunda stabil? Blir det som en solid bit ABS?
Skriv svar