Hallo, ich habe ein Problem mit dem AD-Wandler. Ich möchte nämlich die Temperatur mit dem LM35 einlesen. Ich verwände einen Arduino uno, programmiere aber in C. Als erstens habe ich mein Programm geschrieben und den LM angeschlossen. einfach + auf + und GND auf GND, den V-out habe ich direkt auf einen Analog pin gelegt. Dann hatte ich das Problem das ich bei meinem LCD Display einen komplett falschen wert hatte und das der Wert stark schwankte. Aber wenn ich eine externe Spannung angeschlossen habe(ohne LM35) hat es funktioniert. Also dachte ich das dass Programm richtig sein muss. Nach langem hin und her dachte ich das die interne Referenz Spannung das Problem sein könnte also habe ich eine Externe 5V Referenz Spannung genommen (mit Kondensatoren und Spulen zum glätten). Es wurde etwas besser aber der Wert schwankte immer noch stark. Ich hab auch verschiedene Schaltungen aus dem Datenblatt ausprobiert, da es ja nur vom LM kommen kann, hat aber gar nichts gebracht. schlussendlich dachte ich der LM sei Kaputt oder das ich ihn kaputt gemacht habe und mir einen neuen besorgt. und zuerst mit dem Multimeter gemessen (Hab ich auch bei dem Alten getan aber sobald ich in an den AD Pin angeschlossen habe fing der wert wider an zu schwanken), da funktioniert er einwandfrei aber wenn ich ihn wieder an den AD pin schlisse fällt der wert wieder und anstatt die 25.xx zeigt er mir 32,xx, und das ist ja nicht richtig. ich hab auch schon versucht einen 100nf zwischen GnD und + , beim LM35 und zwischen dem AD und GND anzuschließen brachte aber nichts. Auch den Mittelwert zu ermitteln funktioniert nicht wirklich da mir ein wert angezeigt wird und dann wieder auf 0 abfällt sobald der LM35 angeschlossen ist. ich weiß echt nicht mehr was ich tun soll hat jemand sonst noch eine Idee? hab auch schon hier einige Forme durchgelesen und nichts brauchbares gefunden! bitte um Hilfe! lg Michelle.E hatte aber wenn ich
Michelle.E. schrieb: > ich hab auch schon versucht einen 100nf zwischen GnD und + , beim LM35 > und zwischen dem AD und GND anzuschließen brachte aber nichts. Wenn ich es richtig verstehe hast du also 100nF als Last am Ausgang des LM35? Das mag der gar nicht. Siehe Abschnitt 8.1 im Datenblatt: http://www.ti.com/lit/ds/symlink/lm35.pdf (Die 100nF an der Versorgung sind aber richtig, die solltest du dran lassen.) Mehr als 50pF am Ausgang können dem LM35 instabil machen, und 50pF kannst du auch schon zusammenbekommen, wenn du längere Anschlusskabel verwendest. Im Zweifel schalte mal direkt am LM35 200 Ohm in Serie zu Ausgang. Michelle.E. schrieb: > Es wurde etwas besser aber der Wert schwankte immer noch stark. Was heißt das? Um 20mV oder um 2V? Und welche Spannung misst du, wenn du mit einem Multimeter an den Ausgang des LM35 gehst?
Achim S. schrieb: > Michelle.E. schrieb: >> Es wurde etwas besser aber der Wert schwankte immer noch stark. >>Achim S. schrieb: > Was heißt das? Um 20mV oder um 2V? Und welche Spannung misst du, wenn du Damit meine ich das der bereich in dem es schwankt kleiner wurde. >>Achim S. schrieb > mit einem Multimeter an den Ausgang des LM35 gehst? wenn ich den ad Wandler mit angschlossen habe, kann es von 1V- bis zu 300mV hin und her schwanken(am Multimeter) aber wenn ich den ad wandler weg nehme bekomme ich die aktuelle raumtemperatur am Multimeter.
Michelle.E. schrieb: > Damit meine ich das der bereich in dem es schwankt kleiner wurde. Gib bei sowas einfach konkrete Zahlenwerte an, unter "kleiner Schwankung" versteht jeder etwas anderes. Michelle.E. schrieb: > wenn ich den ad Wandler mit angschlossen habe, kann es von 1V- bis zu > 300mV hin und her schwanken(am Multimeter) > > aber wenn ich den ad wandler weg nehme bekomme ich die aktuelle > raumtemperatur am Multimeter. Demnach macht der µController selbst irgendeinen Unsinn. Der AD-Eingang kann ja auch als digitaler Ausgang genutzt werden. Kann es sein, dass dein Programm zwischendurch versehentlich auf den Pin schreibt? Wenn du die Möglichkeit hast, die Spannung mit dem Oszi zu untersuchen, kann das viel über die Quelle der Schwankungen verraten.
Hast Du an dem AD-Wandler-Pin einen PULLUP eingeschaltet? Der LM35 kann nur Strom sourcen (speisen), nicht sinken (senken). Zitat: "The temperature-sensing element is then buffered by an amplifier and provided to the VOUT pin. The amplifier has a simple class A output stage with typical 0.5-Ω output impedance as shown in the Functional Block Diagram. Therefore the LM35 can only source current and it's sinking capability is limited to 1 μA."
:
Bearbeitet durch User
Also ich habe jezt mal einen 200 Ohm am ausgang in reihe geschalten und nochmal geguckt ob ich irgendwo den Port verwände wird aber auser in der LCD rutine aber da habe ich blos die lezten zwei Pins angesteuert und ich nehme beim AD den ersten Pin also sollte das ja kein problem sein oder?? und bei meinem LCD display zeigt es mir den Wert 1287 an und dann wieder 0005 immer abwechselnd.
Nein, ich vermute irgendwas zieht den Pin nach oben, deswegen die Frage nach dem Pullup. Der Ausgang des LM35 kann nur Strom gegen GND liefern (source), nicht gegen Vcc (sink). Entweder sich den Pin im angeschlossenen Zustand mit einem Oszilloskop ansehen oder 1k-Pulldown-Widerstand anschließen -- falls es dann funktioniert aber die Ursache beheben.
Vorweg: Offensichtlich sorglose Rechtschreibung wird hier als Unhöflichkeit gewertet. Dein Atmel enthält einen AD Wandler der auf mehrere Pins gemultiplext wird. Jedes mal wenn Du also den Wandler auf deinen Messpin legst wird der interne sample and hold Kondensator geladen. Dieser Kondensator ist klein, aber verursacht an schwachen Quellen trotzdem Spannungsabfälle die zu Abweichung führen wenn man das nicht berücksichtigt. In Deinem Fall sieht das aber nach Programmierfehler aus. Der Wert 1287 erfordert mindestens 11bit und der AD Wandler hat nur 10, kann also nur Dezimalwerte bis 1024 bzw. Hex 3FF darstellen
Tcf K. schrieb: > Nein, ich vermute irgendwas zieht den Pin nach oben, deswegen die > Frage nach dem Pullup. Der Ausgang des LM35 kann nur Strom gegen GND > liefern (source), nicht gegen Vcc (sink). Entweder sich den Pin im > angeschlossenen Zustand mit einem Oszilloskop ansehen oder > 1k-Pulldown-Widerstand anschließen -- falls es dann funktioniert aber > die Ursache beheben. Danke für deinen Hinweis die Spannung hat sich total beruhigt :) mein Multimeter zeigt jetzt die aktuelle Temperatur an und der AD Wandler ist angeschlossen ^^ Leider zeigt mein LCD Display nur 0005 an also denke ich das ich nur was am Programm ändern muss das es dann läuft :)
- C-Programme werden mit filename.c benannt - F_CPU Deklaration gehört in das Makefile, damit alle Dateien etwas davon haben - Lass Dir mal den gemessenen Analogwert auf der seriellen Schnittstelle ausgeben, dann weisst Du, ob es an der LCD-Ansteuerung oder am LM35 liegt. - Zählervariablen werden nicht als float deklariert (float i=25, j=25;) - Die Schleife wird 26 mal durchlaufen, Du teilst aber durch 25 - Schaltplan wäre nicht schlecht. - Du benutzt Port D. Ist JTAG ausgeschaltet? - Sinnvolle Kommentare fehlen: "_delay_ms(500); //warten" - Für die String-Formatierung zur Darstellung auf dem LCD schau Dir mal sprintf an. Das soll jetzt nicht despektierlich wirken, aber hast Du Dich mal auf Legasthenie untersuchen lassen?
> Das soll jetzt nicht despektierlich wirken, aber hast Du Dich mal auf > Legasthenie untersuchen lassen? ja aber es ist zu wenig um es wirklich beweisen zu können aber man merkt das ich einfach Probleme habe und es wird Jahr zu Jahr besser.
Ach so, das wollte ich nicht fragen weil ich nicht sicher war ob Carmen oder Mladen schreibt -- bei Nicht-Muttersprachlern sind solche Schnitzer verständlich.
Pete K. schrieb: > - C-Programme werden mit filename.c benannt ist nur ein file, das es alle aufmachen können(hoffe ich) im AVR habe ich es aber mit filename.c benannt > - Lass Dir mal den gemessenen Analogwert auf der seriellen Schnittstelle > ausgeben, dann weisst Du, ob es an der LCD-Ansteuerung oder am LM35 > liegt. kann nur am LCD oder am AD-Wandler liegen da der LM35 tadellos läuft(laut Multimeter) > - Zählervariablen werden nicht als float deklariert (float i=25, j=25;) hab jetzt anstatt float, int gewählt > - Die Schleife wird 26 mal durchlaufen, Du teilst aber durch 25 hab es geändert dummer Fehler von mir > - Schaltplan wäre nicht schlecht. kommt sofort > - Du benutzt Port D. Ist JTAG ausgeschaltet? wie kann man ausschalten?? > - Sinnvolle Kommentare fehlen: "_delay_ms(500); //warten" wir müssen leider solche sinnvolle Kommentare einfügen sonst punkte Abzug > - Für die String-Formatierung zur Darstellung auf dem LCD schau Dir mal > sprintf an. werde ich tun
Michelle.E. schrieb: > Danke für deinen Hinweis die Spannung hat sich total beruhigt :) > mein Multimeter zeigt jetzt die aktuelle Temperatur an und der AD > Wandler ist angeschlossen ^^ Was zeigt denn Dein Multimeter an? Für die Umrechnung der Spannung in Grad ist im Datenblatt ein Funktion enthalten.
> > Was zeigt denn Dein Multimeter an? > > Für die Umrechnung der Spannung in Grad ist im Datenblatt ein Funktion > enthalten. mein Multimeter zeigt 285,6mv an und das wären ja 28,5°C und im Raum sind 29°C
Michelle.E. schrieb: > mein Multimeter zeigt 285,6mv an und das wären ja 28,5°C und im Raum > sind 29°C 5V ist die ADC Referenzspannung 5V / 1024 ist damit der Wert eines Bits (4,88mV) Dein ADC sollte also dez. 58 (hex 3A) liefern. Derzeit löst Deine Messung mit 5°C auf. Deinen vollen ADC Wertebereich nutzt Du so erst bei 500°C.
Michael K. schrieb: > > 5V ist die ADC Referenzspannung > 5V / 1024 ist damit der Wert eines Bits (4,88mV) > > Dein ADC sollte also dez. 58 (hex 3A) liefern. > Derzeit löst Deine Messung mit 5°C auf. > Deinen vollen ADC Wertebereich nutzt Du so erst bei 500°C. Heist das jezt das ich einfach eine andere Refernzspannung brauche? Oder denke ich da jezt falsch??
Michael hat sich bei der einen Angabe um einen Faktor 10 vertan: deine Messung löst derzeit 0,5°C auf. Wenn dir das reicht, ist es ok. Wenn nicht würde eine kleinere Referenzspannung wenig helfen (denn man kann sie nicht extrem klein machen). Dann würde man eher die Ausgangsspannung des LM35 verstärken.
Ach so ja das reicht mir:) Dankeschön:) aber ich habe immer noch das Problem das ich im Moment einen konstanten Wert von 2406 auf meinem LCD Display habe und sich leider auch nichts mehr ändert. Wenn ich das Programm neu Starte dann zuerst 406 an und dann macht er die zwei vorne dran.
Dann versuche mal nur ein paar Zahlen auf dem LCD auszugeben und kommentiere alles andere aus. Es gibt beim LCD auch eine Funktion setcursor, dann kann man ganz normal schreiben. Hast Du schon sprintf ausprobiert? Du musst auch mit floating-lib linken.
Michael X. schrieb:
> In deinem Schaltplan hängt AREF in der Luft.
er hängt mit einem Kondensator an masse
Michael X. schrieb: > Ach du nimmst die interne Referenz. Ok. Ist AVCC angeschlossen? nein eine externe aber man muss ja trotzdem einen Kondensator an Masse und AREF setzen und beim AVCC einen Kondensator an Masse und eine Spule an die gewünschte Spannung
also Leute ich danke euch für eure Kommentare Tipps und Tricks es Funktioniert jetzt ^^ ich freu mich grad so richtig bin an dem Problem schon fast einen Monat dran und es läuft ^^ Ich danke euch nochmals^^ ich gebe euch noch meinen Kompleten Ordner mit dem Programm vielleicht kann es ja noch jemand gebrauchen, dort ist auch meine Motorsteuerung und alles mit vorhanden falls es jemand brauchen kann.
S. M. schrieb: > Ja was war es denn? GND Potenzial Fehler glaube ich da ich einmal Strom vom USB Kabel genommen habe und einmal von einer externen Spannungsquelle. Jetzt nehme ich nur noch die externe Spannungsquelle. und im Programm durfte ich den AD wert nur einmal einlesen und Kienen Durchschnitt bilden dann musste ich nur noch die eingelesen Spannung mit einer Schlussrechnung in Temperatur umwandeln und dann hat es funktioniert. und der LM braucht einen kondensator(100nF) von + nach - und einen pull down Widerstand (1kOhm) :)
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.