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.
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;
}
}
}
==============================================================================
/**
* 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;
}
}
}
/**
* 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);
}