Das verstehe ich nicht,
laut Datenblatt heist es doch, wenn Uist<Uref dann hat ACO = High, also 1
wenn Uist > Uref, dann ACO = Low also 0?
Wie kommst du auf 5?
Gruß
Sylvia
Das verstehe ich nicht,
laut Datenblatt heist es doch, wenn Uist<Uref dann hat ACO = High, also 1
wenn Uist > Uref, dann ACO = Low also 0?
Wie kommst du auf 5?
Gruß
Sylvia
ACO ist ja nur ein Bit im Register ACSR
die Bits dort ACSR haben die Nummern 7 - 0
dafür gibt es Namen, einer davon ist ACO, das ist Bit Nr 5
die Namen findest du in der Doku-PDF s 197
das dient dazu, dass man schreiben kann z.B
danach ist genau dieses Bit im register gesetzt.Code:ACSR |= (1<<ACBG) und nicht ACSR |= (1<<6) beides ergibt ACSR |= 0x40 (0100 0000)
ACO
Hilft das als Tip, oder verwirrt das ?Code:"ACO high" heisst, im ACSR steht xx1x xxxx "ACO low " heisst, im ACSR steht xx0x xxxx um es abzufragen, macht man also Spannung_weg = ACSR & (1<<ACO); das bedeutet ACSR = xxNx xxxx (low oder hi) (1<<ACO) = 0010 0000 logisch und & = 00N0 0000 --> ergebnis in "spannung_weg" steht dann also entweder 0000 0000 ( Bit nr 5 "ACO" = 0) oder 0010 0000 ( Bit nr 5 "ACO" = 1) du kannst also auch nicht auf == 1) abfragen.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo, du kannst gut erklären, das habe ich jetzt verstanden.
Nur ändern sich leider trotzdem nichts.
Mein ACO ist immer auf High.
Meine Vergleichsspannung ist im Normalfall auf 2,8V, da dachte ich mir, vielleicht ist der Unterschied zur inneren Referenzspannung 2,56V zu klein, und habe auf externe Referenzspannung umgeschaltet (einfach ACSR |=(1<<ACGB) auskommentiert).
Nun gebe ich eine Veränderliche Referenzspannung von 0-5V auf AIN0.
Aber egal, wie die Referenzspannung aussieht, sogar wenn sie 0V ist,
das ACO sagt:High, also sie sei größer als meine Vergleichsspannung 2,8V.
Warum nur?
Grüße von
Sylvia
Du hast wohl nicht die Möglichkeit, einfach mal den Mega32 zu tauschen ? Es sollte nicht das Wölkchen des Zweifels über Dir kreisen, dass der µC vielleicht doch einen Schaden hat.
Dass der Comparator beim DIL grundsätzlich nicht funzt, habe ich noch nie gehört, kann es mit auch nicht vorstellen.
Wenn sich nicht inzwischen irgendein schlauer Kopf findet, der Dir wirklich helfen kann, werd ich wohl mein Zeug rauskramen und die Sache selbst versuchen. Ist ja zum Eierlegen. Bis dahin hab' ich wohl nur die Weisheit eines Pfarrers bei der Eheberatung *g*
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hab das Wölkchen vertrieben, und den µC ausgewechselt,
.....ändert nichts.
Gruß
Sylvia
Lass mal dein Programm im Simulator vom AVR Studio 4 laufen und guck mal ob es dann da geht.
Oft sind es wirklich nur ein paar verwurstelte Bits, die das Problem machen.
Im Studio kannst Du die Reaktion deines Programms schritt für Schritt austesten.
Das hat mir bei der Fehlersuche schon oft geholfen.
Die Eingänge kannst Du durch manipulation der entsprechenden Portpins simulieren.
Der Simulator hat nur seine Schwächen, wenn die komunikation mit anderen Bausteinen getestet werden soll.
Hi, Sylvia,
Bitte nicht böse sein, wenn ich jetzt meinen Beitrag poste: hast Du GND Deiner Vergleichsspannungen und den GND Deines Controllers (also alle drei Niveaus !) miteinander verbunden? (Bei mir ist es so: offenkundige Fehler merke ich meist erst ganz zum Schluss - das ist leider auch hier im Forum schon dokumentiertZitat von Sylvia Heib
).
Ciao sagt der JoeamBerg
ja,
alle GND''`s sind miteinander verbunden
Gruß
Sylvia
Hab die LÖSUNG!!!
ich schreibe:
Spannung_weg =((ACSR &(1<<ACO)) ?1 :0)
Das bedeutet:
Wenn der Wert in ACSR "true" ist (er wird hier 32, wenn das 5.Bit(ACO) auf High geht, dann soll Spannung_weg eine 1 sein.
Im anderen Fall ist Spannung_weg eine 0.
Nun kann ich schreiben:
if(Spannung_weg==1)
tue was....
Das funktioniert!
Danke für eure Hilfe
Grüße von
Sylvia
es würde auch reichen, wenn du schreibst
if(!Spannung_weg)
das entspricht dem ausdruck
if(Spannung_weg == 0)
wenn du
i(SPannung_weg)
schreibst iss dass ungefähr so wie
if(Spannung_weg != 0)
nur zum verständnis
true und false versteht der GCC nur so, true ist alles was ungeleich 0 ist, false IST GLEICH 0
Lesezeichen