فهرست مطالب:
- تدارکات
- مرحله 1: اصل کار
- مرحله 2: Arduino UNO Sketch
- مرحله 3: رابط وب و P5.js
- مرحله 4: راه اندازی سیستم
- مرحله 5: اتصال ، پیکربندی و دستیابی
- مرحله 6: ضبط نتایج و صادرات داده CSV
- مرحله 7: تجزیه و تحلیل سیگنال PulseView
- مرحله 8: نتیجه گیری
تصویری: Arduino UNO Logic Sniffer: 8 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:52
این پروژه به عنوان یک آزمایش ساده آغاز شد. در حین تحقیق در مورد برگه اطلاعات ATMEGA328P برای پروژه ای دیگر ، چیز جالبی پیدا کردم. واحد ضبط ورودی Timer1. این به میکروکنترلر Arduino UNO ما اجازه می دهد تا یک لبه سیگنال را تشخیص دهد ، یک مهر زمان ذخیره کند و یک وقفه ایجاد کند ، همه در سخت افزار.
سپس از خودم پرسیدم که در کدام برنامه می تواند مفید باشد و چگونه آن را آزمایش کنم. از آنجا که مدتی است می خواهم یک تجزیه و تحلیل منطقی تهیه کنم ، تصمیم گرفتم یکی را در برد Arduino UNO خود اجرا کنم ، فقط برای آزمایش ویژگی و بررسی اینکه آیا می توانیم نتایج خوبی از آن بدست آوریم.
من تنها کسی نیستم که این ایده را داشت ، و شما فقط با جستجوی گوگل "Arduino Logic Analyzer" می توانید بسیاری از آنها را پیدا کنید. در ابتدای پروژه ، همانطور که به عنوان یک آزمایش آغاز شد ، من حتی نمی دانستم که افراد قبلاً آن را ساخته اند و تحت تأثیر نتایج خوبی که با این قطعه سخت افزاری کوچک به دست آوردند ، تحت تأثیر قرار گرفتم. با این حال ، من نتوانستم پروژه دیگری با استفاده از واحد ضبط ورودی پیدا کنم ، بنابراین اگر قبلاً این را دیده اید ، به من اطلاع دهید!
به طور خلاصه ، تجزیه و تحلیل منطق من:
- داشتن یک کانال ،
- داشتن رابط گرافیکی ،
- ارتباط با رابط از طریق USB ،
- روی برد 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 Sketch
من طرح را با 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 (واحد ضبط ورودی) را فعال می کنیم. از آن لحظه ، هرگونه سقوط/بالا آمدن لبه روی سیگنال (بسته به پیکربندی انتخاب شده) ، واحد ضبط ورودی را فعال می کند ، بنابراین زمان ثبت این رویداد را در ثبت ICR1 ذخیره می کند و وقفه را اجرا می کند. در این وقفه ما مقدار ثبت ICR1 را در آرایه "نمونه" خود قرار می دهیم و شاخص را برای ضبط بعدی افزایش می دهیم. هنگامی که Timer1 یا آرایه سرریز می شود ، وقفه ضبط را غیرفعال می کنیم و داده ها را از طریق UART به رابط وب ارسال می کنیم.
من تصمیم گرفتم از وقفه تغییر پین برای ایجاد ضبط استفاده کنم ، زیرا واحد ضبط ورودی فقط در یکی از لبه های دیگر و نه هر دو را ضبط می کند. همچنین هنگامی که می خواهید هر دو لبه را ضبط کنید ، مشکلی ایجاد می کند. راه حل من این است که بیتی را که انتخاب لبه را در رجیستر کنترل ضبط ورودی در هر نمونه بازیابی شده کنترل می کند ، وارونه کنم. به این ترتیب سرعت اجرا را از دست می دهیم ، اما همچنان می توانیم از عملکردهای واحد ضبط ورودی استفاده کنیم.
بنابراین ، همانطور که ممکن است متوجه شده باشید ، ما واقعاً هر نمونه را در فواصل زمانی مشخص ضبط نمی کنیم ، اما لحظه ای را که یک انتقال سیگنال اتفاق می افتد ، ثبت می کنیم. اگر یک نمونه در هر چرخه ساعت ، حتی با بیشترین تقسیم ساعت ، گرفته بودیم ، با فرض اینکه از نوع uint8_t استفاده می کنیم ، که کوچکترین نمونه در حافظه بدون استفاده از سازه است ، تقریباً 0.1 ثانیه بافر را پر می کردیم.
مرحله 3: رابط وب و P5.js
همانطور که از عنوان آن مشخص است ، رابط وب با کمک p5.js. برای کسانی که قبلاً آن را نمی دانند ، به شما توصیه می کنم که بروید و وب سایت را بررسی کنید ، زیرا کتابخانه واقعاً خوبی است. این بر اساس پردازش است ، استفاده از آن آسان است ، به شما امکان می دهد نتایج بسیار سریع را بدست آورید و به خوبی مستند شده است. به همین دلایل است که من این کتابخانه را انتخاب کردم. من همچنین از کتابخانه quicksettings.js برای منوها ، grafica.js یکی برای ترسیم داده هایم و کتابخانه p5.serialport برای ارتباط با Arduino UNO استفاده کردم.
من زمان زیادی را صرف رابط کاربری نمی کنم ، زیرا آن را فقط برای پیش نمایش داده ها و کنترل تنظیمات طراحی کرده ام ، و همچنین به این دلیل که اصلاً موضوع آزمایش من نبوده است. اما در قسمت های زیر مراحل مختلف استفاده از کل سیستم را توضیح خواهم داد ، بنابراین کنترل های مختلف موجود را توضیح می دهم.
مرحله 4: راه اندازی سیستم
اولین کاری که باید انجام دهید این است که Arduino UNO و کد رابط را در صورت بارگیری در اینجا بارگیری کنید. سپس می توانید هیئت مدیره Arduino UNO خود را با طرح "UNO_LS.ino" از طریق IDE Arduino برنامه ریزی مجدد کنید.
شما باید نرم افزار p5.serialcontrol را از مخزن github آن بارگیری کرده باشید. شما باید فایل زیپ متناسب با سیستم عامل خود را دریافت کنید (من فقط آن را روی ویندوز آزمایش کردم). فایل فشرده را در یک پوشه استخراج کنید ، فایل اجرایی موجود در آن را راه اندازی کنید و آن را به همین ترتیب بگذارید. سعی نکنید به هر پورت سریال متصل شوید ، فقط آن را در پس زمینه بگذارید ، به عنوان یک رله استفاده می شود.
پوشه "Interface" را باز کنید. باید فایلی با نام "index.html" پیدا کنید. آن را در مرورگر خود باز کنید ، این رابط وب است.
و بس! نیازی به بارگیری کتابخانه های اضافی ندارید ، همه چیز باید در بسته ای که من ارائه دادم گنجانده شود.
مرحله 5: اتصال ، پیکربندی و دستیابی
برای اتصال رابط کاربری به برد Arduino UNO ، فقط پورت مربوطه را در لیست انتخاب کرده و دکمه "باز" را فشار دهید. اگر عملیات موفقیت آمیز بود ، پیام "state" باید چیزی مانند "COMX باز شده" را نشان دهد.
اکنون می توانید گزینه های ضبط خود را انتخاب کنید. اول انتخاب لبه است. به شما توصیه می کنم همیشه از "هر دو" استفاده کنید ، زیرا بهترین نمایش سیگنال واقعی را به شما می دهد. اگر تنظیم "هر دو" نتواند سیگنال را ضبط کند (اگر فرکانس سیگنال برای مثال خیلی زیاد باشد) ، بسته به سیگنالی که می خواهید ببینید ، می توانید با تنظیم "Rising" یا "Falling" امتحان کنید.
تنظیم دوم تقسیم ساعت است. این وضوح را به شما می دهد که در آن می توانید سیگنال را ضبط کنید. می توانید ضریب تقسیم را با "8" ، "64" ، "256" و "1024" تنظیم کنید. برد Arduino UNO از یک کوارتز 16 مگاهرتز برای کلاک کردن میکروکنترلر استفاده می کند ، بنابراین فرکانس نمونه برداری "16 مگاهرتز/ضریب تقسیم" خواهد بود. مراقب این تنظیمات باشید ، زیرا همچنین تعیین می کند که تا چه مدت می توانید سیگنال را ضبط کنید. از آنجا که تایمر 1 یک تایمر 16 بیتی است ، زمان ضبط مجاز قبل از سرریز "(2^16)*(ضریب تقسیم)/16 مگاهرتز" خواهد بود. بسته به تنظیماتی که انتخاب کرده اید ، بین 33 میلی متر و 4.2 ثانیه متغیر است. انتخاب خود را در ذهن خود نگه دارید ، بعداً به آن احتیاج خواهید داشت.
آخرین تنظیم ، حذف کننده نویز است. من آزمایش زیادی روی آن انجام ندادم ، و شما در 99 the موارد به آن نیاز نخواهید داشت ، بنابراین فقط آن را بدون کنترل رها کنید. برای کسانی که هنوز در مورد آن کنجکاو هستند ، می توانید در قسمت Timer/Counter1 در برگه اطلاعات ATMEGA328P در مورد Timer/Counter1 جستجو کنید.
فراموش نکنید که پین 8 برد Arduino UNO را به سیگنال خود وصل کنید و پایه ها را به هم وصل کنید تا مرجع ولتاژ یکسانی برای مدار آزمایش و تجزیه و تحلیل منطقی داشته باشد. اگر به جداسازی زمین نیاز دارید یا نیاز به اندازه گیری سیگنال هایی با سطوح متفاوت از 5 ولت دارید ، احتمالاً باید یک عایق نوری به مدار خود اضافه کنید.
هنگامی که همه چیز به درستی پیکربندی شده است ، می توانید دکمه "Acquire" را فشار دهید.
مرحله 6: ضبط نتایج و صادرات داده CSV
پس از اتمام ضبط Arduino UNO ، داده ها به طور خودکار به رابط وب ارسال می شوند ، که آنها را ترسیم می کند. می توانید با لغزنده مناسب بزرگنمایی یا کوچکنمایی کنید و با نمونه پایینی از طریق نمونه ها حرکت کنید.
طرح فقط یک پیش نمایش به شما می دهد و هیچ ابزار تجزیه و تحلیل داده ندارد. بنابراین ، برای انجام تجزیه و تحلیل بیشتر بر روی داده های خود ، باید آنها را به PulseView وارد کنید.
اولین قدم این است که یک فایل csv حاوی تمام داده های خود را صادر کنید. برای انجام این کار ، فقط باید روی دکمه "صادرات" از رابط وب کلیک کنید. در صورت درخواست فایل خود را در یک مکان شناخته شده ذخیره کنید.
حالا PulseView را باز کنید. در نوار منوی بالا ، روی "باز" (نماد پوشه) کلیک کنید و "وارد کردن مقادیر جدا شده با کاما …" را انتخاب کنید. فایل csv قبلاً ایجاد شده حاوی اطلاعات خود را انتخاب کنید.
یک پنجره کوچک ظاهر می شود. همه چیز را همانطور که هست بگذارید ، فقط باید تنظیم "نمونه" را با توجه به عامل تقسیم ساعت انتخاب شده برای ضبط ، تغییر دهید. فرکانس نمونه گیری شما "16 مگاهرتز/(ضریب تقسیم)" خواهد بود. سپس روی "Ok" کلیک کنید ، سیگنال شما باید روی صفحه ظاهر شود.
مرحله 7: تجزیه و تحلیل سیگنال PulseView
PulseView دارای رمزگشای پروتکل های زیادی است. برای دسترسی به آنها ، روی "افزودن رمزگشای پروتکل" در نوار بالای منو (مناسب ترین ابزار) کلیک کنید. برای آزمایش خود ، من فقط یک پیام ساده UART را در 9600 bauds ارسال کردم ، بنابراین "UART" را جستجو کردم.
این یک کانال با برچسب در سمت چپ خود اضافه می کند (درست مانند کانال داده های شما). با کلیک روی برچسب ، می توانید تنظیمات رمزگشایی را تغییر دهید. پس از انتخاب پیامهای مناسب ، من توانستم همان پیامی را که توسط دستگاه تست من ارسال شده است ، بازیابی کنم. این نشان می دهد که کل سیستم طبق انتظار کار می کند.
مرحله 8: نتیجه گیری
حتی اگر پروژه در ابتدا یک آزمایش بود ، از نتایجی که به دست آوردم خوشحالم. من توانستم سیگنال های UART را تا 115200 باود در حالت لبه "Both" بدون هیچ مشکلی نمونه برداری کنم و حتی در حالت لبه "Falling" به 230400 باود رسیدم. می توانید تنظیمات آزمایش من را در تصویر بالا مشاهده کنید.
پیاده سازی من چندین اشکال دارد ، از آنجا شروع می شود که می تواند فقط یک سیگنال را در یک زمان ضبط کند ، زیرا فقط پین 8 Arduino UNO "قابلیت ضبط ورودی را دارد". اگر در حال جستجو برای تجزیه و تحلیل منطقی Arduino با کانال های بیشتر هستید ، یکی از Catoblepas را بررسی کنید.
شما نمی توانید انتظار داشته باشید که Arduino UNO بتواند سیگنال هایی با فرکانس های بالا (برخی از مگاهرتز) ضبط کند ، زیرا فقط 16 مگاهرتز کلاک می کند (اگر کسی این کار را انجام داد ، من علاقه مند هستم که روش آن را ببینم). با این حال ، من هنوز تحت تأثیر نتایج بدست آمده از این میکروکنترلر ATMEGA328P هستم.
فکر نمی کنم زیاد روی کد کار کنم. آزمایشات خود را انجام دادم و نتایجی را که به دنبال آن بودم به دست آوردم. اما اگر کسی می خواهد مشارکت کند ، می توانید تمام یا قسمتی از کد من را اصلاح و توزیع کنید.
این اولین دستورالعمل من بود و فکر می کنم طولانی باشد. امیدوارم خواندن آن برای شما جالب بوده باشد.
اگر خطایی پیدا کردید یا سوالی داشتید به من اطلاع دهید!
توصیه شده:
کاوشگر Arduino Nano Logic: 17 مرحله (همراه با تصاویر)
کاوشگر Arduino Nano Logic: این پروژه نسخه جدیدی از Probe Logic Probe من است ، اما اکنون به جای Arduino Uno با آردوینو نانو ساخته شده است. یک صفحه نمایش 3 رقمی ، چند مقاومت و آردوینو نانو عملاً اجزای این پروژه جالب هستند که
تطبیق یک گوشی تلفن همراه با تلفن همراه: 7 مرحله (همراه با تصاویر)
انطباق یک گوشی تلفن همراه با یک تلفن همراه: توسط بیل ریو ([email protected]) اقتباس شده برای دستورالعمل ها توسط موس ([email protected]) سلب مسئولیت: روش شرح داده شده در اینجا ممکن است برای شما کارساز نباشد گرفتن. اگر کار نمی کند ، یا اگر چیزی را خراب می کنید ، m نیست
نور ضبط کنترل شده Midi برای Logic Pro X: 9 مرحله (همراه با تصاویر)
Midi Controlled Recording Light for Logic Pro X: این آموزش اطلاعاتی در مورد نحوه ایجاد و برنامه ریزی یک رابط MIDI اساسی برای کنترل نور ضبط توسط Logic Pro X ارائه می دهد. تصویر یک نمودار بلوک از کل سیستم از رایانه Mac را نشان می دهد که Logic Pro را اجرا می کند. X در سمت چپ به سای
Arduino I2C Sniffer: 4 مرحله
Arduino I2C Sniffer: I2C یک پروتکل سریال است که برای ارتباط یک میکروکنترلر با لوازم جانبی خارجی متصل به همان مدار استفاده می شود. هر وسیله جانبی باید دارای یک شماره شناسه منحصر به فرد به نام آدرس باشد که برای شناسایی آن به عنوان گیرنده مورد نظر یک پیام مشخص استفاده می شود
همراه Arduino Desktop: 3 مرحله (همراه با تصاویر)
همراه آردوینو رومیزی: این ایده ایده ای بود که من هنگام تحریک در مشق شب ، مسائل رایانه ای یا بازی به سراغم آمد. قرار است این همراه به & quot؛ خشمگین & quot؛ شما واکنش نشان دهد. رفتار و یا شما را از رفتار خود آگاه کند یا آرامش دهد. آنچه شما برای