Bascom temp anhängiges lauflicht

gino

Neues Mitglied
06. Dez. 2013
27
0
0
Vaihingen Enz
Sprachen
  1. BascomAVR
hallo an alle,

ich habe mein Thermometer mal etwas umgebaut, zum ersten bin ich auf die ds18b20 umgestiegen da es das ganze einfacher zu machen scheint.
und damit irgendwas blinkt (blinken ist halt nun mal klasse) hab ich mit allen anderen pins vom avr ein lauflicht realisiert.
das ganze merkt sich noch min und max temp und zeigt dieses bei Tastendruck an.
ich bin mit der Funktion im Prinzip sehr zufrieden. daraus soll eine ANzeige in einem EDV Schrank werden.

hier der code dazu, bitte wieder tipps wie ich das ganze besser machen kann.
ich hab auch eine Version bei der ich das lauflicht über timer0 realisiert habe, das fand ich aber irgendwie nicht besser, da der überlauf interupt die main schleife für dieanzeige gestört hat. daher hab ich das nun in der main Loop gelöst, die temp Messung nur am anfang der Loop ist ja für meine Anwendung schnell genug.

aus dem ganzen gebastel soll dann irgendwann auch eine Uhr mit tmp Messung, weckzeiten kaffeeautomat und Kühlschrank werden, nur damit ihr versteht wohin das führen soll.

danke für die tipps, achja es ist grad weihnachten daher schöne Feiertage und nen guten rutsch an alle.

Code:
'Mein Temp Programm
'ATMEGA8 mit 4Mhz ext. Quarz

$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 100
$swstack = 100
$framesize = 100

Pinbus Alias Portb.7                                        ' pin für sensor                                       '
Lcdport Alias Portb                                         ' lcd port
Lauflicht Alias Portd                                       'lauflicht byte 1
Config Lauflicht = Output                                   'erste led an
Lauflicht = 1                                               'lauflicht byte 2
Lauflicht2 Alias Portc                                      ' pins setzten habs grad net beser gwusst
Config Lauflicht2.0 = Output
Config Lauflicht2.1 = Output
Config Lauflicht2.2 = Output
Config Lauflicht2.3 = Output
Config Lauflicht2.4 = Output
Config Lauflicht2.5 = Output
Taster1 Alias Pinb.6                                        ' pin für taster
Config Taster1 = Input
Portb.6 = 1                                                 ' pullup widerstand on

'------------------lcd init -----------
Config Lcdpin = Pin , Db4 = Lcdport.0 , Db5 = Lcdport.1 , Db6 = Lcdport.2 , _
   Db7 = Lcdport.3 , E = Lcdport.5 , Rs = Lcdport.4

Config Lcd = 16 * 1
Cursor Off , Noblink
'---------------------------------------
Config 1wire = Pinbus                                       ' 1wire config

'------------------------variablen definieren------------
Dim Sensorid1(8) As Byte
Dim I As Byte
Dim Sc(9) As Byte
Dim T As Integer
Dim Gradanzeige1 As Single
Dim Temp As Byte
Dim Gradmin As Single
Gradmin = 500
Dim Gradmax As Single
Gradmax = 0
Dim Gradvorher As Single
Dim Tmp As Byte
Tmp = 0
'---------------------------------------------------

Gosub Sensorinit                                            ' sensor id auslesen


Do

   If Tmp > 3 Then Goto Back                                ' zähler min max anzeige
   Gosub Gettemp1                                           'sensor abfragen
   If Gradvorher <> Gradanzeige1 Then Gosub Tempausgabe     ' wenn temp geändert anzeigen
   Gradvorher = Gradanzeige1
   If Gradanzeige1 > Gradmax Then Gradmax = Gradanzeige1    ' max variable setzten wenn nötig
   If Gradanzeige1 < Gradmin Then Gradmin = Gradanzeige1    'dito mit min
   T = 580 - T                                              'lauflicht geschwindigkeit setzten
   Back:
   If Tmp > 0 Then Decr Tmp                                 'zähler min-max runterzählen bis 0
'--------------------lauflicht mit taster abfrage --------------------
   For I = 1 To 7
      Rotate Lauflicht , Left                               'lauflicht1 durchschieben
      If Taster1 = 0 Then Gosub Action1
      Waitms T
   Next

   Lauflicht = 0                                            ' lauflicht 1 ist zuende daher aus
   Lauflicht2.0 = 1                                         'lauflicht 2 beginnt daher 1. led an
   Waitms T
      For I = 1 To 5                                        'lauflicht 2 durchschieben
         If Taster1 = 0 Then Gosub Action1
         Rotate Lauflicht2 , Left
         Waitms T
      Next

      For I = 1 To 5                                        'lauflicht2 runterschieben
         Rotate Lauflicht2 , Right
         If Taster1 = 0 Then Gosub Action1
         Waitms T

      Next
      Lauflicht2.0 = 0                                      'lauflicht2 wieder am anfang daher aus
      Lauflicht.7 = 1                                       'lauflicht1 beginnt daher letztes bit auf 1
    Waitms T

    For I = 1 To 7
         If Taster1 = 0 Then Gosub Action1                  'lauflicht 1 runterschieben
         Rotate Lauflicht , Right
         Waitms T

   Next







Loop

End

Gettemp1:

 1wreset                                                    'bus initialisieren
 1wwrite &HCC
 1wwrite &H44
 Waitus 1000
 1wverify Sensorid1(1)                                      'sensor 1 auswählen
 1wwrite &HBE                                               'scratchpad lesen
 Sc(1) = 1wread(9)                                          'daten in arrea
    T = Makeint(sc(1) , Sc(2))                              'Byte 1 und 2 in integer
 Gradanzeige1 = T / 16                                      'integer in single und durch 16


Return

Tempausgabe:

   Locate 1 , 1
   Lcd "Temperatur = " ; Fusing(gradanzeige1 , "#.##") ; Chr(223) ; "C"



Return


Sensorinit:

Cls
Sensorid1(1) = 1wsearchfirst()                              'ersten sensor suchen
Locate 1 , 1
Lcd "ID "
For I = 1 To 8                                              'schleife um die 8 Byte der Senso ID auszulesen

Lcd Hex(sensorid1(i))
Next
Wait 1
Cls
Lcd "Sensor ok"
Wait 1


Return



Action1:

      Tmp = 5                                               'quasi zeitadauer für anzeige min max
      Cls
      Lcd "Min=" ; Fusing(gradmin , "#.##") ; "  Max=" ; Fusing(gradmax , "#.##")

      Return
 
Hallo,

ok der Code scheint akzeptabel zu sein, ich hätte aber dazu ein kleines Problem, so ca. alle 2 Tage hat das LCD keine Anzeige mehr.
Es geht nicht aus (sieht man am kontrast) und das Programm stürzt nicht ab, da das Lauflicht noch tut.
Ich denke ein Problem mir der abfrage des ds18B20 aber welches.
nach reset wider alles schick.

danke für Ideen
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)