TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: fitson en 25 de Diciembre de 2020, 13:03:40
-
Buenas,
Estaba en busca de un ADC externo y encontré el MCP3008. Después de leerme el datasheet me ha surgido una duda que me gustaria poder resolverla.
En principio como indica el datasheet el adc es capaz de alcanzar una tasa de muestro de fs=200ksps utilizando una tasa de CLK equivalente a fcclk= 18*fsample.
(https://i.ibb.co/2ZT0td7/Captura.png)
Si el chip opera a 5V con una frecuencia máxima de 3.6MHz podemos llegar a la fs=200ksps, todo indica que el chip necesita 18 instrucciones de reloj para realizar una muestra. Ahora con los pics únicamente podemos enviar por SPI 8 bits de golpe y por ende para una muestra necesitariamos más de 18 instrucciones, 24 instruccciones aprox. lo que reduce bastante la tasa de muestreo
a 15ksps.
(https://i.ibb.co/ypzXr40/Captura2.png)
¿Existe alguna forma de poder enviar 1 simple bit sin gastar 8 frecuencias de reloj?
-
Se me ocurre que inicies “a mano” y luego sigas con el módulo SPI.
Sería por ejemplo creando una rutina que haga lo siguiente:
-Desactivas primero el módulo spi. Entonces los pines SDO y CLK serían pines normales previamente configurados como salida.
El diagrama que has puesto es para SPI en modo 0,0 (ten eso en cuenta).
-Pones CLK a nivel bajo para dejarlo preparado.
-Pones SDA a nivel alto para dejar preparado el bit START
-Pones CS a nivel bajo (Activas el chip).
-Esperas el tiempo que el datasheet te diga que hay que esperar desde CS hasta el primer flanco de reloj.
-Pones CLK a nivel alto (el bit start comienza)
-Ahora activa el módulo SPI del pic en modo 0,0
Envía un byte que debe contener:
Bit7: STL/DIF
Bit6/4: D2,D1,D0
Bits3/0: todos a cero.
- recibe el dato que habrá recibido el pic. Contendrá el NULL que te ha enviado el adc seguido de los dos bits de mayor peso del resultado de la conversión. Bits 9 y 8.
- envía otro byte con el valor que quieras (es indiferente)
- recibe el dato que habrá recibido el pic. Contendrá los 8 bits de menor peso del valor de conversión.
- Construye una variable de 16 bits y pásale esos 10 bits y listo.
- Vuelve a desactivar el módulo SPI para la próxima captura.
Y poco más. Sigue sin ser lo ideal pero así ganas bastante.
Un saludo.