Hallo allerseits, ich möchte gerne eine Temperatur mit Hilfe eines Spannungsteilers messen. Angeschlossen habe ich alles wie im Bild im Dateianhang dargestellt. Mein Problem ist, dass der AD-Converter mir immer ein und die selbe Zahl liefert, auch wenn ich R(T) entferne und somit den Stromkreis des Spannungsteilers unterbreche. Sieht jemand wo mein Fehler ist oder hat zumindest Vermutungen? Hier noch der Quelltextausschnitt: unsigned short ADC_Val; ADMUX = 0b11000000; // RefVoltage 2,56V, Quelle C0 ADCSRA = 0b11100010; // ADC ON, START, FREE RUNNING, INTERRUPT DISABLE, PRESCALE 4 while(1) { while(!(ADCSRA &= 0b00010000)){} ADC_Val = ADCL; ADC_Val += (ADCH << 8); ...
ARef und AVcc sollten richtig angeschlossen sein. siehen Datenblatt.
2961 wrote:
> ARef und AVcc sollten richtig angeschlossen sein. siehen Datenblatt.
Sind sie doch (zumindest so, dass es funktionieren sollte). AREF über
Kondensator an GND, AVCC an VCC. Gibts nix dran auszusetzen.
@Kostja:
Welche "Zahl" liefert er denn? Überprüf mal, ob die Spannung am Eingang
nicht immer über 2,56 V ist. Außerdem: Du liest ADCL und ADCH zwar in
der richtigen Reihenfolge ein, aber nimm trotzdem besser das
16-Bit-Register ADC (oder ADCW), da brauchste Dir keine Gedanken um die
richtige Reihenfolge zu machen (Voraussetzung ist natürlich, dass Dein
Compiler ein 16-Bit-Register zur Verfügung stellt, ist aber bei allen
mir bekannten Compilern der Fall).
Bitte prüfe auch ob die Spanung an AREF ca 2,56V ist. Mit welchem Takt läuft dem µC? GGF solltest du ADIF beim Init mit einer 1 zurücksetzten.
Von Seite 6: AVcc AVCC is the supply voltage pin for the A/D Converter, Port C (3..0), and ADC (7..6). It should be externally connected to V CC , even if the ADC is not used. If the ADC is used, it should be con-nected to V CC through a low-pass filter. Note that Port C (5..4) use digital supply voltage, VCC . In der Tat, ARef ist hier anders als bei den Groesseren angeschlossen.
2961 wrote:
> In der Tat, ARef ist hier anders als bei den Groesseren angeschlossen.
??? Was willst Du damit sagen?
Und der Filter am AVCC ist eine Empfehlung, kein muss. Funktionieren tut
es i.d.R. auch ohne.
Wegen dem LC filter an AVCC: Wenn man auf die letzen 1-2 bits des ADC Ergebnisses keinen wert legt, geht es ohne. Wenn doch sollte man die 10µH + 100nF einbauen. Dann aber bitte auch den Spannungsteiler aus AVCC versorgen, sonst bringt das nicht viel.
Danke für die zahlreichen Antworten. Hab zuerst gar nicht dran gedacht dass es vielleicht wichtig sein könnte aber. Der µC sollte ursprünglich mit 3686400 Hz laufen, hab mich bei der Beschaltung an einer anderen Schaltung orientiert wo vom Quarz nach Masse zwei Kapazitäten von 22pF lagen. Jedoch hab ich das übersehen und hab statt dessen 100nF eingelötet wodurch der µC mit 3686400 nicht lief. Um die Schaltung trotzdem testen zu können und weil ich 22pF grad nicht da hab, hab ich den Takt auf den internen RC-Oszillator 1MHz umgeschaltet. Kann es sein dass es deshalb Probleme gibt da der Quarz an die entsprechenden Pins des µC noch angeschlossen ist? Es wird die Zahl 968 zurückgeliefert Die Messspannung liegt bei ca 2.00 V An ARef hab ich etwas über 0V gemessen
Wenn der AVR auf internem Takt steht, ist ihm der Quarz egal. Der Takt von 250kHz ist etwas hoch, aber unkritisch. Dein Problem liegt hier: >>An ARef hab ich etwas über 0V gemessen Laut deiner ADMUX einstellung (REFS[1:0] = 11) >>ADMUX = 0b11000000; // RefVoltage 2,56V, Quelle C0 solltest du da 2,56V haben.... Ich Tippe mal auf einen Kurzschluss in deiner Schaltung der AREF gegen Masse zieht.
Hmmmm, nein einen Kurzschluss zwischen ARef und Masse gibt es nicht. Ich stell mal die ganze Schaltung und den Quelltext rein, vielleicht fällt einem geschulten Auge was auf. Gemesen wird die Spannung die an R3 (unten mitte) abfällt.
Es gibt aber schon noch eine GND Rueckseite auf der Leiterplatte ? Gemaess Datenblatt sollen an ARef 2.56V hochohmig zur Verfuegung stehen.
Unabhänig davon das ich die Isolationsabstände zwischen dem 220V(?) und dem Rest für sehr gefährlich halte und auch die Leiterbahnbreite zu gering für eine 8A Sicherung ist, musst du für die korrekte Funktion des ADC eine AREF haben (meine irgendwo gelesen zu haben das die >= 2V sein muss). Der ADC misst nur zwischen Masse (ADC[H:L] = 0) und AREF (ADC[H:L] = 1023). Solange du also keine vernünftige AREF hast, funktioniert das nicht. Zum testen könnte man ADMUX mal auf 0b01000000 stellen. Dann sollte AREF = AVCC also 5V sein (C4 auslöten und messen). Vieleicht ist ja auch der ADC im AVR defekt. Ausserdem würde ich in der For-schleife noch ein asm volatile ("nop"); empfehlen. Sonst wird die je nach eingestellter Optimierung weggelassen.
...die Isolierabstände sind nicht nur sehr gefährlich, sondern lebensgefährlich und wider jegliche Vorschriften! @Kostja: Schau Dir unbedingt mal die Platine eines Schltnetzteiles an, wie man sowas richtig macht und informiere Dich über die einzuhaltenden Luft- und Kriechstrecken. Die Zeitschrift Elektor hat IIRC auch in jeder Ausgabe eine Seite zu dem Thema.
Da hat's noch Netz drauf ? Scheint so. Sowas mach man nie ! Nie ! Nie ! Immer ein externen Steckernetzteil einplanen. Weshalb ? Sobald man Netz drauf hat, gelten zu Recht andere Vorschriften. Ein Steckerneztteil kostet 4 Euro und man ist die Sorge los.
Keine Sorge die Isolationsabstände habe ich anschließend mit Paint nachbearbeitet (ich weis man kann sie zwar auch von vornherein im Layouteditor einstellen aber sei es drum). Was die Breite der Leitungen angeht die hohe Ströme führen, so hab ich an diese zusätzlich dickes Kupferdraht rangelötet. @ Tim >>... >>musst du für die korrekte Funktion des >>ADC eine >>AREF haben (meine irgendwo gelesen zu haben das die >= 2V sein muss). >>Der ADC misst nur zwischen Masse (ADC[H:L] = 0) und AREF (ADC[H:L] = >>1023). Mir fehlen wohl grundlegende Kenntnisse was den ADC angeht. Deine Erläuterung verstehe ich nicht. Ich hab angenommen das der µC bei meinen Einstellungen die 2.56V Referenzspannung intern zur Verfügung stellt (sowie AVCC bei entsprechenden einstellungen) so dass ich quasi keine Referenzspannung an den µC-Pin ARef anlegen brauche und diesen Pin stattdessen über eine Kapazität mit GND verbinde. Das ist wohl nicht der Fall nicht wahr?
Kostja wrote: > Ich hab angenommen das der µC bei meinen Einstellungen die 2.56V > Referenzspannung intern zur Verfügung stellt (sowie AVCC bei > entsprechenden einstellungen) so dass ich quasi keine Referenzspannung > an den µC-Pin ARef anlegen brauche und diesen Pin stattdessen über eine > Kapazität mit GND verbinde. > > Das ist wohl nicht der Fall nicht wahr? Doch, genau so ist es. Bei korrekter Konfiguration stellt der µC die Referenzspannung intern zur Verfügung. Diese kann beim ATMega8 wahlweise AVCC oder 2,56 V betragen. Nur wenn eine nicht intern zur Verfügung stehende Referenzspannung verwendet werden soll (bzw. wenn die Genauigkeit der internen Referenz nicht ausreicht, was bei den AVRs durchaus der Fall sein kann), dann muss man eine externe Referenzspannung anlegen. Bei Verwendung einer internen Referenz sollte diese mit einem kleinen Kondensator am AREF-Pin stabilisiert werden. @Tim: Bitte erkundige Dich erst, bevor Du dem OP erzählst, er müsse eine externe Referenz anschließen. Ist alles oben schon durchdiskutiert worden.
>>Ich hab angenommen das der µC bei meinen Einstellungen die 2.56V >>Referenzspannung intern zur Verfügung stellt (sowie AVCC bei >>entsprechenden einstellungen) so dass ich quasi keine Referenzspannung >>an den µC-Pin ARef anlegen brauche und diesen Pin stattdessen über eine >>Kapazität mit GND verbinde. Das ist so vollkommen richtig. Das Pin AREF ist intern immer mit dem ADC verbunden und definiert das Ende des Messbereiches (Der Anfang ist auf Masse festgelegt). Nun gibt es 3 möglichkeiten eine Spannung an AREF anzulegen: 1. Interne Erzeugung auf 2,56V mit ext. Kondensator. 0b11... 2. Interne Brücke auf AVCC mit ext. Kondensator. 0b01... 3. Einspeisung einer externen AREF. 0b00... Im 1. und 2 . Fall wird ein Kondensator an AREF angeschlossen um die interne Referenzspannungsquelle zu stabilisieren. Nur im 3. Fall wird die Referenzspannung extern produziert und dann eingespeist. Das macht aber so gut wie niemand. D.h. wenn dein Programm im AVR läuft und die interne AREF Erzeugung aktiv ist must du da entwerder 2,56V oder 5V messen (Je nach einstellung). Wenn nicht fehlt dem ADC die Grundlage zum arbeiten.
Nachtrag: Es war keine absicht von mir dem OP eine externe einspeisung der AREF einzureden. Sorry, wenn das flsch rübergekommen ist. In seiner Schaltung und seinem Setup sollte die Intern erzeugt werden (2,56V). Aber das scheint ja irgendwie nicht zu klappen da er nur etwas über 0V an AREF hat.
Ahhhh so war das gemeint. Gut danke. Dann versuch ich das als nächstes mit AVCC als Referenzspannung und wenn das nicht klappt dann nehm ich einen anderen bzw. neuen µC. Aber ist schon mal gut zu wissen, dass in der Beschaltung keine gravierenden Fehler sind.
mal etwas, was mir passiert ist und den gleichen Fehler hervorgerufen hat: Ich hatte den Pin nicht als Eingang definiert, sondern als Ausgang. Ich dachte durch das setzen des Pins im ADC als Eingang ist alles erledigt, aber leider nein. Wenn er als Ausgang geschaltet ist kommt der ADC gar nicht an die Info ran. Also prüf mal ob du den Port überhaupt richtig konfiguriert, sprich den Pin als Eingang deklariert hast! Gruß Malte
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.