Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Wichtig!! Division durch Null killt meinen Mega32 Kategorie: CC-Pro Unit & Appl.Board (von Hannes - 21.08.2006 8:41)
Als Antwort auf Re: Wichtig!! Division durch Null killd meinen Mega32 von PeterS - 20.08.2006 10:05

Hallo Peter,

ich habe mal ein anderes Mega32-Modul in mein App.-Board gesteckt und das ist auf Anhieb gelaufen.
Ein Defekt am Board scheidet also aus. Ich habe dann mit einem Speicher-Oszi das Signal an PD1=
Ext-TXD angeschaut. Das funktionierende Modul sendet Daten nach dem Einschalten+SW1 in der
Zeit von 0-10ms und wieder in der Zeit von 115-120ms. Das defekte Modul sendet Daten nur in der
Zeit von 0-10ms. Ferner sind beim defekten Modul Signale an PA2, PA3 und PA4 vorhanden.

Das ich das Modul durch einen "Hardwarefehler" geschossen habe schliesse ich fast aus, da das Board
mit der allerselben Hardware mit einem anderen Reglerprogramm tagelang gelaufen ist. Es wäre schon
ein extremer Zufall, dass sich das Modul genau dann verabschiedet, als ich die undefinierte Rechen-
operation ausführte.

Wie bereits gesagt wird die Reglerfunktion alle 500ms aufgerufen und das Modul hat sich erst nach
ein paar Sekunden verabschiedet.

Für weitere Versuche ist mir das verbliebene Modul zu kostspielig. Ich sende Dir das Programm
zu und dann kannst Du es, wenn Du Lust hast, mal selber testen.

Gruss







> Hallo Hannes,
>
> eine Division "killt" das System nicht. Die Rechenoperation ist danach undefiniert, es gibt
> aber keine weiteren Auswirkungen. Wie sollte es auch? Der Interpreter kann nicht in das
> Flash schreiben!
>  
> Das Onboard EEPROM könnte vielleicht noch ein Problem sein, aber in den EEPROM Schreib-
> routinen wird der Zugriff auf den dort geschützten Bereich unterbunden. Ein Booten mit SW1
> gedrückt geht aber immer in den Bootloader.
>
> Das ganze ist reine Koindzidenz. Wäre das Modul ausgefallen wenn Du auf das LCD ausgegeben
> hättest, wäre die �berschrift gewesen: "LCD Zugriff killt Mega32!". Aber ich habe um ganz sicherzugehen
> tatsächlich Deinen Code ausprobiert, und wie erwartet keinerlei Ausfall gehabt.
>
> Entweder das Board ist von alleine ausgefallen, dann ist es ein Garantiefall, oder Du hast selber einen
> KurzschluÃ? oder Ã?berspannung erzeugt.  
>
> Schick doch vielleicht Dein Programm an ccpro@gmx.de, und ich schau mir an, ob mir sonst etwas
> auffällt. Mehr kann ich leider nicht sagen.
>
> Gruss Peter
>
> >
> > 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
> >
> >
> > }
> >
> >


    Antwort schreiben


Antworten:

Re: Wichtig!! Division durch Null killt meinen Mega32 (von PeterS - 21.08.2006 10:05)