Мазмұны:

Arduino UNO Logic Sniffer: 8 қадам (суреттермен)
Arduino UNO Logic Sniffer: 8 қадам (суреттермен)

Бейне: Arduino UNO Logic Sniffer: 8 қадам (суреттермен)

Бейне: Arduino UNO Logic Sniffer: 8 қадам (суреттермен)
Бейне: Arduino Programming: Logical Operators 2024, Шілде
Anonim
Arduino UNO Logic Sniffer
Arduino UNO Logic Sniffer

Бұл жоба қарапайым эксперимент ретінде басталды. Басқа жобаға арналған ATMEGA328P мәліметтер кестесін зерттеу барысында мен қызықты нәрсені таптым. Timer1 кіріс түсіру блогы. Бұл біздің Arduino UNO микроконтроллеріне сигнал жиегін анықтауға, уақыт белгісін сақтауға және үзілісті қосуға мүмкіндік береді.

Содан кейін мен оны қай қосымшада қолдануға болатынын және оны қалай тексеруге болатынын білдім. Мен логикалық анализаторды біраз уақыт алғым келгендіктен, мен оны Arduino UNO тақтасында енгізуге тырыстым, бұл мүмкіндікті тексеру үшін және одан жақсы нәтиже алуға болатынын білу үшін.

Бұл идея менде ғана болған жоқ, және сіз оларды «Arduino Logic Analyzer» арқылы іздеу арқылы таба аласыз. Жобаның басында, ол тек эксперимент ретінде басталған кезде, мен адамдардың оны жасағанын білмедім, және олар осы кішкене аппараттық құралмен қол жеткізген жақсы нәтижелерге таң қалды. Дегенмен, мен кіріс түсіру қондырғысы арқылы басқа жоба таба алмадым, сондықтан егер сіз бұны көрген болсаңыз, маған хабарлаңыз!

Қысқаша айтқанда, менің логикалық анализаторым:

  • Бір арна бар,
  • Графикалық интерфейсі бар,
  • USB арқылы интерфейспен байланыс,
  • Arduino UNO тақтасында жүгіріңіз.

Ол ақырында жадының 800 үлгісінің тереңдігіне ие болады және 115200 bauds UART хабарламасын сәтті түсіре алды (мен оны жоғары жылдамдықта тексерген жоқпын).

Бұл нұсқаулықта бұл жобаның «қалай жұмыс істейтіні» және «оны қалай пайдалану керек» бөліктері бар, сондықтан техникалық жағынан қызығушылық танытпайтындар үшін сіз тікелей 4 -қадамға өтуге болады.

Жабдықтар

Мен анализаторды мүмкіндігінше қарапайым етіп сақтағым келді, сондықтан өте аз жабдық қажет.

Саған қажет болады:

  • Arduino UNO тақтасы (немесе ATMEGA328P MCU -ға сүйенетін болса, баламасы),
  • Компьютер,
  • Жөндеуге болатын нәрсе (басқа Arduino UNO тақтасы тестілеу үшін жақсы жұмыс істейді).

Arduino UNO мен веб -интерфейсінің кодын мына жерден табуға болады, сонымен қатар сізге p5.serialcontrol және PulseView бағдарламалық қамтамасыз ету қажет болады.

1 -қадам: жұмыс принципі

Жұмыс принципі
Жұмыс принципі

Идея қарапайым. Сіз түсіру параметрлерін таңдайсыз және «алу» түймесін басыңыз. Веб -интерфейс оларды p5.serialcontrol бағдарламалық жасақтамасына жібереді, бұл сериялық интерфейсті браузерден пайдалануға мүмкіндік береді, себебі ол оған тікелей кіре алмайды. P5.serialcontrol бағдарламалық жасақтамасы ақпаратты Arduino UNO тақтасына жібереді, ол деректерді алады және оларды сол жол арқылы интерфейске қайта жібереді.

Оңай! Жақсы … Мен адамдық/машиналық интерфейсті бағдарламалауды немесе веб -технологияларды жақсы білмейтіндіктен, менікі ұсқынсыз және қате. Бірақ бұл маған деректерді алуды бастауға және қайтаруға мүмкіндік береді, бұл ол үшін жасалған, сондықтан менің ойымша, бұл жақсы. Талдаудың маңызды жұмысы үшін мен жазбаларымды PulseView -ге импорттаймын, оны пайдалану оңай және мүмкіндіктер мен протоколдың декодерлерінің жақсы жиынтығын ұсынады, оны кейінірек көреміз.

Arduino UNO кіріс түсіру қондырғысы әр түрлі сағаттық бөлімдерді пайдалану үшін конфигурациялануы мүмкін, осылайша ажыратымдылықты төмендетеді, бірақ толып кетуден бұрын кідірісті арттырады. Ол сонымен қатар деректерді түсіруді бастау үшін көтерілуге, құлауға немесе екі жиекке де әсер етуі мүмкін.

2 -қадам: Arduino UNO эскизі

Arduino UNO эскизі
Arduino UNO эскизі

Мен эскизді Arduino IDE көмегімен жаздым және құрастырдым. Мен алдымен Timer1 -ді «Қалыпты» жұмыс режимінде баптаудан TCCR1A және TCCR1B регистрлеріне жазудан бастадым. Содан кейін мен болашақта оның қолданылуын жеңілдету үшін кейбір функцияларды жасадым, мысалы, «setTim1PSC ()» деп аталатын сағат бөлімі. Мен сондай -ақ Timer1 кіріс түсіру қондырғысы мен толып кетулерді қосу мен өшіру функцияларын жаздым.

Мен алынған деректерді сақтайтын «үлгілер» жиынын қостым. Бұл - компилятордың оңтайландыруларын болдырмау үшін және оны алғашқы жинақтарымдағыдай жарқылға қою үшін «тұрақсыз» деп орнатқан жаһандық массив. Мен оны «uint16_t» массиві ретінде анықтадым, өйткені Таймер1 де 16 биттік, ұзындығы 810. Біз 800 мәнге түсіруді тоқтатамыз, бірақ анық жылдамдықпен үзілістен тыс тест болғандықтан, мен 10 -ды сақтауды таңдадым. толып кетудің алдын алу үшін көбірек мәндер. Кодтың қалған бөлігі үшін бірнеше қосымша айнымалылармен эскиз 1313 байтты (88%) жадты қолданып, бізге 235 байт бос ЖЖҚ қалдырады. Біз қазірдің өзінде жадты көп қолданамыз, мен қосымша сыйымдылықты қосқым келмеді, себебі бұл жад кеңістігінің тым аз болуына байланысты біртүрлі мінез -құлықты тудыруы мүмкін.

Орындау жылдамдығын үнемі жоғарылату үшін мен олардың ішіндегі операторлар үзілістің орнына олардың орындалу уақытын минимумға дейін азайту үшін функция көрсеткіштерін қолдандым. Түсіру түйрегіші әрқашан Arduino UNO 8 нөмірі болады, себебі ол Timer1 кіріс түсіру қондырғысына қосылған жалғыз.

Түсіру процесі жоғарыдағы суретте көрсетілген. Ол Arduino UNO қалаған түсіру параметрлерін қамтитын UART жарамды деректер шеңберін алған кезде басталады. Содан кейін біз сол параметрлерді таңдалған жиекке түсіру үшін дұрыс регистрлерді конфигурациялау арқылы өңдейміз және дұрыс сағат бөлуін қолданамыз. Содан кейін біз сигналдың бірінші жиегін анықтау үшін PCINT0 (түйреуішті өзгерту) үзілісін қосамыз. Біз оны алған кезде Timer1 мәнін қалпына келтіреміз, PCINT0 үзілісін өшіреміз және ICU (Input Capture Unit) үзілісін қосамыз. Осы сәттен бастап сигналдың кез келген құлау/көтерілу жиегі (таңдалған конфигурацияға байланысты) кіріс түсіру қондырғысын іске қосады, осылайша бұл оқиғаның уақыт белгісін ICR1 регистріне сақтайды және үзілісті орындайды. Бұл үзілісте біз ICR1 регистрлік мәнін «үлгілер» массивіне қоямыз және келесі түсіру үшін индексті арттырамыз. Timer1 немесе массив толып кеткенде, біз түсіру үзілісін өшіреміз және UART арқылы деректерді веб -интерфейске қайта жібереміз.

Мен түсіруді іске қосу үшін түйреуішті ауыстыру үзілісін қолдануды шештім, себебі кіріс түсіру қондырғысы екеуін емес, тек бір немесе басқа жиекті түсіруге мүмкіндік береді. Бұл сонымен қатар екі шетін де түсіргіңіз келгенде қиындық тудырады. Менің шешімім - әрбір алынған үлгідегі кіріс түсіруді бақылау регистрінде жиектің таңдауын бақылайтын битті төңкеру. Осылайша біз орындалу жылдамдығынан айырыламыз, бірақ біз әлі де кіріс түсіру бірлігінің функцияларын қолдана аламыз.

Сонымен, сіз байқаған боларсыз, біз әр үлгіні нақты уақыт аралығында түсірмейміз, бірақ біз сигналдың ауысуы болатын сәтті түсіреміз. Егер біз әр сағаттық циклде бір үлгіні түсірген болсақ, тіпті ең жоғары сағаттық бөліммен де, біз upt8_t түрін қолданамыз деп ойлап, буферді шамамен 0,1 секундта толтырар едік, бұл құрылымды пайдаланбастан жадыдағы ең кішісі.

3 -қадам: веб -интерфейс және P5.js

Веб -интерфейс және P5.js
Веб -интерфейс және P5.js

Тақырыптан көрініп тұрғандай, веб -интерфейс p5.js. көмегімен жасалды. Білмейтіндер үшін мен сізге веб -сайтты тексеруге кеңес беремін, себебі бұл өте жақсы кітапхана. Ол өңдеуге негізделген, қолдануға оңай, жақсы нәтижеге тез жетуге мүмкіндік береді және жақсы құжатталған. Осы себептерге байланысты мен осы кітапхананы таңдадым. Мен сонымен қатар мәзірлерге арналған quicksettings.js кітапханасын, grafica.js біреуін менің деректерімді салу үшін және p5.serialport кітапханасын Arduino UNO -мен байланысу үшін қолдандым.

Мен интерфейске көп уақыт жұмсамаймын, өйткені мен оны тек деректерді алдын ала қарау мен параметрлерді бақылау үшін жасадым, сонымен қатар бұл менің экспериментімнің тақырыбы болмады. Мен келесі бөліктерде бүкіл жүйені қолданудың әр түрлі қадамдарын түсіндіремін, осылайша қол жетімді әр түрлі басқару элементтерін түсіндіремін.

4 -қадам: жүйені орнату

Біріншіден, егер Arduino UNO мен интерфейс кодын жүктеп алмасаңыз. Содан кейін Arduino UNO тақтасын Arduino IDE арқылы «UNO_LS.ino» эскизімен қайта бағдарламалауға болады.

Сіз p5.serialcontrol бағдарламалық жасақтамасын оның github репозиторийінен жүктеп алуыңыз керек еді. Сіз zip файлын операциялық жүйеге сәйкес алуыңыз керек (мен оны тек Windows -те тексердім). Папкадан ZIP файлын шығарыңыз, табылған орындалатын файлды іске қосыңыз және оны сол күйінде қалдырыңыз. Кез келген сериялық портқа қосылуға тырыспаңыз, оны фондық режимде қалдырыңыз, ол реле ретінде пайдаланылады.

«Интерфейс» қалтасын ашыңыз. Сіз «index.html» деп аталатын файлды табуыңыз керек. Оны шолғышта ашыңыз, бұл веб -интерфейс.

Және бұл! Қосымша кітапханаларды жүктеудің қажеті жоқ, бәрі мен берген пакетке қосылуы керек.

5 -қадам: Қосылу, конфигурация және алу

Қосылу, конфигурация және сатып алу
Қосылу, конфигурация және сатып алу

Интерфейсті Arduino UNO тақтасына қосу үшін тізімнен сәйкес портты таңдап, «Ашу» түймесін басыңыз. Егер операция сәтті аяқталса, «күй» хабарында «COMX ашылды» деген нәрсе көрсетілуі керек.

Енді сіз түсіру опцияларын таңдай аласыз. Біріншіден, шеткі таңдау. Мен сізге әрқашан «Екеуін де» қолдануды ұсынамын, себебі бұл сізге нақты сигналдың ең жақсы көрінісін береді. Егер «Екеуі де» параметрі сигналды түсіре алмаса (мысалы, сигнал жиілігі тым жоғары болса), сіз көруге тырысатын сигналға байланысты «көтерілу» немесе «құлау» жиектерін қолданып көруге болады.

Екінші параметр - сағаттың бөлінуі. Бұл сізге сигналды түсіруге болатын ажыратымдылықты береді. Бөлу коэффициентін «8», «64», «256» және «1024» арқылы орнатуға болады. Arduino UNO тақтасы микроконтроллерді басқару үшін 16 МГц кварцты пайдаланады, сондықтан іріктеу жиілігі «16 МГц/бөліну коэффициенті» болады. Бұл параметрге абай болыңыз, себебі ол сіздің сигналды қанша уақыт бойы түсіре алатындығыңызды анықтайды. Timer1 16 биттік таймер болғандықтан, толып кетуден бұрын рұқсат етілген түсіру уақыты «(2^16)*(бөліну коэффициенті)/16МГц» болады. Сіз таңдаған параметрге байланысты ол ~ 33ms мен 4.2s аралығында болады. Таңдауды есіңізде сақтаңыз, бұл сізге кейінірек қажет болады.

Соңғы параметр - шу шығарғыш. Мен онша тестілеуден өтпедім, және сізге 99% жағдайда қажет болмайды, сондықтан оны тексерусіз қалдырыңыз. Бұл туралы әлі де білгісі келетіндер үшін ATMEGA328P деректер кестесінің Таймер/Санағыш1 бөлімінен шуды басу құралын іздеуге болады.

Arduino UNO тақтасының 8 түйреуішін сигналға қосуды ұмытпаңыз және тестілеу тізбегіне де, логикалық анализаторға да бірдей кернеу сілтемесі болуы үшін жерді жалғаңыз. Егер сіз жерге оқшаулауды қажет етсеңіз немесе 5 В-дан басқа сигналдарды өлшеуді қажет етсеңіз, сіздің тізбегіңізге опто-изоляторды қосу қажет болуы мүмкін.

Барлығы дұрыс конфигурацияланғаннан кейін, «Алу» түймесін басуға болады.

6 -қадам: Нәтижелерді түсіру және CSV деректерін экспорттау

Нәтижелерді түсіру және CSV деректерін экспорттау
Нәтижелерді түсіру және CSV деректерін экспорттау

Сіздің Arduino UNO түсіруді аяқтағаннан кейін, ол деректерді веб -интерфейске автоматты түрде жібереді, ол оларды жасайды. Оң жақ сырғытпаның көмегімен үлкейтуге немесе кішірейтуге болады, ал төменгі жағындағы үлгілер арқылы өтуге болады.

Сюжет сізге тек алдын ала қарауды береді және деректерді талдау құралдары жоқ. Осылайша, сіздің деректеріңізге қосымша талдау жүргізу үшін оны PulseView -ге импорттауға тура келеді.

Бірінші қадам - сіздің барлық деректеріңіз бар csv файлын экспорттау. Ол үшін веб -интерфейстен «Экспорттау» түймесін басу жеткілікті. Сұралған кезде файлды белгілі жерде сақтаңыз.

Енді PulseView ашыңыз. Жоғарғы мәзір жолағында «Ашу» (қалта белгісі) түймесін басып, «Үтірмен бөлінген мәндерді импорттау …» таңдаңыз. Деректеріңіз бар бұрын жасалған csv файлын таңдаңыз.

Кішкене терезе пайда болады. Барлығын сол күйінде қалдырыңыз, сіз тек «Samplerate» параметрін түсіру үшін таңдалған сағат бөлу коэффициентіне сәйкес өзгертуіңіз керек. Үлгі алу жиілігі «16 МГц/(бөліну коэффициенті)» болады. Содан кейін «Жарайды» түймесін басыңыз, сіздің сигнал экранда пайда болуы керек.

7 -қадам: PulseView сигналын талдау

PulseView сигналын талдау
PulseView сигналын талдау

PulseView көптеген протоколды декодерлерге ие. Оларға қол жеткізу үшін жоғарғы мәзір жолағындағы «Протокол декодерін қосу» түймесін басыңыз (оң жақтағы құрал). Менің экспериментім үшін мен жай ғана UART хабарламасын 9600 bod жібердім, сондықтан мен «UART» іздедім.

Ол сол жақта тегі бар арнаны қосады (дәл сіздің деректеріңіздегідей). Тегті басу арқылы сіз декодердің параметрлерін өзгерте аласыз. Дұрысын таңдағаннан кейін мен тестілеу құрылғысы жіберген хабарды ала алдым. Бұл бүкіл жүйе күткендей жұмыс істейтінін көрсетеді.

8 -қадам: Қорытынды

Қорытынды
Қорытынды

Егер жоба бастапқыда эксперимент болса да, мен алған нәтижеге ризамын. Мен UART сигналдарын «Екеуі де» жиілік режимінде 115200 байтқа дейін еш қиындықсыз іріктей алдым, тіпті «Құлау» жиегі режимінде 230400 бауға дейін жеттім. Сіз менің тест қондырғысын жоғарыдағы суреттен көре аласыз.

Менің іске асырудың бірнеше кемшіліктері бар, себебі ол бір уақытта бір сигналды ғана қабылдай алады, өйткені тек Arduino UNO -ның 8 -ші пині «кіріс түсіруге қабілетті». Егер сіз басқа арналары бар Arduino логикалық анализаторын іздесеңіз, Catoblepas -ты тексеріңіз.

Сіз Arduino UNO жоғары жиілікті (кейбір МГц) сигналдарды түсіре алады деп күте алмайсыз, себебі ол тек 16 МГц жиілігінде (егер біреу мұны істесе, мен оның әдісін көруге қызығатын едім). Дегенмен, бұл ATMEGA328P микроконтроллерінен шығатын нәтижелер мені әлі де таң қалдырады.

Мен код бойынша көп жұмыс жасаймын деп ойламаймын. Мен өз тәжірибемді жүргіздім, мен іздеген нәтижеге қол жеткіздім. Бірақ егер біреу үлес қосқысы келсе, менің кодты толығымен немесе оның бір бөлігін өзгертуге және таратуға болады.

Бұл менің бірінші нұсқаулық болды, және менің ойымша, ұзақ. Сізге қызықты оқу болды деп сенемін.

Егер сізде қателер болса, немесе сұрақтарыңыз болса, маған хабарлаңыз!

Ұсынылған: