Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturschalter
Felix H.
15.03.2008, 12:14
Hi,
ich hab hier mit einem Teil meines Progs Probleme... der Rest funktioniert ja einwandfrei. Ich will ausserhalb des AVR´s mit einem Temperaturfühler als Spannungsteiler einen Temperaturschalter bauen. Dazu habe ich die Spannung an ADC2 des AVR´s gegeben. Hier ein kleiner Ausschnitt aus dem Code:
Config Adc = Free , Prescaler = Auto
Start Adc
Dim Temp As Word
Do
Temp = Getadc(2)
Temp = Temp * 5000
Temp = Temp / 1024
If Temp < 2.5 And Pina.4 = 0 Then '
Portc.0 = 1
Else
Portc.0 = 0
End If
Loop
An Pina.4 gebe ich von aussen ein Signal ein, ob die Heizung überhaupt betrieben werden soll. Wo ist mein Fehler?
Hallo Felix,
hast du dich 'mal mit den Daten Typen beschäftigt?
In ein Word passen Zahlen bis 65535. Die Multiplikation von 5000 * 1023 (ADC-Maximalwert) beläuft sich schon auf über 5 Millionen.
Du könntest also: Den Datentyp Long für das Ergebnis nehmen.
Das Ergebnis nach der Division durch 1024 ist dann in Millivolt.
Für deine 2,5V Testbedingung müßtest du dann auf < 2500 testen.
Gruß Dirk
Felix H.
15.03.2008, 12:51
Hi,
genau die überlegung hatte ich auch schon. Funktioniert aber auch nicht :( hab auch schonmal das > zeichen umgedreht bzw. den Port auf direkt GND gelegt. Es tut sich rein gar nichts....
Gruß
Felix
Hallo Felix,
ich sehe gerade deine Config-Zeile.
Bei Benutzung von Getadc muss da stehen:
Config Adc = Single , Prescaler = Auto
Wenn es daran nicht liegt:
- Poste deinen jetzigen Code und ...
- beschreibe 'mal deinen Temperatur-Sensor
Gruß Dirk
Felix H.
15.03.2008, 14:30
Hi Dirk,
ich denke ich hab das Problem gefunden... Es funktioniert jetzt, danke ;-)
Allerdings hab ich ein neues Problem. Ich drücke den Start knopf an der maschine und ein If-Then Satz läuft ab.... allerdings habe ich mehrere dieser If-Then bedingungen und sobald der erste läuft gehen die anderen nicht mehr... ist das normal das immer nur eine Bedingung laufen kann? zudem habe ich noch einen Stop knopf angeschlossen der im If-Then code hiner "end if" steht... aber wenn ich ihn betätige stoppt es nicht... =(
Hier der ausschnitt:
Do
If Pinb.0 = 0 Then 'Taster "Start" wird betätigt
Cls
Cursor Off
Locate 1 , 1
Lcd "Start"
Waitms 2000
Mach irgend etwas
Else
End If
Pinb.1 = 0
If Pinb.1 = 0 Then
Cls
Cursor Off
Locate 1 , 1
Lcd "Abbruch"
Else
End If
Temp = Getadc(2)
Temp = Temp * 50000
Temp = Temp / 1024
If Temp < 25 And Pinb.2 = 0 Then
Portb.7 = 1
Else
End If
If Temp > 25 And Pinb.2 = 0 Then
Portb.7 = 0
Else
End If
Loop
End
PinB.1 wäre der Stoptaster. PinB.7 wäre wieder die heizung...
Der aufbau des Temeraturfühler ist einfach... der fühler von masse nach ADC, von dort ein Poti nach +5V... damit kann man dann noch etwas justieren.
Hallo Felix,
so ganz kapiere ich nicht, was du da machen willst.
Auf jeden Fall ist die Anweisung Pinb.1 = 0 nicht richtig, weil hier einem Eingang ein Wert zugewiesen wird. Warum?
Sonst müßte das mit den Schaltern klappen, wenn es auch Pullup-Widerstände gibt (z.B. 10kOhm nach +5V).
Bei der Temperatur-Geschichte hast du ja mal 50000 genommen, das ergibt eine 1/10 Millivolt-Ausgabe. Das ist nicht sinnvoll, weil die Auflösung das nicht hergibt. Also: * 5000 und dann / 1024.
Der Test auf < 25 bedeutet dann, dass die Temperatur wohl sehr niedrig sein muss. Bei der Rechnung oben (*5000 / 1024) entspricht das einem ADC-Wert von 5. Das ist fast gleich Null.
Je nach deiner Hardware wird ja dein Schaltwert wohl höher liegen???
Gruß Dirk
Felix H.
15.03.2008, 17:12
Hi Dirk,
wo wird dem Pinb.1 die 0 zugewiesen?
Einmal stehts hinterm "end if" und einmal am anfang von der "if" bedingung
Gruß
Felix
P.S.: Danke das du mir hilfst^^
wo wird dem Pinb.1 die 0 zugewiesen?
... wo Pinb.1 = 0 allein in der Zeile steht (nicht nach der If-Abfrage!).
Gruß Dirk
Felix H.
15.03.2008, 17:30
Das gehört doch aber zu dem "end if".... wo muss ichn das sonst hinschreiben?
Das gehört doch aber zu dem "end if".... wo muss ichn das sonst hinschreiben?
Nein, das steht ja hinter dem End If und hat deshalb damit nichts mehr zu tun.
Was willst du denn mit dem Befehl Pinb.1 = 0 erreichen?
Wenn du eine If-Abfrage:
If Bedingung Then
Tuwas
Else
Tuwasanderes
End If
... machst, dann haben alle deine Abfragen nicht das Tuwasanderes.
Gruß Dirk
Felix H.
15.03.2008, 17:40
der sinn soll sein:
If "start" taste drücken
tue was
Else
End if "stop" taste drücken
Sprich wenn ich start drücke soll die reiehenfolge beim "tue was" einfach durchlaufen. Drück ich allerdings während diesen durchlaufs die stop taste soll er aufhören mit dem "tue was"
Gruß
So wird das nix. Ich ahne aber, was du willst.
Wenn du mit einer Starttaste anfangen willst, müßte die Abfrage VOR deiner Haupt-DO-LOOP-Schleife stehen.
Dann geht es in die DO-LOOP-Schleife nachdem Start gedrückt wurde.
Die Schleife wird verlassen, wenn Stop gedrückt wird. Dazu nimmst du anstelle von DO-LOOP das DO-LOOP UNTIL Bedingung. Die Bedingung ist dann dein Stop-Schalter (Pinb.1 = 0).
Gruß Dirk
Felix H.
15.03.2008, 18:04
Ja, stimmt schon, aber dann läuft das Programm ja dauer durch bis ich die Stoptaste drück... es geht darum wenn ich start drück das dass Programm nur einmal durchläuft... ist ja im moment der fall und das ich es abrrechen kann durch betätigung der stop taste ;-)
Man bin ich komplizier :P
Gruß
wenn ich start drück das dass Programm nur einmal durchläuft... ist ja im moment der fall und das ich es abrrechen kann durch betätigung der stop taste
Warum muss man eine Schleife auch noch abbrechen können, die sowieso nur 1x durchläuft?
[-(
Ratlose Grüße
Dirk
Felix H.
15.03.2008, 18:24
hm ok dann lass ich die doofe stopptaste weg...
trotz dessen funktionieren die anderen If schleifen nicht, solang diese eine aktiv ist. Sprich an der Temperatursteuerung regt sich gar nichts =(
ich verzweifel hier noch^^
Wenn du eine neue Programm-Version testest, poste die doch hier. Dann kann man mehr sagen!
Gruß Dirk
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.