به نام خدا : تو این مطلب میخوام انواع روش پروگرام، دیباگ و ریست کردن فیوزبیت های میکروکنترلر های avr هشت بیتی رو بگم؛ درضمن در هرجایی از مطلب اگه جایی اشتباه بود، بگید تا اصلاح کنم ( عکس زیر تزئینی هستش! )
انواع دستگاه برنامهریزی و اشکالزدایی avr
توجه : این مطلب مختص میکروهای CPU = 8bit AVR هستش ( سری tiny و mega و xmega و at90 )
چه مواردی در AVR باید پروگرام شوند؟
Flash
EEPROM
Fuses
Lock Bits
انواع روش اشکالزدایی AVR
توجه مهم : میکروهای زیر، هیچ روشی برای اشکال زدایی ( debugging ) ندارند ( به استدال دیتاشیتون؛ تو این پست هم یه بحث کوچولو شده دربارش : debugger for attiny 6pin )
روشهای زیر مختص debug کردن میکرو هستند، اما عمل پروگرام کردن میکرو رو هم میتونن انجام بدن.
1) dW : پروگرام + دیباگ
1) dW : پروگرام + دیباگ
اگر چه رابط debugWIRE تنها به 3 پایه ذکر شده برای کارکرد صحیح نیاز دارد، توصیه می شود که دسترسی به کامل SPI را داشته باشید تا بتوان رابط کاربری debugWIRE را با استفاده از برنامه نویسی SPI فعال و غیرفعال کرد.
هیچ یک از میکرو های این سری، از JTAG پشتیبانی نمیکنند.
پروگرامرهای پشتیبانی شده :
JTAG-ICE MKII
JTAG-ICE3
Atmel-ICE
AVRONE
STK600 (programming only)
Dragon
این مطلب رو ببینید : Build your own AVR JTAG ICE clone؛ البته خب مدار توی این مطلب، بر فرض این هستش که شما پورت سریال دارید ( که خب سیستم های جدید نمیدونم این پورت رو دارند یا نه )، حالا فرض میکینم که ندارند، برا حل این مشکل میایم به جای آیسی MAX232، از آیسی FTD232 استفاده میکنیم که به پورت USB وصل میشه و خروجی TTL به ما میده.
با توجه به این که پورت سریال ممکنه تو بعضی کامپیوترها/لبتاب ها نباشه و این که هم اندازش بزرگه و هم کابلش یکم گرونه، بهترین گزینه استفاده از مداری هستش که از پورت USB استفاده کنه.
4) PDI : پروگرام + دیباگ
4) PDI : پروگرام + دیباگ
پایه های مورد نیاز : VCC - GND - PID_CLK - PDI_DATA؛ سوکتش هم به صورت زیر هستش :
میکروهایی که از PDI پشتیبانی میکنند ( CPU = 8bit AVR )
در این روش میکروکنترلر از طریق پایه های پروتکول سریال SPI، توسط پروگرامر، پروگرام میشه.
پایه های مورد نیاز : VCC - GND - RESET - MISO - MOSI - SCK؛ سوکتش هم به صورت زیر هستش :
میکروهای پشتیبانی شده : تمام میکروهای avr به غیر از موارد زیر، پایه های فوق رو دارند ( بررسی مجدد ) :
ATtiny4/5/9/10
ATtiny102/104
پروگرامرهای پشتیبانی شده :
AVRISP
AVRISP MKII
JTAG-ICE MKII
JTAG-ICE3
Atmel-ICE
AVRONE
STK500
STK600
Dragon
2.1) Parallel ISP : ساده ترین نوع پروگرامر ISP معروفه به Parallel Programming ( تو این مطلب برای راحتی بهش میگیم Parallel ISP ) که این نوع پروگرامر از طریق پورت Parallel به PC وصل میشه؛ در زیر عکسی از پورت Parallel رو مشاهده میکنید ( اون صورتیه سمت چپ بالا ! ) :
استفاده از این نوع پروگرامر مشکلات زیر رو داره :
نبودن پورت Parallel در اکثر کامپیوتر و لبتاب های جدید ( درباره سیستم های قدیمی اطلاع ندارم ولی جدیدا رو میدونم اکثرا ندارن )؛ که خب برا حل این مشکل میتونیم از مبدل USB TO Parallel استفاده کنیم، که اینم خودش اندازه یک پروگرامر USB ISP قیمتشه!
بسته به این که از چه نوع مداری استفاده میکنید و مدارتون ایمن هستش یا نه، ممکنه به مادربرد کامپیوتر آسیب بزنه ( اینو تو نت خوندم، دلیلشو نمیدنم، و این که در کامپیوتر مدنظر پورت پاراللش خودش محافظت شده در مقابل اتصال کوتاه و ولتاژ زیاد و... هستش یا نه رو نمیدونم )
شماتیک و مدارات مختلفی توی نت برای Parallel ISP هستش که در کل دو تا مدل بیشتر من پیدا نکردم، اینم دو تا مطالب زیر رو ببیند :
که خب به نظرم بهترین راه اینه که بیخیال این پروگرامر بشیم و بریم سراغ پروگرامر ISP یی که از پورت Parallel استفاده نکنه و از پورت USB استفاده کنه ( امکان سوخت میکرو پورت پارالل سیستم یا اون مبدل USB TO Parallel وجود داره! )
2.2) USB ISP : تو این روش میان از یه میکروکنترلر استفاده میکنن، که میکروکنترلر به کمک پورت USB به PC وصل میشه ( و اینطوری مشکل نبودن پورت Parallel حل میشه ) و میکرو هدف ( میکرویی که قراره پروگرامش کنیم ) هم به میکرو پروگرامر وصل میشه ( به همین راحتی ) که بهترین گزینه تا اینجا همین پروگرامر هستش؛ این مطلب رو ببینید : آموزش ساخت پروگرامر USB ASP – AVR
در این روش باید اون میکرو مخصوص پروگرامر رو یکبار پروگرام کنیم و کد مخصوصش رو بهش بدیم ( هنگام ساخت پروگرامر فقط )، فلذا مشکل این پروگرامر هم همینی هستش که الان گفتم!
3) Bootloader : پروگرام ( فقط Flash )
3) Bootloader : پروگرام ( فقط Flash )
فیوزبیت های مورد استفاده : BOOTRST - BOOTSZ1 - BOOTSZ0
این روش، یک روش پروگرام کردن مستقیم نیست!؛ یک bootloader یک برنامه AVR کوچک است که در یک قسمت رزرو شده از حافظه فلش میکروکنترلر قرار دارد؛ بوت لودرها از ویژگی های "خود اصلاح" حافظه فلش موجود در AVR های جدید استفاده می کنند تا AVR بتواند خود را از طریق داده های برنامه بارگذاری شده از یک منبع خارجی ( یک حافظه فلش خارجی، SD کارت و... که خب شایع ترینش RS232 هستش ) برنامه ریزی کند.
استفاده از این روش بیشتر برا زمانی هستش که محصولتون رو تولید کردید و به بازار ارائه دادید، حالا میخواید برنامه تون قابلیت بروزرسانی داشته باشه توسط خود مشتری ( مشتری که پروگرامر نداره که! )، که مثلا مشتری دستگاه رو به PC وصل میکنه و فایل بروزرسانی که از وبسایت محصول دانلود کرده رو داخل دستگاه آپلود میکنه.
فایل های مفید : یه سری فایل هم دانلود کردم که بعدا باید برم/برید! سروقتشون، مربوطند به نوشتن بوت لودر و این جور چیزا ( البته ربطی به این مطلب نداره، بیشتر به عنوان یه موضوع فعالیت بیشتر و کار در خانه خخخ بهش نگاه کنید )، البته اگه درست دانلود کرده باشم! تو سایت های خارجی هم میتونید سرچ کنید تا ببینید که مطلب آموزشی در این باره موجود هستش یا نه، من بررسی نکردم.
برای احیای AVR هایی که fusebits آنها به اشتباه تنظیم شده و دیگر میکروکنترلر توسط پروگرامر ها شناسایی نمیشه، این روش استفاده میشه تا فیوزبیت های میکروی فوق رو به حالت اولیه برگردونه.
تمام میکروهای سری tiny و mega ( به غیر از استثناها که در زیر بهش پرداختم ) دارای رابط HVSP یا HVPP هستند.
استثناها 1 : میکروهای Tiny4/5/9/10/20/40 رابط HVPP یا HVSP ندارند ولی یه چیز مشابه دارند که در دیتاشیت صفحه 105 توضیح داده شده؛ اگه بیت RSTDISBL رو فعال کرده باشید فلذا دیگه به روش عادی نمیتونید میکرو رو پروگرام کنید و باید از روش high voltage استفاده کنید و فیوز بیتها رو ریست کنید، برا این کار برا مدت زمانی پایه RESET رو 12V بهش میدید تا وارد مود برنامهریزی بشه.
استثناها 2 : میکروهای سری mega زیر و تمامی میکروهای xmega رابط HV ندارند ( چیزی فهمیدم اینه که نیاز ندارند، آیا این مشکلات مربوط به برنامهریزی اشتباه فیوزبیت ها در سری xmega رفع شده است و دیگر به پروگرام کردن به روش high-voltage/HV نیازی نیست؟ )
توجه 1 : رابط HVPP یا HVSP همیشه فعال هستند، چون آنها را نمی توان توسط فیوزبیتها ( و یا هر عمل دیگری توسط کاربر ) غیر فعال کرد.
توجه 2 : هر دو رابط high voltage فوق، یک ولتاژ 12 ولت روی پایه Reset میندازند و هر دو رابط نیاز به دسترسی به تعداد زیادی از پایه های میکرو دارند؛ رابط HVPP نیاز به حداقل 16 پایه دارد و رابط HVSP نیاز به حداقل 8 پایه دارد.
توجه 3 : با توجه به این که، رابط HVPP / HVSP نیاز به پین های زیادی دارند، زمانی که یک میکرو Tiny یا Mega به یک PCB لحیم شده است، تقریبا هرگز گزینه برنامه نویسی واقع گرایانه نیستند. ( خلاصه کلوم این که با توجه به این که این دو رابط نیاز به پایه های زیادی دارند، اینطوری اینقرا هم راحت نیست که بخواید در هربرد یک سوکت قرار بدید مخصوص بهش، اندازه برد الکی الکی بزرگ میشه، حالا ممکنه مشکلاتی هم ایجاد کنه که من فعلا اطلاعای ازشون ندارم، مثلا شاید نیاز باشه که میکرو کاملا از برد جدا بشه و سنسوری و چیزی بهش وصل نباشه، اینی که گفتم از روی حدس و گمان هستش، دقیقا اطلاع ندارم )
لینک های مفید : اینم یه سری لینک مربوط به ساخت/خرید مدار این دو روش :
این سوال زیاد صحیح نیست بنظرم، چون هر کدوم از روش ها کار خاصی میکنه و برا رنج خاصی از میکروها هستش؛ مثلا :
برا بحث دیباگ/پروگرام، میبینید که 4 روش وجود داره اما dW برا یه تعداد از میکروها هستش، UPDI برا یه سری دیگه از میکروها، JTAG و PDI هم همینطور.
و برا بحث پروگرام کردن هم ISP برا اکثر میکروها و روش TPI هم برا میکروهای 6 پایه سری ATtiny کاربرد داره.
برا بحث پروگرام کردن و بروزرسانی برنامه توسط مشتری هم گفتیم که bootloader کاربرد داره.
و در آخر برا بحث ریست کردن فیوزبیت ها ( زمانی که میکروکنترلر توسط پروگرامرها شناسایی نمیشه / به دلیل اشتباه تنظیم کردن فیوزبیت ها توسط شما! )، روش های HVPP و HVSP کاربرد دارند ( که باز هرکدوم از این دو روش، مخصوص رنج خاصی از میکروها هستند، و حتی برخی از میکروهایی با تعداد پایه کم، روش خاص خودشون رو دارند! )
بهترین پروگرامر و دیباگر AVR
یک ابزار قدرتمند برای رفع اشکال و برنامه ریزی میکروکنترلرهای AVR با استفاده از رابطهای هدف UPDI ،JTAG ،PDI ،debugWIRE ،aWire ،TPI ،SPI و میکروهای ARM Cortex-M مبتنی بر SAM با استفاده از رابطهای هدف JTAG یا SWD است؛ Atmel-ICE یک ابزار توسعه قدرتمند برای اشکال زدایی و برنامه نویسی ARM Cortex-M مبتنی بر SAM و میکروکنترلرهای AVR با قابلیت debugging on-chip است. ( توضیح شرکت میکروچیپ! )
درحال حاظر تا جایی که من فهمیدم و میدونم، بهترین پروگرامر حال حاظر، Atmel-ICE ( پروگرامر و دیباگر ) هستش که قیمتی حدود 2 تومن و نسخه ارزونترش حدود 1 تومن هستش!؛ برا برنامه ریزی میکروهای 8 و 32 بیتی AVR و میکروهای SAM ARM Cortex-M مورد استفاده قرار میگیره. ( توضیح من!!! )
پایه های پورت پارالل و توضیح هر پایش و کاربردش و انواع روش ارتباط میکرو با pc به کمک پورت پارالل
در روش usb isp، میکروی پروگرامر، کد hex اش چطوری و بر چه مبنایی نوشته شده.
نحوه نوشتن نرم افزار پروگرام کردن برای این روش ( ISP ).
نحوه نوشتن فایل بوتلودر؟ ( یه سری فایل و لینک تو قسمت مربوطه اش گزاشتم )
لیست تموم فایل های بوت لودر میکرو ها به طرف پروگرام کردن مختلف
نوشتن یه برنامه به کمک C# تا برنامه بوتلودر رو روی میکرو پروگرام کنم.
avr jtag firmware source code ( تا جایی که سوال کردم، قسمت برنامه نویسی jtag عمومی و قسمت دیباگش خصوصی هستش – همون open source بودن یا نبودن رو میگمم )
امیدوارم این مطلب هر چند ناقص مفید باشه براتون، مارو هم از دعاهاتون بی نصیب نزارید، مطالب آموزش اتمل استدیو رو هم 10 جلسه ایش رو نوشتم، فعلا سر بحث دیباگ گیر کردم، نیاز پروگرامرش دارم که 2.5 پولشه! Atmel-ice هستش اسمش فک کنم، منم تاحالا با بحث دیباگ کار نکردم، اصلا هم دیباگر نداشتم تا حالا، فعلا موندم، مطالب فوق هم رو هوا هستش…، تا مطلب بعد، یا علی.
مهمان
در کل دیباگر با میکرو کنترلر های ARM خیلی بهتر هست از لحاظ تهیه دیباگر ، و در درک برنامه نویسی کمک میکنه اما دیباگ با AVR مشکل هست
مهمان
سلام
این کد ای وی آر پروگرامر با ولتاژ بالاست
مطمعنا بایک جستجوی کوچک سایتش هم میتونید پیدا کنید
امیدوارم به کار بیاد
http://s5.picofile.com/file/8374780042/HV_AVR_programmer.bas.html
مهمان
سلام، من یه چندتا سوال درباره باتری های لیتیومی و ماژول های شارژ اونا دارم ممنون میشم جواب بدی.