Hallo, bin grade am assembler lernen nun habe ich das kleine programm aus dem tutorial übernommen und statt über den uart auf mein lcd ausgegeben. Bekomme werte zwischen 0...1023 raus. Nun habe ich das problem, das die werte imer springen d.h. bei 5v zeigt er mal 1023 an und mal was ganz anderes. Weiß vielleicht jemand wo mein fehler liegen könnte???
Hallo B.K. poste bitte mal Dein Programm. Meine erste Vermutung, Du wartest nicht lange genug. D.h. Du liest den ADC bevor er fertig ist. Gruß Frank
Beim schnellen Drüberschauen ist mir eigentlich nichts Grossartiges aufgefallen (was nicht unbedingt viel heissen mag). Wenn du springende Werte bekommst, solltest du erst mal feststellen, ob das ein Software oder ein Hardware Problem ist. Ich würde mal folgendes Versuchen: Stell den ADC Eingang auf 5V. Theoretisch müsste jetzt vom ADC immer ein Wert von 1023 kommen. Programmier dir ein Programm, welches folgendes tut: 1) ADC initialisieren 2) ADC einlesen 3) Wert mit 1000 vergleichen 4) Wenn kleiner als 1000, eine LED einschalten 5) Weiter bei 2) Und das lässt du jetzt einfach mal eine Zeitlang laufen. Wenn irgendwann die LED angeht, dann kam vom ADC ein Wert unter 1000 und damit hast du nachgewiesen, dass der Eingang springt ( = Hardwareproblem). Wenn hingegen nach 1 Stunde, der Wert immer noch nicht gesprungen ist, dann hat dein richtiges Programm irgendwo ein Software- problem. Nur zur Sicherheit: * Was hast du mit dem AREF Pin des Prozessors gemacht? * Wie sieht deine Eingangsbeschaltung am ADC Pin aus.
Aref liegt über 100nF auf masse. Als analogwert habe ich ein 100k poti von 5V gegen masse geschaltet. Und übrigends, wenn der wert springt kommen anstatt des wertes immer 3en. Vielleicht kann das den fehler ja weiter eingrenzen.
Kann mir jemand vielleicht ein Beispielprogramm zum einlesen einer bspannung posten???
Liest du evtl. den falschen Pin ein? Die sprechen stark über, wenn der Eingang offen ist un liefern dann so einen Effekt.
Nee habe Aref auch nicht auf 5V. Habe Aref nur zur Sicherheit mit einem 100nF Kond. auf Masse geschaltet.
Bekomm es einfach nicht hin der digitalwert zittert immer auf dem lcd, nimmt also keinen definieren zustan ein. Aber der angezeigte wert ändert sich nicht. Irgendwas muss doch mit der oben geposteten software nicht stimmen. Bitte um Hilfe. Gruß
Habe den Teiler auf 128 gesetzt nun ist das zittern wech, aber der wert springt immer zwischen dem sollwert zb. 00522 und 33333. Wo kommen nur diese 3en her?????
P.S. es muss definitiv an der Softwar liegen da ich das obig genannte Testprogramm realisiert habe und der wert nie unter 1000 gegangen ist.
Hier ist nochmal der Komplette code. Hoffe mir kann jemand sagen was da los ist. Bin am verzweifeln. Gruß
Er hat doch mit ldi temp3, (1<<REFS0) out ADMUX, temp3 die interne Referenz ACvv ausgewählt. Ich würde den Code ja gerne mal ausprobieren. Allerdings ist es mir ehrlich gesagt zu mühsam, schon wieder in einem fremden Code die Bits für die LCD Ansteuerung auseinanderzupfriemeln um zu wissen, wie das Display hardwaremässig angeschlossen werden muss, bzw. irgendwelche magische Konstanten in irgendwelchen Delay-Loops nachzurechnen und an meine Taktfrequenz anzupassen.
Also das display ist im 4 bit modus an Pd0-Pd3, E1 an Pd5, E2 an Pd6, RS an pd4, ich habe es für eine Taktfrequenz von 4Mhz programmiert bei mir läuft es aber nur auf 1Mhz. Vielleicht kannst es ja jetzt mal kurz ausprobieren. Gruß
was ich mal hatte, war ganz komisch, ich hatte auf aref ne 5V ref, und wollte dann auch übers lcd den übern 10kPoti geteilte wert lesen, bin ich über einen best. wert der so ca. bei 45V lag gekommen, bekam ich nur noch 0 als wert...ka an was das lag weiß ich bis heute nicht...
Hier ... > outp: > ldi temp7, -1 + '0' > > a6ser: > inc temp7 > subi adlow, low(10000) > sbci adhigh, high(10000) > brcs a6ser ... muss es brcc a6ser heissen. Ich musste dein Pgm etwas verändern, weil ich kein 4 Zeilen Display habe, aber das sollte es sein.
Super danke. Jetzt frage ich mch wie ich eine Tabelle für diese Werte anlegen kann um Temperaturen dazustellen. Kennt jemand vielleicht ein gutes Tutorial für solche Tabellen???
B.K. wrote: > Super danke. Heist das jetzt, dass das dein Problem gelöst hat? Wie gesagt: Ich musste dein Pgm etwas verändern um es auf meiner Hardware laufen lassen zu können. > > Jetzt frage ich mch wie ich eine Tabelle für diese Werte anlegen kann um > Temperaturen dazustellen. > > Kennt jemand vielleicht ein gutes Tutorial für solche Tabellen??? Hier http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige findest du wie man mit Tabellen arbeiten kann. Aber ehrlich: Ob ich mir das antun würde eine Tabelle mit 1024 Einträgen auszurechnen und in Assembler runterzucoden. ( :-) Spätestens jetzt wäre für mich der Punkt erreicht, wo ich den Assembler gegen einen C-Compiler eintauschen würde. :-) )
Ja nur geht es leider um eine Facharbeit die ich in Assembler schreiben muss. Denke mal mit excel ist so eine Tabelle schnell gemacht. Gruß
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.