Autor Tema: MyBoard mbed xD  (Leído 10694 veces)

Suky

  • **----- ^^ ------**
  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5442
  • Con Qt...
    • micros-designs
MyBoard mbed xD
« en: Agosto 14, 2011, 08:35:33 pm »
Bueno, con la idea de "jugar" con el LCD TFT, una cámara CMOS, BlueTooth, SD Card, etc. hace un tiempo había diseñado una board como para trabajar con ello, pero recién este fin de semana me di ánimos para terminarla  :P Un problema es que el mbed dispone de pocos pines y el LCD TFT los consume todos  :grr: así que prescindiendo velocidad en el dibujado sobre el LCD implementé el expansor de puertos SPI de 16-bits MCP23S17 para enviar los datos. También aprovechando, agregue otro para tener 16 I/O adicionales  :baba En resumen la placa tiene:

  • Header para LCD TFT (modo 16-bits, bus SPI por medio de MCP23S17)
  • Header para Touch
  • Header para módulo bluetooth
  • Header para SD Card
  • Header para módulo Camara CMOS + CDCS502 para generación de clock
  • 16 I/O por medio de MCP23S17
  • Memoria Flash SPI SST25VF016B
  • Conector ethernet
  • Conector USB Host y USB device

Varios dispositivos para estudiar y tratar de hacerlos funcionar  :rolleyes2: Hoy ya pude probar el correcto funcionamiento del LCD TFT, SD Card y expansor MCP23S17. La Camara CMOS no me va dejar dormir, pero es un lindo reto  :P

Unas fotos:





Saludos!
« Última modificación: Agosto 14, 2011, 08:37:37 pm por Suky »

lucho512

  • Amigo de uControl
  • PIC16F
  • ******
  • Mensajes: 796
Re: MyBoard mbed xD
« Respuesta #1 en: Agosto 14, 2011, 10:18:59 pm »
Que bueno que esta suky, felicitaciones, muy lindo el bicho!!!  :baba :baba :baba

HJ

  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5713
Re: MyBoard mbed xD
« Respuesta #2 en: Agosto 14, 2011, 10:21:52 pm »
Muy bueno Suky, como siempre, impresionantes tus desarrollos  :alaba :alaba :alaba
"si te lo dicen se te olvida, si lo lees lo aprendes; pero si lo haces realmente lo entiendes"
"Cuando llegue la inspiración, que me encuentre trabajando" [Pablo Picasso]

lmtreser

  • Moderador
  • PIC18F
  • ******
  • Mensajes: 1485
    • Automatismos Mar del Plata
Re: MyBoard mbed xD
« Respuesta #3 en: Agosto 14, 2011, 10:38:13 pm »
Excelente! El gráfico que mostras, de dónde lo chupa el display? Lo tenes cargado en una memoria?

Bruno10

  • Moderador
  • PIC16F
  • ******
  • Mensajes: 931
  • texto personal
    • Brunoip
Re: MyBoard mbed xD
« Respuesta #4 en: Agosto 14, 2011, 10:45:33 pm »
Esta buenisima suky, sos un grande  :bang:

вoяяe

  • .::. µPraxis .::.
  • Amigo de uControl
  • PIC18F
  • ******
  • Mensajes: 1346
  • вoяяe
    • вyвoяяe
Re: MyBoard mbed xD
« Respuesta #5 en: Agosto 14, 2011, 10:51:19 pm »
Se me cae la baba  :baba
La electrónica es simple, puedes aprenderla en 100 simples lecciones, una lección cada año.

Suky

  • **----- ^^ ------**
  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5442
  • Con Qt...
    • micros-designs
Re: MyBoard mbed xD
« Respuesta #6 en: Agosto 14, 2011, 11:05:17 pm »
Muchas gracias a todos!  ;)

Excelente! El gráfico que mostras, de dónde lo chupa el display? Lo tenes cargado en una memoria?

Lo lee desde la memoria Sd Card. En el mbed lo implemento de la siguiente manera:

Código: [Seleccionar]
void LCDTFT_SPI::vDrawImageSDBMP24Bits(const char *NameImagen){

    #define OffsetWidthPixel    18
    #define OffsetHeighPixel    22
    #define OffsetSizeFile      34
    #define OffsetInitData      10
    #define OffserTipeFile      28
    char Nombre[80],k;
    unsigned short PosXImagen,PosYImagen;
    unsigned char Temp,BufferHeader[54],BufferTemp[3],Adicional;
    unsigned int WidthPixel,HeighPixel;
    unsigned short TipeFile,InitData,Temp16bits;
    union{
        unsigned short Val;
        struct{
            unsigned Blue:5;
            unsigned Green:6;
            unsigned Red:5;
        };
    }Color;
   
    SDFileSystem sd(p5, p6, p7, p16, "sd");
    sprintf(&Nombre[0],"/sd/");
    k=4;
    while(*NameImagen!='\0'){
        Nombre[k++]=*NameImagen++;
    }
    Nombre[k]=0x00;
   
    FILE *Imagen = fopen((const char *)&Nombre[0], "r"); // Abrimos archivo para lectura.
    // Si no se pudo encontrar archivo:
    if(!Imagen) {
        vLCDTFTFillScreen(ColorBlack);
        return;
    }
    // Leemos cabecera de archivo
    fread(&BufferHeader[0],1,54,Imagen);
   
    WidthPixel = ((unsigned int)BufferHeader[OffsetWidthPixel + 3]*16777216+BufferHeader[OffsetWidthPixel + 2]*65536+BufferHeader[OffsetWidthPixel + 1]*256+BufferHeader[OffsetWidthPixel]);
    HeighPixel = ((unsigned int)BufferHeader[OffsetHeighPixel + 3]*16777216+BufferHeader[OffsetHeighPixel + 2]*65536+BufferHeader[OffsetHeighPixel + 1]*256+BufferHeader[OffsetHeighPixel]);
    InitData = ((unsigned short)BufferHeader[OffsetInitData]);
    TipeFile = ((unsigned short)BufferHeader[OffserTipeFile + 1]*256 + BufferHeader[OffserTipeFile]);
   
    if((WidthPixel>LCD_X_MAX) || (HeighPixel>LCD_Y_MAX) || (TipeFile!=24)){
        fclose(Imagen);
        return;
    }
   
    if(InitData!=54){
        for(int k=54;k<InitData;k++){
            fread(&Temp,1,1,Imagen);
        }
    }
   
    PosXImagen=(LCD_X_MAX/2)-(WidthPixel/2);
    PosYImagen=(LCD_Y_MAX/2)+(HeighPixel/2);
   
    Temp16bits=WidthPixel*3;
    Adicional=0;
    while(((Temp16bits)%4)!=0){
        Adicional++;
        Temp16bits++;
    }
   
    for(int k=0,y=PosYImagen;k<HeighPixel;k++,y--){
        vLCDTFTAddressSet(PosXImagen,y,PosXImagen+WidthPixel-1,y);
        for(int i=0;i<WidthPixel;i++){
            fread(&BufferTemp[0],1,3,Imagen); // Leemos 3 bytes (R,G,B)
            Color.Blue=BufferTemp[0]>>3;Color.Green=BufferTemp[1]>>2;Color.Red=BufferTemp[2]>>3; // Conversion de 24-bits a 16-bits.-
            vLCDTFTWriteData(Color.Val);
        }
        // Bytes adicionales para que linea sea multiplo de 4.-
        for(int p=0;p<Adicional;p++){
            fread(&Temp,1,1,Imagen);
        }
    }
    fclose(Imagen);
}


Saludos!
« Última modificación: Agosto 14, 2011, 11:10:12 pm por Suky »

VelazquezBio

  • "...La Felicidad solo es completa, cuando es compartida..."
  • Amigo de uControl
  • PIC18F
  • ******
  • Mensajes: 1461
  • Alea Iacta Est...
Re: MyBoard mbed xD
« Respuesta #7 en: Agosto 14, 2011, 11:05:50 pm »
 :alaba :alaba :alaba

Impesionante! de grande quiero ser como vos!!!

Felicitaciones! :rolleyes2:
No será fácil y no sera corto el camino, pero se que seré feliz mientras lo transite.

pett

  • PIC12F
  • **
  • Mensajes: 341
Re: MyBoard mbed xD
« Respuesta #8 en: Agosto 14, 2011, 11:50:00 pm »
sos mostro



suky corp  :bang:

Mando31

  • Amigo de uControl
  • PIC12F
  • ******
  • Mensajes: 355
    • Todo Para Mecatronica, Tutoriales, Cursos y +
Re: MyBoard mbed xD
« Respuesta #9 en: Agosto 15, 2011, 02:03:20 am »
 :baba :baba :baba :baba :baba

Te ha quedado excelente.  :alaba :alaba :alaba

Cuando crezca quiero ser como vos.  ;D
La ingenieria mecatrónica es mi pasión, mi motor, mi vida.
My website: Todo Para Mecatronica, Tutoriales, Cursos y +

Felixls

  • Moderador
  • PIC24F
  • ******
  • Mensajes: 3125
    • Felixls
Re: MyBoard mbed xD
« Respuesta #10 en: Agosto 15, 2011, 02:11:10 am »
Muy lindo, tanto para jugar y aprender hay ahí que  :baba :baba :baba :baba :baba :baba

 :alaba :alaba :alaba :alaba :alaba


marqueses

  • PIC12F
  • **
  • Mensajes: 142
  • Marqueses
    • Marqueses Electronics&Control Desings
Re: MyBoard mbed xD
« Respuesta #11 en: Agosto 15, 2011, 07:27:42 am »
Felicidades! Vaya pedazo de proyecto =)

Ariel

  • Global Moderator
  • dsPIC
  • ****
  • Mensajes: 10753
    • uControl
Re: MyBoard mbed xD
« Respuesta #12 en: Agosto 15, 2011, 07:29:39 am »
¡Muy bueno Suky!

Las cosas que vas a desarrollar ahi!!! ;D
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

VelazquezBio

  • "...La Felicidad solo es completa, cuando es compartida..."
  • Amigo de uControl
  • PIC18F
  • ******
  • Mensajes: 1461
  • Alea Iacta Est...
Re: MyBoard mbed xD
« Respuesta #13 en: Agosto 15, 2011, 06:08:59 pm »
Muchas gracias a todos!  ;)

Excelente! El gráfico que mostras, de dónde lo chupa el display? Lo tenes cargado en una memoria?

Lo lee desde la memoria Sd Card. En el mbed lo implemento de la siguiente manera:

Código: [Seleccionar]
void LCDTFT_SPI::vDrawImageSDBMP24Bits(const char *NameImagen){

    #define OffsetWidthPixel    18
    #define OffsetHeighPixel    22
    #define OffsetSizeFile      34
    #define OffsetInitData      10
    #define OffserTipeFile      28
    char Nombre[80],k;
    unsigned short PosXImagen,PosYImagen;
    unsigned char Temp,BufferHeader[54],BufferTemp[3],Adicional;
    unsigned int WidthPixel,HeighPixel;
    unsigned short TipeFile,InitData,Temp16bits;
    union{
        unsigned short Val;
        struct{
            unsigned Blue:5;
            unsigned Green:6;
            unsigned Red:5;
        };
    }Color;
   
    SDFileSystem sd(p5, p6, p7, p16, "sd");
    sprintf(&Nombre[0],"/sd/");
    k=4;
    while(*NameImagen!='\0'){
        Nombre[k++]=*NameImagen++;
    }
    Nombre[k]=0x00;
   
    FILE *Imagen = fopen((const char *)&Nombre[0], "r"); // Abrimos archivo para lectura.
    // Si no se pudo encontrar archivo:
    if(!Imagen) {
        vLCDTFTFillScreen(ColorBlack);
        return;
    }
    // Leemos cabecera de archivo
    fread(&BufferHeader[0],1,54,Imagen);
   
    WidthPixel = ((unsigned int)BufferHeader[OffsetWidthPixel + 3]*16777216+BufferHeader[OffsetWidthPixel + 2]*65536+BufferHeader[OffsetWidthPixel + 1]*256+BufferHeader[OffsetWidthPixel]);
    HeighPixel = ((unsigned int)BufferHeader[OffsetHeighPixel + 3]*16777216+BufferHeader[OffsetHeighPixel + 2]*65536+BufferHeader[OffsetHeighPixel + 1]*256+BufferHeader[OffsetHeighPixel]);
    InitData = ((unsigned short)BufferHeader[OffsetInitData]);
    TipeFile = ((unsigned short)BufferHeader[OffserTipeFile + 1]*256 + BufferHeader[OffserTipeFile]);
   
    if((WidthPixel>LCD_X_MAX) || (HeighPixel>LCD_Y_MAX) || (TipeFile!=24)){
        fclose(Imagen);
        return;
    }
   
    if(InitData!=54){
        for(int k=54;k<InitData;k++){
            fread(&Temp,1,1,Imagen);
        }
    }
   
    PosXImagen=(LCD_X_MAX/2)-(WidthPixel/2);
    PosYImagen=(LCD_Y_MAX/2)+(HeighPixel/2);
   
    Temp16bits=WidthPixel*3;
    Adicional=0;
    while(((Temp16bits)%4)!=0){
        Adicional++;
        Temp16bits++;
    }
   
    for(int k=0,y=PosYImagen;k<HeighPixel;k++,y--){
        vLCDTFTAddressSet(PosXImagen,y,PosXImagen+WidthPixel-1,y);
        for(int i=0;i<WidthPixel;i++){
            fread(&BufferTemp[0],1,3,Imagen); // Leemos 3 bytes (R,G,B)
            Color.Blue=BufferTemp[0]>>3;Color.Green=BufferTemp[1]>>2;Color.Red=BufferTemp[2]>>3; // Conversion de 24-bits a 16-bits.-
            vLCDTFTWriteData(Color.Val);
        }
        // Bytes adicionales para que linea sea multiplo de 4.-
        for(int p=0;p<Adicional;p++){
            fread(&Temp,1,1,Imagen);
        }
    }
    fclose(Imagen);
}


Saludos!

Voy a ver tu codigo, por ahora no uso la Sd_card, pero pensaba en como hacer una función para indexar las imagenes asi poderlas buscar y plasmar en la pantalla mas fácil.

Saludos!
No será fácil y no sera corto el camino, pero se que seré feliz mientras lo transite.

Suky

  • **----- ^^ ------**
  • Moderador
  • dsPIC
  • ******
  • Mensajes: 5442
  • Con Qt...
    • micros-designs
Re: MyBoard mbed xD
« Respuesta #14 en: Agosto 15, 2011, 07:29:08 pm »
 :'( Miren al ponja:


Lo peor, hoy me di cuenta que debería de realizar el hardware de otra forma para obtener mejores resultados  :idiot: Pero bue, por lo menos espero podes sacar una foto  :P El módulo cámara CMOS por lo menos responde a los comandos seriales  :bang:



Saludos!