اطلاعیه

Collapse
No announcement yet.

مشکل ساده با برنامه ساده

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

    #16
    پاسخ : پاسخ : مشکل ساده با برنامه ساده

    متشکر از همکاری همه دوستان

    دیدگاه


      #17
      پاسخ : پاسخ : مشکل ساده با برنامه ساده

      نوشته اصلی توسط امیر حسین بیگدلی
      داداش برنامش رو با وقفه برات نوشتم. ولی توضیحش خیلی زیاد وقت میبره.

      اول این مدار رو ببند:



      برای استفاده از وقفه هست. خازن ها رو هم نذاشتی، نذاشتی.

      مقاومت های پول دان گذاشته شد.


      اینم از برنامه:

      [code=vb]
      $regfile = "m32def.dat"
      $crystal = 8000000
      '============================================ ===================================
      Declare Sub Detect_key
      Declare Sub Led1blink
      Declare Sub Led2blink
      Declare Sub Led3blink
      '============================================ ===================================
      Config Porta.0 = Input
      Config Porta.1 = Input
      Config Porta.2 = Input
      Config Portb.0 = Output
      Config Portb.1 = Output
      Config Portb.2 = Output
      '============================================ ===================================
      Key1 Alias Pina.0
      Key2 Alias Pina.1
      Key3 Alias Pina.2
      Led1 Alias Portb.0
      Led2 Alias Portb.1
      Led3 Alias Portb.2
      '============================================ ===================================
      Enable Interrupts
      Enable Int0
      Enable Timer0
      Enable Timer1
      Enable Timer2
      Enable Ovf0
      Enable Ovf1
      Enable Ovf2
      '============================================ ===================================
      Config Int0 = Rising

      Config Timer0 = Timer , Prescale = 1024
      Timer0 = 61

      Config Timer1 = Timer , Prescale = 1024
      Timer1 = 65341

      Config Timer2 = Timer , Prescale = 1024
      Timer2 = 61
      '============================================ ===================================
      On Int0 Detect_key
      On Ovf0 Led1blink
      On Ovf1 Led2blink
      On Ovf2 Led3blink
      '============================================ ===================================
      Dim F1 As Byte
      Dim F2 As Byte
      Dim F3 As Byte
      Dim D1 As Byte
      Dim D2 As Byte
      Dim D3 As Byte
      Dim C1 As Byte
      Dim C2 As Byte
      Dim C3 As Byte
      Dim X As Byte
      '============================================ ===================================
      D1 = 0
      D2 = 0
      D3 = 0
      C1 = 0
      C2 = 0
      C3 = 0
      F1 = 0
      F2 = 0
      F3 = 0
      '============================================ ===================================
      Stop Timer0
      Stop Timer1
      Stop Timer2
      '============================================ ===================================
      Do
      If F1 = 1 Then
      Stop Timer0
      Timer0 = 61
      F1 = 0
      C1 = 0
      D1 = 0
      End If

      If F2 = 1 Then
      Stop Timer1
      Timer1 = 65431
      F2 = 0
      C2 = 0
      D2 = 0
      End If

      If F3 = 1 Then
      Stop Timer2
      Timer2 = 61
      F3 = 0
      C3 = 0
      D3 = 0
      End If
      Loop
      End
      '============================================ ===================================
      Detect_key:

      If Key1 = 1 Then
      Start Timer0
      Set Led1
      C1 = 1
      End If

      If Key2 = 1 Then
      Start Timer1
      Set Led2
      C2 = 1
      End If

      If Key3 = 1 Then
      Start Timer2
      Set Led3
      C3 = 1
      End If

      Return
      '============================================ ===================================
      Led1blink:
      Stop Timer0
      Timer0 = 61

      If C1 = 11 Then
      F1 = 1
      C1 = 0
      D1 = 0
      Else
      If D1 = 80 Then
      X = C1 Mod 2
      D1 = 0
      If X = 1 Then
      C1 = C1 + 1
      Set Led1
      Else
      C1 = C1 + 1
      Reset Led1
      End If
      Else
      D1 = D1 + 1
      End If
      End If

      If F1 = 0 Then Start Timer0
      Return
      '============================================ ===================================
      Led2blink:
      Stop Timer1
      Timer1 = 65341


      If C2 = 11 Then
      F2 = 1
      C2 = 0
      D2 = 0
      Else
      If D2 = 80 Then
      X = C2 Mod 2
      D2 = 0
      If X = 1 Then
      C2 = C2 + 1
      Set Led2
      Else
      C2 = C2 + 1
      Reset Led2
      End If
      Else
      D2 = D2 + 1
      End If
      End If


      If F2 = 0 Then Start Timer1
      Return
      '============================================ ===================================
      Led3blink:
      Stop Timer2
      Timer2 = 61


      If C3 = 11 Then
      F3 = 1
      C3 = 0
      D3 = 0
      Else
      If D3 = 80 Then
      X = C3 Mod 2
      D3 = 0
      If X = 1 Then
      C3 = C3 + 1
      Set Led3
      Else
      C3 = C3 + 1
      Reset Led3
      End If
      Else
      D3 = D3 + 1
      End If
      End If


      If F3 = 0 Then Start Timer2
      Return
      '============================================ ===================================
      [/code]


      با وقفه ها که انشاءالله آشنایی داری...

      اگه نداشته باشی، توضیح این برنامه کار من نیست.

      ولی اگه داری:

      اول فشرده شدن کلید ها توسط یه وقفه شناسایی میشه به این صورت که هر کلیدی فشرده بشه، میکرو به زیر روال detect_key میره.

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

      برای اینکه از 3 تا تایمر استفاده شده، هر کلید هرزمانی میتونه فشرده بشه و هیچکدوم هم با هم تداخل نمیکنن.

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

      البته جای ال ای دی ها رو تغییر دادم و به پورت B وصل کردم.

      محاسبات تایمر ها هم به گونه ای انجام شده که تایمر هر 0.025 ثانیه ، به زیر روال وقفه بره.

      به همین خاطر برای تولید زمان 2 ثانیه باید زیر روال 80 بار اجرا بشه که بار 80 اُم ، 2 ثانیه از بار اول گذشته باشه.

      ایجاد این 80 ثانیه بر عهده ی متغیر های D هست.

      سیکل ما 10 مرحله داره ( 5 بار و هر بار روشن و خاموش میشه 5 * 2 )

      وقتی کلید فشرده میشه در همون لحظه باید قسمت اول سیکل اجرا بشه. پس c برابر 1 قرار داده میشه.

      و اتمام سیکل 10 تا بعد 1 یعنی 11 اُمین باری که به c اضافه میشه خواهد بود.

      ولی هنگام اتمام سیکل خود تایمر نمیتونه خودش رو stop کنه، پس فلگ f رو 1 میکنه تا روال اصلی برنامه این کار رو بکنه.

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

      این پروژه رو تو واقعیت هم تست کردم و کار میکنه.

      موفق باشید.
      تست کردم خیلی عالی بود
      ولی این قسمت از برنامه را متوجه نشدم ، میشه کمی توضیح دهید
      کد:
       Config Timer0 = Timer , Prescale = 1024
      Timer0 = 61
      این عدد 61 و 65341 بر چه اساسی گذاشته شده اند؟

      کد:
          If D1 = 80 Then
           X = C1 Mod 2
           D1 = 0
           If X = 1 Then
            C1 = C1 + 1
            Set Led1
           Else
            C1 = C1 + 1
            Reset Led1
           End If
         Else
           D1 = D1 + 1
         End If
        End If
      این قسمت هم نفهمیدم چی شده؟

      دیدگاه


        #18
        پاسخ : مشکل ساده با برنامه ساده

        باید برات قصه زمان بندی ها رو میگفتم:

        prescale تایمر ها هر سه 1024 هست. یعنی فرکانس همه تایمر ها 7812.5 هرتز هست.
        حالا با فرمول دوره ( T=1/f ) مدت زمانی که طول میکشه هر تایمر یه واحد اضافه شه رو حساب میکنیم. میشه: 0.000128 ثانیه.
        پس یعنی همه ی تایمر ها ، هر 0.000128 ثانیه یه واحد اضافه میشن.
        و میدونیم که تایمر 0 و 2 تا 256 ظرفیت دارن و تایمر 1 تا 65536 ظرفیت داره.

        پس تایمر 0 و تایمر 2 بعد از 256 * 0.000128 ثانیه overflow میشن و تایمر 1 بعد از 65536 * 0.000128 ثانیه overflow میشه.

        ولی ما به زمان 2 ثانیه احتیاج داریم، اما حد اکثر زمان قابل دسترسی برای تایمر 0 و تایمر 2 ، 0.032768 ثانیه و برای تایمر 1 ، 8.388608 ثانیه هست.

        پس ما یه زمان کوچکتر که 2 بر اون به صورت صحیح قابل تقسیم باشه و هر سه تایمر توانایی تولید اون رو داشته باشن، احتیاج داریم.

        یه چیزی مثل 0.025 ثانیه که هم کوچکتر از ظرفیت همه تایمر ها هستن و هم 2 ثانیه بر اون بخش پذیره.(0.025 * 80 = 2 )

        پس ما باید کاری کنیم که تایمر ها بعد از 0.025 ثانیه ، overflow بشن.

        که اگه تایمر های 0 و 2 رو مقدار اولیه 61 بدیم، فقط 195 تا 0.000128 ثانیه میگذره. و حدودا میشه 0.025.
        و برای تایمر 1 با مقدار اولیه 65341 هم، فقط 195 تا 0.000128 ثانیه میگذره. و باز حدودا میشه 0.025.

        __________________________________________________ ____

        و برای اون قسمت دوم:

        میدونیم 5 تا سیکل 4 ثانیه ای باید انجام بشه.
        که نمودارش اینجوریه:



        در هر جای برنامه ما باید بدونیم که کجای کاریم که این کار با متغیر C انجام میشه.

        ولی قبل از اون باید ببینیم که آیا d برابر 80 هست یا نه.

        پس یه if کلی داریم که اگه d هشتاد نشده بود ( قسمت else ) ، به d یک واحد اضافه کنه.
        و اگه هشتاد بود:

        یعنی باید یه کاری با portb.x بکنیم (خروجی ال ای دی ) یا باید خاموش شه یا باید روشن شه.

        اگه به نمودا نگاه کنیم، میبینیم که اگه مقدار سابق c فرد باشه، باید ال ای دی روشن شه یا در واقع set شه و اکه زوج باشه باید خاموش یا 0 شه.

        تشخیص زوج و فردی با گرفتن باقیمانده تقسیم c به 2 انجام میشه.

        همین.
        [glow=green,2,300][b]بشر ممکن الخطاست
        درخت هرچه پربار تر سر به زیر تر[/glow]

        دیدگاه


          #19
          پاسخ : مشکل ساده با برنامه ساده

          اگر خواستید من میتونم به زبان سی براتون راهش بندازم

          دیدگاه


            #20
            پاسخ : مشکل ساده با برنامه ساده

            نوشته اصلی توسط Hamedsj
            اگر خواستید من میتونم به زبان سی براتون راهش بندازم
            اگر امکانش هست مطابق همون الگوریتم آقای بیگدلی برنامه C را بزارید تا مطابقت بدهیم و ببینم کدام راحت تره

            دیدگاه


              #21
              پاسخ : مشکل ساده با برنامه ساده

              کد:
              This program was produced by the
              CodeWizardAVR V2.05.0 Professional
              Automatic Program Generator
              © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
              http://www.hpinfotech.com
              
              Project : 
              Version : 
              Date  : 03/21/2015
              Author : NeVaDa
              Company : 
              Comments: 
              
              
              Chip type        : ATmega16
              Program type      : Application
              AVR Core Clock frequency: 1.000000 MHz
              Memory model      : Small
              External RAM size    : 0
              Data Stack size     : 256
              *****************************************************/
              
              #include <mega16.h>
              #include <delay.h>
              // Declare your global variables here
              #define pushbutton1 PINA.0
              #define pushbutton2 PINA.1
              #define pushbutton3 PINA.2
              
              
              #define led1 PORTD.0
              #define led2 PORTD.1
              #define led3 PORTD.2
              void main(void)
              {
              // Declare your local variables here
              
              // Input/Output Ports initialization
              // Port A 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 
              PORTA=0x00;
              DDRA=0x00;
              
              // Port B 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 
              PORTB=0x00;
              DDRB=0x00;
              
              // 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=Out Func1=Out Func0=Out 
              // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0 
              PORTD=0x00;
              DDRD=0x07;
              
              // Timer/Counter 0 initialization
              // Clock source: System Clock
              // Clock value: Timer 0 Stopped
              // Mode: Normal top=0xFF
              // OC0 output: Disconnected
              TCCR0=0x00;
              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.
              // 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=0x00;
              TCNT1H=0x00;
              TCNT1L=0x00;
              ICR1H=0x00;
              ICR1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;
              
              // Timer/Counter 2 initialization
              // Clock source: System Clock
              // Clock value: Timer2 Stopped
              // Mode: Normal top=0xFF
              // OC2 output: Disconnected
              ASSR=0x00;
              TCCR2=0x00;
              TCNT2=0x00;
              OCR2=0x00;
              
              // External Interrupt(s) initialization
              // INT0: Off
              // INT1: Off
              // INT2: Off
              MCUCR=0x00;
              MCUCSR=0x00;
              
              // Timer(s)/Counter(s) Interrupt(s) initialization
              TIMSK=0x00;
              
              // USART initialization
              // USART disabled
              UCSRB=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;
              
              while (1)
                 {
                 // Place your code here
                 if (pushbutton1=1)
                  { 
                  while (5)
                  {
                  led1=1;
                  delay_ms(2000);
                  led1=0;
                  delay_ms(2000);
                  }
                  }
                  if (pushbutton2=1)
                  {
                   while (5)
                   {
                   led2=1;
                   delay_ms(2000);
                   led2=0;
                   delay_ms(2000);
                   }
                  }
                   if (pushbutton3=1)
                   {
                   while (5)
                   {
                   led3=1;
                   delay_ms(2000);
                   led3=0;
                   delay_ms(2000);
                   }
                   }
                 }
              }
              ببینید این چطوره؟
              شاید این خوب باشه
              دقیقا نمیدونم که طبق الگوریتم آقای بیگدلی هست یا نه......... :biggrin:

              دیدگاه


                #22
                پاسخ : مشکل ساده با برنامه ساده

                نوروزتون مبارک باشه

                ببینید دوستان برای همچین برنامه ساده ای لازم نیست از سه تایمر استفاده بشه حتی نیازی به اینتراپت هم نیست برنامه رو میشه فقط با استفاده از 1 تایمر نوشت

                برنامه زیر همراه با فایل پروتئوسش رو ببینید :

                http://www.mediafire.com/download/7vyuci6v7d98rpy/button-led.zip
                من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                آلبرت اینشتین
                منبع: http://fa.wikiquote.org

                دیدگاه


                  #23
                  پاسخ : مشکل ساده با برنامه ساده

                  نوشته اصلی توسط S i l i c o n
                  نوروزتون مبارک باشه

                  ببینید دوستان برای همچین برنامه ساده ای لازم نیست از سه تایمر استفاده بشه حتی نیازی به اینتراپت هم نیست برنامه رو میشه فقط با استفاده از 1 تایمر نوشت

                  برنامه زیر همراه با فایل پروتئوسش رو ببینید :

                  http://www.mediafire.com/download/7vyuci6v7d98rpy/button-led.zip
                  متشکر
                  خیلی جالب بود
                  میشه کمی درباره روش برنامه توضیح دهید

                  دیدگاه


                    #24
                    پاسخ : مشکل ساده با برنامه ساده

                    نوشته اصلی توسط imanxx_81
                    متشکر
                    خیلی جالب بود
                    میشه کمی درباره روش برنامه توضیح دهید
                    خواهش میکنم

                    در این برنامه از تایمر 0 استفاده شده و همونطور که می بینید تایمر از اول برنامه استارت شده و هیچ وقت متوقفش نمی کنیم.
                    تمام کار با استفاده از یه سری متغیر که نقش شمارنده رو ایفا میکنن انجام میشه
                    البته متغیرهایی مثل a و e و i و b و f و j متغیرهای بیتی هستند که برای تعیین یک حالت بخصوص استفاده میشن
                    مثلا وقتی a=1 , b=0 باشد دستور Set Portd.0 اجرا میشود که ابتدای برنامه مربوط به کلید portb.0 است متغیر b برای این استفاده میشود که مشخص شود ابتدای فشرده شدن کلید است یا نه و متغیر a هم برای تعیین این است که کدام کلید فشرده شده است تا برنامه و شروط مربوط به آن اجرا شود همانطور که میبینید متغیر a در هنگام برابر شدن متغیر d با 10. برابر با صفر میشود و معنیش این است که فرآیند مربوط به کلید portb.0 تمام شده است.

                    دستوراتی که مربوط به متغیرهای a , b ,c ,d هستند مربوط به کلید portb.0 و led متصل به portd.0 هستند و عینا برای متغیرهای e,f,g,h و همینطور i,j,k,l تکرار
                    میشوند در واقع زیر برنامه اینتراپت تایمر 0 از 3 بخش تشکیل شده که هر 3 تا مثل هم هسنتد و هر یک مربوط به یکی از کلیدها و یکی از led ها است
                    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
                    آلبرت اینشتین
                    منبع: http://fa.wikiquote.org

                    دیدگاه


                      #25
                      پاسخ : مشکل ساده با برنامه ساده

                      نوشته اصلی توسط abed73
                      دمت گرم داداش
                      میشه کدش رو بذاری
                      ضمنا با چه برنامه ای فایل برنامه C رو به هگز تبدیل میکنی؟
                      مرسی
                      با خود کدویژن

                      دیدگاه


                        #26
                        پاسخ : مشکل ساده با برنامه ساده

                        الگوریتم برنامه به این شکل تغییر کرد
                        1- سه پورت با سه کلید فعال شوند و 10 بار 2 ثانیه روشن و 2 ثانیه خاموش و پس از سیکل 10 بار روشن بماند
                        2- با زدن کلید چهارم هر سه پورت غیر فعال و خاموش شود
                        3- هریک از سه کلید اول اگر اولین بار زده شود سیکل مرحله یک اجرا شود ولی برای بار دوم زده شود همون پورت خروجی مربوطه که روشن شده خاموش بشه

                        برنامه را به کمک فایل قبلی دوستان با اندکی تغییرات نوشته ام
                        ولی مرحله دو و سه الگوریتیم تا به پایان سیکل نرسد عمل نمی کند و در اصل باید به محضی که کلید برای بار دوم زده شود سیکل قطع گردد و مرحله 3 هم خوب اجرا نمیشه
                        لطفاً کمک کنید
                        کد:
                        $regfile = "m32def.dat"
                        $crystal = 8000000
                        
                        Dim A As Bit , B As Bit , C As Byte , D As Byte , M As Byte
                        Dim E As Bit , F As Bit , G As Byte , H As Byte , N As Byte
                        Dim I As Bit , J As Bit , K As Byte , L As Byte , Z As Byte
                        Config Timer0 = Timer , Prescale = 1024
                        Enable Timer0
                        Enable Interrupts
                        On Timer0 T0_isr
                        Start Timer0
                        Timer0 = 178
                        
                        
                        Config Pinb.0 = Input
                        Config Pinb.1 = Input
                        Config Pinb.2 = Input
                        Config Pinb.3 = Input
                        Config Pind.0 = Output
                        Config Pind.1 = Output
                        Config Pind.2 = Output
                        
                        Config Debounce = 100
                        
                        Main:
                        Do
                        Debounce Pinb.0 , 0 , Stop1
                        Debounce Pinb.1 , 0 , Led0
                        Debounce Pinb.2 , 0 , Led1
                        Debounce Pinb.3 , 0 , Led2
                        Loop
                        
                        Led0:
                        A = 1 : B = 0 : Incr M
                        Goto Main
                        
                        
                        Led1:
                        E = 1 : F = 0 : Incr N
                        Goto Main
                        
                        Led2:
                        I = 1 : J = 0
                        Goto Main
                        
                        Stop1:
                        Z = 1
                        Goto Main
                        
                        End
                        
                        T0_isr:
                        Timer0 = 178
                        
                        
                        If A = 1 Then
                          If M = 1 Then
                           Set Portd.0
                           C = 0 : D = 0
                          End If
                           Incr M
                           Incr C
                           If C = 200 Then
                             C = 0
                             Toggle Portd.0
                             Incr D
                             If D = 10 Then
                              Set Portd.0
                              A = 0
                             End If
                           End If
                        End If
                        
                        
                        If A = 1 Then
                          If M = 3 Then
                           Reset Portd.0
                           A = 0
                          End If
                          M = 0
                        End If
                        
                        
                        
                        If E = 1 Then
                          If N = 1 Then
                           Set Portd.1
                           G = 0 : H = 0
                          End If
                           Incr G
                           If G = 200 Then
                             G = 0
                             Toggle Portd.1
                             Incr H
                             If H = 10 Then
                              Set Portd.1
                              E = 0
                              N = 2
                             End If
                           End If
                        End If
                        
                        
                        If E = 1 Then
                          If N = 3 Then
                           Reset Portd.1
                           E = 0
                          End If
                          N = 0
                        End If
                        
                        
                        
                        If I = 1 Then
                        If J = 0 Then
                        Set Portd.2
                        J = 1 : K = 0 : L = 0
                        End If
                        Incr K
                        If K = 200 Then
                        K = 0
                        Toggle Portd.2
                        Incr L
                        If L = 10 Then
                        Set Portd.2
                        I = 0
                        
                        End If
                        End If
                        End If
                        
                        
                        
                        If Z = 1 Then
                        Reset Portd.0
                        Reset Portd.1
                        Reset Portd.2
                        Z = 0
                        End If
                        
                        
                        Return
                        http://s5.picofile.com/file/81876976...Sycle.rar.html

                        دیدگاه


                          #27
                          پاسخ : مشکل ساده با برنامه ساده

                          علاوه بر مشکل نرم افزاری فوق یک مشکل سخت افزاری هم داره ، مدار زیر را بستم و هدفم اینه که خروجی علاوه بر روشن و خاموش کردن LED و یک رله هم هر کانال روشن کنه
                          تصویر مدارد و سخت افزار را در شکل زیر نمایش داده شده است
                          لحظه ای که تغذیه 5 ولت را به ترمینال مربوطه وصل می کنم هر سه LED روشن میشه و با زدن کلیده عملکرد عجیب و غریبه داره
                          فکر کنم فیوز بیتها یکی از اشتباهتم است، فیوز بیتها را چه باید تنظیم کنم؟کلاً لازمه تنظیم بشه


                          دیدگاه


                            #28
                            پاسخ : مشکل ساده با برنامه ساده

                            سلام
                            مثل اینکه هنوز به جواب نرسیدی تغییراتم که توی برنامه داری میدی (قدم به قدم ) :biggrin:
                            چشم ها را باید شست ، جور دیگر باید دید . . .

                            دیدگاه


                              #29
                              پاسخ : مشکل ساده با برنامه ساده

                              به نظرم یه بار اتصالات رو چک کن و ببین اتصال کوتاهی چیزی نباشه.

                              و این یکی خیلی مهمه: چون مدار رو روی برد سوراخدار بستی، ممکنه مثل شماتیک نباشه. net ها رو چک کن ببین به جایی که باید وصل بشن، وصلن یا نه.

                              اگرم فکر میکنی ایراد از فیوز بیت هاست، خوب درستشون کن.

                              مدار رله و ال ای ی رو هم اینطور ببندی بهتری. چون اگه ال ای دی با بیس ترانزیستور موازی بشه ممکنه نزاره به اون جریان کافی برسه. ولی اینطوری هرکدوم هر قدر که لازم دارن بر میدارن.

                              [glow=green,2,300][b]بشر ممکن الخطاست
                              درخت هرچه پربار تر سر به زیر تر[/glow]

                              دیدگاه


                                #30
                                پاسخ : مشکل ساده با برنامه ساده

                                چقدر مشکلات عملی جالبه
                                یک مشکل دیگه که وجود داره یک آداپتور نوکیا 5 ولت برای تغذیه استفاده کردم ولی روی ورودی ها که باید یک یعنی 5 ولت دارم ولی 6.2 داریم و توی خروجی ها که LEDها روشنن 2.7 ولت داریم و صفر نیست
                                بخاطر همین به نظر روشن میان مقا وممت وصل شده به LED ها مقدارشان 330 اهم است

                                دیدگاه

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