www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC an ATtiny25


Autor: john (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche ein stark verauschtes, langsames (ewig high - 0.5sek bis 
einige sek Signal low - wieder ewig high) mittels ADC "auszulesen", dh 
ich muss eigentlich nur bei einem high-low Übergang gewissen Code 
ausführen.
Ursprünglich versuchte ich dies mit dem Analog Comparator - doch wegen 
dem starken Rauschen führte dies zu mehrfach auslösungen (die Flanken 
sind aufgrund von Kapazitäten leider auch nicht unendlich steil).
Ich verwende einen ATtiny25 mit dem Signal an ADC1 und folgendem code:

DDRB=0xfb;
ADMUX=0x81;
ADCSRA=0xe2;
ADCSRB=0x00;
DIDR0=0x04;     //ausschalten des Digitaleingangs von PB2/ADC1;

//// ADC-auslesen
        uint8_t adc=ADCH;
        if((adc|0x03)==0x03)       //oberer Bereich
        {
            bf0.adcLastTime=1;
        }
        else if((adc|0x03)!=0x02)  //unterer Bereich
        {
           ...
           bf0.adcLastTime=0;
        }


dies in einer Endlosschleife

da ich ja nur zwei Zustände habe sollten die 4 höchsten Bit ja genügen.

Aus irgend einem Grund funktioniert jedoch nichts (der ... code wird nie 
ausgeführt) - deshalb hab ich den Verdacht, dass der ADC gar nicht 
wirklich läuft ?!

vielen Dank bereits im Voraus

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gewöhn dir am besten gleich an, Konstanten für Steuerregister besser als 
Kombination der einzelnen Bits darzustellen, und dabei die von der 
avr-libc vordefinierten Namen zu verwenden.

Also z.B.
ADCSRA  = _BV(ADEN)  | _BV(ADPS1) | _BV(ADPS0) | _BV(ADIE); // Enable, clk/8 clock,IRQ

Dann sieht man gleich, welche Optionen aktiviert sind.
Ich zumindest hab jetzt keine Lust aus dem Datenblatt rauszufriemeln, 
was nun wohl ein 0xe2 im ADCSRA bewirkt.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann setz doch einfach einen analoges RC Glied davor.

Vlt, hilft das schon

Autor: john (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also - hab jetzt rausgefunden, dass die internen Referenzspannungen 
anscheinend von VCC her gerechnet sind und nicht von GND - deshalb hab 
ich diese jetzt ausgeschaltet, die neuen Register:

 ADMUX=0x01;
-> also Vcc als Ref-Spannung (REFS2=REFS1=REFS0=0)
-> ADLAR=0 richtet den gemessenen Wert so aus, dass die beiden höchsten 
Bit in ADCH an den Positionen 0 und 1 sind (so verstehe ich wenigstens 
das Datenblatt)
-> MUX3..0: 0001, also ADC1 als Input gewählt.

 ADCSRA=0xe0;
-> ADEN=1 : einschalten des ADC
-> ADSC=1 : starten des ADC
-> ADATE=1: autotrigger enabled
-> ADIE=0:  interrupt disabled
-> ADPSx=000: division factor 2

 ADCSRB=0x00;
alles 0, also free running mode!

ich hab diese sequenz nur beim initialisieren eingefügt!
ich nehme an, dass der ADC danach immer eingeschalten bleibt und die 
Werte ständig aktualisiert. ?
Oder muss ich vor jeder Messung den ADC starten?

Autor: john (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ACH!
ich bin ei depp!

if((adc|0x03)==0x03)

anstelle von

if((adc&0x03)==0x03)

ersteres ist natürlich immer TRUE

:)

es funktioniert immer noch ganz, aber das ist ein anderes Problem!

entschuldigt meine Dummheit!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.