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 > > Hallo, > > > > ich nutzt zur Zeit Beta 1.98 mit C-Compiler > > Float-Variablen benenne ich zur Unterscheidung von Integers mit einem führenden "f" > > > > > > Ich lasse in einer Interrupt-Routine jede Sekunde eine Regel-Routine laufen, die als Ergebnis in der > > Float-Variablen "fDAC_neu" einen neuen Stellwert liefert, der (nach Begrenzung auf das Intervall > > 0..65536) per SPI-Schnittstelle in einen externen 16-Bit-DAC geschrieben wird. Dazu kopiere ich > > fDac_neu in die Integer-Vaiable "DAC_Wert"und schicke die per SPI raus - das funktioniert! > > > > Interrupt-Routine: > > ... > > fDAC_neu = MITTE + fProp +fInteg + fDblInteg; // Berechnung eines neuen Regel-Wertes > > if (fDAC_neu>65535.0) fDAC_neu=65535.0; if (fDAC_neu<0.0) fDAC_neu=0.0; // Begrenzung > > DAC_Wert = fDAC_neu; // Wandlung nach Int > > > > Port_WriteBit(SYNC, Low); // Selektieren des externen DAC > > SPI_Write(DAC_Wert >> 8); // 2 Byte per SPI aussenden > > SPI_Write(DAC_Wert & 0x00FF); > > Port_WriteBit(SYNC, High); // De-selektieren des DAC > > ... > > > > > > Nun wollte ich optional den DAC auf einem vom Hauptprogramm vorzugebenden Wert einfrieren, der > > in der Integer-Variable "man_DAC" abgelegt ist. > > > > Zu diesem Zweck habe ich eine Byte-Variable "Tune_Flag" eingeführt, die im Hauptprogramm auf > > entweder "True" (->Regeln) oder "False" (-> Einfrieren) gesetzt werden kann, wobei definiert ist: > > #define False 0 > > #define True 1 > > > > In der Interrupt-Routine habe ich dann die Zuweisung > > DAC_Wert = fDAC_neu; // Wandlung nach Int > > > > ersetzt durch > > DAC_Wert = (Tune_Flag)? fDAC_neu : man_DAC; > > > > Falls Tune_Flag==True, so geht das falsch: die Regelschleife 'spinnt' - > > es wird weder der Wert fDAC_neu noch der Wert man_DAC verwendet! > > (bei Tune_Flag==False geht es richtig: man_DAC wird verwendet). > > > > Dasselbe gilt, wenn ich die Bedingung ausformuliere zu "(Tune_Flag==True)? > > > > Was ist falsch? > > > Die bedingte Bewertung hat einen Bug bei der Zuweisung von floating point Variablen. Da bitte ein > if benutzen. Ich meine ich hätte da in der 1.99 schon gefixed. > > Gruss Peter >