Quellcode wäre sehr hilfreich .. und natürlich auch, wie die Spannung am ADC angelegt wurde, falls du die vollen 10V angelegt hast, wird wohl irgendwas Schaden genommen haben. Also zumindest Ausschnitte vom Schaltplan, falls nötig.
Grüße
CsT
Hallo
ich anfänger bräuchte mal hilfe den ich bringe es nicht zustande 3 Leds (rot,gelb, grün) anzusteuern.
Es Ist so:
Ich habe eine Spannung in einer Variablen gespeichert ,wenn die spannung unter 5V ist sollte rot leuchten bei 5 bis 10 V die gelbe und über 10V die grüne. Ansteuerung klapt aber das mit den Spannungen nicht,
irgendwie stehe ich auf der leitung. Weiss jemand einen trick oder hat einen tip?
Quellcode wäre sehr hilfreich .. und natürlich auch, wie die Spannung am ADC angelegt wurde, falls du die vollen 10V angelegt hast, wird wohl irgendwas Schaden genommen haben. Also zumindest Ausschnitte vom Schaltplan, falls nötig.
Grüße
CsT
Hallo
Verstehe nicht so ganz was du meinst.
Hast du dich ueberhaupt mal mit den Grundlagen beschaeftigt?
MFG
Das einlesen mache ich über einen spannungsteiler und geb es an einem display wieder aus. fuktioniert einwand frei.
Der Wert wir in einer Variablen gespeichert. und die 3 Leds sollten lediglich eine Ladezustandsanzeige geben.
ich bringe es aber nicht hin eben das bei0- 5 volt nur die gelbe leuchtet und bei 5-10V die gelbe und bei 10-13V die grüne.
da brauchste sowas in der art:
Code:Const Maxvolt = 248 '14.4 volt Const Maxvolt2 = 211 '13.8 volt Const Minvolt2 = 82 '11.7 volt Const Minvolt = 43 '11.0 volt die constanten hier sind abhängig vom adc, von der referenz und dem spannungsteiler Dim Spannung As Word Dim Spannung8 As Byte Config Adc = Single , Prescaler = 128 , Reference = Internal Start Adc Spannung = Getadc(0 ) Shift Spannung , Right , 2 Spannung8 = Spannung und dann irgenwie die leds ansteuern --->> if spannung8 < minvolt dann rot if spannung8 >minvolt and spannung8< maxvolt2 then gelb if spannung8> maxvolt2 then grün
Ja das auslesen klapp tip top.
aber die auswertung mit if>5 then.... und if > und und und klappt irgend wie nicht.
irgendwie stehe ich auf dem schlauch und sehe das problem nicht.
2 leds ansteuern kein problem. aber sobald ich eine dritte dan klappt es irgendwie nicht mit dem if then else usw. jemand ein tip?
Wie weiter oben bereits erwähnt wäre der Quellcode nötig um das problem zu erkennen, meine Kristallkugen ist im Wochenende!
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 4800
Dim W0 As Word
Dim Spannung0 As Single
Dim Spannungger0 As String * 4
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Channel = 0
W0 = Getadc(channel)
Spannung0 = W0 * 0.0117192
Spannungger0 = Fusing(spannung0 , "##.##")
Locate 1 , 1
Lcd ; "Bat.1:" ; Spannungger0 ; "V"
Print "ADC-Pin " ; Channel ; " : V " ; Spannungger0
Waitms 500
Jetzt wollte ich hier noch 3 leds ansteuern rot gelb grun für die zustandsanzeige:
(if blblbl > then bla bla bla) das haut aber irgendwie nur mit 2 leds hin)
Loop
also ... hier mal aus langeweile für dich gemacht:
anmerkung dazu:
diese ganze wandlung zu single und string und der ganze fusing ist ja lustig und für dein display ja auch wichtig! ich würde es aber erstmal weglassen.
also zunächst die auswertung deiner werte und die steuerung der dioden... und das alles in ganzzahlen... das spart cpu-kapazität.
wenn es denn eher um einen batteriewächter geht reichen 8 bit auflösung erstmal... deswegen die shift-befehle.
// einige werden mich steinigen wegen der speziellen befehle im atmel zur justierung ... aber es spielt hier keine rolle //
die verwendung von avcc als referenz ist nicht so gut, da die betriebsspannung des prozessors ja nicht unbedingt stabil ist. zumindest kann man sagen, dass die option reference=internal irgendwie besser ist.
da haste wenigstens einen realen bezugspunkt, der beim mega32 wohl auf 2,56 liegen soll.
es bietet sich auf jeden fall an, an dem pin für die referenzspannung nachzumessen, was denn der reale wert ist.
für den fall, dass du also die shiftbefehle nun verwendest, können wir davon ausgehen, dass wir vom adc werte zwischen 0 und 255 bekommen.
nun sagen wir, dass die led1 leuchten soll, wenn die werte unter 100 sind
wir sagen auch, dass led2 leuchten soll, wenn der wert von 100 bis 200 ist
und wir sagen led3 ist an, wenn der wert über 200 ist.
bitte prüfe noch, ob du wirklich auf 8mhz arbeitest... das ist für das programm unwichtig... aber mit 4800 baud scheint mir das nicht okay.
also hier mein programmvorschlag:
$regfile = "m32def.dat"
$crystal = 8000000
dim spannug as word
dim spannung8 as byte
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
do
Spannung = Getadc(0 )
Shift Spannung , Right , 2
Spannung8 = Spannung
if spannung8 < 100 then led1=ein else led1 = aus
if spannung8 > 99 and spannung8 < 201 then led2 = ein else led2 = aus
if spannung8 > 200 then led3 = ein else led3 = aus
loop
************************************************** ****
nun kann man das bestimmt besser programmieren, aber es funzt erstmal.... optimierungen kommen halt später
gruss kolisson
Gerade Dein "Blablabla" wäre schon interessant gewesen - ist der Code für den CIA oder warum schaffst Du es nicht, das VOLLSTÄNDIGE Programm einzustellen??
Grüße
Torsten
Lesezeichen