[Attiny24, avr-gcc] Problem mit Vcc-Messung

Gast #1595107
Hallo,

im Folgenden ein Rumpfprogramm, mit dem sich das Problem nachweisen 
lässt, auf dessen Ursache ich einfach nicht komme:

*Idee*: Attiny24 misst eigene Vcc; also: Aref=Vcc (REFS0 und REFS1=0), 
ADMUX steht auf Bandgap reference (ADMUX=0b100001) (etwa 1.1V beim 
Attiny24).

*Randbedingungen*:
 - Compiliert mit WinAvr-20090313, -Os
 - Attiny läuft mit ext. 4MHz Quarz
 - Fuses (wie für das Projekt nötig, wo ich diese Messung einsetzen
     möchte): RSTDISBL programmiert, SPIEN nicht programmiert, EESAVE
     programmiert, externer XTAL 3-8MHz, Startup: 64ms+14ck, BOD aus
     (habe es auch mit BODLEVEL=2,7 und BODLEVEL=4,3 versucht)
 - LED mit R an PA0 gegen Masse

Ich erwarte, dass die LED bei einer Betriebsspannung unter 4V an und 
sonst aus ist. Sie leuchtet aber im gesamten Bereich (3-5V getestet)! 
Was habe ich übersehen?

PA0 sollte bei REFS0=REFS1=0 (Aref=Vcc) doch vom ADC abgekoppelt sein, 
so dass ich den Pin als Ausgabe benutzen kann, oder verstehe ich das 
nicht richtig?
1
#include <inttypes.h>
2
#include <io.h>
3

4
#define LED_        PA0 // 
5

6
// returns 0 if Vcc > 4V else !=0
7
uint8_t supply_voltage_check(void) {
8
        ADMUX=0b100001; // Aref=AVcc, input: 1.1V reference
9
        ADCSRB=1<<ADLAR; // 10 bits would be overkill...
10
        ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADPS2); // F_CPU/16=250kHz
11
        while (ADCSRA&(1<<ADSC)) {}; // wait to complete
12
        uint8_t adh=ADCH;
13
        ADCSRA=0;
14
        return (adh > (uint8_t)(256.*(1.1/4.))); // 256*Vint/Vthresh
15
}
16

17

18
int main(void) {
19
    
20
    DDRA=(1<<LED_);
21

22
    do{
23
        if (supply_voltage_check()) PORTA|=1<<LED_; else PORTA&=~(1<<LED_);
24
    } while(1);
25

26
}
Gast
Auah ... es lag die falsche Spannung an -- mea culpa -- in eine Ecke 
verkriech! Hatte schon heute früh mehrere Stunden danach gesucht, aber 
übersehen, dass ich die Spannung am Netzteil und nicht an den Pins des 
Controllers gemessen habe (mehrere Spannungen, die die Schaltung 
versorgen). Tut mir leid, Euch hier mit diesem Schein-Problem belästigt 
zu haben.
Gast
Freut mich, dass Du das so positiv siehst, Stefan. Ich war gestern 
ziemlich angenervt, als die Sache nicht laufen wollte, und dachte, ich 
finde den Fehler, wenn ich den relevanten Programmteil extrahiere (so 
ist es auch dazu gekommen, dass kein Dummy-Read zu sehen ist...) und 
hier erkläre. Ich habe mich schwergetan, den Beitrag tatsächlich 
abzusenden. Und dann der Reinfall, bei der Hardware etwas übershen zu 
haben! Grrr!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.