PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturschalter



Felix H.
15.03.2008, 11: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?

Dirk
15.03.2008, 11:34
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, 11: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

Dirk
15.03.2008, 12:38
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, 13: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.

Dirk
15.03.2008, 13:45
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, 16: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^^

Dirk
15.03.2008, 16:22
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, 16:30
Das gehört doch aber zu dem "end if".... wo muss ichn das sonst hinschreiben?

Dirk
15.03.2008, 16:37
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, 16: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ß

Dirk
15.03.2008, 16:50
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, 17: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ß

Dirk
15.03.2008, 17:12
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, 17: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^^

Dirk
16.03.2008, 08:59
Wenn du eine neue Programm-Version testest, poste die doch hier. Dann kann man mehr sagen!

Gruß Dirk