Señores, primera vez que participo activamente con ustedes....siempre son un punto de referencia para mis proyectos y dudas, pero hoy quiero hacer un "aporte".
Dentro de mi Proyecto de Tesis, me he visto en la necesidad de desarrollar una pequeña libreria, o mas bien Driver para el MAX6952, ya que he buscado por todas partes y no he logrado encontrar nada. La unica informacion disponible es el Driver para su hermano, el MAX6953, pero utiliza otro tipo de configuración de trama y protocolo de comunicacion (I2C), a diferencia del 52 que utiliza SPI.
El tema es el siguiente, desarrolle un pequeño Driver, pero se presenta un error. Las rutinas estan en un archivo x.C, que debieran funcionar correctamente, ya que las probe de forma independiente, pero al ser llamadas, tengo problemas con los registros argumentos.
aqui les dejo el codigo, por si le sirve a alguien mas y si alguien tiene el mismo problema, y sabe como solucionarlo
.....
buenp, para eso esta el foro...
el compilador es el CCS PCW.
/*-----------------------------------------------------------------------------
------------------ Driver MAX6952 ----------------------
antes se debe iniciar setup_spi()
init_display(); //inicia la funcion SPI y la intensidad al maximo
write_config_register(config_byte); //Escribe registro de configuracion
shutdown(state,R/!W); //Low Power Shutdown. (False,True) Enciende Display
display_test(state); //True enciende TEST
set_intensity(intens); //0xAB, A:Digito 1 y 3; B:Digito 0 y 2
//length=4, start=0x60 -Escribe P0 y P1
//start=0x20 -Escribe P0 Digito 1,2,3,4
//start=0x40 -Escribe P1 Digito 1,2,3,4
write_display_character(start,length,string);
clear_digit(); //borra todos los caracteres
SECUENCIA
main()
cadena["hola"];
init_display();
.
.
.
shutdown(FALSE,TRUE);
display_test(TRUE);
delay_ms(100);
display_test(FALSE);
write_display_character(0x60,4,cadena);
-----------------------------------------------------------------------------*/
#DEFINE SS PIN_C2
int config_byte;
//Funcion que escribe en el registro
//de CONFIGURACION, dato viene en
// "config_byte"
void write_config_register( int &config_bytes )
{
output_low(SS);
spi_write(0x04);
spi_write(config_byte);
output_high(SS);
}
//Pone al display en Low Power Shutdown
void shutdown( short state, short wrt )
{
if( !state ) config_byte |= 0x01;
else config_byte &= 0xFE;
if( wrt ) write_config_register( config_byte );
}
//TEST MODE
void display_test(short state)
{
output_low(SS);
spi_write(0x07);
if(state)
{
spi_write(1);
}
else
{
spi_write(0);
}
output_high(SS);
}
//Configurar la intensidad
//configura todos los registros con la misma
//intensidad. 0xAB
// A: Digito 1 y 3
// B: Digito 0 y 2
//MAXIMA
void set_intensity()
{
output_low(SS);
spi_write(0x01);
spi_write(0xff);
spi_write(0xff); //Auto incremento
output_high(SS);
}
//Configura el Plane0
//Para escribir en Plane0 y Plane1, usar
//start= 0x60, length=4
//Para escribir cada Plane por separado
//Plane0 Digito 1,2,3,4
//start= 0x20 , length= 4
//Plane1 Digito 1,2,3,4
//start= 0x40 , length= 4
void write_display_character(int start, int length, char* string)
{
int n;
output_low(SS);
for(n=0;n<length;n++)
{
spi_write(string[n]);
}
output_high(SS);
}
//Borra todos los caracteres
void clear_digit(void)
{
// write_config_register(config_byte | 0x20);
}
//Inicia la funcion SPI y configura la intensidad al maximo
void init_display()
{
SETUP_SPI(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_64);
config_byte=0;
set_intensity();
}