ATTiny Default AREF

4

Estoy tratando de hacer que el Amplificador de Micrófono Electret de Adafruit funcione con un ATTiny85 pero tengo algunos problemas con el voltaje de referencia. Estoy usando un circuito de 5 V porque también estoy alimentando una tira de LED y estoy tratando de evitar que el circuito sea demasiado complicado con un montón de reguladores adicionales. Ya que el chip debería usar la tensión de alimentación como referencia por defecto, pensé que estaría bien si usara 5V en todo el tablero. Pero básicamente no recibo respuesta del micrófono cuando hago esto. Sin embargo, si conecto 5V a AREF y luego llamo analogReference (EXTERNAL), todo funciona bien.

¿Alguna idea de por qué este sería el caso? Esto va completamente en contra de mi comprensión (y experiencia) del AREF predeterminado en los chips ATMega.

Sería bueno poder usar ese pin AREF para otra cosa :)

Nota al margen: Voy a alimentar esto con baterías, ¿así que quizás lo necesite de todos modos? Pero una vez más, pensé que el modo predeterminado era usar VCC como referencia ...

    
pregunta Adam Haile

1 respuesta

2

¿Quizás esté cambiando el modo de referencia A / D en otra parte de su código? Puede volver a verificar esto agregando una llamada a analogReference(DEFAULT) justo antes de su llamada a analogRead() . Esto debería seleccionar Vcc como la entrada al A / D Mux en el ATTINY85 tal como esperaba.

Aquí está el registro ADMUX de la hoja de datos ATTINY85 ...

Aquí está el código relevante extraído de la biblioteca Arduino ...

#if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
65  #define DEFAULT 0
66  #define EXTERNAL 1
67  #define INTERNAL 2

uint8_t analog_reference = DEFAULT;

void analogReference(uint8_t mode)
{
        // can't actually set the register here because the default setting
        // will connect AVCC and the AREF pin, which would cause a short if
        // there's something connected to AREF.
        analog_reference = mode;
}

int analogRead(uint8_t pin)
{
        uint8_t low, high;

        if (pin >= 14) pin -= 14; // allow for channel or pin numbers

        // set the analog reference (high two bits of ADMUX) and select the
        // channel (low 4 bits).  this also sets ADLAR (left-adjust result)
        // to 0 (the default).
        ADMUX = (analog_reference << 6) | (pin & 0x07); 
...
    
respondido por el bigjosh

Lea otras preguntas en las etiquetas