Hallo, vielleicht kann mir einer von euch helfen. Ich bekomme den ADC mit Interner 2,56V Referenz einfach nicht zum Laufen. Ich weiß nicht ob ich einen Fehler im Code oder in der Beschaltung habe. Ich habe den AREF offen gelassen (unbeschaltet) und die VACC mit einer Spule und einem Kondensator beschalten. Braucht AREF einen Kondensator? Im Datenbaltt auf Seite 215 steht da so was in der Richtung. Wobei ich auch schon einen 100uF gegen Masse eingebaut habe mit keinem Erfolg. Wenn ja wogegen gegen 5V oder gegen Masse? Vielleicht habe ich ja auch einen Fehler im Code? Er tut nämlich mit dem 5V interne Referenz ADMUX |= _BV(REFS0); //=> Anzeige 304 nur mit ADMUX |= _BV(REFS1) | _BV(REFS0); // => Anzeige 1023 gibt er immer 1023 aus Danke an alle die mir helfen wollen Grüße Tom
100µF sind ein bisschen happig. 100nF (gegen AGND natürlich) sollten dicke ausreichen. Interrupts sollte man nicht mit INTERRUPT einleiten, es sei denn, man ist aus irgendwelchen Gründen drauf angewiesen, dass die ISR unterbrochen werden kann. SIGNAL(SIG_ADC) ist die bessere Lösung (oder die neue Version von WINAVR mit ISR(ADC_vect)). Warum liest Du Low- und High-Byte getrennt aus? Dafür gibts extra das 16-Bit-Register ADC oder ADCW. Zum eigentlichen Problem: Was für einen Wert legst Du überhaupt an den Eingang an? Wenn der größer als 2,56 V ist, kriegste natürlich immer 1023...
Eine Kleinigkeit, die mit dem Problem eher nicht zu tun hat: Beim ADC-Start wird verkehrt versucht, das IF zu löschen.
So wie ich das sehe ist das Löschen von ADIF korrekt! Interrupt Flags werden bei AVR gelöscht, indem man eine '1' hineinschreibt!
Daran könnte es auch liegen... Wenn das IF nicht gelöscht ist, gibts keinen neuen Interrupt und damit immer nur den ersten Wert. Also ändern und neu versuchen!
Hallo, danke erst mal für eure Antworten @johnny.m ADMUX |= _BV(REFS0); //=> Anzeige 304 es liegen also 1,48v am Eingang @ A.K. Beim ersten test lesen soll noch kein IRQ ausgelöst werden. Das ist nur zum Initialisieren des ADC (aus dem Tut) anschließend schon also auf 0 setztnen. Angeschlossen ist ein Temperatursensor der auch sauber unter 5 V auf Wärme reagiert nur eben nicht genau genug. Danke trotzdem Grüße Tom
ADCSRA &= _BV(ADIF); Nochmal: Das ergibt keinen Sinn. Das setzt zwar ein gesetztes IF auch schön zurück, aber löscht so nebenbei auch alle anderen Bits. Schaltet also den ADC gleich ganz aus.
Hallo, ups ja Du hast recht es muss natürlich lauten: ADCSRA &= ~(_BV(ADIF)); // ADIF löschen um Interrupt zu sehen Komisch ist nur dass seit ich den Bug korregiert habe die Konvertierung schneller abläuft. Der Fehler hatte aber trotzdem keinen Einfluss weil im Code eine Zeile darunter alle Bits wieder gesetzt werden. Wenn ich AREFF mit AVCC brücke dann bekomme ich wieder die Werte der 5V Konvertierung Ist der Kondensator AREF <-> GND wirklich nötig ? Ist vielleicht der ATMEL hinüber ? Wie gesagt alles geht wenn ich mit 5V Referenz arbeite. Danke Tom
ADCSRA &= ~(_BV(ADIF)); // ADIF löschen ADCSRA |= _BV(ADIF); // ADIF löschen Meinst du nicht, dass nur eine der beiden Varianten stimmen kann? Ist aber nicht wirklich wichtig, weil das ADIF schon durch den Interrupt selbst gelöscht wird. "Komisch ist nur dass seit ich den Bug korregiert habe die Konvertierung schneller abläuft." Nicht wirklich komisch. Der ADC taktet sonst nämlich nicht mehr mit /128 sondern mit /2. Wasweissich was da passiert. "Ist der Kondensator AREF <-> GND wirklich nötig ?" Nö. Atmel schreibt das aus reiner Bosheit ins Datasheet. Sollte aber tatsächlich nur wenig am Ergebis ändern.
"AREFF mit AVCC brücke" Bei auf AREF geschalteter interner Referenz? Ich würde nicht drauf wetten wollen, dass die sowas überlebt. Übrigens kann man die Referenzspannung nachmessen. An AREF.
Hallo, ich habe mir gerade nochmals das Datenblatt durchgelesen. Ja ich muss Dir recht geben. Da hatte ich einen Denkfehler. Leider ändert der nichts am Ergebnis ich kann immer noch nicht die 2,56V Reverenz benutzen Ach so warum ich so ungläubig war, was soll ich sagen mit 5V tut´s!! nur eben nicht mit 2,5 und ich habe jetzt wirklich alles durch alle Variationen des ADIF Bit und alle Variationen des REFS1 REFS0 Immer mit dem gleichen Ergebnis 5v tut 2,56 tut nicht nur wenn ich 5V auf die Referenz AVREF brücke liest er wieder Die 5V Typischen 279 Nach meiner Rechnung 5V / 1024 * 279 = 1,3V also sollte es auch nicht zu viel sein. so für Heute ist Feierabend. Danke nochmals für Deine Hilfe ein gute Nacht Tom
Hallo, hat mir die ganze nacht keine Ruhe gelassen. habe gerade den Mega getauscht und siehe da es tut. Nochmals Danke an alle die mir geholfen haben Grüße Tom
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.