Roberto
13.08.2005, 21:13
Hallo
Habe hier ein sehr komisches Problem :-(
$regfile = "m8def.dat"
$crystal = 10000000
'---Config für LCD -----------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portb.0 , Db7 = Portb.5 , Rs = Portb.4 , E = Portb.3
Config Lcdbus = 4
Config Lcdmode = Port
'----- Config Timer0 für Regelung ------
Config Timer0 = Timer , Prescale = 8
'---Sonstiges------------------------
Dim A As Integer
Dim Pwm As Long
Dim Soll As Long
Dim Ist As Long
Dim Istwert As Single
Dim Sollwert As Single
Dim Integrator As Single
Dim Lastistwert As Single
Dim P As Single
Dim I As Single
Dim D As Single
Dim Delta As Single
Dim Ausgang As Single
Dim Pw As Word
Dim Wert As Word
Dim Kp As Integer
Dim Kd As Integer
Dim Ki As Integer
Dim Zeit As Single
Dim Invertiert As Word
Dim Istwert_bit As Word
On Timer0 Auswerten
Enable Timer0
Enable Interrupts
Soll = 0
Ist = 0
Pwm = 128
Cls
'================================================= =======================
'========= Hauptprogramm ================================================
'================================================= =======================
Do
Cls
Soll = 0
Locate 1 , 1
Lcd "Ist" ; Ist
Locate 2 , 1
Lcd "Soll=" ; Soll
Loop
End
Auswerten:
Sollwert = Soll
Istwert = Ist
Delta = Sollwert - Istwert
P = Delta * Kp
D = Lastistwert - Istwert
D = D / Zeit
D = D * Kd
I = Delta * Zeit
I = I * Ki
Ausgang = D
Ausgang = Ausgang + P
Ausgang = Ausgang + I
Lastistwert = Istwert
Pwm = Ausgang + 128
If Pwm < 2 Then Pwm = 2
If Pwm > 253 Then Pwm = 253
Compare1a = Pwm
Timer0 = 0
Return
Das Programm ist eine verkürzte Version vom Original aber der Fehler tritt hier noch auf !
Es soll mit Timer0 eine Routine bearbeitet werden und nebenbei der Wert auf dem LCD ausgegeben werden.
Aber irgendwie kommen für "Soll" und "Ist" immer so komische Zahlen auf das LCD.
Zum Glück tritt der gleiche Fehler auch im Simulator von Bascom auf, nur komme ich nicht dahinter, wie die falschen Zahlen auf das LCD kommen ??
Probiert mal bitte das Programm am Simulator.
(V 1.11.7.9.)
Nach ein wenig Zeit, seht ihr was ich meine..
Das steht dann z.B, für IST 152000000
oder für Soll 880000000
Die Werte selber (ist und Soll) stimmen im Simulator ( sind also =0)
Weis jemand an was das liegt ?
Auch mit einem höheren Prescaler beim Timer, bleibt es noch so..
Irgendwie muss da mit der ansteuerung vom LCD zusamenhängen?!
Irgendwo ein Bit, das nicht so tut wie es soll ???!
Habe hier ein sehr komisches Problem :-(
$regfile = "m8def.dat"
$crystal = 10000000
'---Config für LCD -----------------
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portb.0 , Db7 = Portb.5 , Rs = Portb.4 , E = Portb.3
Config Lcdbus = 4
Config Lcdmode = Port
'----- Config Timer0 für Regelung ------
Config Timer0 = Timer , Prescale = 8
'---Sonstiges------------------------
Dim A As Integer
Dim Pwm As Long
Dim Soll As Long
Dim Ist As Long
Dim Istwert As Single
Dim Sollwert As Single
Dim Integrator As Single
Dim Lastistwert As Single
Dim P As Single
Dim I As Single
Dim D As Single
Dim Delta As Single
Dim Ausgang As Single
Dim Pw As Word
Dim Wert As Word
Dim Kp As Integer
Dim Kd As Integer
Dim Ki As Integer
Dim Zeit As Single
Dim Invertiert As Word
Dim Istwert_bit As Word
On Timer0 Auswerten
Enable Timer0
Enable Interrupts
Soll = 0
Ist = 0
Pwm = 128
Cls
'================================================= =======================
'========= Hauptprogramm ================================================
'================================================= =======================
Do
Cls
Soll = 0
Locate 1 , 1
Lcd "Ist" ; Ist
Locate 2 , 1
Lcd "Soll=" ; Soll
Loop
End
Auswerten:
Sollwert = Soll
Istwert = Ist
Delta = Sollwert - Istwert
P = Delta * Kp
D = Lastistwert - Istwert
D = D / Zeit
D = D * Kd
I = Delta * Zeit
I = I * Ki
Ausgang = D
Ausgang = Ausgang + P
Ausgang = Ausgang + I
Lastistwert = Istwert
Pwm = Ausgang + 128
If Pwm < 2 Then Pwm = 2
If Pwm > 253 Then Pwm = 253
Compare1a = Pwm
Timer0 = 0
Return
Das Programm ist eine verkürzte Version vom Original aber der Fehler tritt hier noch auf !
Es soll mit Timer0 eine Routine bearbeitet werden und nebenbei der Wert auf dem LCD ausgegeben werden.
Aber irgendwie kommen für "Soll" und "Ist" immer so komische Zahlen auf das LCD.
Zum Glück tritt der gleiche Fehler auch im Simulator von Bascom auf, nur komme ich nicht dahinter, wie die falschen Zahlen auf das LCD kommen ??
Probiert mal bitte das Programm am Simulator.
(V 1.11.7.9.)
Nach ein wenig Zeit, seht ihr was ich meine..
Das steht dann z.B, für IST 152000000
oder für Soll 880000000
Die Werte selber (ist und Soll) stimmen im Simulator ( sind also =0)
Weis jemand an was das liegt ?
Auch mit einem höheren Prescaler beim Timer, bleibt es noch so..
Irgendwie muss da mit der ansteuerung vom LCD zusamenhängen?!
Irgendwo ein Bit, das nicht so tut wie es soll ???!