EL caso es que pensaba que lo habia solucionado pero no, parece ser un problema de libreria, con una tft ILI9341 no se presenta el problema, ni en simulacion ni en real, sin embargo con una TFT 7735 se presenta tanto en simulacion como en real, pensaba que seria un fallo de simulacion, pero al pasarlo a la proto hace exactamente lo mismo.
He reducido el codigo a lo justo donde da el error a ver si veis donde esta el problema que me temo es en la libreria, si no, porque en la TFT ILI 9341 no sucede y en la TFT 7735 si.
la libreria esta en adjuntos por si alguien se atreve a echarle un vistazo.
El codigo consta de variasd partes, esta parte pertenece a la eeprom, guarda los datos en la eeprom y al usar el aparato que controla el pic contea una vez mas, logicamente para ello hay que guardar en la eeprom cada vez que se usa y recuperarlo, pero no hay manera que contee bien a partir de 1000 y no es fallo de lectura ni escritura de la eeprom porque el fallo se muestra con una simple simulacion de conteo sin que este presente la eeprom.
El fallo sucede cuando llega justo a 1000, en lugar de seguir contando normalmente, las decenas muestran caracteres ascii.
/*
ST7735 TFT library for mikroC compiler is required!
*/
#define TFT_SPI_HARDWARE
// Hardware SPI module is used
sbit TFT_CS at RD0_bit; // TFT CS pin is connected to RD0 pin
sbit TFT_DC at RD1_bit; // TFT DC pin is connected to RD1 pin
sbit TFT_CS_Direction at TRISD0_bit;
sbit TFT_DC_Direction at TRISD1_bit;
// End SPI TFT module connections
#include "ST7735.c"
/*#include <built_in.h>
#include "variables.c"
#include "rutinas.c"
#include "config.c"*/
char unidad, decena, centena, umil, dmil, cmil;
char *veces = "00000";
unsigned int power;
//-----------------------------
void muestra_cantidad () {
veces[4] = unidad+48;
if (decena>0){
veces[4] = unidad+48;
veces[3] = decena+48;
}
else
veces[3] = ' ';
if (centena>0){
veces[4] = unidad+48;
veces[3] = decena+48;
veces[2] = centena+48;
}
else
veces[2] = ' ';
if (umil>0){
veces[4] = unidad+48;
veces[3] = decena+48;
veces[2] = centena+48;
veces[1] = umil+48;
}
else
veces[1] = ' ';
if (dmil>0){
veces[4] = unidad+48;
veces[3] = decena+48;
veces[2] = centena+48;
veces[1] = umil+48;
veces[0] = dmil+48;
}
else
veces[0] = ' ';
}
void configuracion ()
{
//reloj interno, bits 4, 5 y 6 deciden la velocidad,
// 16 Mhz 0b01110000, o velocidad maxima del PIC sin PLL
// 8 Mhz 0b01100000 o velocidad del PIC sin PLL, velocidad maxima dividida entre 2 sin PLL
// 4 Mhz 0b01010000, o velocidad del PIC sin PLL " " dividida entre 4 sin PLL
// 2 Mhz 0b01000000, o velocidad del PIC sin PLL " " dividida entre 8 sin PLL
// 1 Mhz 0b00110000, o velocidad del PIC sin PLL " " dividida entre 16 sin PLL
OSCCON =0b01110000; // 0x70;
ANSELC=0; // puertos digitales = 0 o analogicos = 1, para 18F46K22 y 18F45k22
ANSELD=0; // puertos digitales = 0 o analogicos = 1, para 18F46K22 y 18F45k22
}
void main() {
configuracion();
ST7735_TFT_Init(); // Initialize the TFT module
fillScreen(ST7735_BLACK);
drawtext(74, 80, "VECES", ST7735_WHITE, ST7735_BLACK, 1);
while (1){
dmil = power / 10000;
umil = (power -(dmil*10000))/1000;
centena = (power -(dmil*10000 + (umil*1000)))/100;
decena =(power - (dmil*10000 + (umil*1000 + (centena *100))))/10;
unidad = (power - (dmil*10000 + (umil*1000 + (centena *100 +(decena *10)))));
muestra_cantidad();
drawtext(37, 80, veces, ST7735_WHITE, ST7735_BLACK, 1);
power++;
}
}