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.
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