Autor Tema: Usar RS232 y SPI  (Leído 2326 veces)

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

Desconectado devaronaomar

  • PIC10
  • *
  • Mensajes: 27
Usar RS232 y SPI
« en: 12 de Abril de 2010, 13:17:00 »
Hola a todos, estoy programando un 18f2550 para que reciba datos por rs232 en tramas de 8 bits y los reenvíe a otro dispositivo por SPI en tramas de 32 bits (de los cuales sólo 16 son datos, es decir: una transmisión SPI cada 2 recepciones rs232). Hasta aquí bien.

El caso es que si transmito alguna trama por SPI funciona siempre y cuando no haya ejecutado antes un getc().. los getc() funcionan correctamente.

los define los tengo así:

#define(__PCH__)
#include <18F2550.h>
#fuses HS, NOWDT, NOPROTECT
#use delay(clock=12000000)
#use spi(DI=PIN_B0, DO=PIN_B3, CLK=PIN_B1, ENABLE=PIN_B4, SAMPLE_RISE, MSB_FIRST, BITS=32)
#use rs232(baud=125000, xmit=PIN_C6, rcv=PIN_C7)

y de ésta manera en el transmisor me ejecuta muchas funciones SPI  y rs232 sin problemas!!
Me voy a intentar explicar un poco mejor:

Teniendo lo siguiente:

   while(true){;   
      dato1=getc();
      dato2=getc();
      dato=(dato1*256)+dato2;
      output_low(XCS);
            spi_xfer(((0x0208)*65536)+dato); //HDAT0=reg de datos
      output_high(XCS);
      if ((dato==0x4f67)){
         output_high(test);
}
}
}

No se ejecuta el spi_xfer, pero sé que los getc y la concatenación son correctas por que TEST se pone alto. Es decir que simplemente no hace nada en el spi_xfer. De hecho tampoco ejecuta los output_low(XCS)!! Pero el If  lo ejecuta bien.

Si en cambio hago lo siguiente:

      output_low(XCS);
            spi_xfer(0x02080124); //HDAT0=reg de datos
      output_high(XCS);
   while(true){;   
      dato1=getc();
      dato2=getc();
      dato=(dato1*256)+dato2;
      output_low(XCS);
            spi_xfer(((0x0208)*65536)+dato); //HDAT0=reg de datos
      output_high(XCS);
      if ((dato==0x4f67)){
         output_high(test);
}
}
}

En este caso sí me ejecuta la primera transferencia spi correctamente y los output_low/high  pero una vez ha ejecutado algún getc ya no funciona el spi del bucle ni los output_low/high. He comprobado que el bucle en sí no es el problema, ya que si elimino los getc y dejo la transferencia spi dentro sí que funciona.. -.-


Lo que más me extraña es que en el microcontrolador del transmisor, que está prácticamente terminado, sí que funcionan ambas funciones , incluso transmite rs232 mientras adquiere datos por SPI (sí, es alrevés en el otro pic)

Alguien puede ayudarme a encontrar la solución?

Muchas gracias.


 

anything