Autor Tema: ads7841 interface SPI al pic18f4450  (Leído 4872 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: ads7841 interface SPI al pic18f4450
« Respuesta #15 en: 08 de Diciembre de 2014, 19:50:39 »
como te diste cuenta en el datasheet que no toma ese bits?

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: ads7841 interface SPI al pic18f4450
« Respuesta #16 en: 08 de Diciembre de 2014, 21:13:01 »
Para que funcione bien utilizando el modo de 24 clock (Pagina 10 del data sheet), puedes hacerlo asi:
Citar
output_low(CS);
spi_write(159);
Temph=spi_read(0);//obtenemos el Temp alto del registro de temperatura
Templ=spi_read(0);//obtenemos el Temp bajo del registro de temperatura
output_high(CS);
Y aca haces el corrimiento
Luego haces esto:

Temph = Temph & 0x7F;
Templ>>=3;
temp16bits= make16(Temph,Templ);
Y listo!
Pruebalo y nos avisas.



Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: ads7841 interface SPI al pic18f4450
« Respuesta #17 en: 08 de Diciembre de 2014, 21:23:05 »


probe esto y anda:

Temph = Temph & 0x7F;
Temp16Bits=make16(Temph,Templ);//convertimos a un registro de 16Bits

Temp16Bits=Temp16Bits>>3;

temperatura=Temp16Bits*0.122;    /*   FACTOR DE CONVERSION=(5*100/4095)  */




« Última modificación: 08 de Diciembre de 2014, 21:27:30 por hernanutn »

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: ads7841 interface SPI al pic18f4450
« Respuesta #18 en: 08 de Diciembre de 2014, 21:24:00 »
probe esto y anda:

Temph = Temph & 0x7F;
Temp16Bits=make16(Temph,Templ);//convertimos a un registro de 16Bits

Temp16Bits=Temp16Bits>>3;

temperatura=Temp16Bits*0.122;    /*   FACTOR DE CONVERSION=(5*100/4095)  */


probe tu forma RALF2 y tambien anda..

Muchas gracias por la ayuda KILLERJC y RALF2
« Última modificación: 08 de Diciembre de 2014, 21:34:26 por hernanutn »

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: ads7841 interface SPI al pic18f4450
« Respuesta #19 en: 08 de Diciembre de 2014, 22:02:56 »
consulta, en la hoja de dato del 7841 dice que fsample max es de 200khz para +5 volts  y que la fclk=16xfsample=3.2MHz osea que la fclk para el adc sale del SPI_CLK_DIV_16 es decir   4Mhz/16=250Khz no?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ads7841 interface SPI al pic18f4450
« Respuesta #20 en: 08 de Diciembre de 2014, 23:06:34 »
como te diste cuenta en el datasheet que no toma ese bits?

The next twelve clock cycles accomplish the actual Analog-to-Digital conversion. A thirteenth clock cycle is needed for the last bit of the conversion result.

Para 12 bits necesitas 13 ciclos, es decir un ciclo de mas, si lo pensas para el de 8 bit, necesitarias 9.

consulta, en la hoja de dato del 7841 dice que fsample max es de 200khz para +5 volts  y que la fclk=16xfsample=3.2MHz osea que la fclk para el adc sale del SPI_CLK_DIV_16 es decir   4Mhz/16=250Khz no?

Eso que decis en ningun lado esta especificado como un maximo, sino que lo que decis esta dado como parametro para los graficos, es decir con esos valores se hicieron.

Creo que lo que tenes que respetar son los tiempos que te dan en la tabla VII ( http://www.ti.com/lit/ds/symlink/ads7841.pdf ) pagina 12.
La maxima velocidad de clock seria de 1/(tch + tcl) = 1/(300ns) = 3.33Mhz (Por eso se debe haber probado con 3.2Mhz) , de todas formas tenes que respetar los tiempos de conversion, etc etc etc. Siempre y cuando respetes los tiempos minimos deberia andar.
Por ahi tambien hay otros datos en las primeras tablas ( pagina 3 ) sobre "Multiplexer Settling Time" tambien deberias tenerlo en cuenta.

Y si con SPI_CLK_DIV_16, El Fosc esta dividido por 16, es decir 250Khz, podrias usar el DIV_4 y lo tendrias a 1Mhz sin problemas.

Del datasheet del PIC:

In Master mode, the SPI clock rate (bit rate) is user programmable to be one of the following:
• FOSC/4 (or TCY)
• FOSC/16 (or 4 • TCY)
• FOSC/64 (or 16 • TCY)
• Timer2 output/2
This allows a maximum data rate (at 48 MHz) of 2.00 Mbps.

No se como llega a 2.00 Mpbs, mis calculos me dan mal, de todas formas con el tiempo soy feliz.
« Última modificación: 08 de Diciembre de 2014, 23:19:54 por KILLERJC »

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: ads7841 interface SPI al pic18f4450
« Respuesta #21 en: 09 de Diciembre de 2014, 00:22:57 »
con respecto a como toma los bits viendo el grafico de tiempo figura 3 pag 10  el bits(MSB) se lee con el segundo pulso del  DCLK no?  con la configuracion SPI_L_TO_H xq el bits 11 comienza recien en la mitad del pulso 1 y lo podre leer en el pulso 2 digo para comprender el diagrama de tiempos  a lo mejor estoy diciendo cualquier cosa..

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ads7841 interface SPI al pic18f4450
« Respuesta #22 en: 09 de Diciembre de 2014, 04:49:29 »
con respecto a como toma los bits viendo el grafico de tiempo figura 3 pag 10  el bits(MSB) se lee con el segundo pulso del  DCLK no?  con la configuracion SPI_L_TO_H xq el bits 11 comienza recien en la mitad del pulso 1 y lo podre leer en el pulso 2 digo para comprender el diagrama de tiempos  a lo mejor estoy diciendo cualquier cosa..

Si yo no confiaria mucho en ese diagrama de tiempo sino en el figura 5 pagina 12. si te fijas ese esta mas detallado y pasa un ciclo completo y no a la mitad.
Y por lo que ves si. en ambos graficos hay como un ciclo de reloj de mas.
Sigo encerrado que te deberia andar con 2 ciclos de 8 bits (por que asi me anduvo ami el ADS7843 que es identico el datasheet y no requeri de rotacion), probaste con #define SPI_MODE_1  (SPI_L_TO_H) ? , es decir ponerle ese solo, suponiendo que el clock esta bien, entonces que haga el shift primero y luego latchee. Y con una sola lectura y no 2 (Podes dejar las 2 lecturas y solo mostrar lo que hay en la primer variable en el LCD).

SPI_L_TO_H
y
SPI_H_TO_L

Controlan la polaridad del clock, con SPI_L_TO_H el clk esta en bajo al comiento, y al reves con el otro.

SPI_XMIT_L_TO_H
y la ausencia del mismo controlan en que flanco se toma el dato.
Cuando esta definido latchea y luego hace un shift, si no esta definido hace el shift y luego latcha (si hace el shift primero y luego latchea estarias olvidandote de ese bit al comienzo que falta, por eso te decia que pruebes xD)

Desconectado hernanutn

  • PIC16
  • ***
  • Mensajes: 117
Re: ads7841 interface SPI al pic18f4450
« Respuesta #23 en: 09 de Diciembre de 2014, 11:22:52 »
da cualquier cosa  con solo SPI_L_TO_H, has usado el modulo usb del pic 18f4550? te pregunto xq para simularlo en proteus win7 64 bits es imposible hacerlo funcionar

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ads7841 interface SPI al pic18f4450
« Respuesta #24 en: 09 de Diciembre de 2014, 11:36:21 »
Si lo use, pero en el momento que hice algo con USB fue para la universidad y me exigian si o si Labview, entonces fue mas problematico Labview que el programa del PIC, y como todo se queria terminar rapido fue casi un copy/paste de algun ejemplo que habia por internet. Por eso no recuerdo nada de la experiencia y lo unico que recuerdo es haber peleado con el Labview, con todo eso no toque mas USB.


 

anything