Turinys:
- Prekės
- 1 žingsnis: darbo principas
- 2 žingsnis: „Arduino UNO“eskizas
- 3 veiksmas: žiniatinklio sąsaja ir P5.js
- 4 žingsnis: Sistemos sąranka
- 5 veiksmas: prisijungimas, konfigūravimas ir įsigijimas
- 6 veiksmas: užfiksuokite rezultatus ir eksportuokite CSV duomenis
- 7 žingsnis: „PulseView“signalo analizė
- 8 žingsnis: Išvada
Video: „Arduino UNO Logic Sniffer“: 8 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Šis projektas prasidėjo kaip paprastas eksperimentas. Tyrinėdamas kito projekto ATMEGA328P duomenų lapą, radau kažką gana įdomaus. „Timer1“įvesties rinkinys. Tai leidžia mūsų „Arduino UNO“mikrovaldikliui aptikti signalo kraštą, išsaugoti laiko žymę ir sukelti pertrauką, visa tai aparatinėje įrangoje.
Tada pagalvojau, kurioje programoje tai gali būti naudinga ir kaip ją išbandyti. Kadangi jau kurį laiką noriu įsigyti logikos analizatorių, nusprendžiau pabandyti įdiegti vieną savo „Arduino UNO“plokštėje, kad tik išbandyčiau funkciją ir pažiūrėčiau, ar galime iš jos gauti gerų rezultatų.
Aš nesu vienintelis, kuriam kilo ši idėja, ir jūs rasite daug jų tiesiog google „Arduino Logic Analyzer“. Projekto pradžioje, nes jis tik prasidėjo kaip eksperimentas, aš net nežinojau, kad žmonės tai jau padarė, ir buvau sužavėtas gerų rezultatų, kuriuos jie pasiekė su šia maža aparatine įranga. Tačiau nepavyko rasti kito projekto naudojant įvesties surinkimo įrenginį, todėl jei jau matėte tai, praneškite man!
Apibendrinant, mano logikos analizatorius:
- Turi vieną kanalą,
- Turi grafinę sąsają,
- Bendraukite su sąsaja per USB,
- Paleiskite „Arduino UNO“lentoje.
Galiausiai jis turės 800 pavyzdžių atminties gylį ir sugebėjo sėkmingai užfiksuoti 115200 baudų UART pranešimą (aš tikrai to neišbandžiau didesniu greičiu).
Šioje instrukcijoje yra šio projekto dalys „kaip tai veikia“ir „kaip ją naudoti“, todėl tiems, kurie nesidomi technine puse, galite tiesiogiai pereiti prie 4 veiksmo.
Prekės
Norėjau, kad analizatorius būtų kuo paprastesnis, todėl reikia labai mažai aparatūros.
Jums reikės:
- „Arduino UNO“plokštė (arba lygiavertė, jei ji priklauso nuo ATMEGA328P MCU),
- Kompiuteris,
- Kažką derinti (kita „Arduino UNO“plokštė puikiai tinka atlikti kai kuriuos bandymus).
Čia galite rasti „Arduino UNO“ir žiniatinklio sąsajos kodą. Jums taip pat reikės „p5.serialcontrol“ir „PulseView“programinės įrangos.
1 žingsnis: darbo principas
Idėja paprasta. Jūs pasirenkate fotografavimo nustatymus ir spustelėkite „įsigyti“. Žiniatinklio sąsaja juos nusiųs į „p5.serialcontrol“programinę įrangą, kuri leidžia mums naudoti serijinę sąsają iš naršyklės, nes ji negali jos tiesiogiai pasiekti. Tada „p5.serialcontrol“programinė įranga perduoda informaciją į „Arduino UNO“plokštę, kuri fiksuoja duomenis, ir tuo pačiu keliu siunčia juos atgal į sąsają.
Lengva! Na … Kadangi aš nelabai moku programuoti žmogaus/mašinos sąsajas ar žiniatinklio technologijas, mano tikrai yra šiek tiek negraži ir klaidinga. Bet tai leidžia man pradėti fiksavimą ir atkurti savo duomenis, nes tai buvo sukurta, todėl manau, kad tai gerai. Norėdami atlikti rimtesnius analizės darbus, importuoju savo įrašus į „PulseView“, kurį lengva naudoti ir kuriame yra daug funkcijų ir protokolų dekoderių, kaip pamatysime vėliau.
„Arduino UNO“įvesties surinkimo įrenginys gali būti sukonfigūruotas naudoti skirtingus laikrodžio padalijimus, taip sumažinant skiriamąją gebą, tačiau padidinant delsą prieš perpildymą. Jis taip pat gali sukelti pakilimą, kritimą ar abu kraštus, kad pradėtų fiksuoti duomenis.
2 žingsnis: „Arduino UNO“eskizas
Aš parašiau ir sudariau eskizą su „Arduino IDE“. Pirmiausia pradėjau nustatydamas „Timer1“veikimo režimu „Normal“, rašydamas į jo TCCR1A ir TCCR1B registrus sąrankoje (). Tada padariau kai kurias funkcijas, kad ateityje galėčiau šiek tiek palengvinti jo naudojimą, pavyzdžiui, tą, kuri nustatė laikrodžio skyrių pavadinimu „setTim1PSC ()“. Taip pat parašiau funkcijas, skirtas įjungti ir išjungti „Timer1“įvesties fiksavimo įrenginį ir perpildymo pertraukas.
Pridėjau „pavyzdžių“masyvą, kuriame bus saugomi gauti duomenys. Tai yra pasaulinis masyvas, kurį nustatiau kaip „nepastovus“, kad kompiliatorius negalėtų optimizuoti ir įdėti į blykstę, kaip tai darė per pirmąsias kompiliacijas. Aš jį apibrėžiau kaip „uint16_t“masyvą, nes „Timer1“taip pat yra 16 bitų, jo ilgis yra 810. Mes nustojame fiksuoti ties 800 reikšmėmis, tačiau kadangi dėl akivaizdžių greičio bandymų atliekamas ne pertraukos, nusprendžiau palikti 10 daugiau reikšmių, kad būtų išvengta perpildymo. Turėdamas keletą papildomų kintamųjų likusiai kodo daliai, eskizas naudoja 1313 baitų (88%) atminties, o mums lieka 235 baitai laisvos RAM. Mes jau naudojame daug atminties, ir aš nenorėjau pridėti daugiau pavyzdžių, nes dėl per mažai vietos atmintyje tai gali sukelti keistą elgesį.
Siekdamas visada padidinti vykdymo greitį, aš naudoju funkcijų rodykles, o ne sakinius pertraukose, kad sutrumpinčiau jų vykdymo laiką. Fiksavimo kaištis visada bus „Arduino UNO“numeris 8, nes jis vienintelis prijungtas prie „Timer1“įvesties fiksavimo įrenginio.
Fotografavimo procesas parodytas aukščiau esančiame paveikslėlyje. Jis prasideda, kai „Arduino UNO“gauna galiojantį UART duomenų rėmelį, kuriame yra norimi fiksavimo nustatymai. Tada mes apdorojame tuos nustatymus, sukonfigūruodami tinkamus registrus, kad jie užfiksuotų pasirinktą kraštą, ir naudojame tinkamą laikrodžio padalijimą. Tada įjungiame PCINT0 (kaiščio keitimo) pertrauką, kad aptiktų pirmąjį signalo kraštą. Kai jį gauname, iš naujo nustatome „Timer1“vertę, išjungiame „PCINT0“pertraukimą ir įgaliname ICU (įvesties fiksavimo įrenginio) pertraukimą. Nuo to momento bet koks krentantis/kylantis signalo kraštas (priklausomai nuo pasirinktos konfigūracijos) suaktyvins įvesties surinkimo įrenginį, taip išsaugodamas šio įvykio laiko žymę ICR1 registre ir atlikdamas pertrauką. Šiuo pertraukimu mes įtraukiame ICR1 registro vertę į „pavyzdžių“masyvą ir padidiname kito fiksavimo indeksą. Kai „Timer1“arba masyvas perpildomi, mes išjungiame fiksavimo pertraukimą ir siunčiame duomenis atgal į žiniatinklio sąsają per UART.
Nusprendžiau panaudoti kaiščio keitimo pertrauką, kad suaktyvinčiau fiksavimą, nes įvesties fiksavimo įrenginys leidžia fiksuoti tik vieną ar kitą kraštą, o ne abu. Tai taip pat sukelia problemų, kai norite užfiksuoti abu kraštus. Tada mano sprendimas yra apversti bitą, kuris valdo krašto pasirinkimą įvesties surinkimo valdymo registre kiekviename mėginyje. Tokiu būdu prarandame vykdymo greitį, tačiau vis tiek galime naudoti įvesties rinkinio funkcijas.
Taigi, kaip jau pastebėjote, mes tikrai nefiksuojame kiekvieno mėginio fiksuotais laiko intervalais, bet fiksuojame momentą, kai vyksta signalo perėjimas. Jei būtume užfiksavę vieną mėginį per kiekvieną laikrodžio ciklą, net ir esant didžiausiam laikrodžio padaliniui, buferį užpildytume maždaug per 0,1 s, darant prielaidą, kad naudojome uint8_t tipą, kuris yra mažiausias atmintyje, nenaudojant konstrukcijų.
3 veiksmas: žiniatinklio sąsaja ir P5.js
Kaip rodo pavadinimas, žiniatinklio sąsaja buvo sukurta naudojant p5.js. Tiems, kurie to dar nežino, labai rekomenduoju apsilankyti ir patikrinti svetainę, nes tai tikrai gera biblioteka. Jis pagrįstas apdorojimu, yra paprastas naudoti, leidžia labai greitai pasiekti gerų rezultatų ir yra gerai dokumentuotas. Dėl visų šių priežasčių pasirinkau šią biblioteką. Meniu taip pat naudoju „quicksettings.js“biblioteką, „grafica.js“- savo duomenims sudaryti, o „p5.serialport“biblioteką - bendravimui su „Arduino UNO“.
Nesinaudosiu per daug laiko sąsajai, nes ją tiesiog sukūriau duomenų peržiūrai ir nustatymų valdymui, taip pat todėl, kad tai nebuvo mano eksperimento objektas. Tačiau kitose dalyse paaiškinsiu įvairius visos sistemos naudojimo veiksmus ir taip paaiškinsiu įvairius galimus valdiklius.
4 žingsnis: Sistemos sąranka
Pirmas dalykas yra atsisiųsti „Arduino UNO“ir sąsajos kodą, jei tai dar nebuvo padaryta. Tada galite perprogramuoti „Arduino UNO“plokštę naudodami „UNO_LS.ino“eskizą per „Arduino IDE“.
Turėtumėte atsisiųsti „p5.serialcontrol“programinę įrangą iš jos „github“saugyklos. Turite gauti ZIP failą, atitinkantį jūsų operacinę sistemą (aš tik išbandžiau „Windows“). Ištraukite ZIP aplanką, paleiskite jame esantį vykdomąjį failą ir palikite jį tokį. Nebandykite prisijungti prie bet kurio nuoseklaus prievado, tiesiog palikite jį veikti fone, jis bus naudojamas kaip relė.
Atidarykite aplanką „Sąsaja“. Turėtumėte rasti failą pavadinimu „index.html“. Atidarykite jį naršyklėje, tai yra žiniatinklio sąsaja.
Štai ir viskas! Jums nereikia atsisiųsti papildomų bibliotekų, viskas turėtų būti įtraukta į mano pateiktą paketą.
5 veiksmas: prisijungimas, konfigūravimas ir įsigijimas
Norėdami prijungti sąsają prie „Arduino UNO“plokštės, tiesiog pasirinkite atitinkamą prievadą sąraše ir paspauskite mygtuką „Atidaryti“. Jei operacija buvo sėkminga, pranešime „būsena“turėtų būti kažkas panašaus į „COMX atidarytas“.
Dabar galite pasirinkti fotografavimo parinktis. Pirmiausia reikia pasirinkti kraštą. Rekomenduoju visada naudoti „Abu“, nes tai geriausiai parodys tikrąjį signalą. Jei nustatymas „Abu“nepavyksta užfiksuoti signalo (jei, pavyzdžiui, signalo dažnis yra per didelis), galite pabandyti nustatyti „kylančio“arba „krintančio“krašto nustatymus, priklausomai nuo signalo, kurį bandote matyti.
Antrasis nustatymas yra laikrodžio padalijimas. Tai suteiks jums skiriamąją gebą, kuria galėsite fiksuoti signalą. Galite pasirinkti padalijimo koeficientą „8“, „64“, „256“ir „1024“. „Arduino UNO“plokštė naudoja 16MHz kvarcą, kad stebėtų mikrovaldiklį, todėl mėginių ėmimo dažnis bus „16MHz/padalijimo koeficientas“. Būkite atsargūs naudodami šį nustatymą, nes jis taip pat nulems, kiek laiko galėsite užfiksuoti signalą. Kadangi „Timer1“yra 16 bitų laikmatis, užfiksavimo laikas iki perpildymo bus „(2^16)*(padalijimo koeficientas)/16 MHz“. Priklausomai nuo pasirinkto nustatymo, jis svyruoja nuo ~ 33ms iki 4,2s. Turėkite omenyje savo pasirinkimą, jums to prireiks vėliau.
Paskutinis nustatymas yra triukšmo slopintuvas. Aš neatlikau daug bandymų, ir jums to neprireiks 99% atvejų, todėl tiesiog palikite jį nepažymėtą. Tiems, kuriems vis dar įdomu, galite ieškoti triukšmo slopintuvo ATMEGA328P duomenų lapo skiltyje Laikmatis/skaitiklis1.
Nepamirškite prijungti „Arduino UNO“plokštės kištuko 8 prie savo signalo ir sujungti pagrindus, kad būtų vienoda įtampa tiek bandymo grandinei, tiek loginiam analizatoriui. Jei jums reikia izoliuoti žemę arba matuoti signalus, kurių lygis skiriasi nuo 5 V, greičiausiai turėsite prie savo grandinės pridėti optinį izoliatorių.
Kai viskas bus sukonfigūruota, galite paspausti mygtuką „Įsigyti“.
6 veiksmas: užfiksuokite rezultatus ir eksportuokite CSV duomenis
Kai jūsų „Arduino UNO“baigs fiksavimą, jis automatiškai atsiųs duomenis atgal į žiniatinklio sąsają, kuri juos nubraižys. Galite priartinti arba nutolinti naudodami dešinįjį slankiklį ir keliauti per pavyzdžius naudodami apatinį.
Siužete pateikiama tik peržiūra ir nėra jokių duomenų analizės įrankių. Taigi, norėdami toliau analizuoti savo duomenis, turėsite juos importuoti į „PulseView“.
Pirmasis žingsnis yra eksportuoti csv failą, kuriame yra visi jūsų duomenys. Norėdami tai padaryti, tiesiog spustelėkite žiniatinklio sąsajos mygtuką „Eksportuoti“. Kai būsite paraginti, išsaugokite failą žinomoje vietoje.
Dabar atidarykite „PulseView“. Viršutinėje meniu juostoje spustelėkite „Atidaryti“(aplanko piktograma) ir pasirinkite „Importuoti kableliais atskirtas vertes …“. Pasirinkite anksčiau sukurtą csv failą, kuriame yra jūsų duomenys.
Pasirodys mažas langas. Palikite viską taip, kaip yra, jums tiesiog reikia pakeisti „Samplerate“nustatymą pagal fiksavimui pasirinktą laikrodžio padalijimo koeficientą. Jūsų mėginio dažnis bus „16MHz/(padalijimo koeficientas)“. Tada spustelėkite „Gerai“, jūsų signalas turėtų pasirodyti ekrane.
7 žingsnis: „PulseView“signalo analizė
„PulseView“turi daug protokolinių dekoderių. Norėdami juos pasiekti, spustelėkite „Pridėti protokolo dekoderį“viršutinėje meniu juostoje (labiausiai tinkamas įrankis). Savo eksperimentui aš ką tik išsiunčiau paprastą UART pranešimą 9600 baudų greičiu, todėl ieškojau „UART“.
Jis pridės kanalą su žyma kairėje (kaip ir tas, kuris skirtas jūsų duomenims). Spustelėję žymą, galite pakeisti dekoderio nustatymus. Pasirinkęs tinkamus pranešimus, galėjau gauti tą patį pranešimą, kurį atsiuntė bandomasis įrenginys. Tai rodo, kad visa sistema veikia taip, kaip tikėtasi.
8 žingsnis: Išvada
Net jei projektas pradžioje buvo eksperimentas, džiaugiuosi gautais rezultatais. Aš galėjau be jokių problemų imti UART signalus iki 115200 baudų „Abi“krašto režimu, ir net sugebėjau pasiekti iki 230 400 baudų „Krentančio“krašto režimu. Mano bandymo sąranką galite pamatyti aukščiau esančioje nuotraukoje.
Mano diegimas turi keletą trūkumų, pradedant tuo, kad vienu metu jis gali fiksuoti tik vieną signalą, nes tik „Arduino UNO“8 kaištis yra „įvesties geba“. Jei ieškote „Arduino“logikos analizatoriaus su daugiau kanalų, eikite patikrinti „Catoblepas“.
Negalite tikėtis, kad „Arduino UNO“sugebės fiksuoti aukšto dažnio (kai kurių MHz) signalus, nes jis veikia tik 16 MHz dažniu (jei kas nors tai padarytų, man būtų įdomu pamatyti jo metodą). Tačiau mane vis dar sužavėjo rezultatai, kuriuos galime gauti iš šio ATMEGA328P mikrovaldiklio.
Nemanau, kad daug dirbsiu su kodu. Atlikau eksperimentus ir gavau rezultatų, kurių ieškojau. Bet jei kas nors nori prisidėti, nedvejodami pakeiskite ir perskirstykite visą mano kodą arba jo dalį.
Tai buvo mano pirmasis „Instructable“ir, manau, ilgas. Tikiuosi, kad jums buvo įdomus skaitymas.
Praneškite man, jei radote klaidų arba turite klausimų!
Rekomenduojamas:
„Raspberry Pi Logic Chip Tester“: 4 žingsniai
„Raspberry Pi Logic Chip Tester“: tai „Raspberry pi“logikos testavimo scenarijus, kuriuo galite patikrinti, ar veikia jūsų (savarankiškai sukurta) loginė grandinė. Šis scenarijus taip pat gali būti naudojamas relėms išbandyti. ĮSPĖJIMAS: „Raspberry pi“palaiko 5v GPIO įėjimus, taigi, jei jūsų grandinė išves 5V
„Arduino Nano Logic Probe“: 17 žingsnių (su nuotraukomis)
„Arduino Nano Logic Probe“: Šis projektas yra nauja mano „Arduino Logic Probe“versija, tačiau dabar sukurta naudojant „Arduino Nano“, o ne „Arduino Uno“. Trijų skaitmenų ekranas, keli rezistoriai ir „Arduino Nano“praktiškai yra šio įdomaus projekto sudedamosios dalys
Snorkel Sniffer: 4 žingsniai
Snorkel Sniffer: Skrydžio metu durys buvo uždarytos ir, kaip ir daugelis kitų panašių skrydžių, jus užvaldo didžiulis mieguistumas. Kol mes apmokestinome, mane pribloškė priešais mus moteris, kuri šaukė „padėk jam!“; " padėk jam !!!! " "
„Midi“valdoma „Logic Pro X“įrašymo lemputė: 9 žingsniai (su nuotraukomis)
„Midi“valdoma „Logic Pro X“įrašymo lemputė: šioje pamokoje pateikiama informacija apie tai, kaip sukurti ir užprogramuoti pagrindinę MIDI sąsają, kad būtų galima valdyti „Logic Pro X“įrašymo lemputę. Paveikslėlyje parodyta visos sistemos blokinė schema iš „Mac“kompiuterio, kuriame veikia „Logic Pro“X kairėje į Sai
„Arduino I2C Sniffer“: 4 žingsniai
„Arduino I2C Sniffer“: „I2C“yra nuoseklusis protokolas, naudojamas bendrauti su mikrovaldikliu su išoriniais periferiniais įrenginiais, prijungtais prie tos pačios grandinės. Kiekvienas išorinis įrenginys turi turėti unikalų ID numerį, vadinamą adresu, kuris naudojamas identifikuoti jį kaip numatytą tam tikros žinutės gavėją