Smith-mini-plane
User
Hallo Zusammen,
habe mir eine Temperaturüberwachung für meine CNC gemacht, basis ist ein Atmel Atmega 16.
Es gibt eine Schwellwert der je einen Lüfter für jeden Kanal xyz Schaltet zudem gibt es noch eine Übertempersschutz.
Und ein Life BIT. Ausgegen wird es auf ein 20 x 4 LCD.
Die Temp Sensoren sind 1 wire DS18B20 mit Drahtbrucherkennung.
Bin gerade noch am Layout dran.
Falls jemand Lust hat es nachzubauen,gerne hatte ja ach viel Hilfe beim Programmieren , da ich nicht der Programmierer Profi bin.
Anbei mal das Video
Und der Quellcode mit bascom geschrieben
habe mir eine Temperaturüberwachung für meine CNC gemacht, basis ist ein Atmel Atmega 16.
Es gibt eine Schwellwert der je einen Lüfter für jeden Kanal xyz Schaltet zudem gibt es noch eine Übertempersschutz.
Und ein Life BIT. Ausgegen wird es auf ein 20 x 4 LCD.
Die Temp Sensoren sind 1 wire DS18B20 mit Drahtbrucherkennung.
Bin gerade noch am Layout dran.
Falls jemand Lust hat es nachzubauen,gerne hatte ja ach viel Hilfe beim Programmieren , da ich nicht der Programmierer Profi bin.
Anbei mal das Video
Und der Quellcode mit bascom geschrieben
Code:
$regfile = "m16adef.dat"
$crystal = 4000000
$hwstack = 128
$framesize = 128
$swstack = 128
Config Lcd = 20 * 4
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
Config Portd.6 = Output 'LED Kabelbruch verknüpft mit Variable W
Config Portc.0 = Output ' Lüfter controller X
Config Portc.1 = Output ' Lüfter controller Y
Config Portc.2 = Output ' Lüfter controller Z
Config Porta.0 = Output ' Variable W
Config Porta.1 = Output ' Overheat
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer1_isr
Enable Timer1
Enable Interrupts
Const Timerstartwert = 49911 '1/4s
Timer1 = Timerstartwert
Config 1wire = Portd.7 '1 -wire Definieren
Dim Blinken As Byte
Dim Bly As Bit
Dim Dsid1(8) As Byte 'Arry für 1-Wire SN Messwerte Sensor 1 Wert 40 (Family-Code &28)
Dim Dsid2(8) As Byte 'Arry für 1-Wire SN Messwerte Sensor 2 Wert 40 (Family-Code &28)
Dim Dsid3(8) As Byte 'Arry für 1-Wire SN Messwerte Sensor 3 Wert 40 (Family-Code &28)
Dim Sc(9) As Byte 'scratchedpad (daten)
Dim I As Byte 'Variablen zur Messung
Dim Z As Byte
Dim W As Word 'Variable für Erkennung der Sensor die am Bus hängen
Dim Tl As Integer 'Umrechnungsvariablen
Dim Tm As Integer
Dim T(3) As Integer
Dim Tmil(3) As Integer
Dim Anzeigen As Bit
Dim Maxtemp As Integer ' Einstellen des Schwellwert ( für alle 3 Controller)
Maxtemp = 21 ' Einstellen des Gewünschten Wertes
Dim Uebertemp As Integer ' Abschaltung der Controller wegen Störung Übertemperatur
Uebertemp = 35 ' Einstellen des Gewünschten Wertes
Declare Sub Temper 'Unterprogramme deklarieren
Declare Sub Bdaten
Declare Sub Initial
Initlcd
Cursor Off
Deflcdchar 0 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32 ' Lüfterzeichen im lCD Display
Deflcdchar 1 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' Fakezeichen ohne Inhalt
Deflcdchar 2 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32 ' Lüfterzeichen im lCD Display
Deflcdchar 3 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32 ' Fakezeichen ohne Inhalt
Cls
'_______________________________________________________________________________
'Programmstart
Initial ' Starte Unterprogramm Initial
Do 'beginn Hauptschleife
If Anzeigen = 1 Then
Anzeigen = 0
'____________________________________________________________________________
'Schwellwert Einschalten Controller X
If T(1) > Maxtemp Then
Portc.0 = 1
Else
Portc.0 = 0
End If
'____________________________________________________________________________
'Schwellwert Einschalten Controller Y
If T(2) > Maxtemp Then
Portc.1 = 1
Else
Portc.1 = 0
End If
'____________________________________________________________________________
'Schwellwert Einschalten Controller Z
If T(3) > Maxtemp Then
Portc.2 = 1
Else
Portc.2 = 0
End If
'____________________________________________________________________________
'Anzeige Symbol iM LCD Controller X
Locate 2 , 20
If T(1) > Maxtemp Then
Lcd Chr(blinken)
Else
Lcd " "
End If
'____________________________________________________________________________
'Anzeige Symbol iM LCD Controller Y
Locate 3 , 20
If T(2) > Maxtemp Then
Lcd Chr(blinken)
Else
Lcd " "
End If
'____________________________________________________________________________
'Anzeige Symbol iM LCD Controller Z
Locate 4 , 20
If T(3) > Maxtemp Then
Lcd Chr(blinken)
Else
Lcd " "
End If
Incr Blinken
If Blinken = 2 Then
Blinken = 0 '2 * 1/4s, also 0,5s
Temper
End If
Gosub Overheat
'____________________________________________________________________________
End If
Loop
'################################################################################################### #######
'SUB OVERHEAT SUB OVERHEAT SUB OVERHEAT SUB OVERHEAT SUB OVERHEAT SUB OVERHEAT
Overheat:
If T(1) > Uebertemp Or T(2) > Uebertemp Or T(3) > Uebertemp Then
Porta.1 = 1
End If
If T(1) > Uebertemp Or T(2) > Uebertemp Or T(3) > Uebertemp Then
Cls
Locate 1 , 4
Lcd " OVERHEAT !!"
Locate 2 , 1
Lcd " CHECK AND RESET!!"
Stop
End If 'end program
Return
' Ende SUB OVERHEAT Ende SUB OVERHEAT Ende SUB OVERHEAT Ende SUB OVERHEAT Ede SUB OVERHEAT
'################################################################################################### #######
Timer1_isr: 'Blinken
Timer1 = Timerstartwert
Set Anzeigen
Toggle Portd.6
Return
'################################################################################################### #######
' Beginn Unterprogramm Temper
Sub Temper
1wverify Dsid1(1) 'sensor auswählen
If Dsid1(1) = 40 Then
Call Bdaten 'Daten holen und umsetzen
End If
T(1) = T(z)
Tmil(1) = Tmil(z)
If W > 1 Then '2ten temp rein
1wverify Dsid2(1) 'Sensor auswählen
If Dsid2(1) = 40 Then 'Daten holen und umsetzen
Call Bdaten
End If
T(2) = T(z)
Tmil(2) = Tmil(z)
If W > 2 Then '3ten temp rein
1wverify Dsid3(1) 'Sensor auswählen
If Dsid3(1) = 40 Then 'Daten holen und umsetzen
Call Bdaten
End If
T(3) = T(z)
Tmil(3) = Tmil(z)
End If
End If
1wreset 'skip rom &HCC
1wwrite &HCC
1wwrite &H44
Cursor Off
Locate 1 , 1
Lcd "Controller XYZ Temp." 'Ausgabe der Messwerte
Locate 2 , 1 'Controller Achse X
Lcd "Controller X"
Locate 2 , 14
Lcd T(1)
Locate 2 , 16
Lcd ","
Locate 2 , 17
Lcd Tmil(1)
Locate 2 , 18
Lcd "C"
Locate 3 , 1 'Controller Achse Y
Lcd "Controller Y"
Locate 3 , 14
Lcd T(2)
Locate 3 , 16
Lcd ","
Locate 3 , 17
Lcd Tmil(2)
Locate 3 , 18
Lcd "C"
Locate 4 , 1 'Controller Achse Z
Lcd "Controller Z"
Locate 4 , 14
Lcd T(3)
Locate 4 , 16
Lcd ","
Locate 4 , 17
Lcd Tmil(3)
Locate 4 , 18
Lcd "C"
End Sub
' Ende Unterprogramm Temper
'################################################################################################### #######
' Starte Unterprogramm Bdaten
Sub Bdaten ' Auflösung 0,5°
1wwrite &HBE
Sc(1) = 1wread(9)
If Sc(9) = Crc8(sc(1) , 8) Then
Tl = Sc(1) And &B11110000 '&B11110000
Tm = Sc(2)
T(z) = Makeint(tl , Tm)
T(z) = T(z) / 16 ' T(z) = T(z) / 2
Tmil(z) = Sc(1) And &B00001111 '&B00001111
Tmil(z) = Tmil(z) * 100 'Tmil(z) = Tmil(z) * 5
Tmil(z) = Tmil(z) / 160
End If
End Sub
' Ende Unterprogramm Bdaten
'################################################################################################### #######
' Starte Unterprogramm INITIAL
Sub Initial
W = 1wirecount()
Locate 1 , 1
Lcd "Sensoren"
Cls
Dsid1(1) = 1wsearchfirst()
Locate 1 , 1
Lcd Dsid1(1)
Waitms 500
If W > 1 Then
Dsid2(1) = 1wsearchnext()
Locate 2 , 1
Lcd Dsid2(1)
Wait 1
End If
If W > 2 Then
Dsid3(1) = 1wsearchnext()
Locate 3 , 1
Lcd Dsid3(1)
Wait 1
End If
If W < 3 Then
Cls
Locate 1 , 5
Lcd "Sensoren"
Locate 2 , 5
Lcd "pruefen"
Wait 1
If W < 3 Then
Porta.0 = 1
End If
Stop
End If
End Sub
' Ende Unterprogramm INITIAL
'################################################################################################### ###