si pero eso ya lo hice ya leí ambos datasheets y por spi solo se pueden enviar 8 bits pero yo necesito enviar 16 bits
es que todavia tenes un error, supongo que estos son los
bits a enviar:
unsigned char datos [8]={0,1,0,1,0,1,0,1};
unsigned char datos2 [8]={0,1,1,0,1,0,1,1};
Cada uno de esos es un
byte!, es decir
8 bits, si pones un 1, no significa que va a enviar un 1. sino que
va a enviar 0000 0001 ( 8 bits, en ves de 1 como queres)
La funcion spi_write() acepta de a bytes, asi que si pones un spi-write(1) va a suceder lo mismo que nombre antes
Entonces como haces para tener a la salida del SPI esos bits que queres? Simplemente enviando un byte con esa informacion
0110 1011 = 0x6BY con eso usas
spi_write(0x6B);
Otra cosa mas, si leiste el modulo del SPI del PIC, te daras cuenta que
el SPI por Hardware, genera solo la señal de clock, es decir esto : datos [8]={0,1,0,1,0,1,0,1};
Lo genera solo el pin de CLK del modulo.
no tenes que hacerlo. Asi al poner:
spi_write(0x6B) vas a poder ver como las 2 salidas (CLK y datos) se "mueven" (se van a poner en 0 o 1) enviando ese valor al integrado.
--------------------------------------------------
Esto hace que no tengas que enviar los 16 bits que nombras.
Si por ejemplo tenes
mas de 1 MBI conectado,
los primeros 8 bits que envies seran del ultimo MBI, ya que envias los 8 bits, el primero llena su shif-register, y si envias 8 mas, esos 8 que tenia el primer MBI se los pasa al segundo, y los 8 que llegaron se quedan en el primer MBI.
Pensalo como una cadena. En el que hay eslabones, en el cual tenes 8 pertenecen a cada MBI y 8 a tu PIC Vos pones tus datos en los eslabones del PIC y cuando envias 8 es como que siguen la cadena llegando a completarse los 8del primer MBI, luego si pones otros 8 mas en el PIC y envias, cada bit que envies va a seguir moviendo los datos para adelante, con el resultado que dije antes, esos 8 que enviaste primero quedaran en el segundo MBI y los 8 que enviaste segundo quedaran en el primer MBI
Entonces si por ejemplo tenes 3 MBI lo que tenes que hacer para fijar el valor de cada uno es:
spi_write(0x6B) // Aca enciendo varias salidas 0110 1011 , este es el ultimo MBI
spi_write(0x12) // Aca solo 2 0001 0010 , MBI del medio
spi_write(0x80) // Aca solo 1 1000 0000 , Primer MBI
Y para guardar eso en los integrados MBI hay que darle un pulso al pin LE de todos los MBI. (Esto no tiene nada que ver con el SPI )
output_high(PIN_LE);
output_low(PIN_LE);
Listo ya con eso configuraste tus integrados
PD: para el SPI creo que necesitas usar el #use SPI de CCS, solo tener cuidado de ponerlo en los pines que tiene Hardware o marcarlo como SPI1