اطلاعیه

Collapse
No announcement yet.

مشکل این برنامه چیست

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

    مشکل این برنامه چیست

    سلام
    من میخواهم که یه مدار چشمک زن داشته باشم ولی زمان روشن و خاموش بودن ال ای دی را با ورودی تعیین کنم
    مثلا اگر ورودی که به پین یک وصل هست یک ولت بود چند میلی ثانیه و اگر دو شد دوبرابر زمان یک ولت روشن بماند
    برنامه زیر را نوشتم جواب نمیگیرم
    امکان دارد ببینید مشکل کجاست
    $regfile = "m32def.dat"

    Config Pina.1 = Input
    Config Portb = Output
    Dim X As Word
    Dim Y As Word
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    X = Gatadc(pina.1)
    Do
    Set Pinb.1
    Waitms X
    Reset Pinb.1
    Set Pinb.2
    Waitms X
    Reset Pinb.2
    Set Pinb.3
    Waitms X
    Reset Pinb.3
    Loop
    En
    یه سوال دیگه در حالتی که یک ولت میباشد چند ثانیه روشن میماند
    ممنون

    #2
    پاسخ : مشکل این برنامه چیست

    برنامه شما در نگاه اول دارای دوتا اشکال هست

    فرض کنید ورودی 1 ولت باشه ، بعد میخواید LED تو 1میلی ثانیه چشمک بزنه ؟ مگه میشه ؟ اینقدر زمان شما کم هست که اصلا چشمک زدن رو نمیبینی بهتره بجای میلی ثانیه از ثانیه استفاده کنی
    و بعد اینکه برای اجرای مرحله دوم برنامه شما (اگر ورودی 2ولت شد 2برابر زمان 1 ولت روشن بشه ...) ، شما دریافت ورودی رو در خارج از حلقه بسته قرار دادی بدون حتی هیچ دستور پرشی ، بعد چطور توقع داری که درخواستت برآورده بشه ؟ :-?
    ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

    http://tif00s.persiangig.com/image/MLX90614.jpg

    دیدگاه


      #3
      پاسخ : مشکل این برنامه چیست

      ممنون از جووابتون
      یه سوال دیگه حالا میخواهم ورودی را روی سون سگمنت نشون بدم چه دستوری باید بنویسم
      ممنون
      موفق باشید

      دیدگاه


        #4
        پاسخ : مشکل این برنامه چیست

        خواهش

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

        موفق باشی
        ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

        http://tif00s.persiangig.com/image/MLX90614.jpg

        دیدگاه


          #5
          پاسخ : مشکل این برنامه چیست

          نوشته اصلی توسط tifoos
          خواهش

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

          موفق باشی
          باز ممنون
          شرمنده والا برا خودم هم توضیح دادن ولی نفهمیدم اخه رشته ام حسابداری هست
          مثلا الان که ما ورودی را با adcدر xریختیم x همان وردی هست یا باینری
          مووفق باشید

          دیدگاه


            #6
            پاسخ : مشکل این برنامه چیست

            نوشته اصلی توسط navard
            مثلا الان که ما ورودی را با adcدر xریختیم x همان وردی هست یا باینری
            خواهش
            سوالتون رو متوجه نشدم ، میتونید منظورت رو دقیق بگید ؟
            یه توضیح بدم در رابطه با برنامت :
            adc مبدل آنالوگ به دیجیتال هستش
            شما مثله اینکه قرار ورودی آنالوگ رو به پایه 1 پورت a میکرو وصل کنی (توضیح :کل پورت a عمل اختصاصی adc رو انجام میدن)
            و دستوری که شما نوشتی برای خوندن از ADC اشتباه هستش ، باید به این صورت دستور رو بنویسی : (x=getadc(1 (توضیح : 1 یعنی ورودی آنالوگت به پایه 1 پورت a وصل شده )
            x هم دیگه میشه مقدار دیجیتال شما (توضیح : متغیر دیجتال رو باید به صورت word تعریف کنید )
            و x بصورت عدد صحیح است

            در ضمن برای 1 کردن پین یک پورت از این دستور استفاده میکنن (مثلا ) set portb.1 نه [s]set pinb.1[/s]

            همش که اشتباه درومد ) (شوخی میکنم درکت میکنم رشتت این نیست )
            موفق باشی
            ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

            http://tif00s.persiangig.com/image/MLX90614.jpg

            دیدگاه


              #7
              پاسخ : مشکل این برنامه چیست

              نوشته اصلی توسط tifoos
              خواهش
              سوالتون رو متوجه نشدم ، میتونید منظورت رو دقیق بگید ؟
              یه توضیح بدم در رابطه با برنامت :
              adc مبدل آنالوگ به دیجیتال هستش
              شما مثله اینکه قرار ورودی آنالوگ رو به پایه 1 پورت a میکرو وصل کنی (توضیح :کل پورت a عمل اختصاصی adc رو انجام میدن)
              و دستوری که شما نوشتی برای خوندن از ADC اشتباه هستش ، باید به این صورت دستور رو بنویسی : (x=getadc(1 (توضیح : 1 یعنی ورودی آنالوگت به پایه 1 پورت a وصل شده )
              x هم دیگه میشه مقدار دیجیتال شما (توضیح : متغیر دیجتال رو باید به صورت word تعریف کنید )
              و x بصورت عدد صحیح است

              در ضمن برای 1 کردن پین یک پورت از این دستور استفاده میکنن (مثلا ) set portb.1 نه [s]set pinb.1[/s]

              همش که اشتباه درومد ) (شوخی میکنم درکت میکنم رشتت این نیست )
              موفق باشی
              سلام
              ممنون
              با نکاتی که شما گفتید من برنامه را نوشتم ولی ورودی در زمان چشمک زن تاثیر ندارد زمان روشن خاموش شدن 5 ثانیه میباشد
              برنامه من دباره میذارم
              اگه تونستید نگاهی بهش بندازید
              $regfile = "m32def.dat"

              Config Porta.1 = Input
              Config Portb = Output
              Dim X As Word
              Dim Y As Word
              Do
              Config Adc = Single , Prescaler = Auto , Reference = Avcc
              Start Adc
              X = Getadc(1)
              Set Pinb.1
              Waitms X
              Reset Portb.1
              Set Portb.2
              Waitms X
              Reset Portb.2
              Set Portb.3
              Waitms X
              Reset Portb.3
              Loop
              End
              شرمنده منظور از این جمله چی میباشه:
              Prescaler = Auto , Reference = Avcc
              موفق باشید

              دیدگاه


                #8
                پاسخ : مشکل این برنامه چیست

                نه اون جوری که من گفتم درست تصحیحش نکردی ، حالا با این حال من کد صحیحش رو براتون میزارم ، خودتون مقایسه کنید متوجه تفاوت ها میشید
                (توجه : پورت a بصورت اختصاری عمل تبدیل آنالوگ به دیجیتال رو انجام میده پس نیازی نیست اون پایه دلخواهت برای تبدیل ADC رو به عنوان ورودی انتخاب کنی)

                کد:
                 
                "regfile = "m32def.dat$
                
                Config Portb = Output
                
                Dim X As Word
                
                Config Adc = Single , Prescaler = Auto , Reference = Avcc
                Start Adc
                
                Do
                (X = Getadc(1
                
                Set Portb.1
                Wait X
                Reset Portb.1
                Set Portb.2
                Wait X
                Reset Portb.2
                Set Portb.3
                Wait X
                Reset Portb.3
                
                Loop
                
                End

                prescaler دقت adc هستش و وقتی refrence(ولتاژ مرجع) = AVcc هست ، یعنی ولتاژ تغزیه ARef (تفذیه Adc) در این حالت برابر با AVcc ولتاژ تغزیه میکرو میباشد ، و باید مقدار AVcc=5 V انتخاب کنید.
                در ضمن برای پایداری ، پایه ARef میکرو رو با یه خازن زمین کنید.

                موفق باشی
                ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

                http://tif00s.persiangig.com/image/MLX90614.jpg

                دیدگاه


                  #9
                  پاسخ : مشکل این برنامه چیست

                  نوشته اصلی توسط tifoos
                  نه اون جوری که من گفتم درست تصحیحش نکردی ، حالا با این حال من کد صحیحش رو براتون میزارم ، خودتون مقایسه کنید متوجه تفاوت ها میشید
                  (توجه : پورت a بصورت اختصاری عمل تبدیل آنالوگ به دیجیتال رو انجام میده پس نیازی نیست اون پایه دلخواهت برای تبدیل ADC رو به عنوان ورودی انتخاب کنی)

                  کد:
                   
                  "regfile = "m32def.dat$
                  
                  Config Portb = Output
                  
                  Dim X As Word
                  
                  Config Adc = Single , Prescaler = Auto , Reference = Avcc
                  Start Adc
                  
                  Do
                  (X = Getadc(1
                  
                  Set Portb.1
                  Wait X
                  Reset Portb.1
                  Set Portb.2
                  Wait X
                  Reset Portb.2
                  Set Portb.3
                  Wait X
                  Reset Portb.3
                  
                  Loop
                  
                  End

                  prescaler دقت adc هستش و وقتی refrence(ولتاژ مرجع) = AVcc هست ، یعنی ولتاژ تغزیه ARef (تفذیه Adc) در این حالت برابر با AVcc ولتاژ تغزیه میکرو میباشد ، و باید مقدار AVcc=5 V انتخاب کنید.
                  در ضمن برای پایداری ، پایه ARef میکرو رو با یه خازن زمین کنید.

                  موفق باشی
                  ممنون
                  والا با برنامه شما هم نوشتم باز همون مشکل قبلی دارم
                  امدن پایهavccرا به 5ولت و arefرا با خازن زمین کردم
                  جواب نمیده

                  دیدگاه


                    #10
                    پاسخ : مشکل این برنامه چیست

                    شما کریستال میکرو رو مشخص کردی براش ؟

                    بعد یه سوال دیگه ورودی شما چی هست ؟
                    ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

                    http://tif00s.persiangig.com/image/MLX90614.jpg

                    دیدگاه


                      #11
                      پاسخ : مشکل این برنامه چیست

                      سلام
                      ابتدا چند مورد را رعایت کنین ، مدار رو به صورت زیر ببندین (البته یادتون باشه که تمامی VCC ها به مثبت 5 و GND ها به زمین مدار وصل شود)

                      منبع ولتاژ ورودی که به پایه Input وصل می شود باید جریانی بیش از 10 میلی آمپر داشته باشد تا باعث افت ولتاژ نشود

                      این برنامه رو تست بگیرین

                      کد:
                      $regfile = "m32def.dat"
                      $crystal = 1000000
                      
                      Config Portb = Output
                      '===========================
                      Dim X As Word
                      Dim Y As Word
                      '========================
                      Config Adc = Single , Prescaler = Auto , Reference = Avcc
                      Start Adc
                      Do
                      X = Getadc(1)
                      Set Pinb.1
                      Waitms X
                      Reset Portb.1
                      Set Portb.2
                      Waitms X
                      Reset Portb.2
                      Set Portb.3
                      Waitms X
                      Reset Portb.3
                      Loop
                      '======================
                      End
                      هر ولت بین بازه 0 تا 5 ولت برابر هست با مقدار عددی 205 یعنی با دستور waitms و فرکانس ورودی میکرو برابر یک مگاهرتز و ولتاژ رفرنس 5 ولت(ولتاژ متصل به پایه vref، 1 )یک پنجم ثانیه زمان رو نگاه خواهد داشت.
                      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                      دیدگاه


                        #12
                        پاسخ : مشکل این برنامه چیست

                        جناب BABY برنامه شما دارای اشکال هست
                        مشکلش ایشون فکر کنم مال مشخص نکردن کریستال باشه ( من براشون نزاشتم چون فکر میکنم میخواد از کریستال خارجی استفاده کنه)
                        ARef رو در صورت مشخص کردن Refrence=AVcc میشه زمین کرد
                        جناب نوارد اگه کریستال رو مشخص نکردی میتونی از کریستال داخلی میکرو استفاده کنی بدین صورت :
                        crystal = 4000000$

                        میتونی از کریستال 8مگ استفاده کنی ولی بهتره 4مگ باشه

                        و کد رو در برنامه ای که بهت دادم وارد کن ، بدین صورت :
                        "کد نهایی"
                        کد:
                        "regfile = "m32def.dat$
                        crystal = 4000000$
                        Config Portb = Output
                        
                        Dim X As Word
                        
                        Config Adc = Single , Prescaler = Auto , Reference = Avcc
                        Start Adc
                        
                        Do
                        (X = Getadc(1
                        
                        Set Portb.1
                        Wait X
                        Reset Portb.1
                        Set Portb.2
                        Wait X
                        Reset Portb.2
                        Set Portb.3
                        Wait X
                        Reset Portb.3
                        
                        Loop
                        
                        End
                        ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

                        http://tif00s.persiangig.com/image/MLX90614.jpg

                        دیدگاه


                          #13
                          پاسخ : مشکل این برنامه چیست

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

                          دیدگاه


                            #14
                            پاسخ : مشکل این برنامه چیست

                            نه خواهش میکنم استاد چیه
                            مشکله خاصی نیست خیلی جزئی ، ایشون تو برنامه واسه ست کردن پایه از دستور set pinb.1 استفاده کرد ، شما هم همینطور (که من واسشون توضیح دادم)
                            بعد ایشون با تاخیر میلی ثانیه اگه ورودی کم باشه ، نمیتونه چشمک زدن LED رو ببینه ،که گفتم از ثانیه استفاده کنید

                            آخه ایشون رشتشون این نیست و این جور که من متوجه شدم برنامه رو نرم افزاری compile نمیکنه (یا شاید متوجه خطای compile نشه) ، واسه همین اینو گفتم ، و الا چیز خاصی نیست
                            ماکه رفتیم خدمت (فعلا که 14 ماهش گذشت).........چون میگذرد غمی نیست....

                            http://tif00s.persiangig.com/image/MLX90614.jpg

                            دیدگاه


                              #15
                              پاسخ : مشکل این برنامه چیست

                              سلام
                              حق با شماست من به تابع اصلیشون دست نزدم و دقیقا باید خروجی رو تغییر بدن تا وضعیت پین ورودی رو ، منم چون با notepad تغییرات رو اعمال می کنم این مشکلاتم می تونه اینجوری خودش رو نشون بده
                              بازم ممنونم از توضیحاتتون

                              کد:
                              $regfile = "m32def.dat"
                              $crystal = 1000000
                              
                              Config Portb = Output
                              '===========================
                              Dim X As Word
                              Dim Y As Word
                              '========================
                              Config Adc = Single , Prescaler = Auto , Reference = Avcc
                              Start Adc
                              Do
                              X = Getadc(1)
                              Set Portb.1
                              Waitms X
                              Reset Portb.1
                              waitms x
                              Set Portb.2
                              Waitms X
                              Reset Portb.2
                              Set Portb.3
                              Waitms X
                              Reset Portb.3
                              Loop
                              '======================
                              End
                              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                              دیدگاه

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