Code:
'### Controller Definition ###
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 4800
$hwstack = 32
$swstack = 8
$framesize = 24
'### Dim Variablen ###
Dim Ein As Bit ' Startvariable
Dim I As Byte
Dim B As Byte 'Nachfolgende Dims sind für Temperatur
Dim W As Word
Dim Dg As Integer
Dim Min1 As Integer
Dim Min2 As Integer
Dim Max1 As Integer
Dim Max2 As Integer
Dim Dsid1(8) As Byte
Dim Sc(9) As Byte
Dim Temp_$ As String * 6
Dim Temp_$2 As String * 10
Dim Tempsend As String * 10
Dim Temp1mal As Bit
Dim Ttlwert As Bit ' TTL Variable 1 Bit
Dim Zaehlerirq0 As Long
Dim Impulseprosekunde As Long ' Variable für Drehzahl
Dim Zeitwert As Long
Dim Drehzahl As Long
Dim Drehzahlanzeige As Long
Dim Drehzahlsend As String * 3
Dim Drehzahlformat As String * 4
Dim Drehzahlformat1 As String * 4
Dim Backlight As Byte
Dim Zeitmessung As Word ' Ab hier Variablen für abstand
Dim Entfernung As Word
Dim Text As String * 10
Dim Entfernungneu As Word
Dim Entfernungsend As String * 3
'### Declare Subs ###
Declare Sub Init
Declare Sub Convallt
Declare Sub Tempmodul
Declare Function Decigrades(byval Sc(9) As Byte ) As Integer
Declare Sub Fullstand
'### Grafikroutine ###
$lib "glcdks108.lib"
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Porta , Ce = 1 , Ce2 = 0 , Cd = 2 , Rd = 3 , Reset = 4 , Enable = 5
Cls
'### Portkonfiguration ###
Config Portb.0 = Output
Config Pinb.2 = Input
Config Portb.3 = Input
Config Portb.4 = Output
Ledpower Alias Portb.0
Resetbutton Alias Pinb.3
Lcdpower Alias Portb.4
Config 1wire = Portd.6
Ledpower = 1
'Ocr2 = 255
'### Interrupts ###
Config Int2 = Falling
Config Int0 = Change
Config Int1 = Rising
Enable Interrupts
Enable Int2
On Int2 Powerbutton
'Enable Int0
On Int0 Ttl
'Enable Int1
On Int1 Irq0
'### Timer ###
Config Timer0 = Timer , Prescale = 1024
Config Timer1 = Timer , Prescale = 256
Config Timer2 = Pwm , Compare Pwm = Clear Up , Pwm = On , Prescale = 8
On Timer1 Timer_irq
Const Timervorgabe = 3036
'### Boot ###
Ein = 0
Temp1mal = 0
Zeitwert = 0
Drehzahl = 0
Drehzahlanzeige = 0
Zaehlerirq0 = 0
Impulseprosekunde = 0
'Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 ' Display ausschalten
'### Start ###
Starting:
If Ein = 1 Then Goto Systemstart
Goto Starting
'### Main ###
Main:
Debounce Resetbutton , 0 , Resetmachen , Sub
If Ein = 0 Then Goto Systemend
Wait 1
Call Tempmodul
Wait 1
Call Fullstand
Goto Main
'### Powerbutton Int2 ###
Powerbutton:
Toggle Ledpower
Return
'### Include Dateien ###
$include "system.bas"
$include "kay.font"
Lcdmain:
$bgf "lcdmain.bgf"
Lcdsplash:
$bgf "splash.bgf"
Lcdreset:
$bgf "reset.bgf"
Ende:
$bgf "end.bgf"
hier die dazugehörige System.bas :
Code:
'### Systemstart ###
Systemstart:
Ledpower = 1
Waitms 500
Ledpower = 0
Waitms 500
Ledpower = 1
Waitms 500
Ledpower = 0
Waitms 500
Ledpower = 1
Waitms 500
Ledpower = 0
Waitms 500
Ledpower = 1
Drehzahlanzeige = 0
Lcdpower = 1
Portd.7 = 1
Waitms 100
Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2 ' Display einschalten
Cls
Showpic 0 , 0 , Lcdsplash
For Backlight = 0 To 255
Ocr2 = Backlight
Waitms 25
Next Backlight
Showpic 0 , 0 , Lcdmain
Setfont Kay
Lcdat 2 , 11 , "'C"
Lcdat 2 , 41 , "mm"
Lcdat 2 , 72 , "Upm"
Lcdat 2 , 102 , "0/1"
'Lcdat 3 , 38 , "100"
Lcdat 3 , 73 , " 0"
'Lcdat 3 , 106 , "1"
Enable Timer1
Enable Int0
Enable Int1
Dsid1(1) = 1wsearchfirst()
If Pind.2 = 1 Then
Lcdat 3 , 106 , "1"
Ttlwert = 1
Else
If Pind.2 = 0 Then
Lcdat 3 , 106 , "0"
Ttlwert = 0
End If
End If
Goto Main
'### Systemend ###
Systemend:
Disable Int0
Disable Int1
Disable Timer1
Ein = 0
Temp1mal = 0
Zeitwert = 0
Drehzahl = 0
Drehzahlanzeige = 0
Zaehlerirq0 = 0
Impulseprosekunde = 0
Ledpower = 0
Waitms 500
Ledpower = 1
Waitms 500
Ledpower = 0
Waitms 500
Ledpower = 1
Waitms 500
Ledpower = 0
Waitms 500
Ledpower = 1
Waitms 500
Ledpower = 0
Showpic 0 , 0 , Ende
For Backlight = 255 To 0 Step -1
Ocr2 = Backlight
Waitms 15
Next Backlight
Cls
Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 ' Display ausschalten
Waitms 100
Lcdpower = 0
Portd.7 = 0
Goto 0
'--- Temperaturmodul --
Sub Tempmodul
Call Convallt ' "Convert ALL T on the 1w-bus"
Waitus 200 : Waitus 200 : Waitus 200 : Waitus 200 'if you use 2-wire, could be reduced to 200us
1wverify Dsid1(1) 'Issues the "Match ROM "
'Locate 1 , 1
'If Err = 1 Then
' Lcdat 3 , 4 , "Err " 'Err = 1 if something is wrong
'Elseif Err = 0 Then 'lcd " Sensor found"
1wwrite &HBE
Sc(1) = 1wread(9) 'read bytes into array
If Sc(9) = Crc8(sc(1) , 8) Then
Dg = Decigrades(sc(9))
Temp_$ = Str(dg)
Temp_$ = Format(temp_$ , "+#0.0")
Tempsend = Str(dg)
Tempsend = Format(tempsend , "+#00.0")
Temp_$2 = Temp_$ + " "
If Temp1mal = 0 Then
Lcdat 3 , 4 , "Check"
Temp1mal = 1
Else
If Temp1mal = 1 Then
Lcdat 3 , 4 , Temp_$2
End If
End If
End If
Waitms 500
End Sub
'--- Temperatur konvertieren ---
Sub Convallt
1wreset ' reset the bus
1wwrite &HCC ' skip rom
1wwrite &H44 ' Convert T
End Sub
'--- Funktion zum auslesen des Temperatursensors ---
Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte , T As Integer , T1 As Integer
Tmp = Sc(1) And 1 ' 0.1C precision
If Tmp = 1 Then Decr Sc(1)
T = Makeint(sc(1) , Sc(2))
'Print Hex(t)
'Print T
T = T * 50 'here we calculate the 1/10 precision like
T = T - 25 'DS18S20 data sheet
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
Decigrades = T / 10
End Function
'--- TTL abfragen ---
Ttl:
If Pind.2 = 1 Then
Lcdat 3 , 106 , "1"
Ttlwert = 1
Else
If Pind.2 = 0 Then
Lcdat 3 , 106 , "0"
Ttlwert = 0
End If
End If
Return
'--- Irq für drehzahlsensor ---
Irq0:
Incr Zaehlerirq0
Incr Drehzahl
Return
'--- Timer irq für Drehzahlsensor ---
Timer_irq:
Timer1 = Timervorgabe
Impulseprosekunde = Zaehlerirq0
Zaehlerirq0 = 0
Incr Zeitwert
Drehzahlformat = Str(drehzahlanzeige)
Drehzahlsend = Format(drehzahlformat , "000")
'Lcdat 3 , 38 , Zeitwert
If Zeitwert = 10 Then Print Tempsend ; ";" ; Entfernungsend ; ";" ; Drehzahlsend ; ";" ; Ttlwert
If Zeitwert = 20 Then Print Tempsend ; ";" ; Entfernungsend ; ";" ; Drehzahlsend ; ";" ; Ttlwert
If Zeitwert = 30 Then Print Tempsend ; ";" ; Entfernungsend ; ";" ; Drehzahlsend ; ";" ; Ttlwert
If Zeitwert = 40 Then Print Tempsend ; ";" ; Entfernungsend ; ";" ; Drehzahlsend ; ";" ; Ttlwert
If Zeitwert = 50 Then Print Tempsend ; ";" ; Entfernungsend ; ";" ; Drehzahlsend ; ";" ; Ttlwert
If Zeitwert = 60 Then
Drehzahlanzeige = Drehzahl
Drehzahlformat = Str(drehzahlanzeige)
Drehzahlsend = Format(drehzahlformat , "000")
Print Tempsend ; ";" ; Entfernungsend ; ";" ; Drehzahlsend ; ";" ; Ttlwert
If Drehzahlanzeige < 9 Then
Drehzahlformat = " " + Drehzahlformat
Lcdat 3 , 73 , Drehzahlformat
End If
If Drehzahlanzeige > 9 And Drehzahlanzeige < 99 Then
Drehzahlformat = " " + Drehzahlformat
Lcdat 3 , 73 , Drehzahlformat
End If
If Drehzahlanzeige > 99 Then
Lcdat 3 , 73 , Drehzahlformat
End If
'Lcdat 3 , 72 , Drehzahlformat
Zeitwert = 0
Drehzahl = 0
End If
Return
'--- Resetmachen ---
Resetmachen:
Disable Timer1
Disable Int0
Disable Int1
Cls
Showpic 0 , 0 , Lcdreset
Setfont Kay
Wait 1
Lcdat 4 , 15 , "TemperatUr"
Waitms 500
Lcdat 4 , 80 , "OK"
Wait 1
Lcdat 5 , 15 , "Fullstand"
Waitms 500
Lcdat 5 , 80 , "OK"
Wait 1
Lcdat 6 , 15 , "Drehzahl"
Waitms 500
Lcdat 6 , 80 , "OK"
Wait 1
Lcdat 7 , 15 , "TTL"
Waitms 500
Lcdat 7 , 80 , "OK"
Wait 2
Zeitwert = 0
Drehzahl = 0
Drehzahlanzeige = 0
Zaehlerirq0 = 0
Impulseprosekunde = 0
Cls
Showpic 0 , 0 , Lcdmain
Lcdat 2 , 11 , "'C"
Lcdat 2 , 41 , "mm"
Lcdat 2 , 72 , "Upm"
Lcdat 2 , 102 , "0/1"
Lcdat 3 , 73 , " 0"
'Lcdat 3 , 37 , "0"
If Pind.2 = 1 Then
Lcdat 3 , 106 , "1"
Ttlwert = 1
Else
If Pind.2 = 0 Then
Lcdat 3 , 106 , "0"
Ttlwert = 0
End If
End If
Enable Timer1
Enable Int0
Enable Int1
Return
'--- Sub für Füllstand ---
Sub Fullstand
Portd.5 = 0
Pulseout Portd , 5 , 40
Pulsein Zeitmessung , Pind , 5 , 1
Zeitmessung = Zeitmessung * 10
Entfernung = Zeitmessung / 5.8
Entfernungneu = 181 - Entfernung
If Entfernungneu > 3000 Then
Entfernungneu = 0
End If
Text = Str(entfernungneu)
Entfernungsend = Format(text , "000")
If Entfernungneu < 9 Then
Text = " " + Text
Lcdat 3 , 37 , Text
End If
If Entfernungneu > 9 And Entfernungneu < 99 Then
Text = " " + Text + " "
Lcdat 3 , 37 , Text
End If
If Entfernungneu > 99 Then
Lcdat 3 , 37 , Text
End If
End Sub
Brenne ich aber ein kleines Programm, wie z.B. das hier dann läuft das kleine programm.
Lesezeichen