Autor Tema: [Solucionado] - GLCD - KS0108 - Leer Bitmap - Se para en la página 4  (Leído 2886 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Thevenin

  • PIC10
  • *
  • Mensajes: 29
Buenas noches,

Tengo una simulación en proteus, de un GLCD con un 18F452.

Al simular, y leer un bitmap se para en la página 4.
Sin embargo en la simulación, el contador n, de la función Bitmap sigue contando en binario correctamente en el puerto B, llegando a 7 en binario

Si hace falta la simulacion completa, con el DSN, etc me lo dicen y busco la manera de subirlo. Ahora mismo es demasiado grande para el foro.

Saludos.



Esta es la función Bitmap, debajo está todo el código.

Código: [Seleccionar]
void write_bitmap(char address, char page) {
    unsigned char n, m;

    CS1 = 1;
    CS2 = 0;
    setpage(0);
    setaddress(0);

    for (n = 0; n < 8; n++) {
       // setpage(n);
        for (m = 0; m <128; m++) {
            if (m>=0 && m<64){
                CS1=1;
                CS2=0;
            }
            else if (m>=64 && m<128){
                CS1=0;
                CS2=1;
            }
            write_data(BitMap[m]);
            delay_ms(10);
            PORTB=n;
        }              
    }
}

==============================================================================

Código: [Seleccionar]
/**
 * File:   graphics_hitec18.h
 * Created on 22 de diciembre de 2012, 11:29
 */

/************************************************************************************
 *                             MICRO PINS SECTION                                   *
 ************************************************************************************/
#define RW       PORTCbits.RC0  // PORTC PIN 0
#define DI       PORTCbits.RC1  // PORTC PIN 1
#define CS2      PORTCbits.RC2  // PORTC PIN 2
#define CS1      PORTCbits.RC3  // PORTC PIN 3
#define ENABLE   PORTEbits.RE0  // PORTE PIN 0
#define LCD_DATA PORTD          // PORTD PARALEL DATA PORT

#define GLCD_MAXWIDTH 128
#define N_CHIPS 2

#define ON  1
#define OFF 0

#define ENABLE_DELAY 1 //(clock cycles of enable delay)

#define bitset(var,bitno) ((var) |= 1 << (bitno))


#define _XTAL_FREQ 8000000

//#include <stdio.h>

void delay_ms(unsigned int t) {
    while (t--)
        __delay_ms(1);
}


/**
 * Initialize the MCU
 * Put all the ports A,B,C,D,E as output ports
 */
void init_mcu(void) {
    // port directions: 1=input, 0=output
    TRISA = 0x00;
    TRISB=  0x00;
    TRISD = 0x00;
    TRISE = 0b110; // RE0 as output
    TRISC = 0x00;
}

/**
 * Enable chip
 */
void enable() {
    _delay(ENABLE_DELAY);
    PORTE = 0b0000001;
    _delay(ENABLE_DELAY);
    PORTE = 0b0000000;
    _delay(ENABLE_DELAY);
}

void init_glcd(char state) {
    bitset(PORTE, 0);
    RW = 0;
    DI = 0;
    CS1 = CS2 = 1; // Turn on the chip controllers.
                   // Some displays requires set them to 0
    if (state == ON) {
        LCD_DATA = 0b00111111;
    } else {
        LCD_DATA = 0b00111110;
    }
    enable();
}

/**
 * Pages goes from 0 to 7. The display is divide into 8 vertical pages.
 */
void setpage(char page) {
    RW = 0;
    DI = 0;
    LCD_DATA = 0b10111000 | page;  
    enable();
}

/**
 * Address goes from 0 to (MAX WIDTH of your display/2) -1
 * (in ex: a 128x64 means address=128/2)-1=63
 */
void setaddress(char address) {
    RW = 0;
    DI = 0;
    LCD_DATA = 0b01000000 | address;
    enable();
}

void write_data(char data) {
    DI = 1;
    RW = 0;
    LCD_DATA = data;
    enable();
}




const char BitMap[128 * 8] = {
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0x22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22,
    0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0X22, 0xFF, 0XFF,

};

void write_bitmap(char address, char page) {
    unsigned char n, m;

    CS1 = 1;
    CS2 = 0;
    setpage(0);
    setaddress(0);

    for (n = 0; n < 8; n++) {
       // setpage(n);
        for (m = 0; m <128; m++) {
            if (m>=0 && m<64){
                CS1=1;
                CS2=0;
            }
            else if (m>=64 && m<128){
                CS1=0;
                CS2=1;
            }
            write_data(BitMap[m]);
            delay_ms(10);
            PORTB=n;
        }              
    }
}



Código: [Seleccionar]
/**
 * code.c
 * Graphic LCD with KS0108 Controller Library PIC18XX2 (18F452, 18F252, etc)
 *
 * To redefine the pins of your micro set them in the MICRO PINS SECTION
 *
 */
#include <htc.h>
#include <stdlib.h>
#include <string.h>

#include "graphics_hitec18.h"

__CONFIG(1, XT);
__CONFIG(2, BORDIS & BORV45 & PWRTEN & WDTDIS & WDTPS1);

// #pragma config WDT=1 - forma alternativa de configurar un fusible

//char double_buffer[128][64];

/*********************************************************************************************************************************
 * MAIN FUNCTION
 *********************************************************************************************************************************/
int main() {
    init_mcu();
    init_glcd(ON);
    write_bitmap(0,0);
    delay_ms(3000);
}
« Última modificación: 07 de Enero de 2013, 15:48:06 por Thevenin »

Desconectado Thevenin

  • PIC10
  • *
  • Mensajes: 29
[SOLUCIONADO] Re: GLCD - KS0108 - Leer Bitmap - Se para en la página 4
« Respuesta #1 en: 07 de Enero de 2013, 08:30:22 »

Muy buenas,

Los reyes me trajeron algo de tiempo y la solución.

Tras muchas pruebas, y utilizando un delay como depurador para ver como se dibujaba el GLCD, llegué a la conclusión de que a cada paso del bucle tenia que configurar el page, el address y escribir el dato.


Código: [Seleccionar]
void write_bitmap(const unsigned char BitMap[8][128], char address, char page) {
    int n, m;

    for (n = 0; n < 8;n++) {
        for (m = 0; m < 128; m++) {
            if (m >= 0 && m < 64) {
                CS1 = 1;
                CS2 = 0;
                setaddress(m);
                setpage(n);
                write_data(BitMap[n][m]);
            } else if (m >= 64 && m < 128) {
                CS1 = 0;
                CS2 = 1;
                setaddress(m-64);
                setpage(n);
                write_data(BitMap[n][m]);
            }     
       }
    }
}


Desconectado antayhua

  • PIC10
  • *
  • Mensajes: 32
Re: [SOLUCIONADO] Re: GLCD - KS0108 - Leer Bitmap - Se para en la página 4
« Respuesta #2 en: 29 de Julio de 2014, 11:05:06 »

Muy buenas,

Los reyes me trajeron algo de tiempo y la solución.

Tras muchas pruebas, y utilizando un delay como depurador para ver como se dibujaba el GLCD, llegué a la conclusión de que a cada paso del bucle tenia que configurar el page, el address y escribir el dato.


Código: [Seleccionar]
void write_bitmap(const unsigned char BitMap[8][128], char address, char page) {
    int n, m;

    for (n = 0; n < 8;n++) {
        for (m = 0; m < 128; m++) {
            if (m >= 0 && m < 64) {
                CS1 = 1;
                CS2 = 0;
                setaddress(m);
                setpage(n);
                write_data(BitMap[n][m]);
            } else if (m >= 64 && m < 128) {
                CS1 = 0;
                CS2 = 1;
                setaddress(m-64);
                setpage(n);
                write_data(BitMap[n][m]);
            }     
       }
    }
}



Hola amigo estaba viendo la librería que pusiste para el glcd y esta un poco incompleta al parecer es del hitech, si no fuera mucha molestia no tendras la librería completa de esa que dibuja círculos, cuadrados, texto, etc, en internet he bajado librerías pero no funcionan, ayudame porfavor

Desconectado antayhua

  • PIC10
  • *
  • Mensajes: 32
Ayuda con esta libreria
« Respuesta #3 en: 29 de Julio de 2014, 11:22:41 »
Me baje esta librería del glcd, lo uso con el pic 16f887, el mplabx y el xc8 pero no funciona estoy tratando de hacerlo funcionar ya hace 3 días pero no lo consigo, alguien me puede hechar una mano porfavor.