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. Dado que el chip debería usar el voltaje de suministro como referencia de forma predeterminada, pensé que estaría bien usando 5V en todos los ámbitos. Pero básicamente no obtengo respuesta del micrófono cuando hago esto. Sin embargo, si conecto 5V a AREF y luego llamo a analogReference(EXTERNAL), todo funciona bien.
¿Alguna idea de por qué sería así? 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 tal vez solo lo necesito de todos modos? Pero nuevamente, pensé que el modo predeterminado era usar VCC como referencia...
¿Quizás está cambiando el modo de referencia A/D en algún otro lugar de su código? Puede 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 de 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);
...
yippie
yippie
adam haile
yippie
adam haile
yippie
ADMUX=n;
. Consulte este pequeño programa mío que usa Vcc como referencia en un ATtiny13: git.linformatronics.nl/gitweb/…adam haile
yippie