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

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #30 en: 06 de Septiembre de 2009, 12:32:51 »
Ummm nop, creo que tiene que ver con la conexión de la LCD porque me dice que esa advertencia se produce cuano uno o más contenidos lógicos han ocurrido en una red especifica....



Y cuando clickeo la dirección me aparece uno de los bits en donde está conectada la LCD..




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 MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un ejemplo con SPI por favor.
« Respuesta #31 en: 06 de Septiembre de 2009, 12:40:51 »
Ok.

La idea del debugg del SPI sería visualizar los bytes necesarios para la configuración del dispositivo que tienes.

Por ejemplo, para una aplicación con un AD9833, necesitaba enviar los siguientes bytes de configuración: 21E8, 20E8 y C000. Estos bytes se deducen del datasheet. La idea es que lo visualizado en el SPI debugger sea igual:



Del datasheet también hay que sacar ciertos parámetros para configurar el debugger:



Saludos
« Última modificación: 06 de Septiembre de 2009, 12:44:28 por MLO__ »
El papel lo aguanta todo

Desconectado sycho

  • PIC16
  • ***
  • Mensajes: 195
Re: Un ejemplo con SPI por favor.
« Respuesta #32 en: 06 de Septiembre de 2009, 16:14:17 »
Preguntas para alguien que halla utilizado el SPI por SW:

¿Que velocidades de transmisión se pueden alcanzar ?

Yo he programado rutinas de bit banging para SPI por software en C18.
La velocidad máxima que he conseguido es de unos 200kbps en un PIC18F2520 corriendo a 20MHz, pero al final he terminado utilizando velocidades de 40kbps introduciendo delays en varios puntos (hasta ahora no he tenido que programar nada crítico en cuanto a tasa binaria)

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #33 en: 06 de Septiembre de 2009, 23:51:41 »
Pero esos bytes los enviabas por el programa, es decir, en el C le dabas instrucciones de mandar esos bytes antes de enviar los datos que querías???


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 sycho

  • PIC16
  • ***
  • Mensajes: 195
Re: Un ejemplo con SPI por favor.
« Respuesta #34 en: 07 de Septiembre de 2009, 05:15:43 »
Pero esos bytes los enviabas por el programa, es decir, en el C le dabas instrucciones de mandar esos bytes antes de enviar los datos que querías???

No entiendo tu pregunta.

Yo hice una función que envía un máximo de 16bits seguidos, por ejemplo:
sendSPI(datos,longitud);

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un ejemplo con SPI por favor.
« Respuesta #35 en: 07 de Septiembre de 2009, 13:24:40 »
Pero esos bytes los enviabas por el programa, es decir, en el C le dabas instrucciones de mandar esos bytes antes de enviar los datos que querías???

Si claro, los enviaba con las funciones de transmisión del SPI, esos datos eran para configurar el dispositivo.

Saludos
El papel lo aguanta todo

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #36 en: 07 de Septiembre de 2009, 16:32:57 »
Ummm o.k.... rayos!!!!

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 Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #37 en: 15 de Septiembre de 2009, 18:31:35 »
Hola muchachos, bueno he estado trabajando en lo del SPI a ver si logro solucionar algo,
pero la verdad es que no me funciona... Ya tengo las ideas agotadas... Yo pienso que las instrucciones
del programa están bien... Por lo menos ahora estoy usando está función para enviar los datos al DAC,
pero igual no consigo enviar nada!

unsigned char SPI_Envia ( unsigned char m);

unsigned char SPI_Envia ( unsigned char m)
 {
    SSPBUF = m;    // Envia dato
    while (! BF ); // Espera a que se transmita
    return SSPBUF ;
 }


y para enviar le dato hago esto:

           set_adc_channel(0);                // Lee el canal AN0 (Señal del sensor 1)
                     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
                     //spi_write(ADC);
                     m=ADC;
                     SPI_Envia ( m );             // Envía dato
                     delay_us(200);

Me he leido el dataheet del dac a ver si hay que enviar una palabra o una dirección para habilitar el dispositivo o algo,
pero nada no me dice nada...

Coloque el SPI Debugger en el proteus y me sale la imagen que tengo en Zip...

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 MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un ejemplo con SPI por favor.
« Respuesta #38 en: 15 de Septiembre de 2009, 22:17:04 »
Hola.

Pues, comparándolo con el gráfico que yo postee, podría concluir que el micro no esta enviando ningún dato, solo se ven ?? ??. Pense que estabas usando la función spi_write();.

Hay que verificar también la habilitación y deshabilitación de la transmisión.

Saludos
El papel lo aguanta todo

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #39 en: 16 de Septiembre de 2009, 00:21:12 »
Si estaba usando esa pero en vista de que no funcionaba pues empece a realizar rutinas a ver si conseguia enviar algún datico aunque sea un bitsito pero nada vale!!! :( Bueno con resecto a la habilitación de la transmisión, si está habilitada (valga la redundancia) porque el bit SSPEN del registro SSPCON, es decir el bit de habilitación lo tengo en uno (habilitado), y en proteus echo un vistazo a ese registro y en efecto me aparece habilitado... Si te das cuenta en la imagen que subi a una esquina en la parte inferior izquierda de la imagen se notan los registros en la simulación es decir a SSPSTAT y SSPCON, bueno en el segundo ese único bit activo le pertenece a SSPEN...

Atte: Enigma... La llenrita 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 MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Un ejemplo con SPI por favor.
« Respuesta #40 en: 16 de Septiembre de 2009, 00:50:16 »
Hola.

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.

Saludos
El papel lo aguanta todo

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #41 en: 16 de Septiembre de 2009, 01:15:51 »
Ahhh o.k entiendo tu me dices el pin de habilitación del DAC?? Bueno, ese se habilita con un cero... y bueno lo puse a tierra, es decir, habilitado siempre, como es el único dispositivo que tengo por el SPI no hay problema con una colisión... Además que los pines del micro se me agotaron...

Es eso a lo que te refieres?

Atte: Enigma... La llenrita 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 #42 en: 16 de Septiembre de 2009, 01:28:33 »
El siguiente ejemplo por ejemplo saca por Vout 1Volt, con REFIN = 1.5V:

Código: C
  1. #define DA_SCL PIN_B0
  2. #define DA_SDO PIN_B1
  3. #define DA_SDI PIN_B2
  4. #define DA_CS PIN_B3
  5.  
  6. #use spi(MASTER,CLK=DA_SCL, DO=DA_SDO, DI=DA_SDI, BITS=16, MODE=3, MSB_FIRST, stream=DA_spi, FORCE_SW)
  7.  
  8. void main()
  9. {
  10.    output_low(DA_CS);
  11.    spi_xfer(DA_spi,0x0554);/* |4 bits dummy|10bits DA|2 bits x */
  12.    output_high(DA_CS);
  13. }

No contesto mensajes privados, las consultas en el foro

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Un ejemplo con SPI por favor.
« Respuesta #43 en: 16 de Septiembre de 2009, 03:49:02 »
Hola chicos, aquí presento avances:

Bueno con el aporte del señor Suky, pues he logrado que el SPI se me encienda como se ve en la figura!!!
Pero aún sigue sin dar voltaje de salida... que raro no? (Tono Ironico) :?

Ahora, yo asumi que la dirección que mandabas en tu programa Suky es una dirección para decirle al DAC que va a recibir un dato!! o me equivoco?

En la figura anexada en .rar pueden apreciar lo que ha sucedido...

Que código use??, pues hice unos cuantos cambios y con todos probe y lo único que pude lograr fue que el SPI encendiera:

Cabecera:

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

int16 ADC;
float dato;

Con está instrucción me prendio en SPI sin mostrar datos a la salida:


           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
                     spi_write(0x0554);
                     while (! BF ); // Espera a que se transmita
                     spi_write(ADC);
                     while (! BF ); // Espera a que se transmita
                     delay_us(200);

Con está hacía lo mismo, pero en proteus se me venian todos estos mensajes... (Los que se observan en dibujo1)... Me ignoraba la data enviada... :?

           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
                     c=ADC;
                     SPI_Envia (c,0x0554 );             // Envía dato
                     delay_us(200);

Donde:

unsigned char SPI_Envia ( unsigned char c,unsigned int dir);

unsigned char SPI_Envia ( unsigned char c,unsigned int dir)
 {
    SSPBUF = 0x0554;    // Envia dato
    while (! BF ); // Espera a que se transmita
    SSPBUF =c;
    while (! BF ); // Espera a que se transmita
    return SSPBUF ;
 }

Con está me dió un error de compilación...

           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
                     SPI_XFER(c,0X0554);
                     delay_us(200);

ERROR: STREAM MUST BE A CONSTANT IN THE VALID RANGE...


Por cierto una pregunta, es necesario activar y desactivar el DAC, no se puede dejar activado todo el tiempo, así como lo tengo en mi diagrama, es decir, con el CS puesto a tierra?

Por cierto el voltaje de referncia es de 2V...

Y bueno disculpen tanta molestia e insistencia con este tema, pero es que no me quiero quedar tranquila hasta saber que está transmisión haya funcionado... Ya se me convirtio en una meta jejeje :mrgreen:


Atte: Enigma... La llenrita de Guayana  :?
« Última modificación: 16 de Septiembre de 2009, 04:02:23 por Enigma »
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 #44 en: 16 de Septiembre de 2009, 09:30:59 »
Lo que te esta faltando es la acción sobre el pin CS del conversor. Este pin en condiciones normales debe estar en high, cuando se carga un valor se lo coloca en low, y luego se lo reestablece, en ese momento comienza la conversión y se muestra el valor.


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


 

anything