Autor Tema: Un ejemplo con SPI por favor.  (Leído 20225 veces)

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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un ejemplo con SPI por favor.
« Respuesta #45 en: 16 de Septiembre de 2009, 10:43:05 »
Me refiero a habilitarla por medio del pin respectivo del dispositivo SS. La rutina de envío que yo uso habilita primero la linea SS, luego uso la función spi_write(); para enviar el dato y al final, deshabilito la linea SS.

Según el datasheet, se debe configurar el IDLE en alto o bajo.

El papel lo aguanta todo

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Un ejemplo con SPI por favor.
« Respuesta #46 en: 16 de Septiembre de 2009, 18:03:15 »
Hola
Mira por lo que e leído en el hilo, lo que  tratan de decirte es que tu error es tener
Permanentemente el pin cs a tierra, ya que para el correcto funcionamiento del dispositivo requiere una transición por ese pin de high a low o  de low a high  según indique la data.
Suerte  ;-)

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #47 en: 16 de Septiembre de 2009, 22:45:21 »
Hola chicos he aquí los avances..... :g)

Bueno gracias a su gentil ayuda y a mi perseverancia y preguntadera...tantatatatannn...
HE LOGRADO COMUNICARME VIA SPI!!! :mrgreen: Yuuuupi!!! jejejeje :-/

Pero lo he logrado usando la función que les escribi en e otros post, la de SPI_Envia (c)...
y miren los resultados... (Imagen 1, llamada Dibujo2) ;-)

#use spi(MASTER,CLK=PIN_B4, DO=PIN_B2, DI=PIN_B1, BITS=16, MODE=3, MSB_FIRST, FORCE_SW, stream= BUSSPI)

Hago esto:
                     set_adc_channel(0);                // Lee el canal AN0 (Señal de la RTD)
                     delay_us(10);                      // Demora para capturar bien el dato
                     ADC=read_adc();                    // ADC=dato digital del ADC
                     dato=((float)ADC*5)/255;           // Convierto a analógico 
                     RA5=0;                             // Habilito dispositivo DAC
                     c=ADC;
                     SPI_Envia (c);                     // Envia dato
                     RA5=1;                             // Deshabilito dispositivo DAC
                     delay_us(200);
                     .
                     .
                     .

Y así va, lee el ADC luego en envia por el SPI, eso es lo que hace esa rutina...


Ahora, intente hacerlo con el SPI_Write, y pues solo me escribe el dato en la primera
vuelta, ya cuando el programa hace la segunda vuelta pues, solo activa y desactiva el DAC, pero
no envia datos!!! ummmm....(Imagen 2, llamada Dibujo3)


#use spi(MASTER,CLK=PIN_B4, DO=PIN_B2, DI=PIN_B1, BITS=16, MODE=3, MSB_FIRST, FORCE_SW, stream= BUSSPI)

Hice esto:
                       set_adc_channel(0);                // Lee el canal AN0 (Señal de la RTD)
                     delay_us(10);                      // Demora para capturar bien el dato
                     ADC=read_adc();                    // ADC=dato digital del ADC
                     dato=((float)ADC*5)/255;           // Convierto a analógico
                     RA5=0;
                     spi_write(ADC);
                     delay_us(200);
           .
                     .
                     .

Con el SPI_XFER(); pues ni siquiera envia el dato, solo habilita y deshabilita el dispositivo,
no se si es que estoy haciendo alguna mala acción con estas instrucciones....

#use spi(MASTER,CLK=PIN_B4, DO=PIN_B2, DI=PIN_B1, BITS=16, MODE=3, MSB_FIRST, FORCE_SW, stream= BUSSPI)

Hice esto:

set_adc_channel(0);                // Lee el canal AN0 (Señal de la RTD)
                     delay_us(10);                      // Demora para capturar bien el dato
                     ADC=read_adc();                    // ADC=dato digital del ADC
                     dato=((float)ADC*5)/255;           // Convierto a analógico
                     RA5=0;
                     spi_XFER(ADC);
                     delay_us(200);
           .
                     .
                     .

Y bueno creo que desde que me empezo a comunicar el SPI, pues creo que todo mi problema se centraba en que siempre dejaba encendico el DAC..
Y bueno gracias a ustedes salí de ese hueco.. Ahora lo que me toca es saber porque el DAC me saca ta poquito voltaje a su salida
cuando le estoy metiendo 5V a la entrada... :?

Atte: Enigma... La llanerita de Guayana ;-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Un ejemplo con SPI por favor.
« Respuesta #48 en: 22 de Septiembre de 2009, 09:11:51 »
Disculpa por la demora en contestar. Me alegro que hayas logrado hacer funcionar el código pero deben quedarte las cosas claras. La función SPI_Envia lo realiza mediante hardware pero en #use spi indicas que es por software, ten cuidado en eso.

Luego si escribes solo spi_XFER(ADC); no te va a enviar nada! Fíjate como lo utilizo:

Código: C
  1. spi_xfer(DA_spi,0x0554);/* |4 bits dummy|10bits DA|2 bits x */

Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything