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
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
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 =)
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
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
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??
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. ...
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
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?
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. ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.