یہ سب مصنف کے ثانوی مارکیٹ پر ایک دلچسپ ڈیوائس خریدنے کے ساتھ شروع ہوا - Smart Response XE (
یہ آلات کئی سال پہلے بند کر دیے گئے تھے، اور جو اسکول $100-$200 میں خریدتے تھے وہ اب eBay پر $10 یا اس سے کم میں آ رہے ہیں۔ وہاں کا ہارڈ ویئر گیکی تجربات کے لیے بہت موزوں ہے:
- 60 کلیدی کی بورڈ
- 384×136 کی ریزولوشن کے ساتھ ڈسپلے، 2 بٹس فی پکسل - BC، CGA کی طرح، لیکن 4 رنگ نہیں، بلکہ چمک کی درجہ بندی
- مائکروکنٹرولر ATmega128RFA1 (128 kB فلیش میموری، 4 kB ROM، 16 kB RAM، 802.15.4 ٹرانسیور)
- ایس پی آئی انٹرفیس کے ساتھ بیرونی (مائیکروکنٹرولر کے سلسلے میں، پورے آلے کے نہیں) 1 میگا بٹ (128 کلو بائٹ) فلیش میموری
- 4 AAA عناصر کے لئے ٹوکری.
مائیکرو کنٹرولر کے نام سے یہ واضح ہے کہ اس کا تعلق AVR خاندان سے ہے، جس کا مطلب ہے کہ ڈیوائس کو Arduino-compatible بنانا ایک معمولی سے زیادہ کام نہیں ہے۔
خبروں سے
لیکن مصنف اس موقع میں زیادہ دلچسپی رکھتا ہے کہ وہ ڈیوائس پر نہیں بلکہ مطالعہ کرے:
- سیریل SPI انٹرفیس کے ساتھ فلیش میموری
- AVR کے لیے بوٹ لوڈرز
- معیاری 802.15.4
مصنف نے لکھنا شروع کیا۔
یہ Arduino بوٹ لوڈر کو اپ لوڈ کرنے کے لیے کافی ہے، لیکن خاکہ نہیں - سیریل پورٹ وہاں منسلک نہیں ہے، اس لیے آپ کیس کھولے بغیر بھی نہیں کر سکتے۔ نیز، پہلے سیریل پورٹ کی TX0 اور RX0 لائنوں کو کی بورڈ میٹرکس کی پولنگ لائنوں کے ساتھ ملایا جاتا ہے، یعنی وہ جو ڈسپلے کے اطراف میں موجود فنکشن کیز کو پول کرتی ہیں۔ لیکن آپ کیا کر سکتے ہیں - مصنف نے یہ بنایا:
وہ وہاں JTAG لائنیں لے آیا، اور اب بیٹری کا ڈبہ کھولنے کی ضرورت نہیں ہے۔ اور اس لیے کہ خاکے اپ لوڈ کیے جا سکیں، میں نے دونوں سیریل پورٹس کو ایک ہی کنیکٹر سے منسلک کیا، ایک سوئچ بھی شامل کیا، کیونکہ بیٹریاں انسٹال ہونے کے بعد، کسی اور طریقے سے ڈیوائس کو بند کرنا جسمانی طور پر ناممکن ہے۔
سولڈرنگ آئرن، یوٹیلیٹی نائف اور گلو گن کے ساتھ کام کرنے میں کافی وقت لگا۔ عام طور پر، "اوور دی ایئر" خاکے اپ لوڈ کرنا زیادہ آسان ہے؛ ہمیں اس کے لیے فوری طور پر کچھ ایجاد کرنے کی ضرورت ہے۔
Arduino IDE پروگرام کو خاکے اپ لوڈ کرنے کے لیے استعمال کرتا ہے۔
اس مسئلے پر قابو پانے کے لیے مختلف طریقے آزمانے کے بعد، مصنف نے درج ذیل کے ساتھ آیا۔ ڈیوائس میں SPI انٹرفیس کے ساتھ 128 KB فلیش میموری ہے - ہمیں تاروں پر ڈیٹا موصول ہوتا ہے (یاد رہے کہ مصنف کے پاس پہلے سے ایک ڈیوائس ہے جس میں کنیکٹر ہے)، اس میموری کو بفر کے طور پر استعمال کریں، اور ڈیٹا کو ریڈیو پر بھیجیں۔ کسی دوسرے ڈیوائس پر چینل۔ سائبیکو کی طرف سے ہیلو۔
ریڈیو چینل کے ساتھ ساتھ فونٹ کے ساتھ کام کرنے کے لیے کوڈ لکھنے کے بعد، لوڈر 4 کلو بائٹس سے لمبا ہو گیا۔ لہذا، HFUSE قدر کو 0xDA سے 0xD8 میں تبدیل کرنا پڑا۔ اب بوٹ لوڈر 8 کلو بائٹس تک لمبا ہو سکتا ہے، اور ابتدائی پتہ اب 0x1E000 ہے۔ یہ میک فائل میں جھلکتا ہے، لیکن اسے بھرتے وقت بھی دھیان میں رکھنا چاہیے۔
ATmega802.15.4RFA128 میں 1 ٹرانسیور اصل میں پروٹوکول کا استعمال کرتے ہوئے کام کرنے کے لیے ڈیزائن کیا گیا ہے
اس سے معلوم ہوا کہ چینل 15 اور 26 وائی فائی کی مداخلت کے لیے کم سے کم حساس ہیں۔ مصنف نے ان میں سے دوسرے کا انتخاب کیا۔ اعلان دستبرداری: مترجم کو نہیں معلوم کہ آیا اسے ZigBee کو اس طرح آسان بنانے کی اجازت ہے۔ ہوسکتا ہے کہ ہمیں کچھ اور پروگرامنگ کرنی چاہئے اور اسے مکمل طور پر نافذ کرنا چاہئے؟
پہلی ڈیوائس پر، ایک محدود ریاستی مشین کو لاگو کرنا ضروری ہے جو STK500 پروٹوکول کے ذریعے ڈیٹا منتقل کرتی ہے۔ زیادہ تر حصے کے لیے، منتقل کیے جانے والے اور موصول ہونے والے پیغامات خود کفیل ہوتے ہیں، لیکن کچھ ان سے منسلک ہوتے ہیں جو پہلے چینل سے گزر چکے تھے۔ مکالمے کی تفصیل دی گئی ہے۔
اس مکالمے کا ایک اہم جز پیکٹوں کی ترسیل ہے جس کا مقصد منزل کے آلے کی فلیش میموری پر لکھا جانا ہے۔ AVR فیملی کے سادہ مائیکرو کنٹرولرز کے لیے، صفحہ کا سائز 128 بائٹس ہے، لیکن ATmega128RFA1 کے لیے یہ 256 ہے۔ اور فلیش میموری کے لیے جو SPI پروٹوکول کے ذریعے منسلک ہے، یہ ایک جیسا ہے۔ پہلی ڈیوائس میں موجود پروگرام، خاکہ اپ لوڈ کرتے وقت اسے فوری طور پر دوسرے میں منتقل نہیں کرتا، بلکہ اسے اس میموری پر لکھتا ہے۔ جب Arduino IDE اندراج کی درستگی کو چیک کرتا ہے، تو اسے وہی بھیجا جاتا ہے جو وہاں لکھا گیا تھا۔ اب ہمیں موصول ہونے والے ڈیٹا کو ریڈیو چینل کے ذریعے دوسرے ڈیوائس پر منتقل کرنے کی ضرورت ہے۔ ایک ہی وقت میں، وصول کرنے سے منتقلی اور پیچھے کی طرف سوئچنگ اکثر ہوتا ہے۔ STK500 پروٹوکول تاخیر سے لاتعلق ہے، لیکن ڈیٹا کے نقصان کو برداشت نہیں کرتا (عجیب بات، لیکن اوپر کہا گیا کہ تاخیر ڈیٹا کی منتقلی کو بھی متاثر کرتی ہے)۔ اور وائرلیس ٹرانسمیشن کے دوران نقصانات ناگزیر ہیں۔ ATmega128RFA1 میں بار بار کی درخواستوں کا ایک بلٹ ان ہارڈ ویئر کا نفاذ ہے جب منتقلی کی درستگی کے بارے میں شکوک و شبہات ہیں، لیکن مصنف نے خود سافٹ ویئر میں اسے نافذ کرنے کا فیصلہ کیا۔ اس نے ایک پروٹوکول تیار کیا جس میں بہت زیادہ ڈیٹا دوسرے کے مقابلے میں ایک طرف سے بہتا ہے۔
یہ کامل نہیں ہے، لیکن یہ کام کرتا ہے۔ 256 بائٹ صفحہ کو چار حصوں میں تقسیم کیا گیا ہے، جن میں سے ہر ایک پیکٹ کے طور پر ہوا کے اوپر منتقل ہوتا ہے۔ ایک پیکٹ 125 بائٹس ڈیٹا کے علاوہ لمبائی کے لیے ایک بائٹ اور CRC کے لیے دو بائٹس رکھ سکتا ہے۔ لہذا صفحہ اور سیگمنٹ نمبر (64 سے 0 تک) کے ساتھ 3 بائٹس لمبے ٹکڑے وہاں رکھے گئے ہیں۔ وصول کرنے والے آلے میں ایک متغیر ہوتا ہے جو اسے ٹریک کرنے کی اجازت دیتا ہے کہ کتنے سیگمنٹس موصول ہوئے ہیں، اور جب چاروں پہنچ جاتے ہیں، تو بھیجنے والے آلے کو تصدیق ملتی ہے کہ پورا صفحہ موصول ہو گیا ہے۔ کوئی تصدیق نہیں ہوئی (CRC مماثل نہیں) - پورا صفحہ دوبارہ بھیجیں۔ رفتار کیبل کے ذریعے منتقل کرنے سے بھی زیادہ ہے۔ دیکھیں:
لیکن عام طور پر، اسکیچ اپ لوڈ کرنے اور اس کے ذریعے کیبل کو آلات سے منسلک کرنے کا ایک آسان طریقہ فراہم کرنا ضروری ہوگا۔ مثال کے طور پر، ایسے انٹرفیس کنورٹر کو CP2102 کے اندر رکھیں، جیسا کہ تصویر میں ہے، اور اسے بورڈ پر چپکائیں تاکہ مائیکرو USB کیبل کو جوڑنے اور منقطع کرتے وقت یہ قوت برداشت کر سکے۔
اس میں 3,3 وولٹ کا سٹیبلائزر بھی ہے (اور اسے 6 وولٹ پاور سپلائی والے ڈیوائس میں کیسے استعمال کیا جائے - اگر صرف اس میں ایک ہی سٹیبلائزر ہو، اور آپ خود بخود یہ منتخب کرنے کے لیے دو ڈائیوڈز شامل کر سکتے ہیں کہ ان میں سے کون سا ڈیوائس کو پاور کرے گا) . تینوں ایل ای ڈیز کو انٹرفیس کنورٹر بورڈ سے فروخت نہ کیا جائے، بصورت دیگر وہ ان پر کام کرتے وقت بیٹریوں کو بھی لوڈ کریں گے، اور کی بورڈ پولنگ میں بھی مداخلت کریں گے اور SPI انٹرفیس کے ساتھ فلیش میموری کے ساتھ کام کریں گے۔
کسی مقصد کا تعاقب اسے حاصل کرنے سے کہیں زیادہ دلچسپ ثابت ہوا (اور بس کے بارے میں اس مذاق کی ضرورت نہیں ہے)۔ مصنف نے AVR بوٹ لوڈرز، SPI فلیش میموری، STK500 پروٹوکول اور 802.15.4 معیار کے بارے میں بہت کچھ سیکھا۔
اوپر بیان کی گئی لائبریری کے علاوہ باقی تمام کوڈ − ہے۔
ماخذ: www.habr.com