#include #include #include #define Umax 440// Umax = 3V //550 bei pre 64 volatile double Uad; volatile double Z; volatile int i,ii,iii; volatile int ent; SIGNAL(SIG_ADC) { // ADC= (Uad*1024)/Uref //Uad = ADCL+ADCH*1024; // AD Wert wird in Uad geschrieben Uad=ADC; if( Uad!=0 ) { // bie CK/16 = 62500Hz .. Z=((Umax/Uad)*64*Uad)/Uad = (Umax*64)/Uad = 29440/Uadf // f = 122.5 Hz ( gemessen mit Oszi.) Z = (14080/(Uad)); // Berechnung der Zyklen der High-Zeit des PWM Signals //Z=(485/Uad)*0.000064; ent=1; } else { ent=0; } if(ii==0) {sbi(PORTA,4);ii=1;} else{cbi(PORTA,4);ii=0;} } /* void timer1_init(void) { //sbi (TCCR1B,CS10); // Timer1 Frequenz = 3906.25Hz daraus folgt sbi (TCCR1B,CS11); // eine Periodendauer von 256us sbi (TCCR1B,CS12); //sbi (TCCR1B,CS13); } */ void initADC(void) { sbi(ADCSR,ADIE);//Aktivierung des ADC Interrupt ADCSR |= (1 << ADIF); //clear any old conversions... cbi(ADCSR,ADPS1); // ADSP1 wird auf 1 gesetzt sbi(ADCSR,ADPS0); // ADSP0 wird auf 1 gesetzt Teilungsfaktor 8 eingestellt (011) => f=125KHz //sbi(ADCSR,ADPS2); //Teilungsfaktor 16 eingestellt 62500 KHz //sbi(ADCSR,ADFR); // frei laufender betrieb sbi(ADMUX,REFS0); //referenzspannung ist AREF = 5V sbi(ADMUX,REFS1); //sbi(ADMUX,MUX2); //sbi(ADMUX,MUX3); // Auswahl ADC9 an pin PB6 //sbi(ADMUX,MUX0); sbi(ADCSR,ADEN); // Aktivierung des ADC //while( bit_is_set(ADCSR, ADIF) ); } int main (void) /************************************************************************* Hier ist der Programmeinstiegspunkt. */ { i=0;ii=0;iii=0; outp (0x40, DDRA);// 0X40 outp (0x01, PINA); sei(); //timer1_init(); //aufrufen der Timer1 Initialisierung TCCR1B=6; //TCNT1=255; initADC(); // aufrufen der ADC initialisierung // start der AD/Umwandlung for (;;) { //ALLE0 64us wird dieses Flag/Bit gesetzt if (bit_is_set(TIFR, TOV1)) { sbi(ADCSR,ADSC); //TCNT1=255; if(i==0) {sbi(PORTA,5);i=1;} else{cbi(PORTA,5);i=0;} //ADCSR |= _BV(ADSC); //TCNT1=255; sbi(TIFR, TOV1); ent=0; } else { if (ent==1) { if(iii==0){sbi(PORTA,7);iii=1;} else{cbi(PORTA,7);iii=0;} if (Uad>Umax) { if (Z>=1) { //outp ((1<