Hi Cassio
Vielen Dank für deine Antwort
Hier mal der Code
CodeBox Bascom
'--------------------------------------------------------------------------'
' '
' 2010, Phantomias '
' Freeware '
'--------------------------------------------------------------------------'
'
'--------------------------------------------------------------------------'
$regfile = "m16def.dat" 'definieren des verwendeten Chips
$crystal = 8000000 'definieren des verwendeten externen Quarz (8MHz)
'-------------------------------------------------------------------------------
'###############################################################################
'Display Konfigurieren ########################################################
'###############################################################################
'-------------------------------------------------------------------------------
' Configuriere das LCD
'some routines to control the display are in the glcdKS108.lib file
$lib "glcdKS108.lbx"
'First we define that we use a graphic LCD
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Portd , Cd = 0 , Rd = 1 , Ce = 2 , Ce2 = 3 , Enable = 4 , Reset = 5
'CE =CS1 Chip select
'CE2=CS2 Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable
Setfont Font8x8 'Schrift einbinden
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'1wire Port definieren ########################################################
'###############################################################################
'-------------------------------------------------------------------------------
Config 1wire = Porta.3 'Tempfühler DS18S20
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'Variablen definieren ########################################################
'###############################################################################
'-------------------------------------------------------------------------------
Dim Ist_temp As Single ' Ist-Temperatur
Dim Temp As Word '
Dim Temp1 As Integer '
Dim Scratch(9) As Byte '
Dim I1w As Byte '
Dim Min1 As Single
Dim Max1 As Single
Min1 = 9999
Dim Akt As String * 10
Dim Minn As String * 10
Dim Maxx As String * 10
Dim Tempon As Single
Dim Tempoff As Single
Dim Line1 As String * 20
Dim Line2 As String * 20
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'DS1307 Konfigurieren: ###################################################
'###############################################################################
'-------------------------------------------------------------------------------
Config Sda = Porta.1 ' I2C Bus konfigurieren
Config Scl = Porta.0
Const Ds1307w = &HD0 ' Addresse der Ds1307 Uhr
Const Ds1307r = &HD1
Config Clock = User ' Interne Time/Date Routinen für Bascom konfigurieren
'Config Dcf77 = Pina.2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Update = 0 , Check = 1 , Inverted = 1 , Gosub = Sectic
'Dim Puls As Bit , Sync As Bit , Sec_z As Byte
'Enable Interrupts
Config Date = Dmy , Separator = .
'Time$ = "21:36:00"
'Date$ = "11.01.11" ' Stellen der Uhr, muss nur einmal ausgeführt werden
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'Timer1: ###################################################
'###############################################################################
'-------------------------------------------------------------------------------
Config Timer1 = Timer, Prescale = 256
On Timer1 Timer_irq
Const Timervorgabe = 34286
Enable Timer1
Enable Interrupts
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'Startbildschirm anzeigen: ###################################################
'###############################################################################
'-------------------------------------------------------------------------------
Gosub Lcd_cls2 'Anzeige löschen
Gosub Lcd_line
Lcdat 2 , 12 , ""
Lcdat 3 , 9 , ""
Lcdat 4 , 9 , ""
Lcdat 5 , 3 , ""
'-----------------Temperaturmessung starten für richtigen Wert nach dem Start---
'Gosub Get_1wire_1
'Do
' Temp = 1wread() ' Ende der Temperaturmessung abwarten
'Loop Until Temp = &HFF
Wait 2
Gosub Lcd_cls2 'Anzeige löschen
Gosub Lcd_line
Gosub Lcd_line1
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'Hauptschleife ###############################################################
'###############################################################################
'-------------------------------------------------------------------------------
Do
Lcdat 7 , 5 , Date$
Lcdat 8 , 5 , Time$
Gosub Get_1wire_1
Gosub Get_1wire_2
Gosub Anzeige
Gosub Temp_on_off
Gosub Schaltuhr1
Loop
End
'###############################################################################
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'###############################################################################
'Sub Funktionen: ##############################################################
'###############################################################################
'-------------------------------------------------------------------------------
'---------------------------------------------------------------------
'Timer1 ###########################################
'---------------------------------------------------------------------
Timer_irq:
Timer1 = Timervorgabe
Return
'---------------------------------------------------------------------
'Schaltuhr ###########################################
'---------------------------------------------------------------------
Schaltuhr1:
If Time$ > "07:00:00" And Time$ < "09:00:00" Then
Lcdat 8 , 80 , "Ein 1"
Else
Lcdat 8 , 80 , "Aus 1"
End If
Return
'---------------------------------------------------------------------
'TempAnzeige für Display ###########################################
'---------------------------------------------------------------------
Anzeige:
If Scratch(9) = Crc8(scratch(1) , 8) Then
If Ist_temp > Max1 Then
Max1 = Ist_temp
Maxx = Fusing(max1 , " ##.#")
Lcdat 4 , 90 , Maxx
Elseif Ist_temp < Min1 Then
Min1 = Ist_temp
Minn = Fusing(min1 , " ##.#")
Lcdat 3 , 90 , Minn
Else
End If
Akt = Fusing(ist_temp , "##.#")
Lcdat 3 , 9 , Akt
Else
End If
Return
'#####################################################################
'---------------------------------------------------------------------
'---------------------------------------------------------------------
'Rahmen für Display #################################################
'---------------------------------------------------------------------
Lcd_line1:
Line1 = " Temp: Min-Max"
Lcdat 1 , 1 , Line1 , 1
Line1 = "Uhrzeit: "
Lcdat 5 , 1 , Line1 , 1
Line1 = " " + Chr(248) + "C"
Lcdat 3 , 9 , Line1
Return
Lcd_line:
'Line oben links rechts
Line(0 , 0) -(128 , 0) , 255
'Line links oben unten
Line(0 , 0) -(0 , 63) , 255
'Line rechts oben unten
Line(127 , 0) -(127 , 63) , 255
Return
'#####################################################################
'---------------------------------------------------------------------
'---------------------------------------------------------------------
'Get_1wire ################################################
'---------------------------------------------------------------------
Get_1wire_1:
1wreset
1wwrite &HCC
1wwrite &H44
Do
Temp = 1wread() ' Ende der Temperaturmessung abwarten
Loop Until Temp = &HFF
Return
Get_1wire_2:
1wreset
1wwrite &HCC
1wwrite &HBE
For I1w = 1 To 9
Scratch(i1w) = 1wread()
Next
'Temp = Scratch(2)
'Shift Temp , Left , 8
'Temp = Temp + Scratch(1)
'Temp1 = Temp
Temp1 = Makeint(scratch(1) , Scratch(2))
Temp1 = Temp1 / 2
Ist_temp = Scratch(8) - Scratch(7)
Ist_temp = Ist_temp / Scratch(8)
Ist_temp = Ist_temp + Temp1
Ist_temp = Ist_temp - 0.25
Return
'---------------------------------------------------------------------
'Temp Steuerung: ############################################
'---------------------------------------------------------------------
Temp_on_off:
Tempon = Tempoff - 0.5
Tempoff = 28
If Ist_temp > Tempoff Then
Lcdat 7 , 90 , "Aus"
Elseif Ist_temp < Tempon Then
Lcdat 7 , 90 , "Ein"
Else
End If
Return
'#####################################################################
'---------------------------------------------------------------------
'---------------------------------------------------------------------
'Uhr mit DS1307 ####################################################
'---------------------------------------------------------------------
Dim Weekday As Byte
Getdatetime:
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen
I2cstart ' Start
I2cwbyte Ds1307r ' DS1307 lesen (ab vorher eingestellter Adresse 0)
I2crbyte _sec , Ack ' Sekunden
I2crbyte _min , Ack ' Minuten
I2crbyte _hour , Ack ' Stunden
I2crbyte Weekday , Ack ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
I2crbyte _day , Ack ' Tag
I2crbyte _month , Ack ' Monat
I2crbyte _year , Nack ' Jahr
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 4 ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
I2cwbyte _day ' Tag schreiben
I2cwbyte _month ' Monat schreiben
I2cwbyte _year ' Jahr schreiben
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen
I2cwbyte _sec ' Sekunden schreiben
I2cwbyte _min ' Minuten schreiben
I2cwbyte _hour ' Stunden schreiben
I2cstop
Return
'#####################################################################
'---------------------------------------------------------------------
'---------------------------------------------------------------------
'Display löschen ####################################################
'---------------------------------------------------------------------
Lcd_cls2:
Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 ' both displays off
Cls
Waitms 10
Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2 'both on
Return
'#####################################################################
'---------------------------------------------------------------------
$include "font8x8.font"