mh die Regelung funzt jetzt 1a , allerdings kackt mein mega8 immer ab ?!
sendet dann nurnoch murks (wilde zeichen) über Rs232.
schon komisch.
Hier mein komplettes Programm, kanns sein das mein Mega einfach alt is ? bzw ich ihn zu oft beschrieben und gelöschd hab ? und er deshalb nicht mehr geht?
sendet dann nurnoch murks (wilde zeichen) über Rs232.
schon komisch.
Hier mein komplettes Programm, kanns sein das mein Mega einfach alt is ? bzw ich ihn zu oft beschrieben und gelöschd hab ? und er deshalb nicht mehr geht?
Code:
'HEADER##########################################
$regfile = "m8def.dat" 'Chip
$baud = 9600 'Baud für RS232
$crystal = 8000000 'Quarz auf 8mhz eingestellt
$hwstack = 32 'Standardwert 32 für hardware stack
$swstack = 10 'Standardwert 10 für the SW stack
$framesize = 40 'Standardwert 40 für the frame space
'Ein/Ausgänge configurieren
Config 1wire = Portd.2 '1-Wire Pins Configurieren
Config Portb.1 = Output 'PWM Out1
Config Portb.2 = Output 'PWM Out2
Config Portd.3 = Output 'Piezo
'Ein/Ausgängen Namen Zuweisen
Piezo Alias Portd.3
'Declarationen
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1024
Declare Function Piregler(byval Istwert As Single , Channel As Byte) As Single
'Variablen Config
Dim Scratch(9) As Byte 'werte des Temp sensors
Dim Temp As Word 'temperatur vorverarbeitungswert
Dim Temp1 As Integer 'temporärer tempwert
Dim Ist_temp1 As Single 'ist temperatur Gehäuse
Dim Ist_temp2 As Single 'ist temperatur Kühler
Dim Sensor1(8) As Byte 'Array Sensor Gehäuse
Dim Sensor2(8) As Byte 'Array Sensor Kühler
Dim Ausgabe As Single
Dim Piregel1 As Single
Dim Piregel2 As Single
Dim Change1 As Byte 'wandelt das ergbnis der Funktion Pi_regler in Word format
Dim Change2 As Byte 'wandelt das ergbnis der Funktion Pi_regler in Word format
Dim Sollwert As Single 'Sollwert = Gewünschte Temp
Dim Regelgroesse As Single 'Ergebnis der PI_regler funktion
Dim Kri As Integer 'Integrierbeiwert
Dim Krp As Integer 'Proportionalbeiwert
Dim Channel As Word 'Enthält Kanal change oder change1
Dim Alarm As Single 'alarm temperatur!
'Variablen setzen
Kri = 1
Krp = 10 '20
Sollwert = 25 'Sollwert auf 40°C setzen
Alarm = 70 'Alarmtemperatur
'$sim
'PROGRAMM########################################
Sensor1(1) = 1wsearchfirst() 'Suche nach erstem Gerät am Bus
If Err = 0 Then 'Wenns ein Gerät am Bus gibt
Do 'Nach Weiterem Gerät Suchen
Sensor2(1) = 1wsearchnext() 'Bis es keine mehr gibt
Loop Until Err = 1
End If
'Print Hex(sensor1(1)) 'familycode sensor1 ausgeben
'Print Hex(sensor2(1)) 'familycode sensor2 ausgebe
Do 'Beginn Der Hauptschleife
Enable Timer1
Start Timer1
'Temp auslesen von DS18S20 Gehäusetemp, Family code &H10=(dez)16
1wreset ' Initialisierung
1wwrite &HCC ' überspringe ROM-Befehl
1wwrite &H44 ' Temperaturmessung anstoßen
Wait 1 ' warten bis Messung fertig
1wreset ' Initialisierung
1wverify Sensor1(1) 'sensor mit bestimmter id ansprechen
1wwrite &HBE ' Temperatur auslesen
Scratch(1) = 1wread(9) 'scratchpad auslesen
'Print Hex(crc8(Scratch(1) , 7) ) ' Prüfsumme ausgeben
'If Scratch(8) = Crc8(scratch(1) , 7) Then ' Prüfsumme vergleichen
' Print "Daten OK"
' Else
' Print "Fehler"
'End If
Temp = Scratch(2)
Shift Temp , Left , 8
Temp = Temp + Scratch(1)
Temp1 = Temp
Temp1 = Temp1 / 2
Ist_temp1 = Scratch(8) - Scratch(7)
Ist_temp1 = Ist_temp1 / Scratch(8)
Ist_temp1 = Ist_temp1 + Temp1
Ist_temp1 = Ist_temp1 - 0.25
'Temp auslesen von DS1822 Kühlertemp, Family code &H22=(dez)34
1wreset ' Initialisierung
1wwrite &HCC ' überspringe ROM-Befehl
1wwrite &H44 ' Temperaturmessung anstoßen
Wait 1 ' warten bis Messung fertig
1wreset ' Initialisierung
1wverify Sensor2(1) ' sensor mit bestimmter id ansprechen
1wwrite &HBE ' Temperatur auslesen
Scratch(1) = 1wread(9) 'scratchpad auslesen
'Print Hex(crc8(scratch(1) , 7) ) ' Prüfsumme ausgeben
'If Scratch(8) = Crc8(scratch(1) , 7) Then ' Prüfsumme vergleichen
' Print "Daten OK"
'Else
'' Print "Fehler"
'End If
Temp = Scratch(2) 'MSB holen
Shift Temp , Left , 8 'Platz für LSB machen
Temp = Temp + Scratch(1) 'zu Word Format zusammenfügen
Temp1 = Temp 'Integer Format
Temp1 = Temp1 / 16
Ist_temp2 = Scratch(8) - Scratch(7)
Ist_temp2 = Ist_temp2 / Scratch(8)
Ist_temp2 = Ist_temp2 + Temp1
Ist_temp2 = Ist_temp2 - 0.25
'Hauptprogramm#################################
Piregel1 = Piregler(ist_temp1 , Change1) 'funktion regler aufrufen
Piregel2 = Piregler(ist_temp2 , Change2) 'funktion regler aufrufen
Change1 = Piregel1 'in typ word wandeln
Change2 = Piregel2 'in typ word wandeln
'If Anzahl_sensoren <= 2 Then
' Compare1b = 255 'Gehäuselküfter
' Compare1a = 255
'Else
Compare1b = Change1 'Gehäuselküfter 'weisst compare1a den wert von Change zu
Compare1a = Change2 'Kühlerlüfter 'weisst compare1a den wert von Change zu
'End If
If Ist_temp1 > Alarm Then
Set Piezo
Else
Reset Piezo
End If
'sonstige Ausgaben############################
'KONTROLLWERTE ÜBERMITTELN ÜBER RS232
Print Change1 ; "|" ; Change2 ; "|" ; Ist_temp1 ; "|" ; Ist_temp2 ;
Print
Loop
End
'Funktion PI-Regeler#########################################
Function Piregler(byval Istwert As Single , Channel As Word) As Byte
Local Regeldifferenz As Single 'Regeldifferenz
Local Pverstellung As Integer
Local Iverstellung As Integer
Local Tmp_i As Integer
Local Tmp_i2 As Integer
Local I_alt As Integer
'Regelbedingung
Regeldifferenz = Istwert - Sollwert
'P-Anteil
Pverstellung = Regeldifferenz * Krp
If Pverstellung < 0 Then Pverstellung = 0
If Pverstellung > 255 Then Pverstellung = 255
'I Anteil
Tmp_i = Regeldifferenz * Kri
Tmp_i2 = Tmp_i '/ T
I_alt = Iverstellung
If Channel < 255 Then ' Integral wirkt erst im Regelbereich
Iverstellung = Tmp_i2 + I_alt
Else
Iverstellung = Tmp_i2
End If
If Iverstellung < 0 Then Iverstellung = 0
If Iverstellung > 255 Then Iverstellung = 255
'Ergebnis
Ausgabe = Iverstellung + Pverstellung
If Ausgabe < 0 Then Ausgabe = 0
If Ausgabe > 255 Then Ausgabe = 255
Print "Regeldifferenz: " ; Regeldifferenz ; " | Temp: " ; Istwert ; " | P: " ; Pverstellung ; " | I: " ; Iverstellung ;
Print
If Regeldifferenz > 0 Then
Piregler = Ausgabe
Else
'Pverstellung = 0
'Iverstellung = 0
Piregler = 0
End If 'entspricht der regelgröße
End Function
HTML:
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 30
Regeldifferenz: 5.875 | Temp: 30.875 | P: 58 | I: 35
0|93|23.9375|30.875
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 34
Regeldifferenz: 6.25 | Temp: 31.25 | P: 62 | I: 40
0|102|23.9375|31.25
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 39
Regeldifferenz: 6.5625 | Temp: 31.5625 | P: 65 | I: 45
0|110|23.9375|31.5625
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 44
Regeldifferenz: 6.8125 | Temp: 31.8125 | P: 68 | I: 50
0|118|24.0|31.8125
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 49
Regeldifferenz: 7.0 | Temp: 32.0 | P: 70 | I: 56
0|126|24.0|32.0
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 55
Regeldifferenz: 7.1875 | Temp: 32.1875 | P: 71 | I: 62
0|133|24.0|32.1875
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 61
Regeldifferenz: 7.4375 | Temp: 32.4375 | P: 74 | I: 68
0|142|24.0|32.4375
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 67
Regeldifferenz: 7.5 | Temp: 32.5 | P: 75 | I: 74
0|149|24.0|32.5
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 73
Regeldifferenz: 7.5 | Temp: 32.5 | P: 75 | I: 80
0|155|23.9375|32.5
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 79
Regeldifferenz: 7.125 | Temp: 32.125 | P: 71 | I: 86
0|157|23.9375|32.125
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 85
Regeldifferenz: 6.1875 | Temp: 31.1875 | P: 61 | I: 91
0|152|24.0|31.1875
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 90
Regeldifferenz: 5.25 | Temp: 30.25 | P: 52 | I: 95
0|147|24.0|30.25
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 94
Regeldifferenz: 4.3125 | Temp: 29.3125 | P: 43 | I: 98
0|141|24.0|29.3125
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 97
Regeldifferenz: 3.75 | Temp: 28.75 | P: 37 | I: 100
0|137|23.9375|28.75
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 99
Regeldifferenz: 3.25 | Temp: 28.25 | P: 32 | I: 102
0|134|23.9375|28.25
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 101
Regeldifferenz: 2.8125 | Temp: 27.8125 | P: 28 | I: 103
0|131|23.9375|27.8125
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 102
Regeldifferenz: 2.4375 | Temp: 27.4375 | P: 24 | I: 104
0|128|23.9375|27.4375
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 103
Regeldifferenz: 2.25 | Temp: 27.25 | P: 22 | I: 105
0|127|23.9375|27.25
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 104
Regeldifferenz: 1.9375 | Temp: 26.9375 | P: 19 | I: 105
0|124|23.9375|26.9375
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 104
Regeldifferenz: 1.625 | Temp: 26.625 | P: 16 | I: 105
0|121|24.0|26.625
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 104
Regeldifferenz: 1.1875 | Temp: 26.1875 | P: 11 | I: 105
0|116|24.0|26.1875
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 104
Regeldifferenz: 0.75 | Temp: 25.75 | P: 7 | I: 104
0|111|24.0|25.75
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 103
Regeldifferenz: 0.375 | Temp: 25.375 | P: 3 | I: 103
0|106|24.0|25.375
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 102
Regeldifferenz: 0.0625 | Temp: 25.0625 | P: 0 | I: 102
0|102|24.0|25.0625
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 101
Regeldifferenz: -0.25 | Temp: 24.75 | P: 0 | I: 101
0|0|23.9375|24.75
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 100
Regeldifferenz: -0.5 | Temp: 24.5 | P: 0 | I: 100
0|0|23.9375|24.5
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 99
Regeldifferenz: -0.625 | Temp: 24.375 | P: 0 | I: 99
0|0|23.9375|24.375
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 98
Regeldifferenz: -0.6875 | Temp: 24.3125 | P: 0 | I: 98
0|0|23.9375|24.3125
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 97
Regeldifferenz: -0.75 | Temp: 24.25 | P: 0 | I: 97
0|0|23.9375|24.25
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 96
Regeldifferenz: -0.8125 | Temp: 24.1875 | P: 0 | I: 96
0|0|23.9375|24.1875
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 95
Regeldifferenz: -0.875 | Temp: 24.125 | P: 0 | I: 95
0|0|23.9375|24.125
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 94
Regeldifferenz: -0.9375 | Temp: 24.0625 | P: 0 | I: 94
0|0|23.9375|24.0625
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 93
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 92
0|0|23.9375|24.0
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 91
Regeldifferenz: -1.0 | Temp: 24.0 | P: 0 | I: 90
0|0|23.9375|24.0
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 89
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 88
0|0|23.875|23.9375
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 87
Regeldifferenz: -1.0625 | Temp: 23.9375 | P: 0 | I: 86
0|0|23.875|23.9375
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 85
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 84
0|0|23.875|23.875
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 83
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 82
0|0|23.875|23.875
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 81
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 80
0|0|23.875|23.875
Regeldifferenz: -1.1875 | Temp: 23.8125 | P: 0 | I: 79
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 78
0|0|23.8125|23.875
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 77
Regeldifferenz: -1.1875 | Temp: 23.8125 | P: 0 | I: 76
0|0|23.875|23.8125
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 75
Regeldifferenz: -1.1875 | Temp: 23.8125 | P: 0 | I: 74
0|0|23.875|23.8125
Regeldifferenz: -1.125 | Temp: 23.875 | P: 0 | I: 73
Regeldifferenz: -1.1875 | Temp: 23.8125 | P: 0 | I: 72
0|0|23.875|23.8125