Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > Ich schreibe gerade an ein Reglerprogr. für einen PI-Regler. Das ganze Programm hat > einen Bytecode von ca. 2kB. Das Programm soll die Temp. von "Irgendwas" regeln, die > Regelparameter werden am LCD angezeigt, T_Soll, Kp, Tn können während der Regelung > mit einem Drehimpulsgeber beliebig verändert werden. > > Die Funktion "PI_Regler_Heizen" wird alle 500ms aufgerufen und Xd, Xds und Y werden > jedesmal neu berechnet. > > Das Programm ist super gelaufen, bis ich Tn auf " 0 " gesetzt habe. > Das LCD hat dann nach ein paar Sekunden nur noch wirre Zeichen angezeigt und dachte jetzt > ist er abgestürtzt. Seitem ist das Modul tot! Es startet das Programm nicht mehr, > und auch der Bootloader Modus beim Einschalten + SW1 kann nicht mehr aktiviert werden. > Das Modul meldet sich nicht mehr. > > Ich weis, eine Division durch Null ist nicht definiert, das sollte aber das Modul nicht > killen! Ich denke, dass dieser undefinierte Zustand irgendwas im System überschrieben hat. > Wie reglet das System diesen speziellen Fall???????? > > Kann ich jetzt das Modul umtauschen? Einen 40EUR Verlust kann ich in diesem Fall nicht > akzeptieren. > > Gruss > > > > // hier die relevanten Programmdaten: > > float T_Ist, T_Soll, Xd, Xds, Kp, Tn, Ta, Y; // globale Variablen > > // Startwerte > Ta = 0.5; // Abtastzeit > Kp = 10; // Proportionalitätsfaktor > Tn = 1; // Nachstellzeit > T_Soll = 30; // Solltemperatur > // T_Ist wird von ADC0 eingelesen > > > > void PI_Regler_Heizen(void) // Aufruf alle 500ms > { > Xd = T_Soll - T_Ist; // Xd = Regeldifferenz > > Xds = Xds+Xd; // Xds = Summe aller Xd > > Y = Kp*Xd + Kp*(Ta/Tn)*Xds; // Y = Stellgrösse > > > } >