ATTiny Standard AREF

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 ...

Sie erwähnen drei verschiedene Plattformen: ATtiny85, ATmega und Arduino. Sie sind eng miteinander verwandt, aber welches verwenden Sie? Bitte fügen Sie einen Link zum entsprechenden Datenblatt und den entsprechenden Teilen des Codes hinzu.
Wenn Sie vermuten, dass Ihre Annahme über die Standardreferenzspannung falsch ist, warum erzwingen Sie sie nicht explizit in Ihrem Code, es dauert nur ein paar Bytes.
Ich verwende einen ATTiny85, aber auf der Arduino-Code-Plattform. Ich weiß, dass es nur ein paar Bytes im Code benötigt, aber es nimmt einen ganzen E / A-Pin ein, den ich lieber verwenden könnte ...
Sie können es in wenigen Bytes auf die (angenommene) Standard-Vcc zwingen, ohne den Pin zu opfern.
Ok... kannst du mir sagen wie das geht? Alles, was ich weiß, ist, analogReference() aufzurufen, und keine der Optionen scheint das zu tun, was Sie vorschlagen.
AnalogReferenz (STANDARD) ? Die Referenz wird standardmäßig heruntergefahren. Es wird aktiviert, wenn der ADC aktiviert ist, und es hat eine Startzeit. Prüfen Sie auch, ob AREF für eine interne Spannungsreferenz mit externem Kondensator eingestellt ist . Überprüfen Sie das Datenblatt für das ADMUX-Register, Sie können das Register einfach mit schreiben ADMUX=n;. Überprüfen Sie dieses kleine Programm von mir, das Vcc als Referenz auf einem ATtiny13 verwendet: git.linformatronics.nl/gitweb/…
Ich bin davon ausgegangen, dass DEFAULT das war, worauf es eingestellt war, wenn Sie nichts getan haben, also musste es nicht manuell eingestellt werden?
Nur eine Möglichkeit herauszufinden, ob dies für die Programmierung von Tiny's über Arduino gilt. Ich habe keine Erfahrung mit dieser Methode, aber ich weiß, dass nicht alle Bibliotheken und Mechanismen mit allen Controllern funktionieren. Erwägen Sie einen Besuch im Chat: chat.stackexchange.com/rooms/15/electrical-engineering

Antworten (1)

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 ...ATTINY85 ADMUX-Register

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); 
...