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???
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.
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?????
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. :-) )