Агуулгын хүснэгт:

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 -ийг "Normal" ажиллагааны горимд тохируулж, TCCR1A ба TCCR1B регистрүүд рүү нь бичиж тохиргоог эхлүүлэв. Дараа нь би "setTim1PSC ()" нэртэй цагийн хэлтсийг тохируулахтай адил ирээдүйд ашиглахад хялбар болгохын тулд зарим функцуудыг хийсэн. Би мөн Timer1 оролтын нэгж, халих тасалдлыг идэвхжүүлэх, идэвхгүй болгох функцүүдийг бичсэн.

Би олж авсан өгөгдлийг хадгалах "дээж" массивыг нэмсэн. Энэ бол хөрвүүлэгчийг миний анхны эмхэтгэлийн үеэр хийж байсан шиг оновчтой болгох, анивчуулахаас урьдчилан сэргийлэхийн тулд "тогтворгүй" гэж тохируулсан дэлхийн массив юм. Би үүнийг "uint16_t" массив гэж тодорхойлсон, Timer1 нь бас 16bit, 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 -ээр дамжуулан вэб интерфэйс рүү буцааж илгээдэг.

Оролт барих нэгж нь хоёуланг нь биш зөвхөн нэг эсвэл нөгөө ирмэг дээр зураг авах боломжийг олгодог тул би зураг авалтыг идэвхжүүлэхийн тулд зүү солих тасалдлыг ашиглахаар шийдлээ. Хоёр ирмэгийг нь авахыг хүссэн тохиолдолд энэ нь бас асуудал үүсгэдэг. Миний шийдэл бол олж авсан дээж бүр дэх оролтын хяналтын хяналтын регистрийн ирмэгийн сонголтыг хянадаг битийг эргүүлэх явдал юм. Ингэснээр бид гүйцэтгэлийн хурдыг сулруулж байгаа боловч оролтын нэгжийг ашиглах боломжтой хэвээр байна.

Тиймээс, та анзаарсан байх шиг, бид дээж тус бүрийг тодорхой хугацааны интервалд авдаггүй, гэхдээ дохио шилжих мөчийг авч үздэг. Хэрэв бид цаг бүрийн мөчлөг бүрт нэг дээж авсан бол хамгийн өндөр цагийн хуваагдалтай байсан ч гэсэн бид санах ойд бүтцийг ашиглахгүйгээр хамгийн жижиг нь болох uint8_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 -ийн самбарыг "UNO_LS.ino" ноорог ашиглан Arduino IDE -ээр дамжуулан дахин програмчилж болно.

Та p5.serialcontrol програмыг github репозитороос татаж авсан байх ёстой. Та өөрийн үйлдлийн системд тохирох zip файлыг авах ёстой (би үүнийг зөвхөн Windows дээр туршсан). Зипийг фолдероос задалж, дотор нь байгаа програмыг эхлүүлээд ийм байдлаар үлдээнэ үү. Аливаа цуваа порт руу холбогдохыг бүү оролдоорой, үүнийг арын дэвсгэр дээр ажиллуулаад орхи, энэ нь реле болгон ашиглагдах болно.

"Интерфэйс" фолдерыг нээнэ үү. Та "index.html" нэртэй файл олох ёстой. Үүнийг хөтөч дээрээ нээнэ үү, энэ бол вэб интерфэйс юм.

Тэгээд л боллоо! Та нэмэлт номын сан татаж авах шаардлагагүй, бүх зүйлийг миний өгсөн багцад оруулах ёстой.

Алхам 5: Холболт, тохиргоо ба худалдан авалт

Холболт, тохиргоо ба худалдан авалт
Холболт, тохиргоо ба худалдан авалт

Интерфэйсийг Arduino UNO самбарт холбохын тулд жагсаалтаас харгалзах портыг сонгоод "Нээх" товчийг дарна уу. Хэрэв үйлдэл амжилттай болсон бол "төлөв" мессеж нь "COMX нээгдсэн" гэх мэт зүйлийг харуулах ёстой.

Та одоо зураг авах сонголтоо сонгож болно. Нэгдүгээрт, захын сонголт. "Хоёуланг нь" үргэлж ашиглахыг танд зөвлөж байна, учир нь энэ нь танд жинхэнэ дохионы хамгийн сайн дүрслэлийг өгөх болно. Хэрэв "Аль аль нь" тохиргоо нь дохиог барьж чадахгүй бол (жишээ нь дохионы давтамж хэт өндөр байвал) харахыг оролдож буй дохионоос хамааран "Өсөн нэмэгдэж буй" эсвэл "Унаж буй" ирмэгийн аль нэгийг туршиж үзэж болно.

Хоёр дахь тохиргоо бол цагийн хуваарь юм. Энэ нь танд дохио авах боломжтой нарийвчлалыг өгөх болно. Та хуваах коэффициентийг "8", "64", "256", "1024" гэсэн аль нэгээр тохируулахаар сонгож болно. Arduino UNO -ийн самбар нь микроконтроллерийг ажиллуулахын тулд 16MHz кварц ашигладаг тул түүвэрлэх давтамж нь "16MHz/хуваах хүчин зүйл" байх болно. Энэ тохиргоог хийхдээ болгоомжтой байгаарай, учир нь энэ нь таныг хэр удаан дохио авах боломжтой болохыг тодорхойлох болно. Timer1 нь 16 битийн таймер тул халихаас өмнө авах зөвшөөрөгдсөн хугацаа нь "(2^16)*(хуваах хүчин зүйл)/16МГц" байх болно. Таны сонгосон тохиргооноос хамааран ~ 33ms ба 4.2s хооронд хэлбэлзэнэ. Сонголтоо санаж яваарай, дараа нь танд хэрэгтэй болно.

Сүүлчийн тохиргоо бол дуу чимээ дарагч юм. Би энэ талаар маш их туршилт хийгээгүй бөгөөд танд 99% тохиолдолд шаардлагагүй болно, тиймээс үүнийг шалгаагүй үлдээгээрэй. Үүнийг сонирхож байгаа хүмүүст ATMEGA328P мэдээллийн хуудасны Таймер/Тоолуур1 хэсгээс дуу чимээ дарагчийг хайж олох боломжтой.

Туршилтын хэлхээ ба логик анализаторын хувьд ижил хүчдэлийн лавлагаа авахын тулд Arduino UNO хавтангийн 8 -р зүүг дохиогоо холбохыг бүү мартаарай. Хэрэв танд газрын тусгаарлалт хэрэгтэй эсвэл 5V-ээс өөр түвшний дохиог хэмжих шаардлагатай бол та хэлхээндээ opto-тусгаарлагч нэмэх шаардлагатай болно.

Бүх зүйл зөв тохируулагдсаны дараа та "олж авах" товчийг дарж болно.

Алхам 6: Үр дүн ба CSV өгөгдлийг экспортлох

Үр дүн болон CSV өгөгдлийг экспортлох
Үр дүн болон CSV өгөгдлийг экспортлох

Таны Arduino UNO зураг авалтыг дуусгасны дараа өгөгдлийг вэб интерфэйс рүү автоматаар буцааж илгээх болно. Та зөв гулсагчаар томруулж, томруулж, доод тал нь дээжээр аялах боломжтой.

Уг зураг нь танд зөвхөн урьдчилж харах боломжийг олгодог бөгөөд өгөгдөлд дүн шинжилгээ хийх ямар ч хэрэгсэл байдаггүй. Тиймээс, таны өгөгдөлд нэмэлт дүн шинжилгээ хийхийн тулд та үүнийг PulseView руу оруулах хэрэгтэй болно.

Эхний алхам бол таны бүх өгөгдлийг агуулсан csv файлыг экспортлох явдал юм. Үүнийг хийхийн тулд та вэб интерфэйсээс "Экспортлох" товчийг дарах хэрэгтэй. Шаардлагатай үед файлаа мэдэгдэж буй газарт хадгална уу.

Одоо PulseView -ийг нээнэ үү. Цэсний дээд хэсэгт "Нээх" (хавтасны дүрс) дээр дараад "Таслалаар тусгаарлагдсан утгыг импортлох …" -г сонгоно уу. Таны өгөгдлийг агуулсан өмнө үүсгэсэн csv файлыг сонгоно уу.

Жижиг цонх гарч ирнэ. Бүх зүйлийг байгаагаар нь үлдээгээрэй, та авахын тулд сонгосон цаг хуваах коэффициентийн дагуу "Samplerate" тохиргоог өөрчлөх хэрэгтэй. Таны дээж авах давтамж нь "16MHz/(хуваах хүчин зүйл)" байх болно. Дараа нь "Ok" дээр дарна уу, таны дохио дэлгэц дээр гарч ирнэ.

Алхам 7: PulseView дохионы шинжилгээ

PulseView дохионы шинжилгээ
PulseView дохионы шинжилгээ

PulseView нь маш олон протокол декодлогчтой. Тэдэнд хандахын тулд цэсний дээд хэсэгт байрлах "Протокол декодер нэмэх" дээр дарна уу (хамгийн зөв хэрэгсэл). Туршилтынхаа хувьд би зүгээр л 9600 baud дээр энгийн UART мессеж илгээсэн тул "UART" гэж хайсан.

Энэ нь зүүн талд нь хаягтай суваг нэмэх болно (яг л таны өгөгдөлд зориулагдсан суваг шиг). Таг дээр дарснаар та декодерын тохиргоог өөрчилж болно. Зөвийг нь сонгосны дараа би туршилтын төхөөрөмжөөс илгээсэн мессежийг авах боломжтой болсон. Энэ нь бүхэл бүтэн систем хүлээгдэж байсны дагуу ажиллаж байгааг харуулж байна.

Алхам 8: Дүгнэлт

Дүгнэлт
Дүгнэлт

Төсөл эхэндээ туршилт байсан ч гэсэн би авсан үр дүндээ баяртай байна. Би UART дохиог "Аль аль нь" ирмэгийн горимд 115200 хүртэлх хурдаар ямар ч асуудалгүйгээр дээжлэх боломжтой байсан бөгөөд бүр "Уналтын" ирмэгийн горимд 230400 хүртэл дамжуулж чадсан. Та миний туршилтын тохиргоог дээрх зураг дээрээс харж болно.

Зөвхөн Arduino UNO -ийн 8 -р зүү нь "оролт авах чадвартай" тул миний хэрэгжүүлэлт хэд хэдэн сул талуудтай байдаг. Хэрэв та илүү олон суваг бүхий Arduino логик анализатор хайж байгаа бол Catoblepas -ийг шалгаарай.

Arduino UNO нь зөвхөн 16 МГц давтамжтай ажилладаг тул өндөр давтамжтай (зарим МГц) дохио авах чадвартай болно гэж найдаж болохгүй (хэрэв хэн нэгэн үүнийг хийсэн бол би түүний аргыг харах сонирхолтой байх болно). Гэсэн хэдий ч энэхүү ATMEGA328P микроконтроллероос гарах үр дүн надад гайхалтай сэтгэгдэл төрүүлсээр байна.

Би кодын талаар тийм ч их ажил хийхгүй гэж бодож байна. Би туршилт хийж, хайж байсан үр дүндээ хүрсэн. Гэхдээ хэрэв хэн нэгэн хувь нэмэр оруулахыг хүсч байвал миний кодыг бүхэлд нь эсвэл хэсэгчлэн өөрчилж, тарааж болно.

Энэ бол миний анхны зааварчилгаа байсан бөгөөд миний бодлоор урт хугацаа байсан. Энэ нь танд сонирхолтой уншлага болсон гэж найдаж байна.

Хэрэв та алдаа олж, эсвэл ямар нэгэн асуулт байвал надад мэдэгдээрэй!

Зөвлөмж болгож буй: