Autor Tema: Problemas de comunicacion SPI con driver  (Leído 1488 veces)

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

Desconectado mparra

  • PIC10
  • *
  • Mensajes: 8
Problemas de comunicacion SPI con driver
« 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.



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;

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas de comunicacion SPI con driver
« Respuesta #1 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!
No contesto mensajes privados, las consultas en el foro

Desconectado mparra

  • PIC10
  • *
  • Mensajes: 8
Re: Problemas de comunicacion SPI con driver
« Respuesta #2 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

Desconectado mparra

  • PIC10
  • *
  • Mensajes: 8
Re: Problemas de comunicacion SPI con driver
« Respuesta #3 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