اطلاعیه

Collapse
No announcement yet.

راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

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

    راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

    سلام به همه دوستان عزیز من میخواستم سنسور smt160 رو با avr راه اندازی کنم برنامه زیر رو نوشتم اما رو lcd چیزی از مقادیر دما مشخص نیست و چیزی نشون نمیده ممنون میشم اگه کمک کنین.



    اضافه شده در تاریخ :
    کد:
    #include <mega16.h>
    #include <alcd.h>
    #include <math.h>
    #include <delay.h>
    #include <stdio.h>
    #include <stdlib.h>
    float t1=0.0,t2=0.0;
    unsigned char k[];
    bit control=0;
    unsigned char araye[16];
    interrupt [EXT_INT0] void ext_int0_isr(void) {
    TCCR1B=0X00;
    if (control){
    t2=TCNT1;
    TCNT1=0;
    MCUCR=0X02;
    control=0;
    }
    else {
    t1=TCNT1;
    TCNT1=0;
    MCUCR=0x03;
    control=1;
    }
    TCCR1B=0X02;
    }
    void main(void)
    {
    float DC=0.0;
    float t=0.0;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 1000.000 kHz
    // Mode: Normal top=0xFFFF
    // OC1A output: Discon.
    // OC1B 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
    TCCR1A=0x00;
    TCCR1B=0x02;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Low level
    // INT1: Off
    // INT2: Off
    GICR|=0x40;
    MCUCR=0x02;
    MCUCSR=0x00;
    GIFR=0x40;
    ACSR=0x80;
    SFIOR=0x00;
    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTA Bit 0
    // RD - PORTA Bit 1
    // EN - PORTA Bit 2
    // D4 - PORTA Bit 4
    // D5 - PORTA Bit 5
    // D6 - PORTA Bit 6
    // D7 - PORTA Bit 7
    // Characters/line: 16
    lcd_init(16);
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
       {
       DC=t1/(t1+t2);
       //DC+=0.018;
       t=(DC-0.32)/0.0047;
       ftoa(t,3,k); 
       sprintf(araye,"temp=",k);
       //puts(araye);
       // lcd_clear(); 
       lcd_gotoxy(0,0);
       lcd_puts(araye);
       
       // Place your code here
    
       }
    }

    اضافه شده در تاریخ :
    تورو خدا هر کی میدونه کمک کنه ،خیلی واجبه .من خودم فکر میکنم که مشسکل کارم تو قسمت نمایش دادن محتوای t روی ال سی دیه ،اگه راهنمایی کنین ممنون میشم ،ب خدا زیاد کاری نداره
    انصاف نباشد که من خسته رنجور پروانه او باشم و او شمع جماعت

    #2
    پاسخ : راه اندازی سنسور دما smt160 با میکروavr

    ببین برای تبدیل عدد اعشاری به رشته باید یا از sprintf استفاده کنی یا از ftoa

    اضافه شده در تاریخ :
    ftoa رو کلا پاک کن و توی sprintf به جای k بنویس t و جلوی temp یه F% هم بزاری اگه مشکل این قسمت حل میشه به امید خدا
    *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
    ناپلئون بناپارت

    دیدگاه


      #3
      پاسخ : راه اندازی سنسور دما smt160 با میکروavr

      ممنون انجام دادم نشد،توی پروتئوس به جای سنسور از یه فانکشن ژنراتور استفاده کردم که موج مربعی درست میکنه.تا اینجا که مشکلی نداره؟ روی ال سی دی فقط عبارت =temp دیده میشه و جلوی تساوی هیچ عددی که دما رو نشون بده پیدا نیست.نمیدونم شاید تو نمونه گیری و محاسباتش یه جایی مشکل دارم.ممنون اگه بیشتر راهنمایی کنین

      اضافه شده در تاریخ :
      برنامه به شکل زیر شده..
      کد:
      #include <mega16.h>
      #include <alcd.h>
      #include <math.h>
      #include <delay.h>
      #include <stdio.h>
      #include <stdlib.h>
      float t1=0.0,t2=0.0;
      unsigned char k[];
      bit control=0;
      unsigned char araye[16];
      interrupt [EXT_INT0] void ext_int0_isr(void) {
      TCCR1B=0X00;
      if (control){
      t2=TCNT1;
      TCNT1=0;
      MCUCR=0X02;
      control=0;
      }
      else {
      t1=TCNT1;
      TCNT1=0;
      MCUCR=0x03;
      control=1;
      }
      TCCR1B=0X02;
      }
      void main(void)
      {
      float DC=0.0;
      float t=0.0;
      
      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: 1000.000 kHz
      // Mode: Normal top=0xFFFF
      // OC1A output: Discon.
      // OC1B 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
      TCCR1A=0x00;
      TCCR1B=0x02;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
      // External Interrupt(s) initialization
      // INT0: On
      // INT0 Mode: Low level
      // INT1: Off
      // INT2: Off
      GICR|=0x40;
      MCUCR=0x02;
      MCUCSR=0x00;
      GIFR=0x40;
      ACSR=0x80;
      SFIOR=0x00;
      // Alphanumeric LCD initialization
      // Connections are specified in the
      // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
      // RS - PORTA Bit 0
      // RD - PORTA Bit 1
      // EN - PORTA Bit 2
      // D4 - PORTA Bit 4
      // D5 - PORTA Bit 5
      // D6 - PORTA Bit 6
      // D7 - PORTA Bit 7
      // Characters/line: 16
      lcd_init(16);
      
      // Global enable interrupts
      #asm("sei")
      
      while (1)
         {
         DC=t1/(t1+t2);
         DC+=0.018;
         t=(DC-0.32)/0.0047;
         sprintf(araye,"temp=%F",t);
         lcd_gotoxy(0,0);
         lcd_puts(araye);
         delay_ms(500);
         
      
         }
      }

      اضافه شده در تاریخ :
      در ضمن رو برد بورد هم بستم دقیقا همون ج رو داد.با سنسور smt160 بستم
      انصاف نباشد که من خسته رنجور پروانه او باشم و او شمع جماعت

      دیدگاه


        #4
        پاسخ : راه اندازی سنسور دما smt160 با میکروavr

        الان مشکل با سنسوره یا LCD؟
        اگر با LCD مشکل داری بهتره مقدار t2 و t1 را دستی بدی و از صحت عملکرد تابع sprintf مطمئن بشی و بعد بری دنبال باقی ماجرا.

        دیدگاه


          #5
          پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه

          بصورت دستی هم مقدار دادم اما بازم هیچی روی ال سی دی مشخص نیست و تنها چیزی که روی ال سی دی میبینیم=temp .بخدا اگه حرفه ایها یه دور خط به خط برنامه رو پیش برن خیلی راحت متوجه میشن
          انصاف نباشد که من خسته رنجور پروانه او باشم و او شمع جماعت

          دیدگاه


            #6
            پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

            بجای اون F% از 3d-% ( درصد منفی سه دی) استفاده کنید درست میشه.
            البته من بجای t یه عدد اعشاری قرار دادم و دیدم روی lcd درست نمایش نمیده. برای همین اینطوری اصلاحش کردم و درست شد.
            کد:
               ftoa(t,3,k); 
               lcd_gotoxy(0,0);
               lcd_puts("temp=");
               lcd_gotoxy(5,0);
               lcd_puts(k);
            www.gam-co.blogsky.com

            دیدگاه


              #7
              پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

              این یعنی چی ؟
              متغیرش مگه از نوع float نیست ؟
              *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
              ناپلئون بناپارت

              دیدگاه


                #8
                پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                نوشته اصلی توسط vahidabedi
                بجای اون F% از 3d-% ( درصد منفی سه دی) استفاده کنید درست میشه.
                البته من بجای t یه عدد اعشاری قرار دادم و دیدم روی lcd درست نمایش نمیده. برای همین اینطوری اصلاحش کردم و درست شد.
                کد:
                   ftoa(t,3,k); 
                   lcd_gotoxy(0,0);
                   lcd_puts("temp=");
                   lcd_gotoxy(5,0);
                   lcd_puts(k);
                ممنون که راهنمایی کردی اما من وقتی امتحان کردم درست نشد در ضمن مگه متغیر از نوع float مشکلی داره یا همون دستور sprintf چه اشکالی داره که ج نمیده؟ میشه فایل درست شدتونو پیوست کنین؟
                انصاف نباشد که من خسته رنجور پروانه او باشم و او شمع جماعت

                دیدگاه


                  #9
                  پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                  یعنی هیچکس نیست راهنماییکنه و این مشکل ما رو حل کنه؟
                  انصاف نباشد که من خسته رنجور پروانه او باشم و او شمع جماعت

                  دیدگاه


                    #10
                    پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                    من نگفتم float مشکل داره. ولی t رو خودم یه مقدار اعشاری دادم بعد از sprintf استفاده کردم ولی عدد رو به دلایلی که من بلد نیستم اشتباه چاپ کرد و حجم بیشتری از حافظه رو هم گرفت.
                    الآن شما مشکلتون چیه؟ یعنی بازم هیچی نشون نمیده؟؟!! من تست کردم جواب داد.
                    www.gam-co.blogsky.com

                    دیدگاه


                      #11
                      پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                      تنطیمات کد ویژن رو انجام دادی ؟
                      *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
                      ناپلئون بناپارت

                      دیدگاه


                        #12
                        پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                        حتما تنظیمات کدویژن رو انجام دادن که میگن =temp رو نشون میده.
                        www.gam-co.blogsky.com

                        دیدگاه


                          #13
                          پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                          آره انجام دادم ،نمیدونم والا این چه مشکلیه دیگه تا حالا به همچین چیزی بر نخورده بودم.اون فایل درست شدتونو پیوست کنین بیزحمت شاید به یه طریقی مشکلو فهمیدم
                          انصاف نباشد که من خسته رنجور پروانه او باشم و او شمع جماعت

                          دیدگاه


                            #14
                            پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                            ن ربطی نداره که اگه تنظیمات دستور sprintf رو انجام نداده باشه فقط مقادیر صحیح و متنو ..... رو نشون میده ولی اعشاری نشون نمیده
                            اینکه میگید که اعشاری رو نشون نمیده فک میکنم که باسه اینه که تنظیم نکرده
                            دوست عزیز لطف کن برنامه رو به صورت کامل قرار بده ببینم مشکلش چیه؟
                            اگه سوادم برسه حتما کمک میکنم
                            *****براي آدمي بهتر است که اصلا به دنيا نيايد تا اينکه بيايدو هيچ تاثيري نگذارد *****
                            ناپلئون بناپارت

                            دیدگاه


                              #15
                              پاسخ : راه اندازی سنسور دما smt160 با میکرو avr (تو رو خدا کمک کنین خیلی واجبه )

                              اره برای مقادیر اعشاری دستور sprintf مشکل داره. برای sprintf توی کدویژن چه تنظیماتی باید انجام داد؟
                              www.gam-co.blogsky.com

                              دیدگاه

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