TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: mparra en 01 de Septiembre de 2010, 15:02:01

Título: Problemas de comunicacion SPI con driver
Publicado por: mparra en 01 de Septiembre de 2010, 15:02:01
Estoy trabajando con el PIC 18F4550 y el driver para 4 displays AS1108. enlace http://www.austriamicrosystems.com/eng/Products/Lighting-Management/LED-Driver-ICs/AS1108.
El programa esta realizado en C18.

Después de numerosas pruebas no consigo hacer funcionar correctamente el display. Realizando medidas en el osciloscipio parece que las señales de reloj y datos se generan correctamente.
No se que más hacer para conseguir mostrar dígitos en el display. Lo unico que he conseguido con el codigo mostrado es hacer apagar uno de los 4 dígitos, sin haber enviado ese comando.
Es como si existiese una desincronía y los comandos enviados son interpretados por otros. El dispositivo necesita de una palabra de 8 bits para comando y otra para dato. Los 4 bits mas significativos son X.

Les agradecería que alguien me pudiese ayudar, para saber si estoy cometiendo algun error, o si pudiesen mandarme algun ejemplo de codigo funcional, con algún dispositivo con interfaz SPI.

(http://)

Código: [Seleccionar]
PORTBbits.RB3 = 0; //CS
OpenSPI(SPI_FOSC_64, MODE_00, SMPEND);
//SSPCON1 |= SPI_FOSC_64;
//WriteSPI(0x55);
//while(0 != (WriteSPI(0x00)));
//getsSPI(SPI_Read,8);
//DataRdySPI();
SPI_Write = 0x0C;//direccion
putcSPI(SPI_Write);
SPI_Write = 0x01;
putcSPI(SPI_Write);
SPI_Write = 0x01; //direccion
putcSPI(SPI_Write);
SPI_Write = 0x01;
putcSPI(SPI_Write);
SPI_Write = 0x0A;
putcSPI(SPI_Write);
SPI_Write = 0x0F;
putcSPI(SPI_Write);
                CloseSPI();
                PORTBbits.RB3 = 1;
Título: Re: Problemas de comunicacion SPI con driver
Publicado por: Suky en 01 de Septiembre de 2010, 15:44:03
Realmente la configuración parece correcta, pero prueba de la siguiente manera:

Código: C
  1. OpenSPI(SPI_FOSC_64, MODE_00, SMPEND);
  2.  
  3.         PORTBbits.RB3 = 0; //CS
  4.         putcSPI(0x0C);
  5.         putcSPI(0x01);
  6.         PORTBbits.RB3 = 1; //CS
  7.         Nop();
  8.  
  9.         PORTBbits.RB3 = 0; //CS
  10.         putcSPI(0x01);
  11.         putcSPI(0x01);
  12.         PORTBbits.RB3 = 1; //CS
  13.         Nop();
  14.  
  15.         PORTBbits.RB3 = 0; //CS
  16.         putcSPI(0x0A);
  17.         putcSPI(0x0F);
  18.         PORTBbits.RB3 = 1; //CS



Saludos!
Título: Re: Problemas de comunicacion SPI con driver
Publicado por: mparra en 02 de Septiembre de 2010, 09:19:24
Gracias por la respuesta, pero me sigue sin funcionar.
Resulta, que he vuelto a ver la grafica de tiempos y señales, y por la patilla CS, ademas hace de Load, osea despues de enviar los 16 bits, tengo que dar un pulso de minimo 50 ns, para que el chip cargue, la instrucción.
Pues bien he hecho esto y nada, sigue igual. He vuelto ha comprobar las señales en osciloscopio las hace bien pero nada que obedece.
No se que más hacer para que funcione.
No se si en el datasheet hay algo que me estoy saltando por alto. Porque según indica el driver arranca en modo shutdown y hay q ponerlo en modo normal de funcionamiento eso se hace con hex 0C01.

No se que más mirar o hacer pero esto es desesperante.

Gracias
Título: Re: Problemas de comunicacion SPI con driver
Publicado por: mparra en 07 de Septiembre de 2010, 14:17:01
Hola, despues de numerosas pruebas, y de implementar el SPI, por código y por el puerto del PIC, el driver seguia sin funcionar. Desde primera hora me di cuenta que las señales de datos y reloj, no tenian un nivel de tension aceptable, Median 3,4 voltios en vez de rondar los 5V. Así q como último recurso he probado con otro driver, y ahora si que miden los valores de tension en condiciones. Así que primer problema integrado roto. Sigo probando la comunicación SPI, y me doy cuenta, que algunas instrucciones las obedece y otras no, sobre todo las que conciernen a los leds. No hay manera de bajarle la intensidad y menos el valor residual de fondo el los segmentos apagados. "Que pasa aquíiiii", pues pasa que el que me ha vendio el display de 4 digitos en una sola pieza con 12 pines, me ha sumistradoooo piezas de anodo comunnnnn!!!!!, y el driver es catodo comun. Así que ya tenemos el gran problema resuelto, lo que no se es si el otro circuito se roto por culpa del display en anodo comun, porque el segundo circuito no le ha pasado nada. Bueno, he conseguido encontrar 4 displays de un digito en catodo comun, y ahora voy a probar espero que todo sea eso, porque la verdad que esto era el mundo absurdo.

De bueno saco que me he aprendido el protocolo SPI de arriba abajo.

Gracias