Comunicarse con un SPI DAC

0

Estoy intentando conectar el TLV5606 con un mbed a través de SPI.

Las conexiones que he hecho son las siguientes:

Nota: mbed se alimenta desde la misma fuente de 5V.

HemodificadoelmbedSPIhelloworldprorgam:

#include"mbed.h"

SPI spi(p5, p6, p7); // mosi, miso, sclk
DigitalOut fs(p8);


int main() {
    fs = 0;

    uint16_t fixed = 0x4000;
    uint16_t value = 1024;

    value = value - 1 << 2;
    uint16_t final = fixed | value;


    spi.format(16,1);
    spi.frequency(1000000);



    fs = 1;

    fs = 0;

    spi.write(final);



    fs = 1;



}

Los primeros 4 bits (desde la izquierda) deben ser 0100, y los últimos 2 bits, 00. El valor de 10 bits se encuentra entre. Esto se explica en la hoja de datos ( enlace ).

He usado el patrón de bits 0x4000, y XOR lo hice con el valor de 10 bits, que se desplaza en dos. Esto debería resultar en un patrón de bits aceptado por el DAC.

Al principio, OUT, según lo medido por el voltímetro es de alrededor de 9mv (generalmente -9mv). Después de entre 5 y 20 segundos (aprox.), El voltaje aumenta a aproximadamente 1.6v, y una vez a 3.3v. Con un valor de 1024, se esperaría un valor cercano a 3.3v (la referencia). En ocasiones, el 1.6v aumenta hasta alrededor de 3.3v después de unos minutos. Además, después de haber aumentado a 1.6v o 3.3v, el voltaje a menudo bajará a 9mv después de algún tiempo.

Debo mencionar que no he usado un condensador en este circuito, aunque no creo que sea necesario probar la funcionalidad básica.

¿Alguna idea sobre qué está mal?

    
pregunta 19172281

2 respuestas

1

Tres temas se destacan en esto:

  1. final = fixed ^ (value << 2) te da 0x5000. Como final[12] es un "no importa", entonces en realidad está alimentando una escala cero a su DAC, que es lo que está observando. El error aquí es que la escala se ejecuta de 0 a \ $ 2 ^ N-1 \ $, por lo que necesita hacer value = 1023 << 2 y luego O junto con fixed (en lugar de XOR; no hay una diferencia en este caso pero esta es la forma segura de combinar dos valores). Debería estar enviando 0x4FFC para ir a la salida a escala completa.
  2. Usted dice que "no ha usado un condensador". Bueno, tienes que hacerlo! Como mínimo, su DAC debe tener un capacitor de derivación pequeño (10-220 nF) en \ $ V_ \ mathrm {DD} \ $. Nunca los excluya en circuitos digitales, elimine los problemas obvios primero, de lo contrario no podrá determinar de manera confiable qué está causando fallas.
  3. SPI es una molestia (no es un estándar adecuado, solo ad hoc ), pero creo que debería usar el modo 1, no el modo 2. Compare Figura 1 en la hoja de datos, con esta página del manual de mbed, y la siguiente imagen (de Wikipedia ). En el modo 1, la salida se actualiza en el flanco ascendente y se lee en el siguiente flanco descendente, que corresponde a la hoja de datos del DAC. Como se mencionó en los comentarios, juegue con esto, es un problema muy común en la configuración de SPI. No serás el primero o el último, ¡te lo prometo!

    
respondido por el awjlogan
0

Comprobando la hoja de datos de TLV5616 ( enlace ), este es el pinout I ver:

De acuerdo con las conexiones indicadas, ha conectado el pin 5 a 5V (debe ser analógico a tierra) y el pin 8 a tierra (debe ser VDD). Otras conexiones son incorrectas también.

O tu chip está completamente mal conectado o te confundiste al enumerar tus conexiones.

    
respondido por el Selvek

Lea otras preguntas en las etiquetas