pantalla OLED utilizando dspic33f i2c

2

Estoy intentando usar la pantalla OLED en el microchip dspic33f. He inicializado y enviado con éxito datos utilizando i2c a OLED. Me las arreglé para mostrar una pequeña fuente (8 puntos) en el OLED. Sin embargo, cuando probé una fuente más grande, se está obstruyendo parte de la fuente (no se puede mostrar la parte completa de esa fuente).

El código es el siguiente.

static unsigned char buffer[1024 ] = {      
    // @18 '2' (5 pixels wide)         //generated by using The Dot Factory
    0xC0, 0x80, // ##      #
    0xA0, 0x80, // # #     #
    0x90, 0x80, // #  #    #
    0x8D, 0x80, // #   ## ##
    0x87, 0x00, // #    ###  

    // @9 '2' (4 pixels wide)
    0x00,
    0xC1, // ##     #
    0xA1, // # #    #
    0x91, // #  #   #
    0x8E, // #   ### 
    0x00
};

void Oled_init(void){   
    command(0xAE);  //display off
    command(0xD5);  //display clk div
    command(0x80);  //ratio -- continuation of clk_div
    command(0xA8);  //mux ratio
    command(0x3F);
    command(0xD3);  //display offset
    command(0x0);   //no offset- continuation of display_offset
    command(0x40 | 0x00);   //display starting line
    command(0x8D);  //charge pump
    command(0x14);  //internal vcc          
    command(0x20);  //memory mode
    command(0x00);      
    command(0xA1);  //remap columns
    command(0xC8);  //remap rows
    command(0xDA);  //com pins
    command(0x12);  
    command(0x81);  //set contrast
    command(0xCF);              
    command(0xDB);  //set Vcomh
    command(0x40);              
    command(0xD9);  //pre charge
    command(0xF1);          
    command(0xA4);  //entire display on
    command(0xA6);  //normal display 
    command(0x2E);
    command(0xAF);  //display on    
}

void display (void){
    command(0x21);  //column start address
    command(0);
    command(0x7F);

    command(0x22);  //set page address
    command(0x00);  //min
    command(0x07);  //max   //128x64resolution

    unsigned int i = 0;
    unsigned char x = 0;

    for(i = 0; i < 1023; i++){
      OpenI2C2(I2CConfig2, I2C2_BRG);
      IdleI2C2 ();
      StartI2C2 ();
      while(I2C2CONbits.SEN);
      MasterWriteI2C2(0x78);  
      MasterWriteI2C2(0x40);      //Co = 0, D/C = 1, last 6 bit = 0

      for (x = 0; x < 16; x++){   
         MasterWriteI2C2(buffer[i]);
         i++;
       }           
         i--;

      StopI2C2 ();
      while(I2C2CONbits.PEN);
      CloseI2C2();        
   } 
}

Number"2" con 5 píxeles de ancho

Number"2" con 4 píxeles de ancho

Este problema me ha estado preocupando desde las últimas semanas y todavía no pude encontrar ninguna solución. Gracias por cualquier solución por adelantado.

    
pregunta Allure

0 respuestas

Lea otras preguntas en las etiquetas