www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny26 AD Wandler


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
also ich möchte gerne den AD Wandler im ATtiny26 nutzen und dazu habe
ich schon ins Datenblatt geschaut, aber wirklich durchsichtig ist das
für mich noch nicht geworden ...
Hat mir jemand einen Code-Fetzen mit dessen Hilfe es klarer werden
könnte, ich wäre auch niemandem böse wenn er es mir verbal erklären
würde.
Besten Dank

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

in bascom wäre das sehr simpel:

config adc = ... (diverse parameter möglich)
dim x as word    (16-bit variable)

do
   x = getadc(0)
   lcd "wert ";x (ausgabe auf's display)
   wait 1        (damit man auch lesen kann, sonst flackert's nur)
loop

feddich, das war's, nu haste alle sekunde den aktuellen wert auf'm
display
gruss, harry

Autor: Jens123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein kleiner schnipsel vom Mega16 sollte bei einer MC Uetwa gleich
sein..


//AD Wandler einschalten und Vorteiler setzen
ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS0);

ADMUX |= (1 << MUX0);         // AD Kanal auswaehlen
ADCSRA |= _BV(ADSC);          // ad wandlung starten
while ( ADCSRA & _BV(ADSC) ); // warten bis ad wandlung fertig ist
int_temp = ADCW;              // AD Wert kopieren

spannung = int_temp / 204.6;
dtostrf(spannung,7,7,buffer);
uart_puts(buffer);

Viel glueck =)

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zu dem Thema interessiert mich auch mal was...
aus irgendeinem Grund hatte ich immer "störungen" beim messen... also
die messwerte varrierten immer +-0,1 V. Ich glaube bei meiner ganzen
schaltung trat das phänomen auf. Wie bekomme ich das ganz
stabilisiert?

0,1 V sind z.B. bei Thermometer/Distanzmessung nicht gerade zu
vernachlässigen

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
könnte folgenden grund haben: in vielen applikationen wird eine
spannung per adc so gemessen:

1. adc konfigurieren
2. adc starten
3. adc auslesen
4. adc stoppen

wenn nun wie im datenblatt empfohlen ein kondensator am aref-pin hängt,
un die referenz zusätzlich zu beruhigen passiert folgendes:

adc starten - die aref lädt den kondensator, aber nur mit max 3 ma
d.h. es dauert einen moment bis die aref wirklich ihren endwert
erreicht hat.
also müsste zwischen punkt 2 und 3 noch ein wait eingebaut werden, so
hab ich messungen wesentlich stabiler hingekriegt. oder am anfang des
progs adc starten und nie mehr abschalten.
gruss, harry

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das ganze wie du beschrieben hast... adc läuft im freerun modus.
die "spannugs-unstabilität" beginnt schon bei vcc... also ich verwende
den 7805. am anfangdachte ich es liet an meinem billig messgerät, aber
genau diese ungenauigkeit spiegelte sich auch in den messungen vom avr
wieder... das rum-einern von vcc hab ich auch im unbelasteten zustand.
meine schaltung ist 12V --> 100 pf (folie/keramit) --> 100 nf (elko)
--> 7805 --> 100 nf (elko) --> 100 pf (folie/keramit) --> VCC
oder müssen die kondensatoren größer sein??

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die KerKos sollten 100nF sein. Und zwar vor dem 7805, dahinter und auch
direkt am MC. Dazu ein größerer Eklo (100µF oder mehr) vor dem 7805 und
nur ein kleiner Elko (<22µF) hinter dem 7805. Die Kerkos sollten
möglichst dicht an die 7805-Pins.
Aber auch durch ungünstig angeordnete Versorgungsleitungen (GND, +5V)
kann man die Stabilität negativ beeinflussen.

...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

im Appnote befindet sich auch eine Spule zwischen AVCC , vielleicht
hilft das weiter.

Ich hab nun einige AD Wandler Projekte hinter mir (µC:Mega8). Meistens
waren Stoerungen auf der AVCC Leitung. Mess doch am besten mal deine
VCC + AVCC Leitung mit einem Oszi. .

Mfg
Dirk

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also in Bascom is das ja so einfach daß ich es auch verstehe, nur das
wußte ich irgendwie auch schon vorher, der C-Fetzen ... Bahnhof und
Abfahrt, weil isch kann gar keine C :-)
Aber nicht so schlimm, weil:
1. adc konfigurieren
2. adc starten
3. adc auslesen
4. adc stoppen
hab ich verstanden.
Nur eine Frage hab ich irgendwie immernoch, ich stelle ein, daß er nur
eine Wandlung vornehmen soll, dann macht er das und fertig ist gibts n
Interrupt-Flag, ja und was mache ich dann damit?

Ich würde instinktiv 1. und 2. ausführen und dann solange stehen
bleiben, weil der µC eh sonst nix zu tun hat und warten bis das Flag
kommt und die Wandlung fertig ist und dann 3. und 4. ausführen, wobei
bei einer Single-Wandlung is stoppen ja hinfällig oder?

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du nur eine Messung willst, dann setzt du das ADFR-Bit (Free-Run)
nicht mit, wenn du ADEN (Enable) und ADSC (Start Conversion) setzt,
dafür das ADIE-Bit um den Int freizugeben. Richtig Sinn macht das aber
erst, wenn du den AVR während der Messung im Rauschunterdrückungsmodus
schlafen schickst.
In der ISR zum ADC liest du dann die Werte aus. Brauchst du eine neue
Messung, so muss ADSC auch neu gesetzt werden.

Wenn ich nur 8 Bit Auflösung nutze (was meist der Fall ist), dann lasse
ich den ADC im Hintergrund vor sich hin klappern und lese ihn dann aus,
wenn ich die Daten brauche. Dies ist dann meist in einem Timer-Int oder
in einem Programmteil, das durch ein Flag vom Timer-Int aktiviert wird.


Müssen mehrere Quellen gemessen werden, so stelle ich sofort nach dem
Auslesen die neue Quelle ein. Das macht sich gut im Timer-Int. Ein
Pointer merkt sich welche Quelle aktiv ist und zeigt gleichzeitig auf
Register oder SRAM, wo das Ergebnis abgelegt werden soll.
Bei Registerknappheit kann man die Quelle auch temporär aus ADMUX
lesen, die Zieladresse daraus bilden (Pointer) den Wert auslesen und
wegspeichern, die Quelle hochzählen (oder runter) und neu setzen. So
werden in der Timer-ISR nebenbei reiherum alle Werte aktualisiert. Das
Hauptprogramm nimmt diese dann bei Bedarf aus dem SRAM oder (wenn
verfügbar) einem Registerblock.

...

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.