Ich versuche, den Adafruit Electret-Mikrofonverstärker dazu zu bringen, mit einem ATTiny85 zu arbeiten, habe aber Probleme mit der Referenzspannung. Ich verwende eine 5-V-Schaltung, weil ich auch einen LED-Streifen mit Strom versorge und versuche, die Schaltung nicht mit einer Reihe zusätzlicher Regler zu kompliziert zu machen. Da der Chip standardmäßig die Versorgungsspannung als Referenz verwenden sollte, dachte ich, dass es mir gut gehen würde, 5 V auf der ganzen Linie zu verwenden. Aber ich bekomme im Grunde keine Antwort aus dem Mikrofon, wenn ich das tue. Wenn ich jedoch 5V an AREF anschließe und dann analogReference(EXTERNAL) anrufe, funktioniert alles einwandfrei.
Irgendwelche Gedanken, warum dies der Fall wäre? Dies widerspricht völlig meinem Verständnis (und meiner Erfahrung) der Standard-AREF auf den ATMega-Chips.
Es wäre schön, diesen AREF-Pin für etwas anderes verwenden zu können :)
Nebenbemerkung: Ich werde das mit Batterien betreiben, also brauche ich es vielleicht trotzdem? Aber noch einmal, ich dachte, der Standardmodus wäre, VCC als Referenz zu verwenden ...
Vielleicht ändern Sie den A/D-Referenzmodus an einer anderen Stelle in Ihrem Code? Sie können dies überprüfen, indem Sie analogReference(DEFAULT)
kurz vor Ihrem Anruf einen Anruf an hinzufügen analogRead()
. Dies sollte Vcc als Eingang zum A/D-Mux auf dem ATTINY85 auswählen, genau wie Sie es erwartet haben.
Hier ist das ADMUX-Register aus dem ATTINY85-Datenblatt ...
Hier ist der relevante Code aus der Arduino-Bibliothek....
#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);
...
Jippie
Jippie
Adam Haile
Jippie
Adam Haile
Jippie
ADMUX=n;
. Überprüfen Sie dieses kleine Programm von mir, das Vcc als Referenz auf einem ATtiny13 verwendet: git.linformatronics.nl/gitweb/…Adam Haile
Jippie