اطلاعیه

Collapse
No announcement yet.

اتصال ماژول گیرنده ask به avr

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : اتصال ماژول گیرنده ask به avr

    برنامه رو پیدا کردم میگذارمش ببینیم هر قسمت چیکار میکنه لطفا نظراتتون رو درباه قسمت های مختلف برنامه بگید با هم هر قسمت رو بررسی کنیم و به نتیجه برسیم

    پایه دیتای ماژول رو باید بدیم به INT0 میکرو

    کد:
    #include <mega32.h>
    #include <delay.h>
    // Standard Input/Output functions
    #include <stdio.h>
    
    // Alphanumeric LCD Module functions
    #asm
      .equ __lcd_port=0x1B ;PORTA
    #endasm
    #include <lcd.h>
    
    // Declare your global variables and FUNCTIONS here
    extern void init(void);
    unsigned char edge=1;
    unsigned int HTime=0,LTime=0 ;
    unsigned long Tm=0;
    unsigned char bufer[13];
    unsigned char Tmp[24];
    unsigned char DetectTruePacket=0;
    
    #pragma warn-
    void FinalAnalyse(void){
     unsigned char i=0;
     for(i=0;i<12;i++){
      if   (Tmp[i*2]==0 && Tmp[(i*2)+1]==0){
        bufer[i]='0';
      }
      else if(Tmp[i*2]==1 && Tmp[(i*2)+1]==1){       
        bufer[i]='1';  
      }
      else{
        bufer[i]='F';    
      }
     }; 
     bufer[12]=0; // terminate string 
    }
    #pragma warn+
    
    unsigned char isSync(void){
     if (HTime<LTime)
      if(HTime>13 && HTime<30)
       if(LTime>570 && LTime<700)
         return(1);      
     return(0);   
    }
    
    unsigned char isZero(void){
     if (HTime<LTime)
      if(HTime>13 && HTime<30)
       if(LTime>50 && LTime<70)
         return(1);      
     return(0);   
    }
    
    unsigned char isOne(void){
     if (HTime>LTime)
      if(LTime>13 && LTime<30)
       if(HTime>50 && HTime<70)
         return(1);      
     return(0);   
    }
    
    // Timer 1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
     /* TCNT1 = 0xFF9B that mean 65535-100 
     so this routin will trigger every 120us on 12MHZ. 
     if your project is using different clock rate 
     u must modify TCNT1 rigisters to project work fine.*/
     
     TCNT1H=0xFF;
     TCNT1L=0x9B;
     Tm++;  
    }
    
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
     static unsigned char bitCnt=0;  
      if(edge>0){
         LTime=Tm;
         Tm=0;
         MCUCR = 2;      // Set interrupt on falling edge
         edge = 0;
         if(isSync()){
         if(bitCnt==24){ 
          FinalAnalyse() ;
          DetectTruePacket=1;
         };
         bitCnt=0;
    
         } else if(isZero()){
         Tmp[bitCnt++]=0;
    
         } else if(isOne()){
         Tmp[bitCnt++]=1;     
    
         } else{
         bitCnt=0;
         }
      }else{    
         HTime=Tm;
         Tm=0;
         MCUCR = 3;      // Set interrupt on rising edge
         edge = 1;   
      };
    }
    
    
    void main(void)
    {
    init();
    lcd_init(16);
    #asm("sei")
    
    while (1)
       {
       if(DetectTruePacket){
          lcd_gotoxy(0,0);   
          lcd_puts(bufer);   
          DetectTruePacket=0;
       };
       };
    }
    درد من تنهایی نیست ، بلکه مرگ ملتی است که گدایی را قناعت، بی عرضگی را صبر، و باتبسمی بر لبان این حماقت را حکمت خداوند می نامند. ---((گاندی))---

    دیدگاه


      #17
      پاسخ : اتصال ماژول گیرنده ask به avr

      فقط در نظر داشته باش که این ماژول های گیرنده وقتی چیزی نمیگیرن .شروع میکنن در خروجی به تولید کلاک های نا مربوط و مزاحم که کار میکرو ور کمی مخطل میکنه بخصوص زمانی که میکرو مداوم کاری رو انجام میده (مثلا ساعت )
      روزی که درک کردیم همه چیز به خدا تعلق دارد . آن روز .روز طلوع دانش است

      دیدگاه


        #18
        پاسخ : اتصال ماژول گیرنده ask به avr

        سلام دوستان
        ببخشید من دارم ی دماسنج درست میکنم که از دو قسمت فرستنده و گیرنده درست شده و فرستنده و گیرنده رو با ماژول ask 315 وصل کردم و برنامه نویسیش تو محیط بیسیک هست به این صورت که تو فرستنده برای هر درجه یه عدد با دستور printbin میفرستم و تو گیرنده با دستور inkye عدد رو میخونم و تو lcd نمایش میده حالا مشکلم اینه غیر از دمای درست عدد های دیگه هم میفرسته تو lcd نشون میده مثلا دما 27 باشه 27 و 16 و 0 چند تا عدد دیگرم نشون میده که بنظرم نویز هستند چطور میتونم جلوی این نویز هارو بگیرم اگه راهنماییم کنید ممنون میشم

        دیدگاه

        لطفا صبر کنید...