Mundarija:

Arduino UNO Logic Sniffer: 8 qadam (rasmlar bilan)
Arduino UNO Logic Sniffer: 8 qadam (rasmlar bilan)

Video: Arduino UNO Logic Sniffer: 8 qadam (rasmlar bilan)

Video: Arduino UNO Logic Sniffer: 8 qadam (rasmlar bilan)
Video: How and Why to Use a Logic Analyzer 2024, Iyul
Anonim
Arduino UNO Logic Sniffer
Arduino UNO Logic Sniffer

Bu loyiha oddiy tajriba sifatida boshlandi. Boshqa loyiha uchun ATMEGA328P ma'lumotlar varaqasi ustida olib borgan tadqiqotlarim davomida men qiziqroq narsani topdim. Taymer1 kirishni yozish birligi. Bu bizning Arduino UNO mikrokontroleriga signal cheklovini aniqlash, vaqt tamg'asini saqlash va uzilishlarni ishga tushirish imkonini beradi.

Keyin qaysi ilovada foydali bo'lishi mumkinligi va uni qanday sinovdan o'tkazish kerakligi haqida o'yladim. Men bir muncha vaqtdan beri mantiqiy analizatorni olishni xohlaganim uchun, men bu funktsiyani sinab ko'rish uchun Arduino UNO boshqaruv kengashiga tatbiq qilishga urinib ko'rdim va undan yaxshi natijalarga erisha olamizmi, deb qaror qildim.

Men bu fikrga ega bo'lgan yagona odam emasman, va siz ularni "Arduino Logic Analyzer" ni googling orqali topishingiz mumkin. Loyihaning boshida, bu tajriba sifatida boshlanganida, men buni odamlar allaqachon amalga oshirganidan bexabar edim va bu kichik apparat yordamida erishilgan yaxshi natijalarga qoyil qoldim. Biroq, men kirish moslamasi yordamida boshqa loyihani topa olmadim, shuning uchun agar siz buni ko'rgan bo'lsangiz, menga xabar bering!

Xulosa qilib aytganda, mening mantiqiy analizatorim:

  • Bitta kanalga ega bo'ling,
  • Grafik interfeysga ega bo'ling,
  • USB orqali interfeys bilan bog'laning,
  • Arduino UNO taxtasida ishlang.

Oxir -oqibat u 800 ta xotira chuqurligiga ega bo'ladi va 115200 UOD xabarini muvaffaqiyatli qabul qila oladi (men uni yuqori tezlikda sinab ko'rmaganman).

Bu ko'rsatma ushbu loyihaning "qanday ishlaydi" va "undan qanday foydalanish" qismlarini o'z ichiga oladi, shuning uchun texnik tomondan qiziqmaganlar uchun siz to'g'ridan -to'g'ri 4 -bosqichga o'tishingiz mumkin.

Ta'minotlar

Men analizatorni iloji boricha sodda saqlashni xohlardim, shuning uchun juda kam apparat talab qilinadi.

Sizga kerak bo'ladi:

  • Arduino UNO kengashi (yoki ATMEGA328P MCU -ga tayangan holda ekvivalenti),
  • Kompyuter,
  • Nosozliklarni tuzatish uchun biror narsa (boshqa Arduino UNO kengashi ba'zi testlarni bajarish uchun yaxshi ishlaydi).

Arduino UNO va veb -interfeys uchun kodni bu erda topishingiz mumkin, sizga p5.serialcontrol va PulseView dasturi kerak bo'ladi.

1 -qadam: ishlash printsipi

Ishlash printsipi
Ishlash printsipi

Fikr oddiy. Siz suratga olish parametrlarini tanlaysiz va "sotib olish" tugmasini bosing. Veb -interfeys ularni p5.serialcontrol dasturiga yuboradi, bu bizga ketma -ket interfeysni brauzerdan ishlatishga imkon beradi, chunki u unga to'g'ridan -to'g'ri kira olmaydi. P5.serialcontrol dasturi keyinchalik ma'lumotlarni Arduino UNO taxtasiga uzatadi, u ma'lumotlarni oladi va ularni xuddi shu yo'l orqali interfeysga qaytaradi.

Oson! Xo'sh … Men Inson/Mashina interfeysini dasturlash yoki veb -texnologiyalarni yaxshi bilmasligim uchun, meniki biroz chirkin va arzimas. Lekin bu menga yozishni boshlashga va o'z ma'lumotimni qaytarib olishga imkon beradi, bu aynan shu uchun mo'ljallangan, shuning uchun menimcha, bu yaxshi. Keyinchalik jiddiy tahlil qilish uchun men o'z yozuvlarimni PulseView -ga import qilaman, uni ishlatish oson va yaxshi xususiyatlar va protokol dekoderlari to'plamini taklif qiladi, buni keyinroq ko'rib chiqamiz.

Arduino UNO -ning kirishni yozish moslamasi har xil soat bo'linmalaridan foydalangan holda sozlanishi mumkin, bu esa piksellar sonini kamaytiradi, lekin to'lg'azishdan oldin kechikishni oshiradi. Bu, shuningdek, ma'lumotlarni yozib olishni boshlash uchun ko'tarilish, tushish yoki ikkala chetini ham ishga solishi mumkin.

2 -qadam: Arduino UNO eskizi

Arduino UNO eskizi
Arduino UNO eskizi

Men eskizni Arduino IDE bilan yozdim va tuzdim. Men dastlab Timer1ni "Oddiy" ish rejimida sozlashdan boshladim, uning TCCR1A va TCCR1B registrlariga yozish orqali (). Keyin men kelajakda undan foydalanishni biroz osonlashtiradigan ba'zi funktsiyalarni qildim, masalan, "setTim1PSC ()" deb nomlangan soat bo'linmasini o'rnatish kabi. Men, shuningdek, Timer1 kirish ta'qib qilish birligi va to'lg'azish uzilishlarini yoqish va o'chirish uchun funktsiyalarni yozdim.

Men olingan ma'lumotlarni saqlaydigan "namunalar" qatorini qo'shdim. Bu men kompilyatorni optimallashtirishga va uni birinchi marta kompilyatsiya qilishda bo'lgani kabi o'chirishga yo'l qo'ymaslik uchun "o'zgaruvchan" deb belgilagan global qator. Men uni "uint16_t" qatori sifatida aniqladim, chunki Timer1 ham 16bit, uzunligi 810. Biz 800 qiymatga yozishni to'xtatamiz, lekin aniq tezlik sabablari bilan uzilishlar tashqarisida o'tkazilganda, men 10 ni saqlashni tanladim. to'ldirishni oldini olish uchun ko'proq qiymatlar. Kodning qolgan qismi uchun bir nechta qo'shimcha o'zgaruvchilar bilan, eskizda 1313 bayt (88%) xotira ishlatiladi va bizga 235 bayt bo'sh RAM qoladi. Biz allaqachon xotiradan yuqori darajada foydalanmoqdamiz va men qo'shimcha namuna hajmini qo'shishni xohlamadim, chunki xotira maydoni juda kam bo'lganligi sababli g'alati xatti -harakatlarga olib kelishi mumkin.

Har doim bajarilish tezligini oshirishga intilayotganda, bajarilish vaqtini minimal darajada qisqartirish uchun ifoda ichidagi iboralar o'rniga funktsiya ko'rsatgichlaridan foydalanardim. Qo'lga olish pinasi har doim Arduino UNO 8 raqami bo'ladi, chunki u Timer1 -ning kirish moslamasiga ulangan yagona.

Rasmga olish jarayoni yuqoridagi rasmda ko'rsatilgan. Bu Arduino UNO kerakli UART ma'lumotlar ramkasini olgandan so'ng boshlanadi, kerakli ta'qib qilish sozlamalari. Keyin biz ushbu sozlamalarni tanlangan chekkada yozib olish uchun to'g'ri registrlarni sozlash orqali qayta ishlaymiz va to'g'ri soat bo'linmasidan foydalanamiz. Keyin biz signalning birinchi chekkasini aniqlash uchun PCINT0 (pin o'zgarishi) uzilishini yoqamiz. Biz uni olganimizda, biz Timer1 qiymatini tiklaymiz, PCINT0 uzilishini o'chirib qo'yamiz va ICU (Input Capture Unit) uzilishini yoqamiz. Shu paytdan boshlab, signalning har qanday pasayishi/ko'tarilishi (tanlangan konfiguratsiyaga bog'liq holda) kirishni yozish birligini ishga tushiradi va shu bilan ICR1 registrida ushbu hodisaning vaqt tamg'asini saqlaydi va uzilishni amalga oshiradi. Bu tanaffusda biz "namunalar" qatoriga ICR1 registr qiymatini qo'yamiz va keyingi suratga olish uchun indeksni oshiramiz. Timer1 yoki massiv oshib ketganda, biz ta'qib qilishni to'xtatamiz va ma'lumotlarni UART orqali veb -interfeysga qaytaramiz.

Men tortishishni boshlash uchun pinni almashtirishni to'xtatishga qaror qildim, chunki kirish moslamasi ikkalasini emas, balki faqat bir yoki boshqa chekkasida tasvirga olish imkonini beradi. Ikkala qirrasini ham qo'lga kiritmoqchi bo'lganingizda, bu ham muammo tug'diradi. Mening yechimim, har bir namunadagi kirishni ta'qib qilish registrida chekka tanlashni boshqaruvchi bitni teskari o'zgartirishdir. Shunday qilib, biz ijro etish tezligini yo'qotamiz, lekin biz hali ham kirish moslamasining funktsiyalaridan foydalanishimiz mumkin.

Shunday qilib, siz sezganingizdek, biz har bir namunani aniq belgilangan vaqt oralig'ida qo'lga kiritmaymiz, lekin biz signal o'tishi sodir bo'lgan lahzani qo'lga kiritamiz. Agar biz har bir soat tsiklida bitta namunani olsak, hatto eng yuqori soat bo'linishi bo'lsa ham, biz buintni taxminan 0.1 soniyada to'ldirgan bo'lar edik, chunki uint8_t turini ishlatardik, deb taxmin qilardik, bu xotirada struktura ishlatmasdan eng kichigi.

3 -qadam: Veb -interfeys va P5.js

Veb -interfeys va P5.js
Veb -interfeys va P5.js

Sarlavhadan ko'rinib turibdiki, veb -interfeys p5.js. yordamida yaratilgan. Buni bilmaganlar uchun, men sizga veb -saytni tekshirishni tavsiya qilaman, chunki bu juda yaxshi kutubxona. U qayta ishlashga asoslangan, ulardan foydalanish oson, yaxshi natijalarga juda tez erishishga imkon beradi va yaxshi hujjatlashtirilgan. Aynan shu sabablarga ko'ra men ushbu kutubxonani tanladim. Men shuningdek, menyular uchun quicksettings.js kutubxonasidan, grafica.js -dan ma'lumotlarni tuzish uchun va p5.serialport kutubxonasidan Arduino UNO bilan bog'lanish uchun foydalanardim.

Men interfeysga ko'p vaqt sarflamayman, chunki men uni faqat ma'lumotlarni oldindan ko'rish va sozlamalarni boshqarish uchun yaratganman, chunki bu mening tajribam mavzusi emas edi. Ammo men keyingi qismlarda butun tizimdan foydalanishning turli bosqichlarini tushuntiraman va shu bilan mavjud bo'lgan turli xil boshqaruv elementlarini tushuntiraman.

4 -qadam: tizimni sozlash

Birinchi narsa, agar Arduino UNO va interfeys kodini yuklab olinmagan bo'lsa. Siz Arduino UNO taxtasini Arduino IDE orqali "UNO_LS.ino" eskizi bilan qayta dasturlashingiz mumkin.

Siz p5.serialcontrol dasturini github omboridan yuklab olishingiz kerak edi. Siz zip faylini operatsion tizimingizga mos ravishda olishingiz kerak (men uni faqat Windowsda sinab ko'rdim). Zipni papkadan chiqarib oling, undagi bajariladigan faylni ishga tushiring va shunday qoldiring. Hech qanday ketma -ket portga ulanishga urinmang, uni fonda ishlayotgan holatda qoldiring, u o'rni sifatida ishlatiladi.

"Interfeys" papkasini oching. Siz "index.html" nomli faylni topishingiz kerak. Uni brauzerda oching, bu veb -interfeys.

Va bu hammasi! Qo'shimcha kutubxonalarni yuklab olishingiz shart emas, hamma narsa men taqdim etgan paketga kiritilishi kerak.

5 -qadam: ulanish, konfiguratsiya va sotib olish

Ulanish, konfiguratsiya va sotib olish
Ulanish, konfiguratsiya va sotib olish

Interfeysni Arduino UNO kartasiga ulash uchun ro'yxatdagi tegishli portni tanlang va "Ochish" tugmasini bosing. Agar operatsiya muvaffaqiyatli bo'lsa, "holat" xabarida "COMX ochildi" kabi narsa ko'rsatilishi kerak.

Endi siz suratga olish variantlarini tanlashingiz mumkin. Birinchidan, chekka tanlov. Sizga har doim "Ikkalasini" ham ishlatishni maslahat beraman, chunki bu sizga haqiqiy signalning eng yaxshi ko'rinishini beradi. Agar "Ikkala" sozlamasi ham signalni ushlab tura olmasa (masalan, signal chastotasi juda yuqori bo'lsa), siz ko'rmoqchi bo'lgan signalga qarab "ko'tarilish" yoki "yiqilish" chekkasini o'rnatishga harakat qilishingiz mumkin.

Ikkinchi parametr - bu soat taqsimoti. Bu sizga signalni yozib olish imkoniyatini beradi. Siz "8", "64", "256" va "1024" ga bo'linish koeffitsientini belgilashingiz mumkin. Arduino UNO platasi mikrokontrolderni sozlash uchun 16 MGts kvartsdan foydalanadi, shuning uchun namuna olish chastotasi "16 MGts/bo'linish koeffitsienti" bo'ladi. Bu sozlamaga ehtiyot bo'ling, chunki u signalni qancha vaqt ushlab turishingizni ham aniqlaydi. Taymer1 16 bitli taymer bo'lgani uchun, to'lib ketishdan oldin ruxsat berilgan "2^16)*(bo'linish koeffitsienti)/16 MGts" bo'ladi. Siz tanlagan sozlamalarga qarab, u ~ 33ms va 4.2s oralig'ida bo'ladi. Tanlovingizni yodingizda saqlang, keyinroq sizga kerak bo'ladi.

Oxirgi sozlash - bu shovqinni to'xtatuvchi. Men juda ko'p sinov o'tkazmadim va 99% hollarda sizga kerak bo'lmaydi, shuning uchun uni tekshirmasdan qoldiring. Hali ham qiziquvchilar uchun siz ATMEGA328P ma'lumotlar jadvalining Taymer/Hisoblagich1 bo'limida shovqinni kamaytiruvchi vositani qidirishingiz mumkin.

Arduino UNO platasining 8 -pinini signalingizga ulashni unutmang va simlarni sinov zanjiri uchun ham, mantiq analizatori uchun ham bir xil kuchlanish moslamasiga ega bo'lish uchun simlarni ulang. Agar siz yer izolyatsiyasiga muhtoj bo'lsangiz yoki 5V dan farqli signallarni o'lchashingiz kerak bo'lsa, ehtimol siz o'zingizning kontaktlarning zanglashiga opto-izolyatorni qo'shishingiz kerak bo'ladi.

Hamma narsa to'g'ri sozlanganidan so'ng, "Qabul qilish" tugmasini bosishingiz mumkin.

6 -qadam: natijalarni olish va CSV ma'lumotlarini eksport qilish

Natijalarni yozib olish va CSV ma'lumotlarini eksport qilish
Natijalarni yozib olish va CSV ma'lumotlarini eksport qilish

Arduino UNO qo'lga kiritishni tugatgandan so'ng, u avtomatik ravishda veb -interfeysga ma'lumotlarni yuboradi, bu ularni tuzadi. Siz o'ng slayder yordamida kattalashtirishingiz yoki kichraytirishingiz va pastki qismidagi namunalar bo'ylab harakat qilishingiz mumkin.

Syujet sizga faqat oldindan ko'rishni beradi va unda ma'lumotlarni tahlil qilish vositalari yo'q. Shunday qilib, ma'lumotlaringizni qo'shimcha tahlil qilish uchun siz ularni PulseView -ga import qilishingiz kerak bo'ladi.

Birinchi qadam, barcha ma'lumotlaringizni o'z ichiga olgan CSV faylini eksport qilishdir. Buning uchun veb -interfeysdan "Eksport" tugmasini bosish kifoya. Agar so'ralsa, faylingizni ma'lum joyga saqlang.

Endi PulseView -ni oching. Yuqori menyu satrida "Ochish" (papka belgisi) ni bosing va "Vergul bilan ajratilgan qiymatlarni import qilish …" -ni tanlang. Ma'lumotlaringizni o'z ichiga olgan ilgari yaratilgan csv faylini tanlang.

Kichkina oyna paydo bo'ladi. Hamma narsani avvalgidek qoldiring, shunchaki "Namuna olish" parametrini suratga olish uchun tanlangan soat bo'linish koeffitsientiga ko'ra o'zgartirish kerak. Namuna olish chastotasi "16 MGts/(bo'linish koeffitsienti)" bo'ladi. Keyin "Ok" tugmasini bosing, sizning signalingiz ekranda ko'rinishi kerak.

7 -qadam: PulseView signalini tahlil qilish

PulseView signalini tahlil qilish
PulseView signalini tahlil qilish

PulseView ko'plab protokol dekoderlariga ega. Ularga kirish uchun yuqori menyu satridagi "Protokol dekoderini qo'shish" -ni bosing (eng o'ng asbob). Tajriba qilish uchun men oddiy UART xabarini 9600 bodda yubordim, shuning uchun "UART" ni izladim.

U chapda yorlig'i bo'lgan kanalni qo'shadi (xuddi sizning ma'lumotlaringiz kabi). Tegni bosish orqali siz dekoderning sozlamalarini o'zgartirishingiz mumkin. To'g'ri xabarlarni tanlagandan so'ng, men test qurilmam yuborgan xabarni qaytarib oldim. Bu shuni ko'rsatadiki, butun tizim kutilganidek ishlaydi.

8 -qadam: Xulosa

Xulosa
Xulosa

Agar loyiha boshida tajriba bo'lsa ham, men erishgan natijalarimdan mamnunman. Men "Ikkala" chekkali rejimda 115200 baytgacha bo'lgan UART signallarini muammosiz tanlay oldim va hatto "Yiqilish" chekkali rejimida 230400 bodgacha o'tishga muvaffaq bo'ldim. Siz yuqoridagi rasmda mening test sozlamalarimni ko'rishingiz mumkin.

Mening dasturim bir nechta kamchiliklarga ega, chunki u bir vaqtning o'zida faqat bitta signalni ushlab turishi mumkin, chunki faqat Arduino UNO ning 8 -pinli "kirish ta'qib qilish qobiliyatiga ega". Agar siz ko'proq kanalli Arduino mantiq analizatorini qidirmoqchi bo'lsangiz, Catoblepas -ni tekshiring.

Siz Arduino UNO yuqori chastotali (ba'zi MGts) signallarni qabul qila oladi deb umid qila olmaysiz, chunki u faqat 16 MGts chastotada ishlaydi (agar kimdir buni qilgan bo'lsa, men uning usulini ko'rishni xohlardim). Ammo, men hali ham ATMEGA328P mikrokontroleridan chiqishimiz mumkin bo'lgan natijalardan hayratdaman.

Men kod ustida ko'p ish qilaman deb o'ylamayman. Men tajribalar o'tkazdim va kerakli natijalarga erishdim. Ammo, agar kimdir o'z hissasini qo'shmoqchi bo'lsa, mening kodimni to'liq yoki qisman o'zgartirishi va tarqatishi mumkin.

Bu mening birinchi ko'rsatma edi va menimcha, uzoq. Umid qilamanki, siz uchun qiziqarli o'qish bo'ldi.

Agar sizda biron bir savol bo'lsa yoki xato topsangiz, menga xabar bering!

Tavsiya: