ايران ويج

نسخه‌ی کامل: مدولاتور
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
یه پروژه FSK برای دانشگاه تونستم تا یه جاهایی بسازم ولی به مشکلاتی خوردم که از دوستان درخواست کمک دارم.
فایل پروژه
در این فایل هم شبیه سازی با پروتئوس موجوده که تقریبا درست کار میکنه و هم کدهای فرستنده و گیرنده.
مشکل الان اینجاست که گهگاهی تو پروتئوس تشخیص مقدار ولتاژ آنالوگ اشتباهه.
و مهمتر از اون اینکه وقتی مدار رو ساختم همون چیزی که تو شبیه سازی جواب میگرفتم رو هم دیگه جواب نمیگیرم. قسمت A/D درست کار میکنه ولی ال سی دی دوم پرتو پلا نشون میده.
دوستان کدهای فرستنده و گیرنده رو اینجا میذارم:

کد:
فرستنده:
#include <mega32.h>
#include <stdio.h>
#include <stdlib.h>
#include <delay.h>

#asm
   .equ __lcd_port=0x15;
#endasm
#include <lcd.h>
  
#define   RD        PORTA.0
#define   WR        PORTA.1
#define   INT       PINA.2

flash char sine[256]={
    0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
    0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
    0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,
    0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,
    0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
    0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
    0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
    0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,
    0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,
    0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,
    0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,
    0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,
    0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
    0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,
    0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
};

char s1[8];
unsigned char  f=1;
char i=0;  
float a;

int f1=1;
int f2=5;

int d= 100;

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
   OCR1A=sine[i];
   i=i+f;
   if(i==255)
   i=0;
}

void main(void)
{
DDRA=0x07;
DDRB=0x00;
DDRD=0xFF;
      
TCCR1A=0x81;
TCCR1B=0x09;  

TIMSK=0x10;  

WR=1;
lcd_init(16);
while (1)
      {
      WR=0;
      delay_us(2);
      WR=1;
      
      RD=0;
      delay_ms(20);
      a=PINB;
      PINA.2=0;
      if (PINA.2==1)  
            {
             #asm("sei");  

             if(PINB.0==1)                        //0
              {
                f=f1;
              }
             else if(PINB.0==0)
              {
                f=f2;
              }      
             delay_ms(d);
            
             if(PINB.1==1)                        //1
              {                              
                f=f1;
              }
             else if(PINB.1==0)
              {
                f=f2;
              }  
             delay_ms(d);
            
              if(PINB.2==1)                       //2
              {
                f=f1;
              }
             else if(PINB.2==0)
              {
                f=f2;
              }  
             delay_ms(d);
              
             if(PINB.3==1)                        //3
              {
                f=f1;
              }
             else if(PINB.3==0)
              {
               f=f2;
              }
             delay_ms(d);
              
             if(PINB.4==1)                        //4
              {
                f=f1;
              }
             else if(PINB.4==0)
              {
               f=f2;
              }
             delay_ms(d);
              
             if(PINB.5==1)                        //5
              {
                f=f1;
              }
             else if(PINB.5==0)
              {
                f=f2;
              }  
             delay_ms(d);
              
             if(PINB.6==1)                        //6
              {
                f=f1;
              }
             else if(PINB.6==0)
              {
                f=f2;
              }  
             delay_ms(d);
            
             if(PINB.7==1)                        //7
              {
                f=f1;
              }
             else if(PINB.7==0)
              {
                f=f2;
              }  
             delay_ms(d);

             #asm("cli");
            };    
            
      a=(a*0.0200784);
      RD=1;

      lcd_clear();
      ftoa(a,2,s1);
      lcd_puts(s1);
     }  
}

کد:
گیرنده:
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <lcd.h>

#asm
   .equ __lcd_port=0x15;
#endasm

unsigned long int timer0_ov;
unsigned long int in_freq;
unsigned char lcd_buff[20];

int a=77;

int d1=50;
int d2=116;

char s1[8];
float b;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
timer0_ov ++;
}

void main(void)
{

DDRA=0x00;
DDRD=0xFF;

TCNT0=0x00;
OCR0=0x00;
TCCR0=0x00;

TIMSK=0x01;

lcd_init(16);

while (1)
   {            
    
    if (PINA.3==1)
    {          
      PORTD=0;

      lcd_clear();
     {      

      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //0
      #asm("sei")     // Global enable interrupts
      delay_ms(d2+4);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff,"%d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.0=1;      
      }
      else if (in_freq<a)
      {
      PORTD.0=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
     };      
      
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //1
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.1=1;      
      }
      else if (in_freq<a)
      {
      PORTD.1=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };    
      
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //2
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.2=1;      
      }
      else if (in_freq<a)
      {
      PORTD.2=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };    
      
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //3
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
    
      if (in_freq>a)
      {
      PORTD.3=1;      
      }
      else if (in_freq<a)
      {
      PORTD.3=0;      
      }
      
       TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };    
      
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //4
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.4=1;      
      }
      else if (in_freq<a)
      {
      PORTD.4=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };    
    
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //5
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.5=1;      
      }
      else if (in_freq<a)
      {
      PORTD.5=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };    
    
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //6
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.6=1;      
      }
      else if (in_freq<a)
      {
      PORTD.6=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };    
    
      {
      TCCR0=0x06;     // Start Timer T0 pin Falling Edge               //7
      #asm("sei")     // Global enable interrupts
      delay_ms(d2);
      #asm("cli");    // Global disable interrupts
      in_freq = timer0_ov * 256 + TCNT0;
      sprintf(lcd_buff," %d",in_freq);
      lcd_puts(lcd_buff);
      
      if (in_freq>a)
      {
      PORTD.7=1;      
      }
      else if (in_freq<a)
      {
      PORTD.7=0;      
      }
      
      TCCR0=0x00;    //Stopt Timer0
      timer0_ov=0;   //Prepare for next count
      TCNT0=0;       //Clear Timer0
      };  

      delay_ms(d1);

      lcd_clear();
      delay_ms(d1);
      lcd_putsf("==========");
      delay_ms(d1);

      lcd_clear();
      delay_ms(d1);
      lcd_putsf("==========");
      delay_ms(d1);
      
      lcd_clear();
      delay_ms(d1);
      lcd_putsf("==========");
      delay_ms(d1*2);

      b=PIND;
      b=(b*0.0200784);

      lcd_clear();
      ftoa(b,2,s1);
      lcd_puts(s1);
    }  
   }
}
دوستان نظری! پیشنهادی...!
اصلا چیزه سختی نیستا من چون زیاد AVR بلد نیستم گیر کردم.