- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 3 von 3

Thema: Temperaturbereich regeln mit BASCOM

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    40
    Beiträge
    224

    Temperaturbereich regeln mit BASCOM

    Anzeige

    E-Bike
    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

    Code:
    $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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Ich habe dir deinen Code mal etwas umgestellt:

    Code:
    $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

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.09.2004
    Ort
    Abensberg (Niederbayern)
    Alter
    40
    Beiträge
    224
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen