Tartalomjegyzék:
- Kellékek
- 1. lépés: Működési elv
- 2. lépés: Arduino UNO vázlat
- 3. lépés: Webes felület és P5.js
- 4. lépés: Rendszerbeállítás
- 5. lépés: Csatlakozás, konfigurálás és beszerzés
- 6. lépés: Az eredmények rögzítése és a CSV -adatok exportálása
- 7. lépés: PulseView jel elemzés
- 8. lépés: Következtetés
Videó: Arduino UNO Logic Sniffer: 8 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Ez a projekt egyszerű kísérletként indult. Az ATMEGA328P másik projekt adatlapján végzett kutatásom során valami érdekeset találtam. A Timer1 bemeneti rögzítő egység. Lehetővé teszi, hogy Arduino UNO mikrovezérlőnk érzékelje a jel élét, eltároljon egy időbélyeget, és megszakítást indítson, mindezt hardveresen.
Aztán azon tűnődtem, hogy melyik alkalmazásban lehet hasznos, és hogyan tesztelhetem. Mivel egy ideje szeretnék beszerezni egy logikai elemzőt, úgy döntöttem, hogy megpróbálok egyet megvalósítani az Arduino UNO táblán, csak azért, hogy teszteljem a funkciót, és hátha jó eredményeket tudunk kihozni belőle.
Nem én vagyok az egyetlen, akinek ez az ötlete támadt, és rengeteg ilyet talál, ha csak beugrik az "Arduino Logic Analyzer" -be. A projekt elején, mivel csak kísérletként indult, nem is tudtam, hogy az emberek már elkészítették, és lenyűgöztek a jó eredmények, amelyeket ezzel a kis hardverrel értek el. Azonban nem találtam más projektet a bemeneti rögzítő egység használatával, ezért ha már látta ezt, tudassa velem!
Összefoglalva, a logikai elemzőm:
- Legyen egy csatornád,
- Legyen grafikus felülete,
- Kommunikáció az interfésszel USB -n keresztül,
- Futtasson egy Arduino UNO táblán.
Végül 800 minta memóriamélységű lesz, és sikeresen képes volt rögzíteni egy 115200 baudos UART üzenetet (nem igazán teszteltem nagyobb sebességgel).
Ez az útmutató tartalmazza a projekt "hogyan működik" és "hogyan kell használni" részeit, így azok számára, akiket nem érdekel a technikai oldal, közvetlenül a 4. lépésre ugorhat.
Kellékek
Azt akartam, hogy az elemzőgép a lehető legegyszerűbb legyen, tehát nagyon kevés hardvert igényel.
Szükséged lesz:
- Arduino UNO tábla (vagy azzal egyenértékű, amennyiben az ATMEGA328P MCU -n alapul),
- Egy számítógép,
- Valami hibakeresés (egy másik Arduino UNO -kártya jól működik néhány teszt elvégzéséhez).
Az Arduino UNO és a webes felület kódja itt található. Szüksége lesz a p5.serialcontrol és a PulseView szoftverre is.
1. lépés: Működési elv
Az ötlet egyszerű. Válassza ki a rögzítési beállításokat, majd kattintson a "beszerzés" gombra. A webes felület elküldi őket a p5.serialcontrol szoftverre, amely lehetővé teszi számunkra, hogy böngészőből használhassuk a soros interfészt, mivel az nem fér hozzá közvetlenül. A p5.serialcontrol szoftver ezután továbbítja az információt az Arduino UNO táblához, amely rögzíti az adatokat, és ugyanazon az úton továbbítja azokat a felületre.
Könnyen! Nos … Mivel nem igazán értek a Human/Machine interfész programozáshoz vagy a webes technológiákhoz, az enyém minden bizonnyal kissé csúnya és hibás. De lehetővé teszi számomra, hogy elkezdjem a rögzítést, és visszakeressem az adataimat, erre tervezték, így szerintem rendben van. Komolyabb elemzési munkákhoz importálom a rekordjaimat a PulseView -ba, amely könnyen használható, és jó funkciókat és protokolldekódereket kínál, amint azt később látni fogjuk.
Az Arduino UNO bemeneti rögzítőegysége konfigurálható különböző óraosztások használatára, ezáltal csökkentve a felbontást, de növelve a túlcsordulás előtti késleltetést. Emelkedésnél, leesésnél vagy mindkét szélén is kiválthatja az adatok rögzítésének megkezdését.
2. lépés: Arduino UNO vázlat
A vázlatot az Arduino IDE -vel írtam és állítottam össze. Először azzal kezdtem, hogy beállítottam a Timer1 -et "Normal" üzemmódban, és írtam a TCCR1A és TCCR1B regiszterébe a beállításban (). Ezt követően elvégeztem néhány funkciót a későbbi használat megkönnyítésére, például a "setTim1PSC ()" nevű óraosztás beállítását. Funkciókat is írtam a Timer1 bemeneti rögzítőegység és a túlcsordulás megszakításának be- és kikapcsolására.
Hozzáadtam a "minták" tömböt, amely a megszerzett adatokat fogja tárolni. Ez egy globális tömb, amelyet "illékonyra" állítottam, hogy megakadályozzam, hogy a fordító optimalizáljon és villanjon, mint az első összeállításaim során. "Uint16_t" tömbként határoztam meg, mivel a Timer1 szintén 16 bites, 810 hosszú. A 800 értéknél történő rögzítést leállítjuk, de mivel a teszt nyilvánvaló sebesség miatt a megszakításokon kívül történik, úgy döntöttem, hogy 10 több érték a túlcsordulás megelőzésére. Néhány további változóval a kód többi részéhez képest a vázlat 1313 bájt (88%) memóriát használ, így 235 bájt szabad RAM marad. Már nagy memóriahasználatnál tartunk, és nem akartam több mintakapacitást hozzáadni, mivel ez furcsa viselkedést okozhat a túl kevés memóriahely miatt.
Arra törekedve, hogy mindig növeljem a végrehajtási sebességet, a függvénymutatókat használtam ahelyett, hogy a megszakításokon belüli utasítások helyett a végrehajtási időt a lehető legkevesebbre csökkenteném. A rögzítőcsap mindig az Arduino UNO 8 -as szám lesz, mivel ez az egyetlen, amely a Timer1 bemeneti rögzítőegységéhez van csatlakoztatva.
A rögzítési folyamat a fenti képen látható. Akkor kezdődik, amikor az Arduino UNO érvényes UART adatkeretet kap, amely tartalmazza a kívánt rögzítési beállításokat. Ezután feldolgozzuk ezeket a beállításokat úgy, hogy konfiguráljuk a megfelelő regisztereket a kiválasztott élre történő rögzítéshez, és a megfelelő óraosztást használjuk. Ezután engedélyezzük a PCINT0 (tűváltás) megszakítást az első jelél észleléséhez. Amikor megkapjuk, visszaállítjuk a Timer1 értéket, letiltjuk a PCINT0 megszakítást, és engedélyezzük az ICU (Input Capture Unit) megszakítást. Ettől a pillanattól kezdve a jel bármely leeső/emelkedő éle (a választott konfigurációtól függően) elindítja a bemeneti rögzítő egységet, így az esemény időbélyegét elmenti az ICR1 regiszterbe, és megszakítást hajt végre. Ebben a megszakításban behelyezzük az ICR1 regiszter értékét a "minták" tömbünkbe, és növeljük az indexet a következő rögzítéshez. Amikor az időzítő1 vagy a tömb túlcsordul, letiltjuk a rögzítés megszakítását, és az adatokat az UART -on keresztül küldjük vissza a webes felületre.
Úgy döntöttem, hogy egy tűcsere megszakítást használok a rögzítés elindításához, mivel a bemeneti rögzítőegység csak az egyik vagy a másik szélén teszi lehetővé a rögzítést, nem pedig mindkettőt. Ez akkor is problémát okoz, ha mindkét szélét rögzíteni szeretné. A megoldásom az, hogy minden lekért mintán megfordítom azt a bitet, amely az élválasztást vezérli a bemeneti rögzítésvezérlő regiszterben. Így elveszítjük a végrehajtási sebességet, de továbbra is használhatjuk a bemeneti rögzítési egység funkcióit.
Tehát, amint azt talán észrevette, valójában nem rögzítünk minden mintát rögzített időközönként, hanem azt a pillanatot, amikor egy jelátmenet történik. Ha minden órajelciklusban egy mintát vettünk volna fel, még a legmagasabb óraosztás mellett is, akkor körülbelül 0,1 másodperc alatt töltöttük volna fel a puffert, feltételezve, hogy az uint8_t típust használjuk, amely a legkisebb a memóriában struktúrák nélkül.
3. lépés: Webes felület és P5.js
Ahogy a cím is sugallja, a webes felület a p5.js segítségével készült. Aki még nem ismeri, annak nagyon ajánlom, hogy nézze meg a weboldalt, mivel ez egy igazán jó könyvtár. A feldolgozáson alapul, könnyen használható, nagyon gyorsan jó eredményeket érhet el, és jól dokumentált. Mindezek miatt választottam ezt a könyvtárat. A menükhez a quicksettings.js könyvtárat, az adatok ábrázolásához a grafica.js, a p5.serialport könyvtárat pedig az Arduino UNO -val való kommunikációhoz használtam.
Nem fogok túl sok időt tölteni a felületen, mivel csak az adatok előnézetére és a beállítások vezérlésére terveztem, és azért is, mert egyáltalán nem ez volt a kísérletem tárgya. A következő részekben azonban elmagyarázom a teljes rendszer használatának különböző lépéseit, ezáltal a rendelkezésre álló különböző vezérlőket.
4. lépés: Rendszerbeállítás
Először is töltse le az Arduino UNO -t és az interfészkódot, ha még nem tette meg. Ezután átprogramozhatja Arduino UNO kártyáját az "UNO_LS.ino" vázlattal az Arduino IDE -n keresztül.
Letöltötte volna a p5.serialcontrol szoftvert a github tárolójából. Meg kell szereznie az operációs rendszernek megfelelő zip fájlt (csak Windows rendszeren teszteltem). Bontsa ki a ZIP -fájlt egy mappában, indítsa el a benne található futtatható fájlt, és hagyja így. Ne próbáljon semmilyen soros porthoz csatlakozni, csak hagyja futni a háttérben, reléként lesz használva.
Nyissa meg az "Interface" mappát. Keresse meg az "index.html" nevű fájlt. Nyissa meg a böngészőben, ez a webes felület.
És ez az! Nem kell extra könyvtárakat letöltenie, mindent bele kell foglalni az általam biztosított csomagba.
5. lépés: Csatlakozás, konfigurálás és beszerzés
Az interfész csatlakoztatásához az Arduino UNO kártyához válassza ki a megfelelő portot a listából, és nyomja meg az "Open" gombot. Ha a művelet sikeres volt, akkor az "állapot" üzenetnek valami ilyesmit kell megjelenítenie: "COMX nyitva".
Most kiválaszthatja a rögzítési lehetőségeket. Az első az élválasztás. Azt javaslom, hogy mindig használja a „Mindkettőt”, mivel ez adja meg a legjobban a valós jelet. Ha a "Mindkettő" beállítás nem képes rögzíteni a jelet (ha például a jel frekvenciája túl magas), akkor megpróbálhatja a "Rising" vagy "Falling" élbeállítást is, attól függően, hogy milyen jelet próbál látni.
A második beállítás az óraosztás. Ez megadja a felbontást, amellyel képes lesz rögzíteni a jelet. A felosztási tényezőt "8", "64", "256" és "1024" értékekkel is beállíthatja. Az Arduino UNO kártya 16 MHz -es kvarcot használ a mikrovezérlő órajelzésére, így a mintavételi frekvencia "16 MHz/osztási tényező" lesz. Legyen óvatos ezzel a beállítással, mivel ez azt is meghatározza, hogy mennyi ideig lesz képes rögzíteni egy jelet. Mivel a Timer1 egy 16 bites időzítő, a túlcsordulás előtti rögzítési idő "(2^16)*(felosztási tényező)/16MHz" lesz. A választott beállítástól függően ~ 33ms és 4.2s között mozog. Tartsd észben a választásodat, később szükséged lesz rá.
Az utolsó beállítás a zajszűrő. Nem végeztem sok tesztet rajta, és az esetek 99% -ában nem lesz rá szüksége, ezért hagyja figyelmen kívül. Aki még kíváncsi rá, keresse meg a zajcsökkentőt az ATMEGA328P adatlapjának Időzítő/számláló1 szakaszában.
Ne felejtse el csatlakoztatni az Arduino UNO kártya 8 -as érintkezőjét a jeléhez, és kösse össze a földeléseket, hogy azonos feszültség -referencia legyen mind a tesztáramkör, mind a logikai elemző számára. Ha földi szigetelésre van szüksége, vagy 5 V-tól eltérő jeleket kell mérnie, akkor valószínűleg opto-leválasztót kell hozzáadnia az áramkörhöz.
Miután mindent helyesen konfigurált, nyomja meg az "Acquire" gombot.
6. lépés: Az eredmények rögzítése és a CSV -adatok exportálása
Miután az Arduino UNO befejezte a rögzítést, automatikusan visszaküldi az adatokat a webes felületre, amely leképezi őket. A jobb oldali csúszkával nagyíthat vagy kicsinyíthet, az alsó gombbal pedig végigjárhatja a mintákat.
A diagram csak előnézetet nyújt, és nem tartalmaz adatelemző eszközöket. Így az adatok további elemzéséhez importálnia kell azokat a PulseView -ba.
Az első lépés az összes adatot tartalmazó csv fájl exportálása. Ehhez csak kattintson az "Exportálás" gombra a webes felületről. Mentse a fájlt egy ismert helyre, amikor a rendszer kéri.
Most nyissa meg a PulseView -t. A felső menüsorban kattintson a "Megnyitás" (mappa ikon) elemre, és válassza a "Vesszővel elválasztott értékek importálása …" lehetőséget. Válassza ki az adatokat tartalmazó, korábban létrehozott csv fájlt.
Egy kis ablak jelenik meg. Hagyjon mindent úgy, ahogy van, csak módosítania kell a "Samplerate" beállítást a rögzítéshez kiválasztott óraosztási tényezőnek megfelelően. A mintavételi frekvencia "16MHz/(osztási tényező)" lesz. Ezután kattintson az "Ok" gombra, a jelzésnek meg kell jelennie a képernyőn.
7. lépés: PulseView jel elemzés
A PulseView sok protokoll dekódolót tartalmaz. Ezek eléréséhez kattintson a "Protokoll -dekódoló hozzáadása" gombra a felső menüsorban (a jobb oldali eszköz). Kísérletemhez most küldtem egy egyszerű UART üzenetet 9600 baudon, ezért kerestem az "UART" kifejezést.
Hozzáad egy csatornát, amelynek bal oldalán egy címke található (ugyanúgy, mint az adataié). A címkére kattintva módosíthatja a dekóder beállításait. Miután kiválasztottam a megfelelőket, ugyanazt az üzenetet tudtam lekérni, mint amit a teszteszközöm küldött. Ez azt mutatja, hogy az egész rendszer a várt módon működik.
8. lépés: Következtetés
Még akkor is, ha a projekt kezdetben kísérlet volt, elégedett vagyok az elért eredményekkel. Problémamentesen tudtam mintát venni UART jelekből akár 115200 baud sebességgel "Both" élmódban, sőt "Falling" él módban sikerült 230400 baudra is felmennem. A fenti képen láthatod a teszt beállításomat.
A megvalósításomnak számos hátránya van, kezdve azzal a ténnyel, hogy egyszerre csak egy jelet képes rögzíteni, mivel csak az Arduino UNO 8 -as csapja "képes bemeneti rögzítésre". Ha több csatornával rendelkező Arduino logikai elemzőt keres, nézze meg a Catoblepas egyet.
Nem várhatod el, hogy egy Arduino UNO képes legyen nagyfrekvenciás (bizonyos MHz) jelek rögzítésére, mivel csak 16 MHz -en van órajelben (ha valaki megtenné, érdekelne a módszere). Azonban még mindig lenyűgöznek az eredmények, amelyeket ebből az ATMEGA328P mikrokontrollerből kihozhatunk.
Nem hiszem, hogy sokat fogok dolgozni a kódon. Elvégeztem a kísérleteimet, és megkaptam a kívánt eredményt. De ha valaki szeretne hozzájárulni, nyugodtan módosítsa és terjessze újra a kódomat vagy annak egy részét.
Ez volt az első Instructable, és szerintem hosszú. Remélem, érdekes olvasmány volt számotokra.
Szóljon, ha hibát talál, vagy kérdése van!
Ajánlott:
Arduino Nano - Arduino Uno adapter: 6 lépés (képekkel)
Arduino Nano - Arduino Uno adapter: Az Arduino Nano egy szép, kicsi és olcsó tagja az Arduino családnak. Az Atmega328 chipen alapul, ami olyan erőteljes, mint a legnagyobb testvére, Arduino Uno, de kevesebb pénzért is beszerezhető. Az Ebay -en most a kínai verziók b
Raspberry Pi Logic Chip Tester: 4 lépés
Raspberry Pi Logic Chip Tester: Ez egy Raspberry pi logikai tesztelő szkript, ezzel ellenőrizheti, hogy működik-e (saját készítésű) logikai áramköre. Ez a szkript használható a relék tesztelésére is. FIGYELEM: A Raspberry pi nem működik támogatja az 5v GPIO bemeneteket, tehát ha az áramkör 5V kimenetet ad, akkor
Arduino Nano Logic Probe: 17 lépés (képekkel)
Arduino Nano Logic Probe: Ez a projekt az Arduino Logic Probe új verziója, de most egy Arduino Nano -val készült, nem Arduino Uno helyett. A 3 számjegyű kijelző, néhány ellenállás és az Arduino Nano gyakorlatilag ennek az érdekes projektnek az összetevői, amelyek
Snorkel Sniffer: 4 lépés
Snorkel Sniffer: Repülés közben az ajtók zárva voltak, és mint sok más hasonló járat, elsöprő álmosság kerít hatalmába. Adózás közben felébredt előttem egy nő, aki azt kiabálta, hogy "segíts neki!" " segíts neki !!!! " "
Midi vezérlésű felvételi lámpa a Logic Pro X számára: 9 lépés (képekkel)
Midi vezérlésű felvételi lámpa a Logic Pro X rendszerhez: Ez az oktatóanyag tájékoztatást nyújt arról, hogyan lehet felépíteni és programozni egy alapvető MIDI felületet a Logic Pro X felvételi fényének vezérléséhez. A képen a Logic Pro rendszert futtató Mac számítógép teljes blokkdiagramja látható X bal oldalon a Sai felé