Энэ бүхэн зохиогч хоёрдогч зах зээл дээр сонирхолтой төхөөрөмж худалдан авснаар эхэлсэн - Smart Response XE (
Эдгээр төхөөрөмжүүдийг хэдэн жилийн өмнө зогсоосон бөгөөд тус бүр нь 100-200 доллараар худалдаж авсан сургуулиуд eBay дээр 10 доллар ба түүнээс бага үнээр гарч ирж байна. Тэнд байгаа техник хангамж нь гажиг туршилт хийхэд маш тохиромжтой.
- 60 товчлууртай гар
- 384×136 нягтралтай дэлгэц, пиксел тутамд 2 бит - BC, CGA-тай төстэй, гэхдээ 4 өнгө биш, харин тод байдлын зэрэглэл
- микроконтроллер ATmega128RFA1 (128 кБ флаш санах ой, 4 кБ ROM, 16 кБ RAM, 802.15.4 дамжуулагч)
- гадаад (бүхэл бүтэн төхөөрөмж биш микроконтроллертой холбоотой) SPI интерфейстэй 1 мегабит (128 килобайт) флаш санах ой
- 4 AAA элементийн тасалгаа.
Микроконтроллерийн нэрнээс харахад энэ нь AVR гэр бүлд хамаарах нь тодорхой бөгөөд энэ нь төхөөрөмжийг Arduino-д нийцүүлэх нь энгийн ажил биш гэсэн үг юм.
Мэдээнээс
Гэхдээ зохиолч төхөөрөмж дээр тоглох биш, харин судлах боломжийг илүү их сонирхож байна.
- цуваа SPI интерфейстэй флаш санах ой
- AVR-д зориулсан ачаалагч
- 802.15.4 стандарт
Зохиогч бичихээр эхэлсэн
Энэ нь Arduino ачаалагчийг байршуулахад хангалттай боловч ноорог биш - цуваа порт тэнд холбогдоогүй тул та хэргийг нээхгүйгээр хийх боломжгүй хэвээр байна. Мөн эхний цуваа портын TX0 ба RX0 мөрүүд нь гарны матрицын санал авах шугамуудтай, тухайлбал дэлгэцийн хажуу талд байрлах функцийн товчлууруудыг санал болгодог шугамуудтай хослуулсан. Гэхдээ та юу хийж чадах вэ - зохиогч үүнийг бүтээсэн:
Тэр тэнд JTAG шугамуудыг авчирсан бөгөөд одоо батерейны тасалгааг нээх шаардлагагүй болсон. Ноорог байршуулахын тулд би хоёр цуваа портыг ижил холбогчтой холбож, шилжүүлэгч нэмсэн, учир нь батерейг суулгасан тохиолдолд төхөөрөмжийг өөр аргаар унтраах боломжгүй юм.
Гагнуурын төмөр, хутга, цавуу буутай ажиллахад нэлээд хугацаа зарцуулагдсан. Ерөнхийдөө "агаарт" ноорог байршуулах нь илүү тохиромжтой тул бид яаралтай ямар нэгэн зүйл зохион бүтээх хэрэгтэй байна.
Arduino IDE нь ноорог байршуулах програмыг ашигладаг
Энэ асуудлыг даван туулах янз бүрийн аргыг туршиж үзсэний эцэст зохиогч дараахь зүйлийг гаргаж ирэв. Энэ төхөөрөмж нь SPI интерфейстэй 128 КБ флаш санах ойтой - бид утсаар мэдээлэл хүлээн авдаг (зохиогчийн хажууд холбогчтой нэг төхөөрөмж байгаа гэдгийг санаарай), энэ санах ойг буфер болгон ашиглаж, өгөгдлийг радиогоор илгээдэг. өөр төхөөрөмж рүү суваг. Cybiko-оос мэндчилж байна.
Радио сувагтай ажиллах код, үсгийн фонтыг бичсэний дараа дуудагч 4 килобайтаас урт болсон. Тиймээс HFUSE утгыг 0xDA-аас 0xD8 болгон өөрчлөх шаардлагатай болсон. Одоо ачаалагч нь 8 килобайт хүртэл урттай байж болох бөгөөд эхлэх хаяг нь одоо 0x1E000 байна. Энэ нь Makefile-д тусгагдсан боловч бөглөхдөө үүнийг анхаарч үзэх хэрэгтэй
ATmega802.15.4RFA128 дахь 1 дамжуулагч нь анх протоколыг ашиглан ажиллахаар бүтээгдсэн.
15, 26-р суваг нь WiFi-ийн хөндлөнгийн оролцоонд хамгийн бага өртөмтгий болох нь тогтоогдсон. Зохиогч хоёр дахь сувгийг сонгосон. Анхааруулга: Орчуулагч нь ZigBee-г ийм байдлаар хялбарчлах боломжтой эсэхийг мэдэхгүй. Жаахан програмчлал хийгээд бүрэн хэрэгжүүлэх ёстой юм болов уу?
Эхний төхөөрөмж дээр STK500 протоколоор өгөгдөл дамжуулдаг хязгаарлагдмал төлөвийн машиныг хэрэгжүүлэх шаардлагатай. Ихэнх тохиолдолд дамжуулж, хүлээн авсан мессежүүд нь бие даасан байдаг боловч зарим нь өмнө нь сувгаар дамжсан мессежүүдтэй холбоотой байдаг. Харилцан ярианы тайлбарыг өгсөн болно
Энэхүү харилцан ярианы чухал бүрэлдэхүүн хэсэг нь очих төхөөрөмжийн флаш санах ой руу бичих зорилготой пакетуудыг дамжуулах явдал юм. AVR гэр бүлийн энгийн микроконтроллеруудын хувьд хуудасны хэмжээ нь 128 байт, харин ATmega128RFA1-ийн хувьд 256. SPI протоколоор холбогдсон флаш санах ойн хувьд ч мөн адил байна. Эхний төхөөрөмж дээрх програм нь ноорог байршуулахдаа тэр даруй хоёр дахь руу шилжүүлдэггүй, харин энэ санах ойд бичдэг. Arduino IDE нь оруулгын зөв эсэхийг шалгахад тэнд бичсэн зүйлийг илгээдэг. Одоо бид хүлээн авсан өгөгдлийг радио сувгаар хоёр дахь төхөөрөмж рүү дамжуулах хэрэгтэй. Үүний зэрэгцээ хүлээн авахаас дамжуулах, буцах руу шилжих нь ихэвчлэн тохиолддог. STK500 протокол нь сааталд хайхрамжгүй ханддаг боловч өгөгдлийн алдагдлыг тэсвэрлэдэггүй (хачирхалтай боловч саатал нь өгөгдөл дамжуулахад нөлөөлдөг гэж дээр хэлсэн). Мөн утасгүй дамжуулах явцад алдагдал гарах нь гарцаагүй. ATmega128RFA1 нь шилжүүлгийн зөв эсэхэд эргэлзэж байгаа тохиолдолд давтан хүсэлтийн суурилуулсан техник хангамжтай байдаг боловч зохиогч өөрөө програм хангамжид үүнийг хэрэгжүүлэхээр шийдсэн. Тэрээр нэг талаараа илүү их мэдээлэл урсдаг протоколыг боловсруулсан.
Энэ нь төгс биш, гэхдээ энэ нь ажилладаг. 256 байт хуудас нь дөрвөн сегментэд хуваагддаг бөгөөд тус бүр нь пакет хэлбэрээр агаараар дамждаг. Пакет нь уртаараа нэг байт, CRC-д хоёр байт хүртэл 125 байт өгөгдөл багтаах боломжтой. Тиймээс тэнд хуудас, сегментийн дугаар (64-ээс 0 хүртэл) 3 байт урттай хэсгүүдийг байрлуулна. Хүлээн авагч төхөөрөмж нь хэдэн сегмент хүлээн авсныг хянах боломжтой хувьсагчтай бөгөөд дөрвүүлээ ирэхэд илгээгч төхөөрөмж бүх хуудсыг хүлээн авсан гэсэн баталгааг хүлээн авдаг. Баталгаажуулалт байхгүй (CRC тохирохгүй) - хуудсыг бүхэлд нь дахин илгээнэ үү. Хурд нь кабелиар дамжуулахаас ч илүү байна. Харах:
Гэхдээ ерөнхийдөө ноорог зураг байршуулах төхөөрөмжид кабелийг холбоход тохиромжтой арга замыг хангах шаардлагатай болно. Жишээлбэл, CP2102 дээрх зураг дээрх шиг интерфэйс хувиргагчийг дотор нь байрлуулж, Micro USB кабелийг холбож, салгах үед хүчийг тэсвэрлэхийн тулд самбар дээр наа.
Энэ нь мөн 3,3 вольтын тогтворжуулагчтай (мөн үүнийг 6 вольтын цахилгаан хангамжтай төхөөрөмжид хэрхэн ашиглах вэ - хэрэв энэ нь ижил тогтворжуулагчтай бол та хоёр диод нэмж, тэдгээрийн аль нь төхөөрөмжийг тэжээхийг автоматаар сонгох боломжтой) . Бүх гурван LED-ийг интерфэйс хөрвүүлэгч самбараас салгах ёстой, эс тэгвээс тэдгээр нь ажиллахдаа батерейг цэнэглэхээс гадна гарны санал хураалтад саад болж, SPI интерфейстэй флаш санах ойтой ажиллах болно.
Зорилгодоо хүрэх нь түүнд хүрэхээс ч илүү сонирхолтой байсан (автобусны тухай хошигнол хэрэггүй). Зохиогч AVR ачаалагч, SPI флаш санах ой, STK500 протокол, 802.15.4 стандартын талаар маш их зүйлийг мэдэж авсан.
Дээр дурдсан номын сангаас гадна бусад бүх код нь -
Эх сурвалж: www.habr.com