bool SetYPageSize( const float ys) // ys [cm] { YPageSize=ys; (*static_cast<DLongGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("Y_SIZE"))))[0] = DLong(floor(0.5+ ys * (*static_cast<DFloatGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("Y_PX_CM"))))[0] )); (*static_cast<DLongGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("Y_VSIZE"))))[0] = DLong(floor(0.5+ ys * (*static_cast<DFloatGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("Y_PX_CM"))))[0] )); return true; }
bool SetXPageSize( const float xs) // xs [cm] { XPageSize=xs; (*static_cast<DLongGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("X_SIZE"))))[0] = DLong(floor(0.5+ xs * (*static_cast<DFloatGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("X_PX_CM"))))[0] )); (*static_cast<DLongGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("X_VSIZE"))))[0] = DLong(floor(0.5+ xs * (*static_cast<DFloatGDL*>(dStruct->GetTag(dStruct->Desc()->TagIndex("X_PX_CM"))))[0] )); return true; }
//Kalibriermodus Tiefststand void kaliblow(void) { _delay_ms(200); DClear(DADR); OutStr_DP (DADR,PSTR("SET CMIN: pF")); while(getD(PIN7)); _delay_ms(200); //Nach loslassen der Taste 1.Messung //Kapaziteat Tiefstand messcap(); messcap(); messcap(); Dpos(DADR,9); //Kapazitaet am Display anzeigen DLong(DADR,Cfix,4,1); cli(); writeEE(CMIN,(U8)Cfix); //Gemessene Kapazitaet is EEprom writeEE(CMIN+1,(U8)(Cfix>>8)); sei(); while(!getD(PIN7)); DClear(DADR); OutStr_DP (DADR,PSTR("Fuellstand:000mm")); Dpos(DADR,64); OutStr_DP (DADR,PSTR(" Hz pF")); }
//********************************************************************* int main(void)//******************************************************* //********************************************************************* { //I2C Display Initialisieren i2cInit(); Dinit(DADR); cntrB(DADR,curoff); Dled=ledon; //Port B.0 als Ausgang DDRB|=(1<<PIN0); setB(1,PIN0); //Port D.4 als Eingang mit Pullup //Frequenzzaehleingang Timer 0 DDRD&=~(1<<PIN4); PORTD|=(1<<PIN4); //Port D.7 als Eingang mit Pullup DDRD&=~(1<<PIN7); PORTD|=(1<<PIN7); //Port D.6 als Eingang mit Pullup DDRD&=~(1<<PIN6); PORTD|=(1<<PIN6); //Timer 0 als externer Impulszaehler //mit Interrupt bei Overflow TCCR0=0b00000110; TIMSK|=(1<<TOIE0); //Timer 1 als Zeitbasis im CTC Mode //Laufzeit 1 Sekunde //12Mhz/256/46875=1 TCCR1A=0; TCCR1B=0b00011100; ICR1=46838;//mit Frequenzzaehler getrimmt - 46875 wäre theoretisch; //Interrupts freigeben sei(); //Fixe Texte am Display ausgeben DClear(DADR); OutStr_DP (DADR,PSTR("Fuellstand:000mm")); Dpos(DADR,64); OutStr_DP (DADR,PSTR(" Hz pF")); ////////////////////////////////////////////////////////////////////////////////////// LOOP:;//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// //Abfrage Taste an PortD.7 (Kalibriermodus Tiefststand) if (getD(PIN7)) { kaliblow(); } //Abfrage Taste an PortD.6 (Kalibriermodus Hoechststand) if (getD(PIN6)) { kalibhigh(); } //Kapazität messen messcap(); //Messzyklus mit LED anzeigen toggl=!toggl; setB(toggl,PIN0); Dpos(DADR,64); //Frequenz am Display anzeigen DLong(DADR,pulse,6,0); Dpos(DADR,73); //Kapazitaet am Display anzeigen DLong(DADR,Cfix,4,1); //Berechnung Elektrolythoehe float K=0; float D=0; float Y=0; U32 Yfix=0; U16 iHMAX; U16 iHMIN; U16 iCMAX; U16 iCMIN; //Grenzdaten aus EEprom lesen cli(); //Interrupts aus wegen EEPROM iHMIN=(U16)(readEE(HMIN+1)<<8)+(U16)readEE(HMIN); iHMAX=(U16)(readEE(HMAX+1)<<8)+(U16)readEE(HMAX); iCMIN=(U16)(readEE(CMIN+1)<<8)+(U16)readEE(CMIN); iCMAX=(U16)(readEE(CMAX+1)<<8)+(U16)readEE(CMAX); sei(); if (Cfix<iCMIN) {Cfix=iCMIN;} K=(float)iHMAX/((float)iCMAX-(float)iCMIN); D=-K*(float)iCMIN; Y=(float)Cfix*K+D; Yfix=(U32)Y; Dpos(DADR,11); //am Display anzeigen DLong(DADR,Yfix,3,0); /////////////////////////////////////////////////////////////////////////////////////// goto LOOP;///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////// //*********************************************************************** }//**********************************************************************