اطلاعیه

Collapse
No announcement yet.

مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

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

    مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

    با عرض سلام حضور دوستان گرامی
    من در حال نوشتن یه برنامه به زبان بسکام هستم یه قسمت برنامه رو هنوز نتونستم بنویسم که امیدورام با کمک دوستان این قسمت رو هم بتونم بنویسم
    تو این قسمت قراره میکرو یه سری اطلاعات رو از محیط بیرون بگیره و در حافظه EEPROM ذخیره کنه این اطلاعات بصورت مداوم در حال گرفته شدن از محیط می باشند و مرتب با اطلاعات ذخیره شده در EEPROM مقایسه می شوند و هنگامی که داده ای از این اطلاعات با داده ای از اطلاعات ذخیره شده برابر شد باید اون داده بروی ال سی دی نمایش داده شود و تصمیم دارم یک متغیر رو از نوع EEPROM تعریف کنم مثل : dim a(16) as Eram byte
    ولی مشکلی که دارم اینه که نمیتونم درک کنم که مثلا وقتی 50 داده رو تو حافظه از طریق این متغیر ذخیره میکنم چطور برنامه باید نوشته شود که داده جاری رو با همه این 50 تا مقایسه کند یعنی اگه داده جاری رو با آرایه های این متغیر مقایسه کند میکرو کل داده هایی که از طریق این متغیر ذخیره شده را با اون داده مقایسه میکند و دیگر نیازی به آدرس دهی داده ها و مقایسه تک تک اونها نیست لطفا در نوشتن این قسمت منو راهنمایی کنید یا اینکه دستورات رو برای نوشتن این قسمت بنویسید.

    #2
    پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

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

    دیدگاه


      #3
      پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

      الگوریتم های مرتب سازی و جستجو اینجور مواقع به کار می آد

      اول به صورت سعودی یا نزولی مرتب کن بعد جستجو کن
      ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
      غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

      دیدگاه


        #4
        پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

        از لطف دوستان تشکر میکنم ولی من هنوز کاملا متوجه نشدم اگه امکان داره لطف کنید و دستورات بسکام در این زمینه رو با فرض مقایسه داده های جاری با 50 داده ذخیره شده و مشخص کردن داده جاری مساوی با داده ذخیره شده روی ال سی دی بنویسید و اینکه بگید متغیر از نوع EEPROM در موقع نوشتن و خواندن داده چه روالی را در EEPROM طی می کند

        دیدگاه


          #5
          پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

          سلام
          برنامه زیر رو ببینین
          Dim A(50) As Eram Byte
          Dim A1 As Byte
          Dim Recive As Word
          Dim I As Byte

          Do
          Recive = Getadc(0)
          For I = 1 To 50
          A1 = A(i)
          Waitms 10
          If A1 = Recive Then Lcd "In:" ; I ; " Value:" ; A1
          Next
          Loop
          در برنامه بالا من فرض کردم که شما مقدارتون رو از ADC می خونین و در متغییر Recive می ریزین توسط حلقه در بین 50 تا ریجیستر هر کدام که برابر مقدار Recive بود مکان خانه (1 تا 50) و مقدارش چاپ می شه

          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

          دیدگاه


            #6
            پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

            از لطفتون بابت نوشتن برنامه سپاسگزارم حالا اگر چندین داده خاص مثل recive از ADC دریافت شود و این داده ها با داده های ذخیره شده در EEPROM برابر باشند برنامه ای که نوشتین چگونه تغییر می کند

            دیدگاه


              #7
              پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

              سلام
              می بخشید منظورتون رو درست متوجه نشدم می شه بهتر توضیح بدین که دقیقا چی مد نظرتون هست؟
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


                #8
                پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

                سلام
                از اینکه با سعه صدر و مسئولانه پیگیر هستید که منو کمک کنید ازتون بی نهایت سپاسگزارم
                ببینید من در واقع می خوام یه سری داده رو از ADC بگیرم و از بین این داده ها 50 داده خاص را با فشار دادن کلید در EEPROM ذخیره کنم و برای هر کدام از این 50 داده یک اسم انتخاب کنم و در متغیر دیگری از نوع EEPROM ذخیره کنم و وقتی که مجددا می خوام داده ها رو از محیط بگیرم وقتی داده ای از محیط با یکی از داده های ذخیره شده برابر شد از طریق مثلا یک بازر این وضعیت رو اعلام کند و همزمان اسم اون داده رو روی ال سی دی نمایش دهد

                دیدگاه


                  #9
                  پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

                  سلام
                  خواهش می کنم کاری نمی کنم وظیفه ام هست
                  نگاه کنین حجم گرفتن اسم به طول اسم بستگی داره، اگر اسم هر دادتون زیاد باشه که حجم EEPROM رو پر کنه شما نمی تونین اسامی رو ذحیره کنین و مجبور می شین که از حافظه خارجی مثل EEPROM یا حافظه MMC استفاده کنین.
                  این برنامه رو ببینین

                  کد:
                  $regfile = "m32def.dat"
                  $crystal = 1000000
                  '===================
                  Config Adc = Single , Prescaler = Auto , Reference = Avcc
                  Dim A(50) As Eram Word
                  Dim Names(50) As Eram String * 10
                  Dim Na As String * 10
                  Dim A1 As Word
                  Dim Recive As Word
                  Dim I As Byte
                  '==================== Search
                  Do
                  Recive = Getadc(0)
                  For I = 1 To 50
                  A1 = A(i)
                  Waitms 10
                  If A1 = Recive Then
                  Lcd "In:" ; I ; " Value:" ; A1
                  Locate 2 , 1
                  Na = Names(i)
                  Waitms 30
                  Lcd "Names" ; Na
                  End If
                  Next
                  Loop
                  '====================Set point
                  Do
                  Recive = Getadc(0)
                  For I = 1 To 50
                  A1 = Recive
                  A(i) = A1
                  Waitms 10
                  Na = "ALI"                         'Set names via keypad or serial port
                  Names(i) = Na
                  Waitms 30
                  Next
                  Loop


                  در قسمت set point من یه نام برای متغییر NA در نظر گرفتم که شما می تونین به جای اون داده هاتون رو از صفحه کلید یا انواع ورودیهای دیگه میکرو بخونین.
                  هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                  دیدگاه


                    #10
                    پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

                    سلام
                    بازم ممنونم از لطفتون
                    در قسمت set point استنباط من اینه که بعد از اینکه مقدار رو از ADC خوند اون مقدار رو در حلقه FOR به تمام 50 خانه EEPROM وارد میکنه یعنی تمام 50 خانه یک مقدار رو میگیرن واسه اختصاص اسم هم همین استنباط رو دارم یعنی تمام 50 خانه یه اسم رو میگیرن آیا استنباطم درست هست؟
                    سوال بعدم اینه که دو متغیر A و Names که از نوع EEPROM تعریف شده اند مقادیری که به اونها اختصاص داده می شود با چه ترتیبی و در کدوم یک از خونه های EEPROM قرار میگیرند یعنی اینکه میکرو ATmega32 که 1024 بایت حافظه EEPROM داره ترتیب قرار گرفتن مقادیر وارد شده چه داده های ADC و چه داده های اسم اختصاص یافته چگونه است؟

                    دیدگاه


                      #11
                      پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

                      سلام و می بخشید یک اشتباه کردم دقیقا باید عبارت Recive = Getadc(0) وارد حلقه می شد

                      کد:
                      Do
                      For I = 1 To 50
                      Recive = Getadc(0)
                      A1 = Recive
                      A(i) = A1
                      Waitms 10
                      Na = "ALI"                         'Set names via keypad or serial port
                      Names(i) = Na
                      Waitms 30
                      Next
                      Loop
                      آرایه ها به ترتیب پشت سر هم قرار می گیرن یعنی اگر متغییر A از مکان صفر شروع شده باشه انتهای اون 49 هست(البته چون بایت هست دو برابر می شه یعنی 98 و برای متغییر Name هم برای هر اسمش 10 تا کارکتر جا می گیره یعنی ده تا خونه پس تعداد پنجاه خانه ضرب در 10 می شه 500 خانه جمعا
                      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                      دیدگاه


                        #12
                        پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

                        سلام
                        خواهش میکنم بازم ممنون
                        منظورتون چون A از نوع WORD هست دو برابر میشه آخه نوشتین چون بایت هست؟
                        و سوال دیگه اینکه مگه خونه های حافظه هشت بیتی نیستند؟ مگه هر کاراکتر تو یه خونه 8 بیتی از حافظه قرار میگیره؟ لطفا این رو بیشتر توضیح بدین؟

                        دیدگاه


                          #13
                          پاسخ : مقایسه داده جاری برنامه با داده های ذخیره شده در EEPROM

                          سلام
                          تعریف متغییر ها به این صورت ، صورت گرفته است

                          Dim A(50) As Eram Word
                          Dim Names(50) As Eram String * 10
                          Dim Na As String * 10

                          چون متغییرها از نوع word هستن دو بایت رو به خودشون اختصاص می دن
                          بله خانه ها هشت بیتی هستم اما چون در تعریف String * 10 هست هر متغییر آرایه 10 خانه 8 بیتی رو به خودش اختصاص می ده(چون طول تمامی کارکترهای رشته رو 10 گرفتیم)
                          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                          دیدگاه

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