راه اندازی External RAM معمولا دشوار است ولی بعضی میکرو کنترلر ها از جملهATmega8515وATmega64 قابلیت شناسایی آن را دارند و با تنظیم قسمت External memory در ویزارد برنامه codevision به راحتی قابل به کار گیری است.

تراشه RAM مورد استفاده در این مدار KM681000 است که128KB ظرفیت دارد و ساخت شرکت Samsung میباشد. همان طور که در شکل زیر می بینید این IC دارای 8 پین دیتا و 17 پین آدرس است که چون 64KB آن مورد نیاز است پین هفدهم آدرس را زمین میکنیم.

تراشه KM681000

 

همچنین از ATmega8515 (میکرو کنترلر) و 74HC573 (که یک D flip-flop است و برای سویچ کردن بین 8 بیت کم ارزش آدرس و دیتای SRAM کاربرد دارد)نیز در این مداراستفاده میکنیم.در دیتاشیت ATMEGA8515 (قسمت XMEM) چگونگی اتصال این قطعات به یکدیگر توضیح داده شده و  شکل آن را اینجا می آورم:

 

 

همچنین از برقراری اتصالات زیر باید مطمئن شویم:

RD of Micro controller     ->  OE of RAM

    ALE of Micro controller   -> LE of 74573

    OE of 74573                   -> ground

بدون استفاده از SRAM اگر به عنوان مثال از دستور

int a[500];

استفاده کنیم codevision خطای «کمبود حافظه» از ما میگیرد اما با بکارگیری SRAM آرایه با تعداد عناصر خیلی بیشتری می‌توان تعریف کرد.

ابتدا تصمیم گرفتیم برای گرفتن خروجی از پروتکل USARTاستفاده کنیم تا خروجی را از میکرو کنترلر به کامپیوتر (Terminal emulator) بفرستیم( با دستور putchar خروجی از نوع char را به کامپیوتر بفرستیم).اما ارتباط USART برقرار نمیشد. چک کردم که آیا echo برقرار میشود؟ در آی سی Max232 پین های TXD و RXD را به هم وصل کردم و در (Terminal Emulator) ٰTE یک کاراکتر تایپ کردم ولی  echo برقرار نمیشد. ولی وقتی پین های RXD و TXD میکرو کنترلر و MAX232 را از هم جدا کردم ech0 برقرار شد.وقتی مطمئن شدم مشکل از 8515 یا MAX232‌ یا برد برد نیست تصمیم گرفتم خروجی را از LCD بگیرم.

در برنامه codevision ابتدا یک آرایه 500 تایی تعریف کردیم(int a[500]) و به این ترتیب آن را مقداردهی کردیم:

for(i=1;i<=500;i++)

 i=a[i-1];

سپس عنصر 500ام آرایه را به عنوان خروجی در  LCD نمایش دادیم(یعنی در LCD باید عدد 500 نمایش یابد)

پس از بستن مدار روی bred board و استفاده از پورت B میکروکنترلر برای راه اندازی LCD دیدم که در LCD هیچ خروجی نمایش نمی یابد که مشکل آن وصل نبودن pin های CS1 و CS2از KM681000به زمین و VCC (به ترتیب) بود.پس از رفع این مشکل دیدم که LCD‌خروجی داد اما نه خروجی دلخواه. وقتی سیم های programmer را از مدار قطع کردم خروجی دلخواه در LCD نمایش داده شد. همانطور که گفته شد LCD‌را باید به پورت B وصل میکردیم که چون بعضی سیم های پروگرمر نیز به این پورت وصل بود در کار LCD اختلال ایجاد میکرد.

 

تا اینجای کار ما با فرکانس 1MHZ که پیش فرض میکرو است کار می‌کردیم. حال با استفاده از کریستال (که آن را بین پایه های XTAL1 و XTAL2 میکرو وصل می‌کنیم و آن پایه ها با خازن 27PF به زمین می‌بریم.) با فرکانس 16MHZ کار می‌کنیم. البته برای این کار تنظیماتی را در codevision باید انجام داد. از منوهای بالای Codevision

project     ->      configure    ->      C compiler

و از آنجا فرکانس را 16MHZ تنظیم می‌کنیم. سپس هنگام program کردن فیوزبیت ها میکرو را طوری برنامه ریزی می‌کنیم که فرکانس 16MHZ شود. در datasheet، قسمت system clock and clock options‌حالت external crystal/ceramic resonator نگاه می‌کنیم که برای فرکانس های بالای 1MHZ چه تنظیماتی در فیوزیت ها باید انجام گیرد.

حال محتویات قبلی flash را پاک می‌کنیم (erase chip) و سپس فیوز بیت ها را برنامه ریزی میکنیم     program   ->  Fuse bits   حال برای اطمینان می‌توانیم

Read      ->     fuse bit را هم انجام دهیم و از program شدن صحیح آن ها مطمئن شویم.

حال میکرو را program‌ می‌کنیم. مشاهده می‌کنیم که که در فرکانس بالاتر خروجی خیلی سریع تر در LCD نمایش می‌یابد.

Advertisements