PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturbereich regeln mit BASCOM



RAM
09.04.2009, 17:09
Hi Leute,

bin gerade dabei, mir eine Temperaturregelung für meinen Lipo-Koffer zu basteln. Hab dazu schon mal ne Schaltung mit nem Mega32, nem Display und nem DS18S20 aufgebaut. Beheizt wird das ganze mit nem Heizelement, welches über einen Transistor an PA0 hängt. Mein eigentliches Problem ist aber die Programmierung. Hab mir jetzt schon mal ein kleines Programm zusammengebastelt, in dem meine Heizung eine Temperatur von 30 Grad hält. Mir wär aber lieber, wenn der Koffer erst auf ca. 35 Grad geheizt wird, dann die Heizung abschaltet, dann die Temperatur bis auf ca. 32 Grad fallen lässt und dann wieder auf die 35 Grad hochheizt. Eben wie ein Thermostat. Allerdings steh ich da ein bischen auf dem Schlauch, wie ich das programmieren soll.

Hoffe, mir kann da jemand von euch weiterhelfen!

Hab mal mein Programm angehängt



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
Config Portb.0 = Output
Config 1wire = Porta.6
Dim Rom1 As Integer
Dim Temp As Integer
Wait 1
Do
1wreset
1wwrite &HCC
1wwrite &H44
Ddra.6 = 1
Waitms 800
Ddra.6 = 0
1wreset
1wwrite &HCC
1wwrite &HBE
Rom1 = 1wread(1)
1wreset
Temp = Rom1 / 2
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
Cls
Locate 1 , 1
Lcd "*****Lipo-Koffer****"
Locate 2 , 1
Lcd "Temperatur = " ; Temp
Locate 2 , 17
Lcd "Grad"
If Temp < 30 Then
Locate 3 , 1
Lcd "*******heizen*******"
Portb.0 = 1
End If
If Temp > 30 Then
Locate 3 , 1
Lcd "****Temperatur ok***"
Portb.0 = 0
End If


Loop
End

for_ro
09.04.2009, 19:25
Ich habe dir deinen Code mal etwas umgestellt:


$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
Config Portb.0 = Output
Config 1wire = Porta.6
Dim Rom1 As Integer
Dim Temp As Integer
Wait 1
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.5 , Rs = Porta.4
Cls
Locate 1 , 1
Lcd "*****Lipo-Koffer****"
Do
1wreset
1wwrite &HCC
1wwrite &H44
'Ddra.6 = 1
Waitms 800
'Ddra.6 = 0
1wreset
1wwrite &HCC
1wwrite &HBE
Rom1 = 1wread(2)
1wreset
Temp = Rom1 / 2
Locate 2 , 1
Lcd "Temperatur = " ; Temp
Locate 2 , 17
Lcd "Grad"
If Temp < 32 Then
Locate 3 , 1
Lcd "*******heizen*******"
Portb.0 = 1
Elseif Temp > 35 Then
Locate 3 , 1
Lcd "****Temperatur ok***"
Portb.0 = 0
End If
Loop
End

Einige Fragen noch:

Warum machst du das: DDRA.6=1 : Waitms 800 : DDRA.6=0 ?
Funktioniert das wirklich Rom1 = 1wread(1) ? Nur ein Byte?

Gruß

Rolf

RAM
09.04.2009, 19:43
Naja, warum ich DDRA.6=1 : Waitms 800 : DDRA.6=0 mache, weiß ich auch nicht genau, hab das Beispielprogramm aus der Elektor, habs nur für meine Bedürfnisse ein bischen umgebaut. Jetzt funktionierts so, wie ich das haben wollte. Danke nochmal!

Gruß,

Martin