Interfaz de MCP3302 ADC con ayuda de Arduino Micro SPI

Soy muy nuevo en el diseño de hardware y estoy haciendo un circuito de detección óptica usando un fotodiodo. Simplemente necesito interactuar con el fotodiodo y guardar los valores de voltaje de salida en Arduino IDE

Configuración de hardware:

  • Fotodiodo (BPW21R) conectado en arreglo de transimpedancia con resistencia de retroalimentación de 100K y amplificador operacional OPA350
  • La señal de salida del amplificador de transimpedancia está conectada a CH0 en el ADC (MCP3302)
  • El amplificador operacional y el ADC se alimentarán a + 5 V usando el pin de alimentación Arduino Micro

Conexiones ADC <-> Arduino Micro:

  • VDD y VRef <-> Pin de alimentación de +5 V
  • CS/SHDN <-> RX_LED/SS
  • DIN <-> MOSI
  • DOUT <-> MISO
  • CLK <-> SCK

ADC MCP3302 Microcontrolador Arduino

Mis dos preguntas son:

  • ¿Mis conexiones entre ADC y Arduino Micro son correctas para comunicarse por protocolo SPI?

  • En Arduino IDE, ¿cómo puedo editar el código para que Arduino Micro reciba datos del ADC por protocolo SPI y los muestre en el monitor serie?

    #incluir <SPI.h>

    configuración vacía () {

    pinMode(SS, OUTPUT);
    pinMode(MISO, OUTPUT);  
    
    digitalWrite(SS,HIGH);
    Serial.begin(115200);
    

    }

    ciclo vacío() { byte c;
    escritura digital (SS, BAJO);

    Serial.println(analogRead(MISO));
    
    digitalWrite(SS, HIGH);
    delay(100);
    

    }

¿Por qué estás usando un ADC externo con el Arduino? ¿Ha leído el archivo de encabezado de SPI.h para ver qué funciones están disponibles y qué pines se deben usar? ¿Su Arduino está funcionando a 5V o 3.3V?
El ADC externo proporciona una resolución más alta para mis necesidades y el Arduino está funcionando a +5V. Puedo usar los encabezados ICSP en Micro para SPI como se describe en SPI.h, sin embargo, ¿cómo puedo ajustar el código actual que tengo para recibir datos?

Respuestas (1)

Así NO es como funciona un SPI ADC.

Tu enfoque es mezclar los mundos digital y analógico de la manera más extraña posible.

El ADC externo almacena los bytes de datos en un registro después de que se muestrean los datos. Los valores deben consultarse utilizando los comandos apropiados a través de una biblioteca o un conjunto personalizado de instrucciones utilizando el protocolo de comunicación SPI.

La forma en que intenta leer el valor del ADC esperando un valor analógico en el pin MISO es simplemente incorrecta y no tiene sentido.

Lea el manual del dispositivo y descubra qué comandos necesita enviarle para solicitar los valores digitalizados.

Además, comprenda bien cómo funciona el protocolo SPI. Eso va a ser extremadamente útil.

Esta biblioteca podría ser de ayuda: https://github.com/bakercp/MCP3XXX

Reitero, como suelen decir muchos sabios: ¡RTFM!