Autor Tema: Problemón con SPI y 16F876: ¿Envío de 1 solo bit a través de SSPBUF?  (Leído 1893 veces)

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

Desconectado bAIthrO

  • PIC10
  • *
  • Mensajes: 7
Buenas, Picmaniacos.

Necesito controlar un potenciómetro digital dual (DS1267) a través de un PIC16F876. Para ello me baso en el protolo SPI, a través de las líneas SCK, SDO y SS y el registro SSPBUF, con el que se envían bytes.

El problema viene del datasheet del potenciómetro digital, al mandarle los datos requeridos. El potenciómetro tiene un buffer de ¡17bits!, algo que nunca había visto, al cual he de mandar datos para actualizar el potenciómetro.

17 bits= 8 bits potenciómetro0 + 8 bits potenciómetro1 + 1bit de configuración.

PROBLEMÓN: Si no mando 17 bits o un múltiplo de 17 al buffer del potenciómetro, este no funcionará correctamente. Lo pone bien claro.

Sabiendo que con SSPBUF se pueden envíar bytes (8 bits), me falta la manera de en viar 1 bit:

¿Cómo envío 1 solo bit a través del registro SSPBUF?
¿Alguien conoce otra manera? ¿A alguien se le ocurre algo?

Espero haberme explicado, muchísimas gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Problemón con SPI y 16F876: ¿Envío de 1 solo bit a través de SSPBUF?
« Respuesta #1 en: 15 de Febrero de 2006, 17:49:00 »
Pregunta...estas seguro que es SPI ese dispositivo???

Puedes pasar un link con el datasheet??

Me parece muy raro.

Muchos dispositivos SPI pueden tener algun bit de mas, pero latchean los datos cada 8 bits entonces si le tienes que mandar 17 bits, los primeros bits los dejas en 0 y transmites del bytes más significativo, quedando luego los 17 bits que requieres porque los primeros se descartan.

De todas formas postea el datasheet.  Algunos integrados tienen "similitudes" con el SPI pero no son SPI, de hecho hasta tienen un LATCH ENABLE,  que nada tiene que ver con el chip select del spi.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
RE: Problemón con SPI y 16F876: ¿Envío de 1 solo bit a través de SSPBUF?
« Respuesta #2 en: 15 de Febrero de 2006, 17:52:00 »
Hola bAIthrO, la otra manera de generar una comunicación del tipo SPI es por medio de software, lo que debes de hacer es generar tú mismo por programa las señales de control para poder comunicarte por medio de SPI, de esta forma te será muy sencillo realizar una trama de 17 Bits.

Un saludo Suerte,

Atte. CARLOS

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado bAIthrO

  • PIC10
  • *
  • Mensajes: 7
RE: Problemón con SPI y 16F876: ¿Envío de 1 solo bit a través de SSPBUF?
« Respuesta #3 en: 16 de Febrero de 2006, 08:46:00 »
Muchísimas gracias a los dos, por responder y dar un poco de luz sobre el tema. Ya puedo controlar un potenciómetro digital. Ahora me falta conectarlos en cascada. Sonrisa Gigante

Escrito originalmente por maunix

Muchos dispositivos SPI pueden tener algun bit de mas, pero latchean los datos cada 8 bits entonces si le tienes que mandar 17 bits, los primeros bits los dejas en 0 y transmites del bytes más significativo, quedando luego los 17 bits que requieres porque los primeros se descartan.



Pdf del dispositivo: http://pdfserv.maxim-ic.com/en/ds/DS1267.pdf
Web del dispositivo: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2676/ln/en

Según la web el dispositivo trabaja en modo 3 Wires Serial. No veo clara la diferencia del 3 Wire Serial con el SPI. Ambos trabajan con SSPBUF y utilizan línea de datos, reset/chip select y reloj.

En cualquier caso y como muy bien ha dicho maunix, los primeros 7 bits del primer byte se descartan. Lo ví en una Application Note, menos mal.

De este modo, el método trabajo sería así:
1. Reset a nivel alto.
2. Mando primer byte, del que sólo importa el LSB. 1 bit (bit de stack)
3. Mando segundo y tercer byte. Pot0 y Pot1 16bits (Ya tengo los 17 bits).
4. Reset a nivel bajo, corto comunicación y, en ese momento, se actualizan los valores del potenciómetro.

Como les he explicado, necesito conectar seis potenciómetros en cascada, a través de Cout y DQ, encadenándolos. Mi problema es el siguiente: Teniendo en cuenta que los primeros 7 bits del primer byte se descartan y que, sólo cuando el reset vuelve a nivel bajo el potenciómetro es actualizado:

¿Cómo mandaría 6 veces los 17 bits? Al no haber cerrado la comunicación con el reset, condición para que los datos lleguen a los elementos de la cadena, el dispositivo solo descartará los primeros 7 bits del primero de los bytes. El primer problema viene con el byte que contiene al bit de stack del segundo dispositivo de la cadena. Al no haber cerrado la comunicación, no descartará los 7 bits, con lo cual se monta un lío enorme.

¿A alguien se le ocurre algo?
Más dificil todavía.

Muchas gracias.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Problemón con SPI y 16F876: ¿Envío de 1 solo bit a través de SSPBUF?
« Respuesta #4 en: 16 de Febrero de 2006, 09:18:00 »
Me alegro que lo hayas podido solucionar.  Muchos buses son "tipo SPI" pero no lo dicen, porque SPI es una marca registrada de Motorola.

En el tema de loq ue mencionas, no he visto el datasheet pero creo entender que tu te preguntas, que como mandas 24 bits y los restantes son "descartados" como es que no se siguen corriendo?  Pues bien, aqui si me parece que tienes que hacer otra cosa, ya que tu los quieres usar en cascada.

Es que si los pondras en cascada, todos con el mismo CS, deberás primero armar todo el word a enviar, seteando cada bit (te digo que te costara algo de trabajo).  Entonces debieras mandar 17 x 6 = 102 bits = 13 bytes (donde los 2 primeros serian descartados).

Osea, deberás ubicar muy bien cada bit para luego enviarlo en una trama de 13 bytes, empezando por el ultimo potenciometro de la cadena (el mas lejano al pic, en la cadena de integrados) y finalizando con el mas cercano al pic.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)