Mundarija:
- Ta'minotlar
- 1 -qadam: ishlash printsipi
- 2 -qadam: Arduino UNO eskizi
- 3 -qadam: Veb -interfeys va P5.js
- 4 -qadam: tizimni sozlash
- 5 -qadam: ulanish, konfiguratsiya va sotib olish
- 6 -qadam: natijalarni olish va CSV ma'lumotlarini eksport qilish
- 7 -qadam: PulseView signalini tahlil qilish
- 8 -qadam: Xulosa
Video: Arduino UNO Logic Sniffer: 8 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
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
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
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
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
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
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 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
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:
NaTaLia ob -havo stantsiyasi: Arduino quyosh energiyasi bilan ishlaydigan ob -havo stantsiyasi to'g'ri yo'l bilan amalga oshirildi: 8 qadam (rasmlar bilan)
NaTaLia ob -havo stantsiyasi: Arduino quyosh energiyasi bilan ishlaydigan ob -havo stantsiyasi to'g'ri yo'lga qo'yildi: 1 yil davomida 2 xil joyda muvaffaqiyatli ishlaganimdan so'ng, men quyosh energiyasi bilan ishlaydigan ob -havo stantsiyasining loyiha rejalari bilan bo'lishaman va uning qanday qilib uzoq vaqt yashay oladigan tizimga aylanganini tushuntiraman. quyosh energiyasidan o'tgan davrlar. Agar ergashsangiz
Zarrachalar sniffer: 6 qadam (rasmlar bilan)
Zarrachalar sniffer: PM2.5ni baholash bo'yicha oldingi loyihalar bilan ishlayotganda, men zarrachalarning ifloslanishining manbalarini topa olmaslikning kamchiliklarini payqadim. Munitsipalitetlar va sun'iy yo'ldoshlardan olingan namunalarning aksariyati keng bo'lmagan manbalarni to'playdi
Arduino Nano Logic Probe: 17 qadam (rasmlar bilan)
Arduino Nano Logic Probe: Bu loyiha mening Arduino Logic Probe -ning yangi versiyasi, lekin hozir Arduino Uno o'rniga Arduino Nano bilan qurilgan. 3 xonali displey, bir nechta rezistorlar va Arduino Nano deyarli bu qiziqarli loyihaning tarkibiy qismlari
TTL Logic Level Tester qalam: 5 qadam (rasmlar bilan)
TTL Logic Level Tester Pen: Polarity Tester Pen & TTL Logic Level Tester Pen. Bu qutbli tester qalam bir oz farq qiladi, chunki u TTL darajasini sinab ko'radi va 7 segmentli displeyda holatini harflar yordamida ko'rsatadi: " H " (Yuqori) mantiq darajasi uchun "
Arduino Uno yordamida LED matritsali massivni boshqarish (Arduino bilan ishlaydigan robotli yuz): 4 qadam (rasmlar bilan)
Arduino Uno (Arduino Powered Robot Face) yordamida LED matritsali massivni boshqarish: Bu ko'rsatma Arduino Uno yordamida 8x8 LED matritsalar qatorini qanday boshqarishni ko'rsatadi. Ushbu qo'llanma o'z loyihalaringiz uchun oddiy (va nisbatan arzon displey) yaratish uchun ishlatilishi mumkin. Shu tarzda siz harflar, raqamlar yoki maxsus animatsiyalarni ko'rsatishingiz mumkin