Autor Tema: Tx con SPI  (Leído 2484 veces)

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

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
Tx con SPI
« en: 08 de Diciembre de 2004, 08:48:00 »
Hay alguna manera de transmitir varias int de golpe con la funcion SPI_WRITE()?
Porque esta funcion solo sirve para transmitir un byte cada vez.Si es un array con un FOR se soluciona todo,pero  el problema lo tengo cuando kiero transmitir un grupo de variables dispersadas por el programa.


Saludos!

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Tx con SPI
« Respuesta #1 en: 08 de Diciembre de 2004, 12:00:00 »
Bueno, yo no tengo ni idea sobre comunicación SPI, así que puede que
este mal lo que digo, pero no puedes hacer una estructura o union con
esas variables y luego enviar cada miembro con la funcion que comentas??


Espero haber ayudado, un saludo.

Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: Tx con SPI
« Respuesta #2 en: 08 de Diciembre de 2004, 14:58:00 »
Estoy muy verde en el tema de las estructuras,pero te pongo un ejemplo:

             struct  {
   int temperatura;
   int puerto_a;
   int puerto_b;
             }prueba;

           prueba.temperatura = 25;
           prueba.puerto_a = 22;
           prueba.puerto_b = 10;
       
/*         spi_write(prueba); esto el compilador no lo admite,deberia ser asi:*/

           spi_write(prueba.temperatura);
          spi_write(prueba.puerto_a);
          spi_write(prueba.puerto_b);

-- De esta ultima forma seria lo mismo ke sin declarar una estructura cogiese las variables dispersadas por el programa y las fuera enviando una a una por SPI.
¿Hay alguna forma de poder enviar una estructura de golpe ya sea por SPI o por USART?        


Saludos!

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Tx con SPI
« Respuesta #3 en: 08 de Diciembre de 2004, 19:50:00 »
No hombre no, no me referia a enviar toda la estructura ( spi_write(estructura);) no conozco el bus spi, pero imagino que no puedas enviar mas de 8 bits por el bus (por eso no te deja el compilador), me refería a que cuando tienes varios tipos de variables a lo largo del programa, se suelen agrupar en estructuras para tratar los datos de manera conjunta (es algo habitual). No se como es  tu programa, pero para lo que quieres hacer quizas puedas crear un array de estructuras o tambien si quieres tratar los datos de manera dinamica crear un array de punteros (auqnue no se que tal se comportaria el compilador con esta ultima opcion, nunca lo he probado):



Una posible solucion con un ARRAY DE ESTRUCTURAS
//////////////////////////////////
Codigo:

struct miestructura
{
   int temperatura;
   int puerto_a;
   char puerto_b;
}tipos_de_datos[N_DATOS_MAX];



///////////////////////////////////

for(j=0;j<N_DATOS_MAX;j++)
{
   SPI_WRITE(tipos_de_datos[j].temperatura); //envio los N_DATOS_MAX de temperatura por SPI
   SPI_WRITE(tipos_de_datos[j].puerto_a); //envio los N_DATOS_MAX del port_a
   SPI_WRITE(tipos_de_datos[j].puerto_b);
}


//////////////////////////////////



Con esto tendrías que ir almacenando las variables y cada X tiempo transmitirlas por el bus SPI mediante el "for". También sería una buena opción crearte una funcion para enviar los datos y llamarla en el programa principal cuando fuera conveniente.

De todos modos, el envio de datos siempre te lo va a limitar el bus, tendras que respetar lo que te marquen las especificaciones, yo por mi parte las desconozco.

No se si es esto lo que preguntabas... no se... en fin... espero haberte ayudado.

Un saludo.


Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: Tx con SPI
« Respuesta #4 en: 13 de Diciembre de 2004, 13:11:00 »
No era eso lo ke buscaba exactamente pero eske tienes razon, he probado de varias formas y parece ser ke no se puede.Lo ke intentaba era encontrar una forma de usar la funcion spi_write() para ke se comportase de manera similar a la de printf().....pero lo ke no puede ser ,no puede ser!Giño

Lo voy a hacer de la forma ke has plateado ke esta bastante bien.

Gracias por tu ayuda oshow!
Un saludo!!

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Tx con SPI
« Respuesta #5 en: 13 de Diciembre de 2004, 13:37:00 »
y así ???
Codigo:

struct miestructura
{
   int temperatura;
   int puerto_a;
   char puerto_b;
}tipos_de_datos;



///////////////////////////////////

for(j=0;j<3;j++) SPI_WRITE(tipos_de_datos[j]);



Desconectado wofer

  • PIC12
  • **
  • Mensajes: 50
RE: Tx con SPI
« Respuesta #6 en: 15 de Diciembre de 2004, 13:21:00 »
no,asi tampoco.A ti te funciona de esa manera?El caso es ke el compilador si ke me lo acepta,pero luego no funciona.


Un saludo!

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: Tx con SPI
« Respuesta #7 en: 15 de Diciembre de 2004, 13:47:00 »
la idea era en el caso de que los bytes fueran correlativos en la ram .

struct miestructura {

char  temperatura;
char puerto_a;
char puerto_b;

 }tipos_de_datos;

Quizas así funcione con todo bytes .