اطلاعیه

Collapse
No announcement yet.

راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

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

    #31
    پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

    نوشته اصلی توسط alireza094
    یه مانع بین سنسور قرار دادم و ولتاژ با ولت متر اندازه گیری کردم و ولتاژ 1.2 رو نشون داد
    برای اینکه مشکلی پیش نیاد چه باید کرد؟
    برای اینکه مشکلی پیش نیاد باید بعد از پ امپ یه دونه دیود بذارین ولتاژو 0.7 کاهش بده .

    دیدگاه


      #32
      پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

      درباره شماتیک چیزی نگفتید
      شماتیک به صورتی که گذاشتم درسته یا اشکال داره؟

      نوشته اصلی توسط hadi_hashemi_85
      ما وقفه رو حساس به لبه ی پایین رونده کردیم . باید یه طرف کلیدو به جای 5 ولت به گراند وصل کنی .
      وگرنه تنظیماتو واسه لبه ی بالا رونده کنی :
      کد:
      // External Interrupt(s) initialization
      // INT0: On
      // INT0 Mode: Rising Edge
      // INT1: Off
      // INT2: Off
      GICR|=0x40;
      MCUCR=0x03;
      MCUCSR=0x00;
      GIFR=0x40;

      CLI وقفه ی سراسری رو در ابتدا که وارد وقفه شد غیر فعال میکنه ودر آخرش با SEI فعال میکنه .
      تاخیر 100 میلی ثانیه نیاز نیست .
      آخر وقفه یه تاخیر 2 ثانیه ای بذار . چون اجرای کل برنامه ی وقفت شاید 1 میلی ثانیه هم طول نکشه . اگه کلیدت لغزش داشته باشه ، وقفه دو بار اجرا میشه .

      خازن هم بازم واسه همینه . اگه خازن نذاری ممکنه با یه کلید زدن وقفه دو سه بار انجام بشه .

      منظورم از وقفه interrupt [EXT_INT0] void ext_int0_isr(void) هستش که اینو باید بیرون main بذاری .
      داخل main یه while(1);
      خالی بذاری کافیه .
      میکرو در این حلقه همیشه منتظر میمونه و وقتی کلیدو زدی میره تا وقفه رو اجرا کنه .وقفه رو که اجرا کرد ،برمی گرده به while(1)
      این کد اصلاح شده لطفا ببینید درسته

      کد:
      #include <mega16.h>
      #include <delay.h>
      bit sign;
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {  
        #asm ("CLI"); 
        if(sign==1)
        {
          if(PINA.1==1)
          {
            PORTD.0=1;
            PORTD.1=1;
            PORTD.2=1;
          }
          if(PINA.2==1)
          {
            PORTD.0=0;
            PORTD.1=0;
            PORTD.2=1;
          }
          sign=0;
        }
        if(sign==0)
        {
          if(PINA.1==1)
          {
            PORTD.2=0;
          }
          if(PINA.2==1)
          {
            PORTD.2=0;
          }
          sign=1;
        }     
        delay_ms(2000);
        #asm ("SEI"); 
      }
      void main(void)
      {
        PORTA=0x00;  DDRA=0xF8;
        PORTB=0x00;  DDRB=0xFF;
        PORTC=0x00;  DDRC=0xFF;
        PORTD=0x00;  DDRD=0xFF;
        // External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: Falling Edge
        // INT1: Off
        // INT2: Off
        GICR|=0x40;
        MCUCR=0x02;
        MCUCSR=0x00;
        GIFR=0x40;
        while (1) ;
      }
      برای اینکه مشکلی پیش نیاد باید بعد از پ امپ یه دونه دیود بذارین ولتاژو 0.7 کاهش بده .
      چه دیودی بزارم دیود معمولی جواب میده مثلا 1N4007

      دیدگاه


        #33
        پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

        آره . خوبه . مشکل خاصی دیده نمی شه . فقط احتمال میدم باید delay _2000 رو دو تا delay_1000 کنی .
        شاید کار نکنه . اگه کار نکرد اونطوری کن .

        کلیدم که یادت نره یه طرفش گراند باشه یه طرفش میکرو . جون حساس به لبه ی پایین روندست .
        4007 هم آره . میشه .

        فقط منبعتون باید درست حسابی باشه تا بتونه سه تا رله رو دریاو کنه .
        فکر کنم قرار نیست مدارو ببندین نه ؟ پروژست؟

        مدارو ببندین کار کنه . احتمالا مشکل نویز هم داشته باشه . شما ببندین حالا ببینیم چی میشه

        دیدگاه


          #34
          پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

          کلیدم که یادت نره یه طرفش گراند باشه یه طرفش میکرو . جون حساس به لبه ی پایین روندست .
          این کاروانجام دادم توشماتیک معلوم نیست؟

          فکر کنم قرار نیست مدارو ببندین نه ؟ پروژست؟
          مدار سنسورها کامله اینم عکس



          ادامه کار انشاالله انجام شد خبر میدم

          دیدگاه


            #35
            پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

            باسلام
            برنامه قبلی جواب نداد نه تو شبیه نه ...
            این برنامه نوشتم ولی وقتی کلیدی که به پایه اینتراپت وصل قطع میشه خروجی قطع میشه
            کد:
            #include <mega8.h>
            #include <delay.h>
            int cont;
            int contb1(void)
            {
              if(PINB.1==0)
              {
               PORTC.0=0;
               PORTC.1=0;
               PORTC.2=0; 
               cont=0;
               return 1;
              }      
              return 0;
            }
            int contb2(void)
            {
              if(PINB.2==0)
              {
               PORTC.0=0;
               PORTC.1=0;
               PORTC.2=0; 
               cont=0;
               return 1;
              }      
              return 0;
            }
            interrupt [EXT_INT0] void ext_int0_isr(void)
            {
              if(PINB.1==0)
              {
               PORTC.0=1;
               PORTC.1=1;
               PORTC.2=1;
               #asm ("cli");   
               cont=2;
              }      
              else if(PINB.2==0)
              {
               PORTC.0=0;
               PORTC.1=0;
               PORTC.2=1;
               #asm ("cli");
               cont=1;
              }      
            }
            void main(void)
            {
            PORTB=0x00; DDRB=0x00;
            PORTC=0x00; DDRC=0x7F;
            PORTD=0x00; DDRD=0x00;
            TCCR0=0x00;  TCNT0=0x00;  TCCR1A=0x00;
            TCCR1B=0x00;  TCNT1H=0x00; TCNT1L=0x00;
            ICR1H=0x00;  ICR1L=0x00;  OCR1AH=0x00;
            OCR1AL=0x00;  OCR1BH=0x00; OCR1BL=0x00;
            ASSR=0x00;   TCCR2=0x00;  TCNT2=0x00;
            OCR2=0x00;
            // External Interrupt(s) initialization
            // INT0: On
            // INT0 Mode: Low level
            // INT1: Off
            GICR|=0x40;  MCUCR=0x00;  GIFR=0x40;
            TIMSK=0x00;  UCSRB=0x00;  ACSR=0x80;
            SFIOR=0x00;  ADCSRA=0x00; SPCR=0x00;
            TWCR=0x00;
            #asm("sei")
            cont=0;
            while (1)
               {
               // Place your code here
                 if(cont==1)
                  if(contb1()==1)
                    #asm("sei")
                 if(cont==2)
                  if(contb2()==1)
                    #asm("sei")
               }
            }
            اینم شماتیک

            http://8pic.ir/images/naeu6vwyajxp6ly2q3ap.jpg
            لطفا کمک کنید

            دیدگاه


              #36
              پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

              سلام
              قکر نمی کنم اینقده شلوغ پلوغی لازم باشه .
              کد اینطوریه . از یه جایی به مشکل بر میخوری که میبینی شانسی یه کاری کردی درست شد . بعدها هم نمی دونی مشکلش از کجا بود .
              PORTD.2 رو یک کن تا مقاومت پول پ فعال بشه .

              منظورت اینکه خروجی صفر میشه چیه . یعنی تا زمانی که دستت رو کلیده کار میکنه . وبعد اون وقتی می کشی خروجیهات صفر میشن ؟

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

              دیدگاه


                #37
                پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                سلام
                قکر نمی کنم اینقده شلوغ پلوغی لازم باشه .
                اینقدر شلوغم نیست دوتا تابع اضافه کردم و چندتا دستور شرطی :mrgreen:
                PORTD.2 رو یک کن تا مقاومت پول پ فعال بشه .
                مفهوم نیست بیشتر توضیح بدید چکاری باید انجام بدم
                منظورت اینکه خروجی صفر میشه چیه . یعنی تا زمانی که دستت رو کلیده کار میکنه . وبعد اون وقتی می کشی خروجیهات صفر میشن ؟
                برای تست خروجی ها رو به LED وصل کردم و تست می کنم
                وقتی شاسی فشار میدی ونگه میداری خروجی یک میشه (LED روشن) وتا شاسی ول میکنی خروجی صفر میشه(LED خاموش میشه)
                پول پو فعال کن انشااله درست شد .
                چطوری فعال کنم؟
                ولی برنامه اولت هیچ مشکلی خاصی نداشت .
                کد اول اصلا کار نکرد.

                دیدگاه


                  #38
                  پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

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

                  چطوری فعال کنم؟
                  PORTD.2=1
                  DDRD.2=0

                  همین .
                  مثل اینه که یه مقاومت 10 کیلو از VCC بیارین به PIND.2

                  دیدگاه


                    #39
                    پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                    PORTD.2=1
                    DDRD.2=0
                    این کدهارو داخل برنامه بنویسم(داخل تایعMain)
                    مثل اینه که یه مقاومت 10 کیلو از VCC بیارین به PIND.2
                    یک مقاوم 10 کیلو به همین صورت وصل کردم

                    ولی کار نمی کنه
                    :angry: :cry2:

                    دیدگاه


                      #40
                      پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                      شما بیا یه برنامه ی خیلی ساده بنویس .
                      وقتی وقفه می خوره یه پورت رو 1 کنه . اگه دوباره زده شد صفر کنه . البته اصولیش اینه .
                      بعد اگه دیدی میتونی وقفه رو راش بندازی بری سراغ مراحل بعدی .

                      پروتیوس جواب نمی ده یا عمل ؟

                      دیدگاه


                        #41
                        پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                        شما بیا یه برنامه ی خیلی ساده بنویس .
                        وقتی وقفه می خوره یه پورت رو 1 کنه . اگه دوباره زده شد صفر کنه . البته اصولیش اینه .
                        نوشتم درست کار میکرد البته یک شرط داخل انتراپت گذاشتم اگه PB1=1 پایه PC0=1 اگه PB2=1 پایه PC0=0 درست عمل می کرد هم عملی و هم در پروتیوس
                        پروتیوس جواب نمی ده یا عمل ؟
                        این برنامه که نوشتم توی پروتیوس جواب میده ولی در عملی جواب نمیده
                        کد:
                        #include <mega8.h>
                        #include <delay.h>
                        int cont;
                        int contb1(void)
                        {
                          if(PINB.1==0)
                          {
                           PORTC.0=0;
                           PORTC.1=0;
                           PORTC.2=0; 
                           cont=0;
                           return 1;
                          }      
                          return 0;
                        }
                        int contb2(void)
                        {
                          if(PINB.2==0)
                          {
                           PORTC.0=0;
                           PORTC.1=0;
                           PORTC.2=0; 
                           cont=0;
                           return 1;
                          }      
                          return 0;
                        }
                        interrupt [EXT_INT0] void ext_int0_isr(void)
                        {
                          if(PINB.1==0)
                          {
                           PORTC.0=1;
                           PORTC.1=1;
                           PORTC.2=1;
                           #asm ("cli");   
                           cont=2;
                          }      
                          else if(PINB.2==0)
                          {
                           PORTC.0=0;
                           PORTC.1=0;
                           PORTC.2=1;
                           #asm ("cli");
                           cont=1;
                          }      
                        }
                        void main(void)
                        {
                        PORTB=0x00; DDRB=0x00;
                        PORTC=0x00; DDRC=0x7F;
                        PORTD=0x00; DDRD=0x00;
                        TCCR0=0x00;  TCNT0=0x00;  TCCR1A=0x00;
                        TCCR1B=0x00;  TCNT1H=0x00; TCNT1L=0x00;
                        ICR1H=0x00;  ICR1L=0x00;  OCR1AH=0x00;
                        OCR1AL=0x00;  OCR1BH=0x00; OCR1BL=0x00;
                        ASSR=0x00;   TCCR2=0x00;  TCNT2=0x00;
                        OCR2=0x00;
                        // External Interrupt(s) initialization
                        // INT0: On
                        // INT0 Mode: Low level
                        // INT1: Off
                        GICR|=0x40;  MCUCR=0x00;  GIFR=0x40;
                        TIMSK=0x00;  UCSRB=0x00;  ACSR=0x80;
                        SFIOR=0x00;  ADCSRA=0x00; SPCR=0x00;
                        TWCR=0x00;
                        #asm("sei")
                        cont=0;
                        while (1)
                           {
                           // Place your code here
                             if(cont==1)
                              if(contb1()==1)
                                #asm("sei")
                             if(cont==2)
                              if(contb2()==1)
                                #asm("sei")
                           }
                        }

                        دیدگاه


                          #42
                          پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                          والا . من نمی دونم دیگه چی بگم .

                          اگه پروتیوس جواب بده احتمال زیاد مشکل سخت افزاری داری .

                          منبع تغذیه ؟
                          دیودها جریان زیاد نمی کشن ؟

                          تو عمل از اون کلیدها می زاری یا پ امپ ها رو وصل میکنی ؟
                          پیشنهاد می کنم اگه با پ امپ ها میکنی ، اول مثل پروتیوس با کلید امتحان کن ببین میکرو کار می کنه ؟
                          یه پیشنهاد دیگه . داخل WHILE یه دونه تاخیر 1 ثانیه ای هم بذار . اگه زمان برات خیلی مهمه کمترش کن .
                          من که سر در نیاوردم .هر چی لازمه تو وقفه انجام میشه . اون یکی توابع واسه چیه نمی دونم .
                          آهان الان فهمیدم . اون دو تا کلید از پ امپا میان . تو می خوای هر آن واحد وضعیت چک بشه . :redface:



                          دیدگاه


                            #43
                            پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                            سلام
                            اگه پروتیوس جواب بده احتمال زیاد مشکل سخت افزاری داری .
                            دقیقا این مشکل فقط با ATM8 با ATM16 تست کردن درست کار می کنه. :applause:
                            یک کد کوچیک نوشتم که یک Led روشن کنه وقتی پرگرم کردم رو بردبورد تست کردم led چشمک زن بود مثل اینکه میکرو یکسره ریست میشه. :NO: :cry2:
                            مشکل شو پیدا نکردم برای چی چشمک میزنه؟
                            خلاصه مثل اینکه باید از ATMega16استفاده کنم.
                            منبع تغذیه ؟
                            دیودها جریان زیاد نمی کشن ؟
                            12 ولت 1 آمپر که با 7805 به 5 تبدیل میکنم.
                            نه .
                            تو عمل از اون کلیدها می زاری یا پ امپ ها رو وصل میکنی ؟
                            پیشنهاد می کنم اگه با پ امپ ها میکنی ، اول مثل پروتیوس با کلید امتحان کن ببین میکرو کار می کنه ؟
                            دقیقا شماتیک پروتئوس تو عمل بستم.
                            آهان الان فهمیدم . اون دو تا کلید از پ امپا میان . تو می خوای هر آن واحد وضعیت چک بشه . :redface:
                            فکر کن یک بالا بر داریم و میخایم بایک شاسی بالا پایین بره. یک سنسور پایین و یک سنسور بالا داریم.
                            اگه بالا باشه خروجی سنسور بالا صفره و خروجی سنسور پایین یک و... .
                            حالا اگه شاسی فشار دادیم بالا بود بره پایین وایسته و اگه پایین بود بده بالا و ایسته.

                            دیدگاه


                              #44
                              پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

                              تبریک عرض میکنم .
                              موفقیتهای بزرگ تو زندگی رو براتون آرزومندم .

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

                              دیدگاه


                                #45
                                پاسخ : راهنمایی برای اتصال خروجی مدار Infra-red Level Detector به ورود

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

                                دیدگاه

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