اطلاعیه

Collapse
No announcement yet.

مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

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

    مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

    سلام دوستان من با مگا 32 یه آرایه رو بدین صورت تعریف کردم :

    Dim Arr(336) As Word
    براه اندازی MMC از توابع CONFIG_AVR-DOS و Config_MMC استفاده کردم . در هنگام کامپال کردن هم ارور out of Space نمیده .
    داخال فایل CONFIG_AVR-DOS هم Const Cfilehandles = 1 و Const Csepfathandle = 1 رو هم تغییر دادم MMC رو هم به صورت نرم افزاری پیکره بندی کردم .
    اما نمی دونم چرا تو پروتوس ارور زیر رو میده ؟

    اما وقتی Dim Arr(255) As Word می کنم جوام میده . آیا راهی هست که با Dim Arr(336) As Word جواب بده ؟
    آخه من این تعداد آرایه رو لازم دارم و نمی خوام از مگا 128 استفاده کنم.
    ممنون از شما دوستان.

    http://www.sharjweb.com/

    #2
    پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

    باز هم من! دوست عزیز مگا 32 رمش کمه .
    avr-dos
    به اندازه کافی رم نیاز داره با وجود اینکه شما تغییرات رو تو فایلش اعمال کردی ولی باز هم اگه آرایه بزرگ باشه رم کم میاره.
    حالا چرا می خوای آرایه از نوع وورد باشه؟ تابلوی شما برای یک فریم به 336 بایت نیاز داره و نه وورد.چون 24 سطر میشه 3 بایت و 112 ستون ضرب در 3 بایت میشه 336 بایت و نه 336 وورد. آرایه رو اگه از نوع بایت تعریف کنی رم آزاد میشه و احتمالا ایرور نمیده.

    دیدگاه


      #3
      پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

      ببخشید اگه سوال میپرسم.

      من یه برنامه واسه تابلو روان نوشتم و تعداد فونت هام هم زیادتر از حافظه mega32 هست
      حالا می خواستم ببینم راهی بجز mmc هست که حافظه mega32 رو بالا ببرم؟
      مثلا استفاده از ram خارجی یا یه همچین پچیزی که نیاز به برنامه نویسی اضافی نداشته باشه؟

      بازم ببخشید که اینجا سوال کردم.
      آخه دیدم بحث تو این مایه هاست

      کامپایلر مورد استفاده من : codevision
      هستم اگر می روم گر نروم نیستم

      دیدگاه


        #4
        پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

        نوشته اصلی توسط daryanavard
        باز هم من! دوست عزیز مگا 32 رمش کمه .
        avr-dos
        به اندازه کافی رم نیاز داره با وجود اینکه شما تغییرات رو تو فایلش اعمال کردی ولی باز هم اگه آرایه بزرگ باشه رم کم میاره.
        حالا چرا می خوای آرایه از نوع وورد باشه؟ تابلوی شما برای یک فریم به 336 بایت نیاز داره و نه وورد.چون 24 سطر میشه 3 بایت و 112 ستون ضرب در 3 بایت میشه 336 بایت و نه 336 وورد. آرایه رو اگه از نوع بایت تعریف کنی رم آزاد میشه و احتمالا ایرور نمیده.
        خداییش دمت گرم .
        آخه وقتی من آرایه رو از نوه بایت تعریف کنم ، تو هر بایت MMC یه کد اسکی که معادل یک کاراکتر هست قرار میکیره .
        به عنوان مثال من میخوام دیتای سطر یک بلوک هشتایی رو بریزم رو LED ها . مثلا میخام FF هگز بدم تا اون سطر هشتایی کلا روشن بشه .
        حالا تو MMC معدل اسکی F که 70 دسیمال هست ، تو یه بایت قرار میگیره . در واقع من نمیتونم FF رو تو یه بایت قرار بدم .
        امیدوارم که منظورم رو رسونده باشم .
        بازم ازتون تشکر میکنم. :nerd:
        http://www.sharjweb.com/

        دیدگاه


          #5
          پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کا

          نوشته اصلی توسط roohipatala
          ببخشید اگه سوال میپرسم.

          من یه برنامه واسه تابلو روان نوشتم و تعداد فونت هام هم زیادتر از حافظه mega32 هست
          حالا می خواستم ببینم راهی بجز mmc هست که حافظه mega32 رو بالا ببرم؟
          مثلا استفاده از ram خارجی یا یه همچین پچیزی که نیاز به برنامه نویسی اضافی نداشته باشه؟

          بازم ببخشید که اینجا سوال کردم.
          آخه دیدم بحث تو این مایه هاست
          سلام .
          خوب میتونید از رم خارجی استفده کنید که پروتکل I2c داره یا اینکه از رم MMC که پروتکل SPI داره .
          از MMC بخوای استفاده کنی باید FAT رو یاد بگیری که زیاد هم سخت نیست و دستوراتش مطابق میلتون کمه .


          http://microavr.blogfa.com/post-7.aspx

          http://www.sharjweb.com/

          دیدگاه


            #6
            پاسخ : پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کا

            نوشته اصلی توسط mohsenjooon
            سلام .
            خوب میتونید از رم خارجی استفده کنید که پروتکل I2c داره یا اینکه از رم MMC که پروتکل SPI داره .
            از MMC بخوای استفاده کنی باید FAT رو یاد بگیری که زیاد هم سخت نیست و دستوراتش مطابق میلتون کمه .
            یعنی استفاده از رم خارجی (به قول شما پروتکل I2C) برنامه نویسی اضافی نیاز داره؟

            (مشکل اصلی من اینه که آرایه ای که شامل فونت های من میشه شامل 2048 عدد میشه که توی mega32 جا نمیشه)
            هستم اگر می روم گر نروم نیستم

            دیدگاه


              #7
              پاسخ : پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کا

              نوشته اصلی توسط roohipatala
              یعنی استفاده از رم خارجی (به قول شما پروتکل I2C) برنامه نویسی اضافی نیاز داره؟

              (مشکل اصلی من اینه که آرایه ای که شامل فونت های من میشه شامل 2048 عدد میشه که توی mega32 جا نمیشه)
              اون سایت بالا رو هم نگاه کن که یه نمونه توشه .
              درسته من هم همین مشکلو تو ارتباط با MMC و کمبود رم آوردم . آرایه من هم از 255 بیشتر ، از نوع ورد تعریف نمیشه .
              اگه از eeprom سریال مثل AT24C256 استفاده کنید ، کمون کنم مشکلتون حل بشه .
              اگه اشتباه نکنم آرایه ربطی به حافظه خارجی نداشته باشه و مجبورا بایستی از میکروی بزرگتر مثل 128 استفاده کرد .
              http://www.sharjweb.com/

              دیدگاه


                #8
                پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

                ok
                ممنون از راهنمایی هات

                من هر مرحله از پروژه ام رو که کامل کنم توی اون تاپیکی که آدرسش توی امضام هست فایل ها پروژه رو میزارم

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

                بازم ممنون
                موفق باشی
                هستم اگر می روم گر نروم نیستم

                دیدگاه


                  #9
                  پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کا&#15

                  نوشته اصلی توسط roohipatala
                  ok
                  ممنون از راهنمایی هات

                  من هر مرحله از پروژه ام رو که کامل کنم توی اون تاپیکی که آدرسش توی امضام هست فایل ها پروژه رو میزارم

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

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

                  دوستان کسی راه حلی برا مسئله بنده حقیر نداره ؟
                  یعنی مگا 32 نمیتونه 336 آرایه وورد رو تو خودش جا بده ؟
                  هیچ روشی وجود نداره حتی با تغییر توابع CONFIG_AVR-DOS و Config_MMC ؟ :question:
                  http://www.sharjweb.com/

                  دیدگاه


                    #10
                    پاسخ : پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کا

                    آقا جواب داد :wow: :wow:
                    ممنون از راهنمایی همتون بخصوص راهنمایی آقای امیر حسام الفتی
                    مشکلمو میگم تا دوستانی که به این مسئله برخوردند مثل من الاف نشن .
                    من حافظه استک رو قبلا روی :



                    $hwstack = 32
                    $swstack = 32
                    $framesize = 32


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

                    $hwstack = 128
                    $swstack = 32
                    $framesize = 50

                    تغییر دادم .
                    http://www.sharjweb.com/

                    دیدگاه


                      #11
                      پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

                      آقا محسن وقتی شما آرایه رو از نوع وورد تعریف می کنی چطوری میشه که بجای کد اسکی باینری دریافت می کنید که میتونید بریزید روی پورت میکرو؟ :eek:

                      دیدگاه


                        #12
                        پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کا&#15

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

                        Get #ff , Arr(x) , Le , Count
                        Close #ff
                        L = Low(arr(x))
                        H = High(arr(x))
                        Chlow = Chr(l)
                        Chhigh = Chr(h)
                        D = Hexval(chlow)
                        E = Hexval(chhigh)
                        D = D * 16
                        F = D + E
                        ابتدا چون متغیر من از نوع وررد بود ، دو بایت کد اسکی از MMC میخونم (با دستور get) بعد بایت بالا رو تو H و بایت پایین رو تو L میریزم و بعد دونه دونه محتوای این دو متغییر رو به کاراکتر تبدیل میکنم (مثلا کاراکتر F معادل اسکی دسیمالش میشه 70 که توL یا H قرار میگیره اما 4 بیت از کد هگز رو تشکیل میده ). سرآخر هم معادل هگز کاراکتر موجود در Lو H رو با دستور HEXVAL به کد هگز تبدیل میکنم و برای اینکه HSB چهار خونه شیفت پیداکنه (فرض 00001111به 1111000)تبدیل بشه اونو در 16 ضرب میکنم و LSB و HSB رو برا اینکه کنار هم قرار بدم با هم جمع میکنم . oo:

                        اگه شما پیشنهاد دیگری دارید ، ممنون میشم کمکم کنید.
                        http://www.sharjweb.com/

                        دیدگاه


                          #13
                          پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

                          اما حالا یه مسئله دیگه برام پیش اومده و اونم اینه که من برای خوندن از MMC از SPI نرم افزاری استفاده کردم و برای فرمان دادن به شیفت رجیسترها ( فعلا لچ رو گذاشتم کنار ) از SPI سخت افزاری استفاده کردم. مدارم به صورت تئوری جواب داد اما سرعت رفرشم خیلی کم شده . بخاطر همین تصمیم گرفتم که جای این دوتا رو عوض کنم . یعنی برای خوندن دیتا از MMC از SPI سخت افزاری استفاده کنم ( بخاطر سرعت بالاتر ) و برای فرمان دادن به شیفت رجیسترها از SPI نرم افزاری استفاده کنم . اما نمیدونم چرا نمیشه . یعنی در واقع SPI سخت افزاری MMC رو میخونه ولی SPI نرم افزاری نمیتونه به شیفت رجیستر ها فرمان بده .
                          شما میدونید که علت چیه ؟؟
                          اگه راه حل بهتری هم دارید پیشنهاد بدید لطفا . (تابلو روان - MMC - شیفت رجیستر )
                          :cry:
                          http://www.sharjweb.com/

                          دیدگاه


                            #14
                            پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

                            سلام آقا محسن
                            من از لچ استفاده می کنم و تا حالا از شیفت رجیستر استفاده نکردم.البته شیفت رجیستر از برخی جهات بر لچ برتری داره.حالا مگه مشکل شما با لچ چی بود که کنارش گذاشتی؟ :question:
                            درباره اینکه سرعت رفرش کم شده فقط می تونم حدسهایی بزنم که از درست بودنش اصلا ممطمئن نیستم oo:حالا شاید بکارت اومد. حدس من اینه که احتمالا خواندن از کارت حافظه و انجام کارهای تبدیل اسکی زمان زیادی رو ازت میگیره. چون برای پر کردن 336 خانه آرایه از نوع وورد باید دو سکتور خوانده بشه. همین خواندن صرف ، بدون اینکه میکرو کارهای دیگه انجام بده اگه از کریستال 16 مگاهرتز هم استفاده کنی و ...احتمالا حدود 8 میلی ثانیه زمان میبره. بعد هم تبدیل 672 بایت از اسکی به دسیمال توسط بیسکام هم چندین میلی ثانیه دیگه زمان میبره.که اگه باهم جمع بشه برای تابلوران اتلاف زمان زیادی محسوب میشه و زمانی که برای روشن ماندن ال ای دی ها باقی میمونه زمان کمی خواهد بود.اگه سرچ کنی می بینی که قبلا هم بچه ها از کم بودن سرعت میکرو در خواندن از کارت حافظه گله داشتند برخی رم خارجی رو به عنوان راه حل ارائه کرده بودند و برخی می گفتند مشکل تو کدهای نوشته شده است و ...یه سرچ کن ببین چه نتیجه ای میگری نتیجه رو هم اینجا خبر بده شاید بچه های دیگه هم این مشکلو داشته باشند و مشکلشون حل بشه.

                            دیدگاه


                              #15
                              پاسخ : مگا 32 و توابع AVR _DOS چرا با آرایه بیشتر از 255 کار نمیکنه ؟

                              نوشته اصلی توسط daryanavard
                              سلام آقا محسن
                              من از لچ استفاده می کنم و تا حالا از شیفت رجیستر استفاده نکردم.البته شیفت رجیستر از برخی جهات بر لچ برتری داره.حالا مگه مشکل شما با لچ چی بود که کنارش گذاشتی؟ :question:
                              درباره اینکه سرعت رفرش کم شده فقط می تونم حدسهایی بزنم که از درست بودنش اصلا ممطمئن نیستم oo:حالا شاید بکارت اومد. حدس من اینه که احتمالا خواندن از کارت حافظه و انجام کارهای تبدیل اسکی زمان زیادی رو ازت میگیره. چون برای پر کردن 336 خانه آرایه از نوع وورد باید دو سکتور خوانده بشه. همین خواندن صرف ، بدون اینکه میکرو کارهای دیگه انجام بده اگه از کریستال 16 مگاهرتز هم استفاده کنی و ...احتمالا حدود 8 میلی ثانیه زمان میبره. بعد هم تبدیل 672 بایت از اسکی به دسیمال توسط بیسکام هم چندین میلی ثانیه دیگه زمان میبره.که اگه باهم جمع بشه برای تابلوران اتلاف زمان زیادی محسوب میشه و زمانی که برای روشن ماندن ال ای دی ها باقی میمونه زمان کمی خواهد بود.اگه سرچ کنی می بینی که قبلا هم بچه ها از کم بودن سرعت میکرو در خواندن از کارت حافظه گله داشتند برخی رم خارجی رو به عنوان راه حل ارائه کرده بودند و برخی می گفتند مشکل تو کدهای نوشته شده است و ...یه سرچ کن ببین چه نتیجه ای میگری نتیجه رو هم اینجا خبر بده شاید بچه های دیگه هم این مشکلو داشته باشند و مشکلشون حل بشه.
                              سلام مجدد به شما دوست عزیز .
                              استفاده از لچ همون طور که خودتون هم بهتر از من می دونید PCB رو پیچیده تر میکنه . دومین دلیلم قیمت بیشتر لچ نسبت به شیفت رجیستر (تقریبا دو برابر ).
                              در مورد گفته های اتلاف وقت میکرو توسط دستورات خواندن از MMC هم باید بگم که کاملا درست فرمودید و من اون مدار رو با لچ عملی بستم ونتیجه مطلوبی نگرفتم .ولی اینو میدونم که این تابلو روان با MMC ساخته شده .مثلا آقای کاخکی و آقای مهری اونو ساختن .و منو هم خیلی راهنمایی زیادی کردن که ازشون تشکر میکنم.ولی حالا من شکم بر اینه که با بیسیک نشه این کار رو کرد که اگه اینطور باشه بایستی بیسیک رو ببوسم و بزارم کنار .
                              البته اگه کسی هم با بیسیک این تابلو رو نوشته باشه از همینجا ممنونش میشم که کمی منو راهنمایی کنه .
                              خلاصه دریا نورد جان دقیقا خودم هم مشکلو نمیدونم کجاست .ولی تو SPI نرم افزاری برای پر کردن 336 ورد آرایه زمانی معادل 25میلی ثانه برای دستور open و نیز 40 میلی ثانیه برای دستور GET صرف میشه که فاجحه هست .
                              ا ز همه دوستا ن که تو این ضمینه کار کردن خواهش میکنم که عنایتی بفرمایید.
                              http://www.sharjweb.com/

                              دیدگاه

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