Мазмуну:

Arduino UNO Logic Sniffer: 8 кадам (сүрөттөр менен)
Arduino UNO Logic Sniffer: 8 кадам (сүрөттөр менен)

Video: Arduino UNO Logic Sniffer: 8 кадам (сүрөттөр менен)

Video: Arduino UNO Logic Sniffer: 8 кадам (сүрөттөр менен)
Video: Arduino tutorial #6 in Urdu, Controlling LED's Wirelessly Via Bluetooth 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 -кадамга өтсөңүз болот.

Жабдуулар

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

Сага керек болот:

  • An 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 байт акысыз оперативдүү RAMды калтырат. Бизде эс тутум өтө жогору, мен дагы эстутум мейкиндигинен улам кызыктай жүрүм -турумга алып келиши мүмкүн, анткени мен көбүрөөк сыйымдуулукту кошкум келген жок.

Ар дайым аткаруунун ылдамдыгын жогорулатуу үчүн, мен алардын аткарылышын минимумга чейин кыскартуу үчүн, эгерде билдирүүлөр үзгүлтүккө учураса, функция көрсөткүчтөрүн колдондум. Тартуучу пин дайыма Arduino UNO 8 номери болуп калат, анткени ал Timer1дин кириш жазуу бирдигине туташкан жалгыз.

Тартуу процесси жогорудагы сүрөттө көрсөтүлгөн. Бул Arduino UNO каалаган тартуу орнотууларын камтыган UARTтын жарактуу маалымат алкагын алганда башталат. Тандалган четине түшүрүү үчүн туура регистрлерди конфигурациялоо менен биз ошол орнотууларды иштетебиз жана туура саат бөлүмүн колдонобуз. Биз анда биринчи сигналдын чегин аныктоо үчүн PCINT0 (пин өзгөртүү) үзүлүшүн иштетебиз. Биз аны алганда, биз Timer1 маанисин баштапкы абалга келтиребиз, PCINT0 үзүлүшүн өчүрөбүз жана ICU (Input Capture Unit) үзгүлтүгүн иштетебиз. Ошол учурдан тартып, сигналдын ар кандай түшүүчү/көтөрүлүүчү жагы (тандалган конфигурацияга жараша), кириш басып алуу бирдигин иштетет, ошону менен ICR1 реестрине бул окуянын убакыт белгисин сактап калат жана үзгүлтүккө учуратат. Бул үзгүлтүктө биз ICR1 регистринин маанисин "үлгүлөрүбүз" массивине коёбуз жана кийинки тартуу үчүн индексти жогорулатабыз. Timer1 же массив толуп кеткенде, биз тартууну токтотобуз жана UART аркылуу маалыматты кайра веб интерфейсине жөнөтөбүз.

Мен тартууну баштоо үчүн пин алмаштыруу үзгүлтүгүн колдонууну чечтим, анткени киргизүү тутуму экөөнү тең эмес, тигил же бул четинен гана тартууга мүмкүндүк берет. Бул эки четин тең тартып алгыңыз келгенде көйгөй жаратат. Менин чечимим, андан кийин алынган ар бир үлгүдөгү кириш жазууну башкаруу реестриндеги четки тандоону көзөмөлдөгөн битти тескери буруш керек. Ошентип, биз аткаруу ылдамдыгын жоготуп жатабыз, бирок биз дагы эле киргизүү тутумунун функцияларын колдоно алабыз.

Демек, сиз байкагандай, биз ар бир үлгүнү белгиленген убакыт аралыгында түшүрө бербейбиз, бирок сигналдын өтүү учурун тартып алабыз. Эгерде биз ар бир саат циклинде бир үлгү алган болсок, эң жогорку саат бөлүмү менен, биз буферди болжол менен 0.1 секунда толтурмакпыз, биз uint8_t түрүн колдонуп жатабыз деп ойлогонбуз, ал эстутумдун эң кичинеси структураларды колдонбостон.

3 -кадам: Web Interface жана P5.js

Желе интерфейси жана P5.js
Желе интерфейси жана P5.js

Аталышынан көрүнүп тургандай, веб -интерфейс p5.js.тин жардамы менен жасалган. Муну билбегендер үчүн мен сизге веб -сайтты текшерүүнү сунуштайм, анткени бул чынында эле жакшы китепкана. Бул иштетүүгө негизделген, колдонууга оңой, абдан жакшы натыйжаларга тез жетүүгө мүмкүндүк берет жана жакшы документтештирилген. Мына ушул себептерден улам бул китепкананы тандап алдым. Мен ошондой эле меню үчүн quicksettings.js китепканасын колдондум, grafica.js менин маалыматымды пландаштыруу үчүн жана p5.serialport китепканасы Arduino UNO менен байланышуу үчүн.

Мен интерфейске өтө көп убакыт коротпойм, анткени мен аны жөн эле маалыматтарды алдын ала көрүү жана орнотууларды көзөмөлдөө үчүн ойлоп тапкам, ошондой эле бул менин эксперименттин такыр предмети болбогондуктан. Мен бирок кийинки бөлүктөрдө бүтүндөй системаны колдонуунун ар кандай кадамдарын түшүндүрөм, ошондо жеткиликтүү болгон ар кандай башкаруу элементтерин түшүндүрөм.

4 -кадам: системаны орнотуу

Биринчи нерсе, эгер буга чейин жасала элек болсо, Arduino UNO жана интерфейс кодун бул жерден жүктөп алуу. Андан кийин Arduino UNO тактаңызды "UNO_LS.ino" эскизи менен Arduino IDE аркылуу кайра программалай аласыз.

Сиз p5.serialcontrol программасын анын github репозиторийинен жүктөп алышыңыз керек болчу. Сиз иштөө тутумуңузга дал келген zip файлын алышыңыз керек (мен аны Windowsто гана сынап көрдүм). Папканы папкадан чыгарыңыз, анда табылган аткарылуучу файлды баштаңыз жана аны ошол бойдон калтырыңыз. Эч кандай сериялык портко туташууга аракет кылбаңыз, аны фондо иштөөдө калтырыңыз, ал реле катары колдонулат.

"Интерфейс" папкасын ачыңыз. Сиз "index.html" аттуу файлды табышыңыз керек. Аны браузериңизде ачыңыз, бул веб -интерфейс.

Жана бул! Кошумча китепканаларды жүктөөнүн кереги жок, бардыгы мен берген пакетке кошулушу керек.

5 -кадам: туташуу, конфигурация жана алуу

Байланыш, конфигурация жана алуу
Байланыш, конфигурация жана алуу

Интерфейсти Arduino UNO тактасына туташтыруу үчүн, тизмеден тиешелүү портту тандап, "Ачуу" баскычын басыңыз. Эгерде операция ийгиликтүү болгон болсо, "мамлекеттик" билдирүүсүндө "COMX ачылды" сыяктуу бир нерсе көрсөтүлүшү керек.

Эми сиз тартуу мүмкүнчүлүктөрүңүздү тандай аласыз. Биринчиден, чек тандоо. Мен сизге дайыма "Экөөнү" колдонууну сунуштайм, анткени ал сизге чыныгы сигналдын эң мыкты өкүлчүлүгүн берет. Эгерде "Экөө тең" жөндөөсү сигналды ала албаса (мисалы, эгер сигналдын жыштыгы өтө жогору болсо), сиз көрүүгө аракет кылган сигналга жараша "Rising" же "Falling" кырын орнотуп көрүңүз.

Экинчи жөндөө - сааттын бөлүнүшү. Бул сизге сигналды басып ала турган чечимди берет. Бөлүү факторун "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" жөндөөсүн басып алуу үчүн тандалган сааттын бөлүнүү факторуна ылайык өзгөртүү керек. Сиздин үлгү алуу жыштыгы "16MHz/(бөлүү коэффициенти)" болот. Андан кийин "Ok" дегенди басыңыз, сиздин сигнал экранда көрүнүшү керек.

7 -кадам: PulseView сигнал анализи

PulseView сигнал анализи
PulseView сигнал анализи

PulseView көптөгөн протокол декодерлерин камтыйт. Аларга жетүү үчүн, жогорку меню тилкесиндеги "Протоколдун декодерин кошуу" дегенди басыңыз (эң оң куралы). Эксперимент үчүн мен жөн эле UART билдирүүсүн 9600 бодо жөнөттүм, ошондуктан "UART" издедим.

Ал сол жагында теги бар каналды кошот (сиздин маалыматыңызга окшош). Теги чыкылдатуу менен сиз декодердин жөндөөлөрүн өзгөртө аласыз. Туура билдирүүлөрдү тандап алгандан кийин, мен тест түзмөгүм жөнөткөн кабарды ала алдым. Бул бүт система күтүлгөндөй иштегенин көрсөтүп турат.

8 -кадам: Жыйынтык

Жыйынтык
Жыйынтык

Долбоор, башында, эксперимент болгон күндө да, мен алган жыйынтыктарга кубанычтамын. Мен UART сигналдарын "Экөө тең" четки режимде 115200 байтка чейин эч кандай көйгөйсүз тандап алгам, ал тургай "Falling" edge режиминде 230400 baudга чейин жеттим. Сиз менин тестти орнотуумду жогорудагы сүрөттөн көрө аласыз.

Менин ишке ашыруунун бир нече кемчиликтери бар, анткени ал бир эле учурда бир гана сигналды тарта алат, анткени Arduino UNOнун пин 8и гана "киргизүү жөндөмдүү". Эгерде сиз көбүрөөк каналы бар Arduino логикалык анализаторун издеп жатсаңыз, анда Catoblepas'ты текшериңиз.

Сиз Arduino UNO жогорку жыштыктагы (кээ бир МГц) сигналдарды түшүрө алат деп күтө албайсыз, анткени ал 16 МГцте гана иштейт (эгер кимде -ким муну жасаса, мен анын ыкмасын көрүүгө кызыкдар элем). Бирок, мен дагы эле бул ATMEGA328P микроконтроллеринен чыга турган натыйжаларга таң калдым.

Мен код боюнча көп иштейм деп ойлобойм. Мен эксперименттеримди өткөрдүм, жана мен издеп жүргөн жыйынтыктарды алдым. Бирок кимдир бирөө салым кошкусу келсе, менин кодумдун бардыгын же бир бөлүгүн өзгөртүүгө жана таркатууга тартынбаңыз.

Бул менин биринчи үйрөткүчүм болду жана менимче узун. Сиз үчүн кызыктуу окуу болду деп ишенем.

Эгер ката тапсаңыз, же суроолоруңуз болсо, мага кабарлаңыз!

Сунушталууда: