/***************************************************** Project : IPA 2012 Date : 04.01.2012 Author : Tobias Kittelmann Company : ETH Zurich Chip type : ATmega128 Clock frequency : 10.000000 MHz *****************************************************/ //Chip Bibliothek #include //sonstige Bibliotheken #include #include #include #include eeprom long int eeprom_Freq; eeprom float eeprom_Lev; // Globale variabeln definieren unsigned long int nr[9]; // Frequenz in Dezimahlziffern zerlegt unsigned long int Freqbit[32]; // Frequenz als Binärzahl darstellen long int lr[3]; // Level in Dezimahlziffern darstellen long int Freq; // Frequenz long int a; // Frequenz verstellen long int F_anderung; // bemerkt Frequenzänderungen unsigned char Att[6]; // Ausgännge Dämpfungsglied unsigned char div[6]; // benötigt um Level von Dezimal nach Binär umzuwandeln unsigned char stellelv; // Ausgewählte stelle bem Level unsigned char stellefreq; // Ausgewählte stelle der Frequenz float Lev; // Level float L_anderung; // bemerkt Leveländerungen float b; // Level verstellen bit i_anderung; // bemerkt änderungen an PLL locked bit save_bit; // erlaubnis zum Speichern bit blinkf_bit; // Freq Cursor anzeigen char save_sec; // erlaubnis zum Speichern char blinkf_sec; // Freq Cursor so lange anzeigen unsigned int time=0; // timer1 int Ampli[16]; // Amplitudenmodulation je nach freq int amplibit[14]; // Amlitude bit int amplidiv[14]; //const Fmin , Fmax , Lmin , Lmax const long int Fmax=150000000; const long int Fmin=1000000; const float Lmax=13; const float Lmin=-18.5; //Ausgänge der Dämpfungsglieder definieren #define ATTENUATOR_05 PORTB.2 #define ATTENUATOR_10 PORTB.3 #define ATTENUATOR_20 PORTB.4 #define ATTENUATOR_40 PORTB.5 #define ATTENUATOR_80 PORTB.6 #define ATTENUATOR_160 PORTB.7 //Ausgänge DDS definieren #define DDS_IO_UPDATE PORTA.1 #define DDS_RESET PORTA.2 #define DDS_SDIO PORTA.3 #define DDS_SCLK PORTA.4 #define DDS_CS PORTA.5 #define AUX PORTE.7 //Prozeduren //--------------------------------------- //Prozeduren zu Level Level () { if (Lev <= Lmin) Lev=Lmin; else if (Lev >= Lmax) Lev=Lmax; lr[2]=Lev/10; lr[1]=Lev-(lr[2]*10); lr[0]=(Lev-(lr[2]*10)-lr[1])*10; } screenlv () { if ((Lev <= Lmax) && (Lev >= 10)) { lcd_gotoxy(4,1); lcd_putchar(48+lr[0]); lcd_gotoxy(2,1); lcd_putchar(48+lr[1]); lcd_gotoxy(1,1); lcd_putchar(48+lr[2]); lcd_gotoxy(0,1); lcd_putchar(43); // + on pos (0,1) } else if ((Lev < 10) && (Lev >= 1)) { lcd_gotoxy(4,1); lcd_putchar(48+lr[0]); lcd_gotoxy(2,1); lcd_putchar(48+lr[1]); lcd_gotoxy(1,1); lcd_putchar(43); // + on pos (1,1) lcd_gotoxy(0,1); lcd_putchar(32); // clear pos(0,1) } else if ((Lev < 1) && (Lev >= 0.5)) { lcd_gotoxy(4,1); lcd_putchar(48+lr[0]); lcd_gotoxy(2,1); lcd_putchar(48); lcd_gotoxy(1,1); lcd_putchar(43); // + on pos (1,1) lcd_gotoxy(0,1); lcd_putchar(32); // clear pos(0,1) } else if (Lev == 0) { lcd_gotoxy(4,1); lcd_putchar(48+lr[0]); lcd_gotoxy(2,1); lcd_putchar(48); lcd_gotoxy(1,1); lcd_putchar(32); } else if ((Lev < 0) && (Lev >= -0.5)) { lcd_gotoxy(4,1); lcd_putchar(48-lr[0]); lcd_gotoxy(2,1); lcd_putchar(48); lcd_gotoxy(1,1); lcd_putchar(45); // - on pos (1,1) lcd_gotoxy(0,1); lcd_putchar(32); // clear pos(0,1) } else if ((Lev <= -1) && (Lev > -10)) { lcd_gotoxy(4,1); lcd_putchar(48-lr[0]); lcd_gotoxy(2,1); lcd_putchar(48-lr[1]); lcd_gotoxy(1,1); lcd_putchar(45); // - on pos (1,1) lcd_gotoxy(0,1); lcd_putchar(32); // clear pos(0,1) } else if ((Lev <= -10) && (Lev >= Lmin)) { lcd_gotoxy(4,1); lcd_putchar(48-lr[0]); lcd_gotoxy(2,1); lcd_putchar(48-lr[1]); lcd_gotoxy(1,1); lcd_putchar(48-lr[2]); lcd_gotoxy(0,1); lcd_putchar(45); // - on pos (0,1) } } Attbit () { float x; x=-(Lev-Lmax); div[0]=(unsigned char)x; div[1]=div[0]/2; Att[1]=div[0]%2; div[2]=div[1]/2; Att[2]=div[1]%2; div[3]=div[2]/2; Att[3]=div[2]%2; div[4]=div[3]/2; Att[4]=div[3]%2; div[5]=div[4]/2; Att[5]=div[4]%2; } Attout () { char c; char d; c=(Lmax*10); d=c%10; if (d == 0) { if ((lr[0]== -5) || (lr[0] == 5)) ATTENUATOR_05=1; if (lr[0] == 0) ATTENUATOR_05=0; } else if (d == 5) { if ((lr[0]== -5) || (lr[0] == 5)) ATTENUATOR_05=0; if (lr[0] == 0) ATTENUATOR_05=1; } ATTENUATOR_10 = Att[1]; ATTENUATOR_20 = Att[2]; ATTENUATOR_40 = Att[3]; ATTENUATOR_80 = Att[4]; ATTENUATOR_160 = Att[5]; } //Prozeduren zu Frequenz Fet () { if (Freq <= Fmin) Freq=Fmin; else if (Freq >= Fmax) Freq=Fmax; nr[8]=Freq/100000000; nr[7]=(Freq-nr[8]*100000000)/10000000; nr[6]=(Freq-nr[8]*100000000-nr[7]*10000000)/1000000; nr[5]=(Freq-nr[8]*100000000-nr[7]*10000000-nr[6]*1000000)/100000; nr[4]=(Freq-nr[8]*100000000-nr[7]*10000000-nr[6]*1000000-nr[5]*100000)/10000; nr[3]=(Freq-nr[8]*100000000-nr[7]*10000000-nr[6]*1000000-nr[5]*100000-nr[4]*10000)/1000; nr[2]=(Freq-nr[8]*100000000-nr[7]*10000000-nr[6]*1000000-nr[5]*100000-nr[4]*10000-nr[3]*1000)/100; nr[1]=(Freq-nr[8]*100000000-nr[7]*10000000-nr[6]*1000000-nr[5]*100000-nr[4]*10000-nr[3]*1000-nr[2]*100)/10; nr[0]=(Freq-nr[8]*100000000-nr[7]*10000000-nr[6]*1000000-nr[5]*100000-nr[4]*10000-nr[3]*1000-nr[2]*100-nr[1]*10); } screen () { if ((Freq <= Fmax) && (Freq >= 100000000)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); lcd_gotoxy(5,0); lcd_putchar(48+nr[5]); lcd_gotoxy(3,0); lcd_putchar(48+nr[6]); lcd_gotoxy(2,0); lcd_putchar(48+nr[7]); lcd_gotoxy(1,0); lcd_putchar(48+nr[8]); } else if ((Freq < 100000000) && (Freq >= 10000000)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); lcd_gotoxy(5,0); lcd_putchar(48+nr[5]); lcd_gotoxy(3,0); lcd_putchar(48+nr[6]); lcd_gotoxy(2,0); lcd_putchar(48+nr[7]); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 10000000) && (Freq >= 1000000)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); lcd_gotoxy(5,0); lcd_putchar(48+nr[5]); lcd_gotoxy(3,0); lcd_putchar(48+nr[6]); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 1000000) && (Freq >= 100000)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); lcd_gotoxy(5,0); lcd_putchar(48+nr[5]); lcd_gotoxy(3,0); lcd_putchar(48); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 100000) && (Freq >= 10000)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); lcd_gotoxy(5,0); lcd_putchar(48); lcd_gotoxy(3,0); lcd_putchar(48); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 10000) && (Freq >= 1000)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); lcd_gotoxy(6,0); lcd_putchar(48); lcd_gotoxy(5,0); lcd_putchar(48); lcd_gotoxy(3,0); lcd_putchar(48); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 1000) && (Freq >= 100)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); lcd_gotoxy(7,0); lcd_putchar(48); lcd_gotoxy(6,0); lcd_putchar(48); lcd_gotoxy(5,0); lcd_putchar(48); lcd_gotoxy(3,0); lcd_putchar(48); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 100) && (Freq >= 10)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); lcd_gotoxy(8,0); lcd_putchar(48); lcd_gotoxy(7,0); lcd_putchar(48); lcd_gotoxy(6,0); lcd_putchar(48); lcd_gotoxy(5,0); lcd_putchar(48); lcd_gotoxy(3,0); lcd_putchar(48); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } else if ((Freq < 10) && (Freq >= 1)) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); lcd_gotoxy(9,0); lcd_putchar(48); lcd_gotoxy(8,0); lcd_putchar(48); lcd_gotoxy(7,0); lcd_putchar(48); lcd_gotoxy(6,0); lcd_putchar(48); lcd_gotoxy(5,0); lcd_putchar(48); lcd_gotoxy(3,0); lcd_putchar(48); lcd_gotoxy(2,0); lcd_putchar(32); lcd_gotoxy(1,0); lcd_putchar(32); } } // Dezimalzahl "Freq" in Binärzahl umrechnen und als "Freqbit0" bis "Freqbit31" ausgeben Feb () { unsigned long int l; float i; unsigned long int u; unsigned long int e; char n; i=Freq*10.737418; e=0; n=0; u=(unsigned long int)i; while (u >= 1) { e=u%2; u=u/2; Freqbit[n]=e; n=n+1; } while (n <= 31) { Freqbit[n]=0; n=n+1; } } FDDS() { char n=0; char e=31; char k=0; char FTW0_data[8]; DDS_CS=0; FTW0_data[0]=0; // Register Name (serial Address) FTW0_data[1]=0; // Register Name (serial Address) FTW0_data[2]=0; // Register Name (serial Address) FTW0_data[3]=0; // Register Name (serial Address) FTW0_data[4]=0; // Register Name (serial Address) FTW0_data[5]=1; // Register Name (serial Address) FTW0_data[6]=0; // Register Name (serial Address) FTW0_data[7]=0; // Register Name (serial Address) while (k <= 7) { DDS_SDIO=FTW0_data[k]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); k=k+1; } while (n <= 31) { DDS_SDIO=Freqbit[e]; AUX=DDS_SDIO; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); n=n+1; e=e-1; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; } // Prozedur für DDS Initialisierung DDSinit() { //Variabeln Definieren char CFR1_pos=0; char CFR2_pos=0; char ASF_pos=0; char ARR_pos=0; char POW0_pos=0; char CFR1_data[40]; char CFR2_data[32]; char ASF_data[24]; char ARR_data[16]; char POW0_data[24]; //Arrays beschreiben //CFR1 Register CFR1_data[0]=0; // Register Name (serial Address) CFR1_data[1]=0; // Register Name (serial Address) CFR1_data[2]=0; // Register Name (serial Address) CFR1_data[3]=0; // Register Name (serial Address) CFR1_data[4]=0; // Register Name (serial Address) CFR1_data[5]=0; // Register Name (serial Address) CFR1_data[6]=0; // Register Name (serial Address) CFR1_data[7]=0; // Register Name (serial Address) CFR1_data[8]=0; // Not Used CFR1_data[9]=0; // Not Used CFR1_data[10]=0; // Not Used CFR1_data[11]=0; // Not Used CFR1_data[12]=0; // Not Used CFR1_data[13]=0; // Load ARR @I/O UD CFR1_data[14]=1; // OSK Enable CFR1_data[15]=0; // Auto OSK Keying CFR1_data[16]=0; // Automatic Sync Enable CFR1_data[17]=0; // Software Manual Sync CFR1_data[18]=0; // Not Used CFR1_data[19]=0; // Not Used CFR1_data[20]=0; // Not Used CFR1_data[21]=0; // Not Used CFR1_data[22]=0; // Not Used CFR1_data[23]=0; // Not Used CFR1_data[24]=0; // Not Used CFR1_data[25]=0; // Not Used CFR1_data[26]=0; // AutoClr Phase Accum CFR1_data[27]=1; // Enable SINE Output CFR1_data[28]=0; // Not Used CFR1_data[29]=0; // Clear Phase Accum CFR1_data[30]=0; // SDIO Input Only 1 CFR1_data[31]=0; // LSB First CFR1_data[32]=0; // Digital Power Down CFR1_data[33]=0; // Not Used CFR1_data[34]=0; // DAC Power Down CFR1_data[35]=0; // Clock Input Power Down CFR1_data[36]=0; // External Power Down Mode CFR1_data[37]=0; // Not Used CFR1_data[38]=1; // SYNC_CLK Out Disable 1 CFR1_data[39]=0; // Not Used //CFR2 Register CFR2_data[0]=0; // Register Name (serial Address) CFR2_data[1]=0; // Register Name (serial Address) CFR2_data[2]=0; // Register Name (serial Address) CFR2_data[3]=0; // Register Name (serial Address) CFR2_data[4]=0; // Register Name (serial Address) CFR2_data[5]=0; // Register Name (serial Address) CFR2_data[6]=0; // Register Name (serial Address) CFR2_data[7]=1; // Register Name (serial Address) CFR2_data[8]=0; // Not Used CFR2_data[9]=0; // Not Used CFR2_data[10]=0; // Not Used CFR2_data[11]=0; // Not Used CFR2_data[12]=0; // Not Used CFR2_data[13]=0; // Not Used CFR2_data[14]=0; // Not Used CFR2_data[15]=0; // Not Used CFR2_data[16]=0; // Not Used CFR2_data[17]=0; // Not Used CFR2_data[18]=0; // Not Used CFR2_data[19]=0; // Not Used CFR2_data[20]=0; // High Speed Sync Enable CFR2_data[21]=0; // Hardware Manual Sync Enable CFR2_data[22]=0; // CRISTAL OUT Pin Active CFR2_data[23]=0; // Not Used CFR2_data[24]=0; // REFCLK Multipler CFR2_data[25]=0; // REFCLK Multipler CFR2_data[26]=0; // REFCLK Multipler CFR2_data[27]=0; // REFCLK Multipler CFR2_data[28]=0; // REFCLK Multipler CFR2_data[29]=0; // VCO Range CFR2_data[30]=0; // Carge Pump Curent CFR2_data[31]=0; // Carge Pump Curent //ASF Register ASF_data[0]=0; // Register Name (serial Address) ASF_data[1]=0; // Register Name (serial Address) ASF_data[2]=0; // Register Name (serial Address) ASF_data[3]=0; // Register Name (serial Address) ASF_data[4]=0; // Register Name (serial Address) ASF_data[5]=0; // Register Name (serial Address) ASF_data[6]=1; // Register Name (serial Address) ASF_data[7]=0; // Register Name (serial Address) ASF_data[8]=0; // Auto RAMP Reat Speed ASF_data[9]=0; // Auto RAMP Reat Speed ASF_data[10]=0; // Amplitude Scal Factor Register (bit13) ASF_data[11]=0; // Amplitude Scal Factor Register (bit12) ASF_data[12]=0; // Amplitude Scal Factor Register (bit11) ASF_data[13]=0; // Amplitude Scal Factor Register (bit10) ASF_data[14]=0; // Amplitude Scal Factor Register (bit9) ASF_data[15]=0; // Amplitude Scal Factor Register (bit8) ASF_data[16]=0; // Amplitude Scal Factor Register (bit7) ASF_data[17]=0; // Amplitude Scal Factor Register (bit6) ASF_data[18]=0; // Amplitude Scal Factor Register (bit5) ASF_data[19]=0; // Amplitude Scal Factor Register (bit4) ASF_data[20]=0; // Amplitude Scal Factor Register (bit3) ASF_data[21]=0; // Amplitude Scal Factor Register (bit2) ASF_data[22]=0; // Amplitude Scal Factor Register (bit1) ASF_data[23]=0; // Amplitude Scal Factor Register (bit0) //ARR Register ARR_data[0]=0; // Register Name (serial Address) ARR_data[1]=0; // Register Name (serial Address) ARR_data[2]=0; // Register Name (serial Address) ARR_data[3]=0; // Register Name (serial Address) ARR_data[4]=0; // Register Name (serial Address) ARR_data[5]=0; // Register Name (serial Address) ARR_data[6]=1; // Register Name (serial Address) ARR_data[7]=1; // Register Name (serial Address) ARR_data[8]=0; // Amplitude Ramp Reat Register (bit7) ARR_data[9]=0; // Amplitude Ramp Reat Register (bit6) ARR_data[10]=0; // Amplitude Ramp Reat Register (bit5) ARR_data[11]=0; // Amplitude Ramp Reat Register (bit4) ARR_data[12]=0; // Amplitude Ramp Reat Register (bit3) ARR_data[13]=0; // Amplitude Ramp Reat Register (bit2) ARR_data[14]=0; // Amplitude Ramp Reat Register (bit1) ARR_data[15]=0; // Amplitude Ramp Reat Register (bit0) //POW0 Register POW0_data[0]=0; // Register Name (serial Address) POW0_data[1]=0; // Register Name (serial Address) POW0_data[2]=0; // Register Name (serial Address) POW0_data[3]=0; // Register Name (serial Address) POW0_data[4]=0; // Register Name (serial Address) POW0_data[5]=1; // Register Name (serial Address) POW0_data[6]=0; // Register Name (serial Address) POW0_data[7]=1; // Register Name (serial Address) POW0_data[8]=0; // Not Used POW0_data[9]=0; // Not Used POW0_data[10]=0; // Phase Offset Word (bit13) POW0_data[11]=0; // Phase Offset Word (bit12) POW0_data[12]=0; // Phase Offset Word (bit11) POW0_data[13]=0; // Phase Offset Word (bit10) POW0_data[14]=0; // Phase Offset Word (bit9) POW0_data[15]=0; // Phase Offset Word (bit8) POW0_data[16]=0; // Phase Offset Word (bit7) POW0_data[17]=0; // Phase Offset Word (bit6) POW0_data[18]=0; // Phase Offset Word (bit5) POW0_data[19]=0; // Phase Offset Word (bit4) POW0_data[20]=0; // Phase Offset Word (bit3) POW0_data[21]=0; // Phase Offset Word (bit2) POW0_data[22]=0; // Phase Offset Word (bit1) POW0_data[23]=0; // Phase Offset Word (bit0) // Bytes an DDS senden DDS_CS=0; DDS_IO_UPDATE=0; while (CFR1_pos <= 39) { DDS_SDIO=CFR1_data[CFR1_pos]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); CFR1_pos++; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; DDS_CS=0; while (CFR2_pos <= 31) { DDS_SDIO=CFR2_data[CFR2_pos]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); CFR2_pos++; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; DDS_CS=0; while (ASF_pos <= 23) { DDS_SDIO=ASF_data[ASF_pos]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); ASF_pos++; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; DDS_CS=0; while (ARR_pos <= 15) { DDS_SDIO=ARR_data[ARR_pos]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); ARR_pos++; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; DDS_CS=0; while (POW0_pos <= 23) { DDS_SDIO=POW0_data[POW0_pos]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); POW0_pos++; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; } //REF Frequenz abfragen plllocked() { bit i; i = PINA.0; if (i_anderung != i) { if (i == 1) { lcd_gotoxy(14,1); lcd_putsf("ok"); } if (i == 0) { lcd_gotoxy(14,1); lcd_putsf("??"); } i_anderung=i; } } // Amplitudenmodulation in 10MHz schritten Freqampl() { char n; Ampli[0]=13106; //Amlitudenmodulation Ampli[1]=13106; //Amlitudenmodulation Ampli[2]=13106; //Amlitudenmodulation Ampli[3]=13106; //Amlitudenmodulation Ampli[4]=13106; //Amlitudenmodulation Ampli[5]=13106; //Amlitudenmodulation Ampli[6]=16383; //Amlitudenmodulation Ampli[7]=13106; //Amlitudenmodulation Ampli[8]=16383; //Amlitudenmodulation Ampli[9]=16383; //Amlitudenmodulation Ampli[10]=13106; //Amlitudenmodulation Ampli[11]=16383; //Amlitudenmodulation Ampli[12]=16383; //Amlitudenmodulation Ampli[13]=16383; //Amlitudenmodulation Ampli[14]=16383; //Amlitudenmodulation if (Freq>=Fmin && Freq<10000000) n=0; if (Freq>=10000000 && Freq<20000000) n=1; if (Freq>=20000000 && Freq<30000000) n=2; if (Freq>=30000000 && Freq<40000000) n=3; if (Freq>=40000000 && Freq<50000000) n=4; if (Freq>=50000000 && Freq<60000000) n=5; if (Freq>=60000000 && Freq<70000000) n=6; if (Freq>=70000000 && Freq<80000000) n=7; if (Freq>=80000000 && Freq<90000000) n=8; if (Freq>=90000000 && Freq<100000000) n=9; if (Freq>=100000000 && Freq<110000000) n=10; if (Freq>=110000000 && Freq<120000000) n=11; if (Freq>=120000000 && Freq<130000000) n=12; if (Freq>=130000000 && Freq<140000000) n=13; if (Freq>=140000000 && Freq<=Fmax) n=14; amplibit[0]=Ampli[n]%2; amplidiv[0]=Ampli[n]/2; amplibit[1]=amplidiv[0]%2; amplidiv[1]=amplidiv[0]/2; amplibit[2]=amplidiv[1]%2; amplidiv[2]=amplidiv[1]/2; amplibit[3]=amplidiv[2]%2; amplidiv[3]=amplidiv[2]/2; amplibit[4]=amplidiv[3]%2; amplidiv[4]=amplidiv[3]/2; amplibit[5]=amplidiv[4]%2; amplidiv[5]=amplidiv[4]/2; amplibit[6]=amplidiv[5]%2; amplidiv[6]=amplidiv[5]/2; amplibit[7]=amplidiv[6]%2; amplidiv[7]=amplidiv[6]/2; amplibit[8]=amplidiv[7]%2; amplidiv[8]=amplidiv[7]/2; amplibit[9]=amplidiv[8]%2; amplidiv[9]=amplidiv[8]/2; amplibit[10]=amplidiv[9]%2; amplidiv[10]=amplidiv[9]/2; amplibit[11]=amplidiv[10]%2; amplidiv[11]=amplidiv[10]/2; amplibit[12]=amplidiv[11]%2; amplidiv[12]=amplidiv[11]/2; amplibit[13]=amplidiv[12]%2; amplidiv[13]=amplidiv[12]/2; } ADDS() { char n=0; char e=13; char k=0; char data[10]; DDS_CS=0; data[0]=0; // Register Name (serial Address) data[1]=0; // Register Name (serial Address) data[2]=0; // Register Name (serial Address) data[3]=0; // Register Name (serial Address) data[4]=0; // Register Name (serial Address) data[5]=0; // Register Name (serial Address) data[6]=1; // Register Name (serial Address) data[7]=0; // Register Name (serial Address) data[8]=0; // Auto RAMP Reat Speed data[9]=0; // Auto RAMP Reat Speed while (k <= 9) { DDS_SDIO=data[k]; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); k=k+1; } while (n <= 13) { DDS_SDIO=amplibit[e]; AUX=DDS_SDIO; DDS_SCLK=1; delay_us(100); DDS_SCLK=0; delay_us(100); n=n+1; e=e-1; } DDS_CS=1; delay_us(100); DDS_IO_UPDATE=1; delay_us(100); DDS_IO_UPDATE=0; } //Speicherrutine save() { #asm("cli") eeprom_Freq=Freq; eeprom_Lev=Lev; save_bit=0; #asm("sei") } //Cursoranzeige Frequenz blinkf () { if(stellefreq==0) { if(time <= 2451) { lcd_gotoxy(10,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); } } if (stellefreq != 0) { lcd_gotoxy(10,0); lcd_putchar(48+nr[0]); } if(stellefreq==1) { if(time <= 2451) { lcd_gotoxy(9,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); } } if (stellefreq != 1) { lcd_gotoxy(9,0); lcd_putchar(48+nr[1]); } if(stellefreq==2) { if(time <= 2451) { lcd_gotoxy(8,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); } } if (stellefreq != 2) { lcd_gotoxy(8,0); lcd_putchar(48+nr[2]); } if(stellefreq==3) { if(time <= 2451) { lcd_gotoxy(7,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); } } if (stellefreq != 3) { lcd_gotoxy(7,0); lcd_putchar(48+nr[3]); } if(stellefreq==4) { if(time <= 2451) { lcd_gotoxy(6,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); } } if (stellefreq != 4) { lcd_gotoxy(6,0); lcd_putchar(48+nr[4]); } if(stellefreq==5) { if(time <= 2451) { lcd_gotoxy(5,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(5,0); lcd_putchar(48+nr[5]); } } if (stellefreq != 5) { lcd_gotoxy(5,0); lcd_putchar(48+nr[5]); } if(stellefreq==6) { if(time <= 2451) { lcd_gotoxy(3,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(3,0); lcd_putchar(48+nr[6]); } } if (stellefreq != 6) { lcd_gotoxy(3,0); lcd_putchar(48+nr[6]); } if(stellefreq==7) { if(time <= 2451) { lcd_gotoxy(2,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(2,0); lcd_putchar(48+nr[7]); } } if ((stellefreq != 7) && (Freq >= 10000000)) { lcd_gotoxy(2,0); lcd_putchar(48+nr[7]); } else if ((stellefreq != 7) && (Freq < 10000000)) { lcd_gotoxy(2,0); lcd_putchar(32); } if(stellefreq==8) { if(time <= 2451) { lcd_gotoxy(1,0); lcd_putchar(32); } if(time >= 2451) { lcd_gotoxy(1,0); lcd_putchar(48+nr[8]); } } if ((stellefreq != 8) && (Freq >= 100000000)) { lcd_gotoxy(1,0); lcd_putchar(48+nr[8]); } else if ((stellefreq != 8) && (Freq < 100000000)) { lcd_gotoxy(1,0); lcd_putchar(32); } } //--------------------------------------- // Alle Interrupts // External Interrupt 1 service routine // fallend interrupt [EXT_INT1] void ext_int1_isr(void) { // Place your code here bit eins; eins = PIND.2; if (eins == 0) Lev=Lev-b; if (eins == 1) Lev=Lev+b; delay_ms(10); save_bit=1; save_sec=0; } // External Interrupt 2 service routine // steigend interrupt [EXT_INT2] void ext_int2_isr(void) { // Place your code here bit eins; eins = PIND.1; if (eins == 0) Lev=Lev-b; if (eins == 1) Lev=Lev+b; delay_ms(10); save_bit=1; save_sec=0; } // External Interrupt 3 service routine interrupt [EXT_INT3] void ext_int3_isr(void) { // Place your code here /* if (stellelv < 2) { stellelv=stellelv+1; delay_ms(5); } else { stellelv=0; } if (stellelv == 0) b = 0.5; if (stellelv == 1) b = 1; if (stellelv == 2) b = 10; */ save_sec=0; } // External Interrupt 4 service routine //fallend interrupt [EXT_INT4] void ext_int4_isr(void) { // Place your code here bit zwei; zwei = PINE.5; if (zwei == 0) Freq=Freq-a; if (zwei == 1) Freq=Freq+a; delay_ms(10); blinkf_bit=1; save_bit=1; save_sec=0; blinkf_sec=0; } // External Interrupt 5 service routine //steigend interrupt [EXT_INT5] void ext_int5_isr(void) { // Place your code here bit zwei; zwei = PINE.4; if (zwei == 0) Freq=Freq-a; if (zwei == 1) Freq=Freq+a; delay_ms(10); blinkf_bit=1; save_bit=1; save_sec=0; blinkf_sec=0; } // External Interrupt 6 service routine interrupt [EXT_INT6] void ext_int6_isr(void) { // Place your code here if (stellefreq < 8) { stellefreq=stellefreq+1; delay_ms(5); } else { stellefreq=0; } //a = pow(10,stellefreq); // a=10^stellefreq if (stellefreq == 0) a = 1; else if (stellefreq == 1) a = 10; else if (stellefreq == 2) a = 100; else if (stellefreq == 3) a = 1000; else if (stellefreq == 4) a = 10000; else if (stellefreq == 5) a = 100000; else if (stellefreq == 6) a = 1000000; else if (stellefreq == 7) a = 10000000; else if (stellefreq == 8) a = 100000000; blinkf_bit=1; blinkf_sec=0; save_sec=0; } // Timer 0 overflow interrupt service routine f=1250.000 kHz interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here time=time+1; // Timer zählt bis FF(Hex)=255(Dez) // 255/1250000 = 204us // 204us*4902 = 1s if(time >= 4902) { plllocked(); save_sec=save_sec+1; time=0; blinkf_sec=blinkf_sec+1; } } void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=In // State7=T State6=T State5=0 State4=0 State3=0 State2=0 State1=0 State0=T PORTA=0x00; DDRA=0x3E; // Port B initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTB=0x00; DDRB=0xFF; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Port E initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTE=0x00; DDRE=0x00; // Port F initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTF=0x00; DDRF=0x00; // Port G initialization // Func4=In Func3=In Func2=In Func1=In Func0=In // State4=T State3=T State2=T State1=T State0=T PORTG=0x00; DDRG=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 1250.000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected ASSR=0x00; TCCR0=0x02; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer2 Stopped // Mode: Normal top=0xFF // OC2 output: Disconnected TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // Timer/Counter 3 initialization // Clock source: System Clock // Clock value: Timer3 Stopped // Mode: Normal top=0xFFFF // OC3A output: Discon. // OC3B output: Discon. // OC3C output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer3 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR3A=0x00; TCCR3B=0x00; TCNT3H=0x00; TCNT3L=0x00; ICR3H=0x00; ICR3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00; OCR3CH=0x00; OCR3CL=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: On // INT1 Mode: Falling Edge // INT2: On // INT2 Mode: Rising Edge // INT3: On // INT3 Mode: Falling Edge // INT4: On // INT4 Mode: Falling Edge // INT5: On // INT5 Mode: Rising Edge // INT6: On // INT6 Mode: Falling Edge // INT7: Off EICRA=0xB8; EICRB=0x2E; EIMSK=0x7E; EIFR=0x7E; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; ETIMSK=0x00; // USART0 initialization // USART0 disabled UCSR0B=0x00; // USART1 initialization // USART1 disabled UCSR1B=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 8 lcd_init(16); #asm("sei") Freq=eeprom_Freq; stellefreq=0; a=1; Lev=eeprom_Lev; stellelv=0; b=0.5; DDS_RESET=1; delay_ms(20); DDS_RESET=0; if (Lev==0) { Level (); screenlv (); Attbit (); Attout (); } // spielerei des Programierers /* lcd_write_byte(88, 95); lcd_write_byte(89, 95); lcd_write_byte(90, 67); lcd_write_byte(91, 79); lcd_write_byte(92, 67); lcd_write_byte(93, 95); lcd_write_byte(94, 95); lcd_write_byte(95, 0); lcd_write_byte(64, 64); lcd_write_byte(65, 78); lcd_write_byte(66, 85); lcd_write_byte(67, 95); lcd_write_byte(68, 91); lcd_write_byte(69, 78); lcd_write_byte(70, 64); lcd_write_byte(71, 0); */ //LCD Beschriftung lcd_gotoxy(12,0); lcd_putsf("MHz"); lcd_gotoxy(4,0); lcd_putsf("."); lcd_gotoxy(3,1); lcd_putsf("."); lcd_gotoxy(6,1); lcd_putsf("dBm"); lcd_gotoxy(10,1); lcd_putsf("REF:??"); DDSinit(); while (1) { if (F_anderung != Freq) { Fet(); screen(); Feb(); FDDS(); Freqampl(); ADDS(); F_anderung=Freq; } if (L_anderung != Lev) { Level (); screenlv (); Attbit (); Attout (); L_anderung=Lev; } if ((save_bit==1) && (save_sec==10)) save(); if((blinkf_sec >= 1) && (blinkf_bit == 1)) { blinkf(); if(blinkf_sec >= 15) { blinkf_bit=0; Fet(); screen(); } } } }