اطلاعیه

Collapse
No announcement yet.

نمایش عکس توسط nokia 1661 lcd با atmega32 توسط کامپایلر winavr

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

    نمایش عکس توسط nokia 1661 lcd با atmega32 توسط کامپایلر winavr

    تجربه ای که در این زمینه پیدا کردم اینه که به علت اینکه نتونستم تو کامپایلر آرایه عکس رو به صورت فلش یعنی [ 9800]flash unsigned char picture تعریف کنم این مقادیر نمیتونه در رم 2 کیلو بایتی ذخیره بشه و بعد از پروگرم کردن میکرو هنگ میکنه.
    چون بعد کامپایل مینویسه 480.5 درصد از ظرفیت رم پرشده یعنی 4.8 برابر بیشتر از ظرفیت 2048 بایتی دیتا میخواد پر بشه ولی بدون خطا کامپایل میشه.
    چون اگه با احتساب عکس 16 بیتی یه عکس 70*70 به اندازه 4900 ضرب در 2 (16 بیتی هست نه 8 بیتی پس به یه 2 هم ضرب میشه) میشه 9800 که تقریبا محاسبات درست در میاد.
    چرا تو winavr gcc نمیشه مقادیر رو به صورت flash ذخیره کرد.
    تو کدویژن این کار به سادگی میسر است.
    const هم به درد نمیخوره چون یه چیز دیگه س و مقادیر رو فقط به صورت ثابت ذخیره میکنه نه متغیر اونم تو ram .
    من با mega32 و lcd n96 تونسته بودم عکس bmp با رزولیشن 121*121 رو نمایش بدم ولی با تفاسیر بالا نتونستم با همون mega32 و 1661 بیشتر از 31*31 رو نشون بدم.
    اساتید نکته ای میدونن؟
    چرا نمیشه تو winavr متغیرها رو به صورت flash ذخیره کرد تا با محدودیت ram کمتری مواجه شد؟
    جدیدترین ویرایش توسط omid_2132; ۱۴:۲۰ ۱۴۰۰/۱۰/۱۲.
    دقت کردین تو مهمونیا یه کیوی رو وقتی با پوست میخورین چه جور نگاتون میکنن.!!!!

    هيچگاه چيزي را خوب نمي فهمي، مگر اينكه بتواني آن را براي مادربزرگت شرح دهي!((آلبرت انيشتين))

    #2
    پاسخ : نمایش عکس توسط nokia 1661 lcd با atmega32 توسط کامپایلر winavr

    نوشته اصلی توسط omid_2132 نمایش پست ها
    تجربه ای که در این زمینه پیدا کردم اینه که به علت اینکه نتونستم تو کامپایلر آرایه عکس رو به صورت فلش یعنی [ 9800]flash unsigned char picture تعریف کنم این مقادیر نمیتونه در رم 2 کیلو بایتی ذخیره بشه و بعد از پروگرم کردن میکرو هنگ میکنه.
    چون بعد کامپایل مینویسه 480.5 درصد از ظرفیت رم پرشده یعنی 4.8 برابر بیشتر از ظرفیت 2048 بایتی دیتا میخواد پر بشه ولی بدون خطا کامپایل میشه.
    چون اگه با احتساب عکس 16 بیتی یه عکس 70*70 به اندازه 4900 ضرب در 2 (16 بیتی هست نه 8 بیتی پس به یه 2 هم ضرب میشه) میشه 9800 که تقریبا محاسبات درست در میاد.
    چرا تو winavr gcc نمیشه مقادیر رو به صورت flash ذخیره کرد.
    تو کدویژن این کار به سادگی میسر است.
    const هم به درد نمیخوره چون یه چیز دیگه س و مقادیر رو فقط به صورت ثابت ذخیره میکنه نه متغیر اونم تو ram .
    من با mega32 و lcd n96 تونسته بودم عکس bmp با رزولیشن 121*121 رو نمایش بدم ولی با تفاسیر بالا نتونستم با همون mega32 و 1661 بیشتر از 31*31 رو نشون بدم.
    اساتید نکته ای میدونن؟
    چرا نمیشه تو winavr متغیرها رو به صورت flash ذخیره کرد تا با محدودیت ram کمتری مواجه شد؟
    سلام
    کلمه flash* یک عبارت مختص خود کدویژنه و هیچ کجای دیگه از جمله gcc پیدا نمیشه (در واقع winavr هم از کمپایلر gcc استفاده میکنه). برای ذخیره آرایه داخل فلش با کمپایلر gcc، باید به شکل زیر عمل کرد:

    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <util/delay.h>


    const unsigned char PROGMEM seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


    int main (void)
    {
    DDRA = 0xFF;

    while (1)
    {
    for (int i = 0; i < 10; i++)
    {
    PORTA = pgm_read_byte(&seg[i]);
    _delay_ms(1000);
    }
    }
    }

    همونطوری که میبینید برای تعریف متغیر باید کلمه PROGMEM به تعریفش اضافه کنید و برای خوندنش، آدرسش رو به ماکرو pgm_read_byte بدید. البته این ماکرو برای داده*های یک بایتی کاربرد داره و برای داده های ۲ یا ۴ بایتی باید از ماکروهای مخصوص به خودشون استفاده کنید. همچنین لازمه کتابخونه avr/pgmspace.h هم فراخوانی کنید.
    این روش فقط یکی از روش هاس. فکر کنم اگر سرچ کنید روش های دیگه ای مثل استفاده از کلمه کلیدی __flash هم باشه که چون من تاحالا باهاشون کار نکردم دقیقا از عملکردشون خبردار نیستم.
    جدیدترین ویرایش توسط hossein.m98; ۱۸:۰۱ ۱۴۰۰/۱۰/۱۲.

    دیدگاه


      #3
      پاسخ : نمایش عکس توسط nokia 1661 lcd با atmega32 توسط کامپایلر winavr

      ممنون از پاسختون.
      جواب سوالم رو دقیقا پاسخ دادید و مشکل رم بعد از کامپایل حل شد و به نمایش عکس نزدیک تر شدم.
      دقت کردین تو مهمونیا یه کیوی رو وقتی با پوست میخورین چه جور نگاتون میکنن.!!!!

      هيچگاه چيزي را خوب نمي فهمي، مگر اينكه بتواني آن را براي مادربزرگت شرح دهي!((آلبرت انيشتين))

      دیدگاه

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