Orodha ya maudhui:

Arduino UNO Logic Sniffer: Hatua 8 (na Picha)
Arduino UNO Logic Sniffer: Hatua 8 (na Picha)

Video: Arduino UNO Logic Sniffer: Hatua 8 (na Picha)

Video: Arduino UNO Logic Sniffer: Hatua 8 (na Picha)
Video: CS50 2015 – 10-я неделя 2024, Julai
Anonim
Arduino UNO Mantiki Sniffer
Arduino UNO Mantiki Sniffer

Mradi huu ulianza kama jaribio rahisi. Wakati wa utafiti wangu juu ya data ya ATMEGA328P ya mradi mwingine, nilipata kitu cha kufurahisha. Kitengo cha Kukamata Pembejeo cha Timer1. Inaruhusu microcontroller wetu wa Arduino UNO kugundua ukingo wa ishara, kuhifadhi muhuri wa muda, na kusababisha usumbufu, yote katika vifaa.

Kisha nikajiuliza ni programu ipi inaweza kuwa na faida, na jinsi ya kuipima. Kama ninataka kupata analyzer ya mantiki kwa muda sasa, niliamua kujaribu kutekeleza moja katika bodi yangu ya Arduino UNO, kujaribu tu huduma hiyo, na kuona ikiwa tunaweza kupata matokeo mazuri kutoka kwake.

Sio mimi peke yangu ambaye nilikuwa na wazo hili, na utapata mengi yao kwa kupiga tu "Arduino Logic Analyzer". Mwanzoni mwa mradi, kwa kuwa ulianza tu kama jaribio, sikujua hata kwamba watu tayari wameufanya, na nilivutiwa na matokeo mazuri waliyopata na kipande hiki kidogo cha vifaa. Walakini, sikuweza kupata mradi mwingine kwa kutumia kitengo cha kukamata pembejeo, kwa hivyo ikiwa tayari umeona hii, nijulishe!

Kwa muhtasari, mchambuzi wangu wa mantiki:

  • Kuwa na kituo kimoja,
  • Kuwa na kielelezo cha picha,
  • Wasiliana na kiolesura kupitia USB,
  • Endesha kwenye bodi ya Arduino UNO.

Hatimaye itakuwa na kina cha kumbukumbu za sampuli 800, na ingeweza kufanikiwa kunasa ujumbe wa UART wa bauds 115200 (sikuijaribu kwa kasi ya juu).

Mafundisho haya yana sehemu zote "jinsi inavyofanya kazi" na "jinsi ya kuitumia" ya mradi huu, kwa hivyo kwa wale ambao hawapendi upande wa kiufundi, unaweza kuruka moja kwa moja hadi hatua ya 4.

Vifaa

Nilitaka kuweka analyzer rahisi iwezekanavyo, kwa hivyo kuhitaji vifaa vichache sana.

Utahitaji:

  • Bodi ya UNU ya Arduino (au sawa kama inategemea ATMEGA328P MCU),
  • Kompyuta,
  • Kitu cha kurekebisha (bodi nyingine ya Arduino UNO inafanya kazi vizuri kufanya majaribio kadhaa).

Nambari ya Arduino UNO na kiolesura cha wavuti zinaweza kupatikana hapa. Utahitaji pia p5.serialcontrol, na programu ya PulseView.

Hatua ya 1: Kanuni ya Kufanya kazi

Kanuni ya Kufanya kazi
Kanuni ya Kufanya kazi

Wazo ni rahisi. Unachagua mipangilio ya kukamata, na bonyeza "kupata". Muunganisho wa wavuti utawatuma kwa programu ya p5.serialcontrol, ambayo inatuwezesha kutumia kiolesura cha serial kutoka kwa kivinjari, kwani haiwezi kuipata moja kwa moja. Programu ya p5.serialcontrol kisha inapeleka habari kwa bodi ya Arduino UNO, ambayo inakamata data, na kuzirudisha kwenye kiolesura kupitia njia ile ile.

Rahisi! Vizuri… Kwa kuwa mimi si mzuri sana katika programu ya Kiolesura cha Binadamu / Mashine au teknolojia za wavuti, yangu hakika ni mbaya na ni mbaya. Lakini inaniruhusu kuanza kukamata na kurudisha data yangu nyuma, ambayo ndio iliyoundwa kwa hiyo, kwa hivyo nadhani ni sawa. Kwa kazi kubwa zaidi ya uchambuzi, ninaingiza rekodi zangu kwenye PulseView, ambayo ni rahisi kutumia na inatoa seti nzuri ya huduma na visimbuzi vya itifaki, kama tutakavyoona baadaye.

Kitengo cha kukamata pembejeo cha Arduino UNO kinaweza kusanidiwa kutumia mgawanyiko tofauti wa saa, na hivyo kupunguza azimio, lakini kuongeza ucheleweshaji kabla ya kufurika. Inaweza pia kusababisha kuongezeka, kushuka au kingo zote mbili kuanza kukamata data.

Hatua ya 2: Mchoro wa Arduino UNO

Mchoro wa Arduino UNO
Mchoro wa Arduino UNO

Niliandika na kukusanya mchoro na Arduino IDE. Nilianza kwa kuanzisha Timer1 katika hali ya "Kawaida" kwa kuandika kwa sajili zake za TCCR1A na TCCR1B katika usanidi (). Kisha nikafanya kazi kadhaa kupunguza matumizi yake katika siku zijazo, kama ile ya kuweka sehemu ya saa inayoitwa "setTim1PSC ()". Niliandika pia kazi kuamsha na kuzima kitengo cha kukamata pembejeo cha Timer1 na usumbufu wa kufurika.

Niliongeza safu ya "sampuli", ambayo itashikilia data iliyopatikana. Ni safu ya ulimwengu ambayo niliiweka kuwa "tete" kuzuia mkusanyaji atengeneze uboreshaji na kuiweka kwa kasi, kama ilivyokuwa ikifanya wakati wa mkusanyiko wangu wa kwanza. Niliielezea kama safu ya "uint16_t", kwani Timer1 pia ni 16bit, na urefu wa 810. Tunaacha kukamata kwa maadili 800, lakini kama jaribio linafanywa nje ya usumbufu kwa sababu za kasi ya wazi, nilichagua kushika 10 maadili zaidi kuzuia kufurika. Na vigeuzi vichache vya ziada kwa nambari yote, mchoro unatumia baiti 1313 (88%) ya kumbukumbu, ikituacha na ka 235 za RAM ya bure. Tuko tayari katika utumiaji mkubwa wa kumbukumbu, na sikutaka kuongeza uwezo zaidi wa sampuli, kwani inaweza kusababisha tabia za kushangaza kwa sababu ya nafasi chache ya kumbukumbu.

Katika hamu yangu ya kuongeza kasi ya utekelezaji kila wakati, nilitumia viashiria vya kazi badala ya ikiwa taarifa ndani ya vipingamizi, ili kupunguza muda wao wa utekelezaji. Pini ya kukamata siku zote itakuwa Arduino UNO nambari 8, kwani ndiyo pekee iliyounganishwa na kitengo cha kukamata pembejeo cha Timer1.

Mchakato wa kukamata umeonyeshwa kwenye picha hapo juu. Huanza wakati Arduino UNO inapokea fremu halali ya data ya UART, iliyo na mipangilio ya kukamata inayotaka. Tunashughulikia mipangilio hiyo kwa kusanikisha sajili sahihi za kunasa kwenye makali iliyochaguliwa, na tumia mgawanyiko wa saa sahihi. Kisha tunawezesha PCINT0 (mabadiliko ya pini) kukatiza kugundua ukingo wa ishara ya kwanza. Tunapoipata, tunaweka upya thamani ya Timer1, kulemaza PCINT0 kukatiza, na kuwezesha usumbufu wa ICU (Input Capture Unit). Kuanzia wakati huo, makali yoyote ya kushuka / kupanda kwenye ishara (kulingana na usanidi uliochaguliwa), itasababisha kitengo cha kukamata pembejeo, na hivyo kuokoa muhuri wa tukio hili kwenye sajili ya ICR1, na kutekeleza usumbufu. Katika usumbufu huu tunaweka thamani ya rejista ya ICR1 katika safu yetu ya "sampuli", na kuongeza index kwa kukamata ijayo. Wakati Timer1 au safu inafurika, tunalemaza kukamata kukamata, na kutuma data kurudi kwenye kiolesura cha wavuti kupitia UART.

Niliamua kutumia kukatiza mabadiliko ya pini ili kuchochea kukamata, kwani kitengo cha kukamata pembejeo kinaruhusu tu kunasa kwa makali moja au nyingine, sio zote mbili. Pia husababisha shida wakati unataka kunasa kingo zote mbili. Suluhisho langu basi itakuwa kugeuza kidogo ambayo inadhibiti uteuzi wa makali kwenye rejista ya kudhibiti kukamata pembejeo kwenye kila sampuli inayopatikana. Kwa njia hiyo tunafunguka kwa kasi ya utekelezaji, lakini bado tunaweza kutumia vitendaji vya kitengo cha kukamata pembejeo.

Kwa hivyo, kama unaweza kuwa umeona, hatuchukui kila sampuli kwa vipindi vya muda uliowekwa, lakini tunakamata wakati ambapo mabadiliko ya ishara hufanyika. Ikiwa tungekamata sampuli moja kwa kila mzunguko wa saa, hata na mgawanyiko wa saa ya juu zaidi, tungejaza bafa kwa takriban 0.1s, tukidhani kuwa tunatumia aina ya uint8_t, ambayo ni ndogo kabisa kwenye kumbukumbu bila kutumia structs.

Hatua ya 3: Kiolesura cha Wavuti na P5.js

Kiolesura cha Wavuti na P5.js
Kiolesura cha Wavuti na P5.js

Kama kichwa kinamaanisha, kiolesura cha wavuti kilifanywa kwa msaada wa p5.js. Kwa wale ambao hawaijui tayari, ninakushauri sana uende uangalie wavuti, kwani ni maktaba nzuri sana. Inategemea Usindikaji, ni rahisi kutumia, hukuruhusu kupata matokeo mazuri haraka sana, na imeandikwa vizuri. Ni kwa sababu hizo zote kwamba nilichagua maktaba hii. Nilitumia pia maktaba ya quicksettings.js kwa menyu, grafica.js moja kupanga data yangu, na maktaba ya p5.serialport kuwasiliana na Arduino UNO.

Sitatumia muda mwingi kwenye kiolesura, kwani niliiunda tu kwa hakiki ya data na udhibiti wa mipangilio, na pia kwa sababu haikuwa mada ya jaribio langu hata kidogo. Hata hivyo nitaelezea katika sehemu zifuatazo hatua tofauti za kutumia mfumo mzima, na hivyo kuelezea vidhibiti anuwai.

Hatua ya 4: Usanidi wa Mfumo

Jambo la kwanza ni kupakua Arduino UNO na nambari ya kiolesura hapa ikiwa haijafanywa tayari. Kisha unaweza kupanga upya bodi yako ya Arduino UNO na mchoro wa "UNO_LS.ino" kupitia IDE ya Arduino.

Unapaswa kupakua programu ya p5.serialcontrol kutoka kwa github. Lazima upate faili ya zip inayofanana na mfumo wako wa uendeshaji (niliijaribu tu kwenye Windows). Toa zip kwenye folda, anza inayoweza kutekelezwa ndani yake, na uiache kama hiyo. Usijaribu kuungana na bandari yoyote ya serial, acha tu inaendesha nyuma, itatumika kama relay.

Fungua folda ya "Interface". Unapaswa kupata faili inayoitwa "index.html". Fungua kwenye kivinjari chako, ni kiolesura cha wavuti.

Na ndio hivyo! Huna haja ya kupakua maktaba za ziada, kila kitu kinapaswa kujumuishwa kwenye kifurushi nilichotoa.

Hatua ya 5: Uunganisho, Usanidi na Upataji

Uunganisho, Usanidi na Upataji
Uunganisho, Usanidi na Upataji

Ili kuunganisha kiunga na bodi ya Arduino UNO, chagua tu bandari inayolingana kwenye orodha na ubonyeze kitufe cha "Fungua". Ikiwa operesheni ilifanikiwa, ujumbe wa "hali" unapaswa kuonyesha kitu kama "COMX kufunguliwa".

Sasa unaweza kuchagua chaguo zako za kukamata. Kwanza ni uteuzi wa makali. Ninakupendekeza utumie "Wote" kila wakati, kwani itakupa uwakilishi bora wa ishara halisi. Ikiwa mpangilio wa "Wote" unashindwa kunasa ishara (kama masafa ya ishara ni ya juu sana kwa mfano), unaweza kujaribu na mpangilio wa "Kuinuka" au "Kuanguka", kulingana na ishara unayojaribu kuona.

Mpangilio wa pili ni mgawanyiko wa saa. Itakupa azimio ambalo utaweza kunasa ishara. Unaweza kuchagua kuweka sababu ya mgawanyiko na "8", "64", "256" na "1024". Bodi ya Arduino UNO hutumia quartz ya 16MHz kwa saa kudhibiti microcontroller, kwa hivyo mzunguko wa sampuli utakuwa "16MHz / factor division". Kuwa mwangalifu na mpangilio huu, kwani itaamua pia kwa muda gani utaweza kunasa ishara. Kama Timer1 ni kipima muda cha 16bit, wakati wa kukamata unaruhusiwa kabla ya kufurika utakuwa "(2 ^ 16) * (factor division) / 16MHz". Kulingana na mpangilio uliochagua, itakuwa kati ya ~ 33ms na 4.2s. Weka chaguo lako akilini mwako, utahitaji baadaye.

Mpangilio wa mwisho ni kafuta kelele. Sikufanya upimaji mwingi juu yake, na hautahitaji katika 99% ya kesi, kwa hivyo acha tu bila kukaguliwa. Kwa wale ambao bado wana hamu ya kuijua, unaweza kutafuta kelele ya kufuta kelele kwenye sehemu ya Timer / Counter1 ya data ya ATMEGA328P.

Usisahau kuunganisha pini 8 ya bodi ya Arduino UNO kwa ishara yako, na uweke waya pamoja ili kuwa na rejea sawa ya voltage kwa mzunguko wa upimaji na analyzer ya mantiki. Ikiwa unahitaji kutengwa kwa ardhi, au unahitaji kupima ishara na viwango tofauti na 5V, labda utahitaji kuongeza opto-isolator kwenye mzunguko wako.

Mara tu kila kitu kimesanidiwa kwa usahihi, unaweza kubonyeza kitufe cha "Pata".

Hatua ya 6: Nasa Matokeo na Usafirishaji wa Takwimu za CSV

Nasa Matokeo na Usafirishaji Takwimu wa CSV
Nasa Matokeo na Usafirishaji Takwimu wa CSV

Mara tu UNU yako ya Arduino itakapomaliza kunasa, itarudisha data kiotomatiki kwenye kiolesura cha wavuti, ambacho kitawapanga. Unaweza kuvuta ndani au nje na kitelezi cha kulia, na utembee kupitia sampuli na ile ya chini.

Mpango huo unakupa hakikisho tu, na hauna zana zozote za uchambuzi wa data. Kwa hivyo, ili kufanya uchambuzi zaidi juu ya data yako, italazimika kuiingiza kwenye PulseView.

Hatua ya kwanza ni kusafirisha faili ya csv iliyo na data zako zote. Ili kufanya hivyo, unahitaji tu bonyeza kitufe cha "Hamisha" kutoka kwa kiolesura cha wavuti. Hifadhi faili yako katika eneo linalojulikana unapoambiwa.

Sasa fungua PulseView. Kwenye mwambaa wa menyu ya juu, bonyeza "Fungua" (ikoni ya folda), na uchague "Ingiza maadili yaliyotenganishwa kwa koma …". Chagua faili ya csv iliyotengenezwa hapo awali iliyo na data yako.

Dirisha ndogo itaonekana. Acha kila kitu kama ilivyo, unahitaji tu kurekebisha mpangilio wa "Samplerate" kulingana na mgawanyiko wa saa uliochaguliwa kwa kukamata. Mzunguko wako wa sampuli itakuwa "16MHz / (mgawanyiko wa sababu)". Kisha bonyeza "Ok", ishara yako inapaswa kuonekana kwenye skrini.

Hatua ya 7: Uchambuzi wa Ishara ya PulseView

Uchambuzi wa Ishara ya PulseView
Uchambuzi wa Ishara ya PulseView

PulseView ina vionyeshi vingi vya itifaki. Ili kuzipata, bonyeza "Ongeza kisimbuzi cha itifaki" kwenye upau wa menyu ya juu (zana ya kulia zaidi). Kwa jaribio langu, nilituma tu ujumbe rahisi wa UART kwa bauds 9600, kwa hivyo nikatafuta "UART".

Itaongeza kituo kilicho na lebo kushoto kwake (kama ile ya data yako). Kwa kubonyeza kitambulisho, unaweza kubadilisha mipangilio ya kisimbuaji. Baada ya kuchagua zile sahihi, niliweza kupata ujumbe sawa na ule uliotumwa na kifaa changu cha majaribio. Hii inaonyesha kuwa mfumo wote hufanya kazi kama inavyotarajiwa.

Hatua ya 8: Hitimisho

Hitimisho
Hitimisho

Hata kama mradi huo, mwanzoni, ulikuwa jaribio, ninafurahi na matokeo niliyopata. Niliweza kuchukua mfano wa ishara za UART hadi bauds 115200 katika hali ya "Wote" ya kando bila shida yoyote, na hata niliweza kwenda hadi bauds 230400 katika hali ya "Kuanguka" ya makali. Unaweza kuona usanidi wangu wa jaribio kwenye picha hapo juu.

Utekelezaji wangu una shida kadhaa, ikianzia na ukweli kwamba inaweza tu kunasa ishara moja kwa wakati, kwani ni siri ya 8 tu ya Arduino UNO ambayo ni "uwezo wa kukamata pembejeo". Ikiwa unatafuta kichambuzi cha mantiki cha Arduino na vituo zaidi, nenda kagua moja ya Catoblepas.

Hauwezi kutarajia Arduino UNO kuweza kunasa ishara na masafa ya juu (MHz zingine), kwani imewekwa saa 16MHz tu (ikiwa mtu yeyote alifanya hivyo, ningependa kuona njia yake). Walakini, bado nimevutiwa na matokeo ambayo tunaweza kupata kutoka kwa mdhibiti huyu mdogo wa ATMEGA328P.

Sidhani kwamba nitafanya kazi nyingi kwenye nambari. Nilifanya majaribio yangu, na nikapata matokeo ambayo nilikuwa nikitafuta. Lakini ikiwa mtu yeyote anataka kuchangia, jisikie huru kurekebisha na kugawanya yote au sehemu ya nambari yangu.

Hiyo ilikuwa ya kwanza kufundishwa, na ya muda mrefu nadhani. Natumahi kuwa imekuwa kusoma kwa kupendeza kwako.

Napenda kujua ikiwa unapata makosa, au ikiwa una swali lolote!

Ilipendekeza: