اطلاعیه

Collapse
No announcement yet.

برنامه نویسی در بسکام

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

    برنامه نویسی در بسکام

    سلام به همه دوستان

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

    سوالم رو با یه مثال میپرسم :

    فرض به اینکه ما یه lcd کاراکتری داریم و یه میکرو avr و 4 تا کلید

    من میخوام برنامه ای بنویسم که درحالی که مدار روشنه و در حال اجراست ، با عوض کردن مقادیر کلید ها روی lcd نوشته ی مربوطه نوشته بشه،
    خودم ،برنامه ای نوشتم ولی وقتی مدار روشنه و درحال اجراست مقادیر کلید ها رو عوض میکنیم کار نمیکنه ، و باید مدار رو خاموش کنیم بعد کلید رو عوض کنم و بعد مدار رو روشن کنیم تا جواب بده

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

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

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

    البته من c می نویسم و اخرین باری که با bascom نوشتم مربوط به 6 سال پیش بود ولی امیدوارم که بتونم کمکتون کنم .

    دیدگاه


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

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

      DO شروع حلقه
      دستورات کلیدها
      LOOP پایان حلقه و بازگشت به ابتدای حلقه یعنی DO

      دیدگاه


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

        سلام
        ممنون از پاسخ گویی تون

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

        کد برنامه رو میذارم:
        کد:
        $regfile = "m8def.dat"
        $crystal = 8000000
        
        Config Portd = Output
        Config Portb = Input
        Config Lcd = 16 * 2
        Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
        
        Dim A As Bit
        Dim B As Bit
        Dim C As Bit
        Dim D As Bit
        
        A = Pinb.0
        B = Pinb.1
        C = Pinb.2
        D = Pinb.3
        
        Cursor Off
        
        Do
        If A = 1 Then
        Locate 1 , 1
        Lcd "mehrdad"
        End If
        
        
        If B = 1 Then
        Locate 1 , 8
        Lcd "ali"
        End If
        
        If C = 1 Then
        Locate 2 , 1
        Lcd "hassan"
        End If
        
        If D = 1 Then
        Locate 2 , 8
        Lcd "mamad"
        End If
        Loop
        End                             'end program

        دیدگاه


          #5
          پاسخ : برنامه نویسی در بسکام

          دوست عزیز بهتره از این برنامه استفاده کنی
          :nice:
          ----------------------------------------------------------------------------------------------------------------------
          کد:
          $regfile = "m8def.dat"
          $crystal = 8000000
          
          Config Portd = Output
          Config Portb = Input
          
          A alias pinb.0
          B alias pinb.1
          C alias pinb.2
          D alias pinb.3
          
          Config Lcd = 16 * 2
          Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
          Cursor Off
          
          
          Do
            If A = 1 Then
             Locate 1 , 1
             Lcd "mehrdad"
             Bitwait A , Reset
            End If
          
          
            If B = 1 Then
             Locate 1 , 8
             Lcd "ali"
             Bitwait B , Reset
            End If
          
            If C = 1 Then
             Locate 2 , 1
             Lcd "hassan"
             Bitwait C , Reset
            End If
          
            If D = 1 Then
             Locate 2 , 8
             Lcd "mamad"
             Bitwait D , Reset
            End If
          Loop
          End                             'end program
          دلا خو کن به تنهایی که از تنها بلا خیزد

          دیدگاه


            #6
            پاسخ : برنامه نویسی در بسکام

            dastor bitwait ro ke neveshti.aya vaghti kelid feshorde nist vorodi sefr mishe?
            nakone moghavemat pullup ro fal karde bashi?
            sory emkan neveshtane farsi nabod
            هميشه به ياد خدا باش !

            دیدگاه


              #7
              پاسخ : برنامه نویسی در بسکام

              راستش من خیلی وقت پیش با بیسکام کار کردم و الان خیلی نمی تونم کمکتون کنم . اما به طور کلی بهتر بود که هر یک از کلید ها رو با یک مقاومت پول اپ می کردید و بعد هم با یک خازن 100nf موازی و در برنامه هم چک میکردید که ایا الان صفر شده یا نه .
              این روش متداول برای این کار است .

              دیدگاه


                #8
                پاسخ : برنامه نویسی در بسکام

                دستور bitwait باعث میشه که دستور if شما بینهایت بار تکرار نشه و فقط بک بار تکرار بشه
                یعنی صبر میکنه تا شما دستتون رو از رو کلید بردارید
                دلا خو کن به تنهایی که از تنها بلا خیزد

                دیدگاه


                  #9
                  پاسخ : برنامه نویسی در بسکام

                  نوشته اصلی توسط Navid_Micro
                  دستور bitwait باعث میشه که دستور if شما بینهایت بار تکرار نشه و فقط بک بار تکرار بشه
                  یعنی صبر میکنه تا شما دستتون رو از رو کلید بردارید
                  فکر نمی کنم که دوستمون دستش رو کلید زیاد نگه داره .

                  دیدگاه


                    #10
                    پاسخ : برنامه نویسی در بسکام

                    رئیس جان نوشتی bitwait a,0
                    چک کردی که اصلا پایه a اصلا بعد از رها شدن صفر میشه یا نه(سخت افزاری)
                    آیا مقاومت pull down گذاشتی؟
                    مقاومت pull up فعاله؟
                    برنامت درسته.سخت افزاری مشکل داری.این مواردو چک کن.به احتمال زیاد ردیف میشه کارت :agree:
                    هميشه به ياد خدا باش !

                    دیدگاه


                      #11
                      پاسخ : برنامه نویسی در بسکام

                      نوشته اصلی توسط پژمان اکبری
                      رئیس جان نوشتی bitwait a,0
                      چک کردی که اصلا پایه a اصلا بعد از رها شدن صفر میشه یا نه(سخت افزاری)
                      آیا مقاومت pull down گذاشتی؟
                      مقاومت pull up فعاله؟
                      برنامت درسته.سخت افزاری مشکل داری.این مواردو چک کن.به احتمال زیاد ردیف میشه کارت :agree:
                      چرا برنامه مشکل داره من توی پورتوس چک کردم کار نکرد نمی دونم چرا کار نکرد


                      این برنامه مشکل نداره فقط حتما باید مقاومت پول اپ بزاری
                      کد:
                      $regfile = "m8def.dat"
                      $crystal = 8000000
                      Config Portb = Input
                      Config Portd = Output
                      Config Lcdpin = Pin , Rs = Portd.0 , E = Portd.1 , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5
                      
                      
                      Cursor Off
                      
                      Do
                      If Pinb.0 = 1 Then
                      Locate 1 , 1
                      Lcd "mehrdad"
                      
                      End If
                      
                      
                      If Pinb.1 = 1 Then
                      Locate 1 , 8
                      lcd "ali"
                      End If
                      
                      If Pinb.2 = 1 Then
                      Locate 2 , 1
                      Lcd "hassan"
                      End If
                      
                      If Pinb.3 = 1 Then
                      Locate 2 , 8
                      Lcd "mamad"
                      End If
                      Loop
                      End                             'end program

                      اگر نمی خوای مقاومت پول اپ بزاری این برنامه رو اضافه کن

                      Portb.0 = 0 : Ddrb.0 = 1
                      Portb.1 = 0 : Ddrb.1 = 1
                      Portb.2 = 0 : Ddrb.2 = 1
                      Portb.3 = 0 : Ddrb.3 = 1

                      دیدگاه


                        #12
                        پاسخ : برنامه نویسی در بسکام

                        سلام دوستان
                        واقعا از همتون ممنونم

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

                        و سوال بعدی درباره فعال کردن مقاومت puul up باید چطوری عمل کنیم؟ (یه چیزایی میدونم ولی شک دارم درست باشه لطفا کمکم کنید):

                        2- برای اینکه مقاومت puul up داخلی رو فعال کنیم باید اول پورت یا پین مورد نظرمون رو ورودی تعریف کنیم - حالا با دادن مقدار 1 ورودی میشه یا با دادن مقدار 0 ؟ مثال : DDRA.1=0 الان با این دستور پین a.1 ورودی میشه یا خروجی؟)

                        3 - بعد اینکه پین یا پورت مورد نظرمون رو ورودی کردیم باید رجیستر portx مورد نظر مقدار 1 بدیم تا پول پ بشه ؟ مثال : porta.1=1 ! درسته یا غلط؟

                        4- من رشته ام کامپیوتره و تازه وارد دنیای الکترونیک شدم و یه مبتدی بیش نیستم، میشه توضیح بدید این مقاومت pull up داخلی یا خارجی که درباره اش صحبت کردیم و با قرار دادن اون مشکل حل شد اساس کارش چیه و چرا با قرار دادن اون مشکل حل شد؟

                        مطمئنا بعدا خیلی به درد میخوره و خیلی جاها استفاده داره

                        ممنون از همه دوستان عزیز

                        دیدگاه


                          #13
                          پاسخ : برنامه نویسی در بسکام

                          سلام.
                          بله دوست عزیز می تونی از مقاومت pullup داخلی هم استفاده کنی و برای فعال کردن اون پین یا پورت مورد نظر رو ابتدا به عنوان ورودی قرار داده و سپس قبل از نوشتن برنامه اصلی اون پین یا پورت رو set می کنید سپس در برنامه اصلی با استفاده از شرط if پین رو چک می کنی که اگر 0 صفر شد دستورات مورد نظر شما رو انجام بده.
                          در تصویر زیر شما نحوه اتصال کلید به میکرو رو در حالت استفاده از مقاومت pullup خارجی می بینید که در صورت استفاده از pullup داخلی نیازی به مقاومت نیست.
                          حالا در مورد اینکه این مقاومت چیکار می کنه :
                          ببیند وقتی شما می خواین یک کلید رو به میکرو اتصال بدین وبعد از اون در برنامه استفاده کنید باید یک طرف کلید رو به میکرو و صرف دیگر اون رو به زمین یا vcc وصل کنید.ما فرض می کنیم که کلید بین میکرو و زمین قرار داده شده.حالا می خوایم تو برنامه از فشرده شدن کلید با خبر بیشم و از اون استفاده کنیم. در برنامه ابتدا پینی که کلید رو به اون وصل کردیم رو به عنوان ورودی قرار میدم. سپس در حلقه ی اصلی برنامه توسط یک شرط if می نویسیم که اگر پین مورد نظر صفر شد،عملکرد مورد نظر رو انجام بده پس شما باید قبل از صفر شدن پایه ولتاژی بیشتر از صفر رو روی پین داشته باشید تا میکرو بتونه موقع وصل کلید و صفر شدن پین مورد نظر، اون رو تشخیص بده.پس ما با قرار دادن مقاومت pullup یک ولتاژ 5 ولت روی پین مورد قرار میدیم تا اگر از طریق فشرده شدن کلید این پین صفر شد، توسط میکرو این تغییر ولتاژ تشخیص داده بشه و مجددا بعد از رها کردن کلید افت ولتاژ روی پین به حالت 5 ولت برگشت داده شود تا از تاثیر نویز روی میکرو جلوگیری شود.
                          می دونم که متن زیاد طولانی شد ببخشید.امیدوارم الان بدونید که مقاومت pullup چیه و چیکار می کنه.بازم مشکلی بود در حد توان در خدمتم.
                          موفق باشید
                          چرا ناراحتی پاتریک!
                          + امروز ی بچه دیدم سرچهارراه گل میفروخت
                          - از دیدنش ناراحت شدی؟
                          + نه
                          پس چی ناراحتت کرده
                          + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                          ------------------------------------------------------------------------------------------------------
                          تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                          ------------------------------------------------------------------------------------------------------
                          محصولات

                          دیدگاه


                            #14
                            پاسخ : برنامه نویسی در بسکام

                            نوشته اصلی توسط سوران آراسته
                            سلام.
                            بله دوست عزیز می تونی از مقاومت pullup داخلی هم استفاده کنی و برای فعال کردن اون پین یا پورت مورد نظر رو ابتدا به عنوان ورودی قرار داده و سپس قبل از نوشتن برنامه اصلی اون پین یا پورت رو set می کنید سپس در برنامه اصلی با استفاده از شرط if پین رو چک می کنی که اگر 0 صفر شد دستورات مورد نظر شما رو انجام بده.
                            در تصویر زیر شما نحوه اتصال کلید به میکرو رو در حالت استفاده از مقاومت pullup خارجی می بینید که در صورت استفاده از pullup داخلی نیازی به مقاومت نیست.
                            حالا در مورد اینکه این مقاومت چیکار می کنه :
                            ببیند وقتی شما می خواین یک کلید رو به میکرو اتصال بدین وبعد از اون در برنامه استفاده کنید باید یک طرف کلید رو به میکرو و صرف دیگر اون رو به زمین یا vcc وصل کنید.ما فرض می کنیم که کلید بین میکرو و زمین قرار داده شده.حالا می خوایم تو برنامه از فشرده شدن کلید با خبر بیشم و از اون استفاده کنیم. در برنامه ابتدا پینی که کلید رو به اون وصل کردیم رو به عنوان ورودی قرار میدم. سپس در حلقه ی اصلی برنامه توسط یک شرط if می نویسیم که اگر پین مورد نظر صفر شد،عملکرد مورد نظر رو انجام بده پس شما باید قبل از صفر شدن پایه ولتاژی بیشتر از صفر رو روی پین داشته باشید تا میکرو بتونه موقع وصل کلید و صفر شدن پین مورد نظر، اون رو تشخیص بده.پس ما با قرار دادن مقاومت pullup یک ولتاژ 5 ولت روی پین مورد قرار میدیم تا اگر از طریق فشرده شدن کلید این پین صفر شد، توسط میکرو این تغییر ولتاژ تشخیص داده بشه و مجددا بعد از رها کردن کلید افت ولتاژ روی پین به حالت 5 ولت برگشت داده شود تا از تاثیر نویز روی میکرو جلوگیری شود.
                            می دونم که متن زیاد طولانی شد ببخشید.امیدوارم الان بدونید که مقاومت pullup چیه و چیکار می کنه.بازم مشکلی بود در حد توان در خدمتم.
                            موفق باشید
                            سلام
                            ممنون از دوستان
                            من، هم با استفاده از مقاومت خارجی امتحان کردم و هم با استفاده از داخلی ، ولی توی هیچ کدوم جواب نداد!!!!!!!!!
                            باز هم مثل قبل درحال اجرا مقادیر روی lcd عوض نمیشن :angry:!!
                            مشکل از کجاست ؟؟؟؟؟

                            دیدگاه


                              #15
                              پاسخ : برنامه نویسی در بسکام

                              بجای :
                              if a=1 then
                              بنویس
                              if a=0 then
                              و بجای :
                              bitwait a, reset
                              بنویس :
                              biteait a, set

                              برای ما بقی شرط ها هم همینطور
                              دلا خو کن به تنهایی که از تنها بلا خیزد

                              دیدگاه

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