Programación Específica > Programación en C

 Nueva Con Spi

<< < (2/2)

vane_ccs:
Hola Huguen_aus_Tirol, como estas? soy yo otra vez   :hitcomp:

Ahora estoy tratando de trabajar con string y estoy teniendo problemas  :( .... no se algo pasa con el clock del spi.... estoy usando estas funciones para obtener un string del buffer y colocar un string en el buffer para enviarlo al otro pic.


--- Código: Text --- void getsSPI( unsigned char *rdptr, unsigned char length ){  while ( length )                // stay in loop until length = 0  {    *rdptr++ = getcSPI();         // read a single byte    length--;                     // reduce string length count by 1  }}   
y


--- Código: Text --- void putsSPI( unsigned char *wrptr ){  while ( *wrptr )                // test for string null character  {     SSPBUF = *wrptr++;           // initiate SPI bus cycle     while( !SSPSTATbits.BF );    // wait until 'BF' bit is set  }} 

Lo que estoy tratando de hacer ahora es enviar un "hola" de un pic a otro. Pero si pongo que solo transmita y reciba una vez, no lo hace..es decir, no se coloca nada en el lcd del slave....si coloco que envie varias veces el master y el slave solo reciba una vez, me salen las letras pero asi por lo menos HOAH.....Parece un problema de sincronizacion...que no entiendo porque el slave deberia usar el clock del master para recibir los bytes del string... :huh:

este es el codigo...

master


--- Código: Text --- void config_SPI(void){ //configuro el Serial Port SPI MasterOpenSPI( SPI_FOSC_16,          MODE_11,             SMPEND); } void trasmitiendo_datos(void){   esclavo = 0;   putsSPI(contador);    esclavo = 1;   putsXLCD(contador);} void main(void){   //salida del clock  TRISAbits.TRISA6 = 0;  TRISAbits.TRISA7 = 0;   TRISBbits.TRISB7 = 0;   config_SPI();   OpenXLCD(FOUR_BIT & LINES_5X7); //  trasmitiendo_datos();   while(1){    trasmitiendo_datos();  }  } 
slave


--- Código: Text --- unsigned char data[]; //Configuramos el SPIvoid config_SPI(void){ OpenSPI( SLV_SSOFF,        MODE_11,           SMPEND); } void recibiendo_datos(void){   if(PORTAbits.RA5 == 0)    getsSPI(data,4);   SetDDRamAddr(0x00);  putsXLCD(data);  } void main(void){   //salida del clock  TRISAbits.TRISA6 = 0;  TRISAbits.TRISA7 = 0;   config_SPI();   OpenXLCD(FOUR_BIT & LINES_5X7);    recibiendo_datos();   while(1){   &#59;  }}  
Disculpa que ponga todo el codigo pero es que quiero que entiendas bien que estoy haciendo para ver si tu o cualquier otra persona me pueda dar luz....

Para mi es un problema con la sincronizacion, pero no entiendo por que??.. :(

Gracias por la ayuda de verdad.....  ya estoy fastidiosa.... lo mas triste es que pienso que debe ser una estupidez porque de verdad la logica me parece que esta bien....no?  :huh:

Gracias  ;)

vane_ccs:
Hola a todos, ya pude hacer funcionar el spi enviando y recibiendo string..pero eso solo en el simulador proteus... el problema era que habia colision ya que quizas estaba entrando una palabra al buffer para ser enviada mientras que se habia recibido otra.

PERO  :angry:  Cuando voy a hacerlo en fisico, a veces me escribe el hola que quiero y a veces escribe pura basura..., no se que es lo que pasa de verdad....ya estoy verde.

Esto fue lo que modifique del codigo anterior del master


--- Código: Text --- void trasmitiendo_datos(void){   signed char i;   esclavo = 0;   SetDDRamAddr(0x00);  for(i=0;i&#60;4;i++)                {    while(putcSPI(contador[i])&#60;0);                  while(!SSPSTATbits.BF);       putcXLCD(contador[i]);    }   esclavo = 1; }  
el slave queda igual...

Si alguien tiene alguna idea de lo que pueda ser, le estaria muy agradecida de que me la hiciera saber...ya estoy harta de que algo que puede ser sencillo me este trayendo tantos problemas, y atrasandome en todo mi proyecto.  :(

Gracias por la ayuda.

Huguen_aus_Tirol:
Hola!
Si lo simulas en la PC y funciona, y en la placa no, yo te diría que controles el coneccionado (soldaduras, falsos contactos, etc)
Otra idea, prueba bajar la velocidad de transmisión.
Nos cuentas como va...

Saludos

vane_ccs:
Hola a todos....

Probe lo de la coneccion y logre que enviara el mensaje bien...por ejemplo hola no llega como hodd ni nada por el estilo, sino como hola....pero sigo teniendo el mismo problema con la basura...ya que me manda el mensaje + basura  ?????  :huh:  

Alguien tiene alguna idea de que pueda ser?? :unsure:

Muchas gracias por la ayuda que dan  ;)

Saludos!!! :)

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa