اگر میکروکنترلرها سرگرمی شما هستند، چگونه و چرا برگه های داده را بخوانید

اگر میکروکنترلرها سرگرمی شما هستند، چگونه و چرا برگه های داده را بخوانید

به لطف آردوینو جادویی، میکروالکترونیک یک سرگرمی شیک در سال های اخیر است. اما مشکل اینجاست: با علاقه کافی، می توانید به سرعت از DigitalWrite() پیشی بگیرید، اما اینکه چه کاری باید انجام شود کاملاً مشخص نیست. توسعه دهندگان آردوینو تلاش زیادی کرده اند تا مانع ورود به اکوسیستم خود را کاهش دهند، اما خارج از آن هنوز جنگلی تاریک از مدارهای خشن وجود دارد که برای آماتورها غیرقابل دسترسی است.

به عنوان مثال، دیتاشیت ها. به نظر می رسد آنها همه چیز دارند، آن را بردارید و از آن استفاده کنید. اما نویسندگان آنها به وضوح وظیفه عمومی کردن میکروکنترلرها را برای خود تعیین نکرده اند. گاهی به نظر می رسدکه هنگام توصیف چیزهای ساده عمداً از اصطلاحات و اختصارات نامفهوم سوء استفاده می کنند تا تا حد امکان افراد ناآگاه را گیج کنند. اما همه چیز خیلی بد نیست؛ در صورت تمایل، تابوت باز می شود.

در این مقاله تجربه یک متخصص علوم انسانی را در ارتباط با دیتاشیت ها برای اهداف سرگرمی به اشتراک می گذارم. این متن برای آماتورهایی در نظر گرفته شده است که از شلوارهای آردوینو بزرگ شده اند؛ این متن تا حدودی درک اصول عملکرد میکروکنترلرها را فرض می کند.

من با سنتی شروع می کنم

فلش LED در آردوینو

و بلافاصله کد:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"این چیه؟ - یک خواننده ماهر خواهد پرسید. - چرا چیزی در ثبت ورودی PINB می نویسید؟ فقط برای خواندن است!» واقعا، مستندات آردوینومانند اکثر مقالات آموزشی در اینترنت، این ثبت نام فقط خواندنی است. من خودم اینطور فکر می کردم تا اینکه دوباره آن را خواندم برگه داده به Atmega328p، تهیه این مقاله. و آنجا:

اگر میکروکنترلرها سرگرمی شما هستند، چگونه و چرا برگه های داده را بخوانید

این یک عملکرد نسبتاً جدید است، در Atmega8 نبود، همه در مورد آن نمی دانند یا به دلایل سازگاری با گذشته ذکر نشده است. اما برای نشان دادن این ایده که دیتاشیت ها برای استفاده از تمام قابلیت های تراشه، از جمله موارد کمتر شناخته شده، ارزش خواندن دارند، کاملاً مناسب است. و این تنها دلیل نیست.

دیگر چرا دیتاشیت ها را بخوانید؟

معمولاً مهندسان آردوینو که به اندازه کافی با LED ها و AnalogWrites بازی کرده اند، شروع به اتصال انواع ماژول ها و تراشه ها به برد می کنند که قبلاً کتابخانه های نوشته شده ای برای آنها وجود دارد. دیر یا زود، کتابخانه ای ظاهر می شود که آنطور که باید کار نمی کند. سپس آماتور شروع به برداشتن آن می کند تا آن را تعمیر کند و سپس ...

و اتفاقی کاملاً نامفهوم در آنجا رخ می دهد، بنابراین شما باید به گوگل بروید، آموزش های متعددی را بخوانید، قسمت هایی از کد مناسب شخصی را بیرون بکشید و در نهایت به هدف خود برسید. این حس موفقیت آمیز قدرتمندی به شما می دهد، اما در واقع این فرآیند مانند اختراع مجدد چرخ با مهندسی معکوس یک موتورسیکلت است. علاوه بر این، درک نحوه عملکرد این دوچرخه افزایش نمی یابد. می دانم، چون خودم این کار را برای مدت طولانی انجام می دادم.

اگر به جای این فعالیت هیجان انگیز چند روزی را صرف مطالعه مستندات Atmega328 می کردم، مقدار زیادی در زمان صرفه جویی می کردم. از این گذشته ، این یک میکروکنترلر نسبتاً ساده است.

بنابراین، حداقل باید برگه های داده را بخوانید تا تصور کنید میکروکنترلر به طور کلی چگونه کار می کند و چه کاری می تواند انجام دهد. و در ادامه:

  • برای بررسی و بهینه سازی کتابخانه های دیگران. آنها اغلب توسط همان آماتورهایی نوشته می شوند که چرخ را دوباره اختراع می کنند. یا برعکس، نویسندگان عمدا آنها را بیش از حد بی‌خطا می‌کنند. بگذارید سه برابر بزرگتر و کندتر باشد، اما قطعاً کار خواهد کرد.

  • توانایی استفاده از تراشه‌ها در پروژه‌ای که کسی برای آن کتابخانه ننوشته است.

  • برای اینکه مهاجرت از یک خط MK به خط دیگر را برای خود آسان تر کنید.

  • در نهایت کدهای قدیمی خود را که در آردوینو نمی گنجیدند بهینه کنید.

  • برای یادگیری نحوه کنترل مستقیم هر چیپ از طریق رجیسترهای آن، بدون زحمت مطالعه ساختار کتابخانه های آن، در صورت وجود.

چرا وقتی HAL و LL وجود دارد، مستقیماً به رجیسترها بنویسید؟

واژه نامه
HAL، لایه انتزاعی بالا – کتابخانه ای برای کنترل میکروکنترلر با سطح بالایی از انتزاع. اگر نیاز به استفاده از رابط SPI1 دارید، به سادگی SPI1 را پیکربندی و فعال می کنید بدون اینکه فکر کنید کدام ثبات مسئول چه چیزی است.
LL، API سطح پایین - کتابخانه ای حاوی ماکروها یا ساختارهایی با آدرس های ثبت نام که به شما امکان می دهد با نام به آنها دسترسی داشته باشید. DDRx، PORTx، PINx در Atmega LL هستند.

اختلافات در مورد "HAL، LL یا ثبت نام" به طور منظم در نظرات در Habré رخ می دهد. بدون ادعای دسترسی به دانش اختری، من به سادگی تجربیات و افکار آماتور خود را به اشتراک خواهم گذاشت.

با کم و بیش فهمیدن Atmega و خواندن مقالاتی در مورد شگفت‌انگیز بودن STM32، نیم دوجین تخته مختلف - Discovery و Blue Pills و حتی فقط چیپس برای محصولات خانگی خود خریدم. همه آنها به مدت دو سال گرد و غبار را در یک جعبه جمع کردند. گاهی اوقات به خودم می گفتم: «همین است، از این آخر هفته من بر STM مسلط می شوم»، CubeMX را راه اندازی کردم، یک راه اندازی برای SPI ایجاد کردم، به دیوار متن نتیجه نگاه کردم، به طور آزادانه با حق چاپ STM مزه دار شد، و به این نتیجه رسیدم که این نیز به نحوی است. بسیار

اگر میکروکنترلرها سرگرمی شما هستند، چگونه و چرا برگه های داده را بخوانید

البته، می توانید بفهمید که CubeMX چه نوشته است. اما در عین حال واضح است که به خاطر سپردن تمام عبارات و سپس نوشتن آنها با دست غیر واقعی است. و برای رفع اشکال، اگر به طور تصادفی فراموش کردم که کادری را در Cube علامت بزنم، کاملاً خوب است.

دو سال گذشت هنوز دارم لبامو می لیسم ST MCU Finder برای همه انواع خوشمزه، اما فراتر از درک من، چیپس، و به طور تصادفی در سراسر آمد مقاله فوق العاده، البته در مورد STM8. و ناگهان متوجه شدم که در تمام این مدت در باز را می زدم: رجیسترهای STM مانند سایر MK ها مرتب شده اند و مکعب برای کار با آنها ضروری نیست. اصلا ممکن بود؟..

HAL و به طور خاص STM32CubeMX ابزاری برای مهندسان حرفه ای است که از نزدیک با تراشه های STM32 کار می کنند. ویژگی اصلی سطح بالایی از انتزاع است، توانایی انتقال سریع از یک MCU به دیگری و حتی از یک هسته به هسته دیگر، در حالی که در خط STM32 باقی می ماند. علاقه مندان به ندرت با چنین مشکلاتی مواجه می شوند - انتخاب میکروکنترلرهای ما معمولاً به مجموعه AliExpress محدود می شود و ما اغلب بین تراشه های کاملاً متفاوتی مهاجرت می کنیم - از Atmega به STM، از STM به ESP یا هر چیز جدیدی که دوستان چینی خود داریم حرکت می کنیم. به سمت ما پرتاب کنید HAL در اینجا کمکی نخواهد کرد و مطالعه آن زمان زیادی را از بین خواهد برد.

LL باقی می ماند - اما از آن تا رجیسترها نیم قدم وجود دارد. من شخصاً نوشتن ماکروهایم با آدرس‌های ثبت را مفید می‌دانم: دیتاشیت را با دقت بیشتری مطالعه می‌کنم، به این فکر می‌کنم که در آینده به چه چیزهایی نیاز خواهم داشت و قطعاً چه چیزهایی را نخواهم داشت، برنامه‌هایم را بهتر ساختار می‌دهم، و به طور کلی، غلبه بر به حفظ کردن کمک می‌کند. .

علاوه بر این، تفاوت ظریفی با STM32F103 محبوب وجود دارد - دو نسخه LL ناسازگار برای آن وجود دارد، یکی از رسمی STM، دومی از Leaf Labs، که در پروژه STM32duino استفاده می شود. اگر یک کتابخانه منبع باز بنویسید (و من دقیقا داشتم چنین وظیفه ای، یا باید دو نسخه بسازید یا مستقیماً به رجیسترها دسترسی داشته باشید.

در نهایت، حذف LL، به نظر من، مهاجرت را ساده می کند، به خصوص اگر از همان ابتدای پروژه روی آن برنامه ریزی کنید. مثال اغراق آمیز: بیایید Arduino blink را در Atmel Studio بدون LL بنویسیم:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

برای اینکه این کد LED روی برد چینی با STM8 (از ST Visual Desktop) چشمک بزند، کافی است دو آدرس را در آن تغییر دهید:

#define DDR_B 0x5007
#define OUT_B 0x5005

بله من از قابلیت وصل ال ای دی روی برد خاص استفاده میکنم خیلی آروم چشمک میزنه ولی میشه!

چه نوع دیتاشیت هایی وجود دارد؟

در مقاله‌ها و انجمن‌ها، هم روسی و هم انگلیسی، "دیتاشیت" به معنای هرگونه مستندات فنی برای تراشه است، و من در این متن همین کار را انجام می‌دهم. به طور رسمی، آنها فقط یک نوع از این اسناد هستند:

دیتاشیت - ویژگی های عملکرد، ویژگی های تاکتیکی و فنی. برای هر قطعه الکترونیکی اجباری است. نگه داشتن اطلاعات پس زمینه مفید است، اما چیز زیادی برای خواندن متفکرانه در آن وجود ندارد. با این حال، تراشه‌های ساده‌تر اغلب به یک دیتاشیت محدود می‌شوند تا اسناد غیرضروری تولید نکنند. در این مورد راهنمای مرجع در اینجا گنجانده شده است.

راهنمای مرجع - خود دستورالعمل ها، یک کتاب سالم از 1000 صفحه. کار هر چیزی که در تراشه فشرده شده است با جزئیات شرح داده شده است. سند اصلی برای تسلط بر میکروکنترلر. بر خلاف دیتاشیت، دستورالعمل ها برای طیف گسترده ای از MK ها نوشته شده است؛ آنها حاوی اطلاعات زیادی در مورد تجهیزات جانبی هستند که در مدل خاص شما موجود نیستند.

کتابچه راهنمای برنامه نویسی یا راهنمای مجموعه دستورالعمل - دستورالعمل برای دستورات میکروکنترلر منحصر به فرد. برای کسانی که به زبان اسمبلی برنامه نویسی می کنند طراحی شده است. نویسندگان کامپایلر به طور فعال از آن برای بهینه سازی کد استفاده می کنند، بنابراین در حالت کلی ما به آن نیازی نخواهیم داشت. اما نگاه کردن به اینجا برای درک کلی، برای برخی از دستورات خاص مانند خروج از یک وقفه، و همچنین برای استفاده فعال از دیباگر مفید است.

یادداشت برنامه - نکات مفید برای حل مشکلات خاص، اغلب با مثال های کد.

ورق اشتباه - شرح موارد رفتار غیر استاندارد تراشه با گزینه های راه حل، در صورت وجود.

آنچه در دیتاشیت ها وجود دارد

مستقیما به دیتاشیت ممکن است به بخش های زیر نیاز داشته باشیم:

خلاصه دستگاه – صفحه اول دیتاشیت به طور مختصر دستگاه را توصیف می کند. در مواقعی بسیار مفید است که در جایی تراشه ای پیدا کردید (آن را در یک فروشگاه دیدید، آن را لحیم کردید، با ذکری مواجه شدید) و می خواهید بفهمید که چیست.

عمومی توضیحات - شرح دقیق تری از قابلیت های تراشه ها از خط.

پین اوت ها – نمودارهای پین‌آوت برای همه بسته‌های تراشه‌های ممکن (کدام پین روی کدام پایه است).

شرح پین - شرح هدف و قابلیت های هر پین.

نقشه حافظه - بعید است که به یک نقشه آدرس در حافظه نیاز داشته باشیم، اما گاهی اوقات شامل یک جدول از آدرس های بلوک رجیستر نیز می شود.

ثبت نام نقشه - جدول آدرس های بلوک های رجیستر، به عنوان یک قاعده، در دیتاشیت قرار دارد و در راهنمای Ref - فقط شیفت (آفست آدرس).

ویژگی های الکتریکی - در این بخش ما در درجه اول به آن علاقه مندیم اعتبار حداکثر مطلق، فهرست حداکثر بارهای هر تراشه. برخلاف Atmega328p غیرقابل تخریب، اکثر MK ها به شما اجازه نمی دهند بارهای جدی را به پین ​​ها متصل کنید، که برای آردوینیست ها شگفتی ناخوشایندی است.

اطلاعات بسته بندی – نقشه هایی از موارد موجود که هنگام طراحی تابلوهای شما مفید است.

راهنمای مرجع از نظر ساختاری شامل بخش هایی است که به تجهیزات جانبی خاصی که در عنوان آنها مشخص شده است اختصاص داده شده است. هر فصل را می توان به سه بخش تقسیم کرد:

بررسی اجمالی, معرفی, امکانات - مروری بر قابلیت های جانبی؛

تابعی توضیحات, راهنمای استفاده یا به سادگی بلوک اصلی بخش - شرح متنی مفصل از اصول دستگاه جانبی و نحوه استفاده از آن.

ثبت - شرح رجیسترهای کنترل در موارد ساده ای مانند GPIO یا SPI، این ممکن است برای شروع استفاده از لوازم جانبی کاملاً کافی باشد، اما اغلب هنوز مجبورید قسمت های قبلی را بخوانید.

نحوه خواندن دیتاشیت ها

دیتاشیت ها از روی عادت با حجم و فراوانی کلمات نامفهوم شما را می ترسانند. در واقع، اگر چند هک زندگی را بدانید، همه چیز چندان ترسناک نیست.

مجموعه پی دی اف خوان خوب. برگه‌های داده به سنت باشکوه دستورالعمل‌های کاغذی نوشته شده‌اند؛ آنها برای چاپ، قرار دادن با نشانک‌های پلاستیکی و دوخت عالی هستند. فرامتن در آنها به مقدار کم مشاهده می شود. خوشبختانه حداقل ساختار سند با بوکمارک طراحی شده است، بنابراین یک خواننده مناسب با ناوبری آسان بسیار ضروری است.

دیتاشیت کتاب درسی استروستروپ نیست؛ شامل نیازی به خواندن همه چیز نیست. اگر از توصیه قبلی استفاده کرده اید، فقط بخش مورد نظر را در نوار نشانک ها پیدا کنید.

دیتاشیت ها مخصوصا کتابچه های راهنما، می تواند قابلیت های یک تراشه خاص را توصیف کند کل خط. این بدان معناست که نیمی یا حتی دو سوم اطلاعات مربوط به تراشه شما نیست. قبل از مطالعه ثبت نام های TIM7، وارد شوید عمومی توضیحات، آن را داری؟

بدانید انگلیسی به اندازه کافی برای سطح پایه. دیتاشیت ها شامل نیمی از اصطلاحات ناآشنا برای گوینده معمولی و نیمی از ساختارهای اتصال ساده است. همچنین دیتاشیت های عالی چینی به زبان انگلیسی چینی وجود دارد که نیمی از آنها اصطلاحات هستند و نیمه دوم مجموعه ای تصادفی از کلمات هستند.

اگر ملاقات کردید کلمه ناآشنا، سعی نکنید آن را با استفاده از فرهنگ لغت انگلیسی به روسی ترجمه کنید. اگر گیج شده اید هیسترس، سپس ترجمه "هیسترزیس" شما را گرمتر نمی کند. از Google، Stack Overflow، Wikipedia، forums استفاده کنید، جایی که مفهوم مورد نیاز خواهد بود با کلمات ساده همراه با مثال توضیح داده شده است.

بهترین راه برای درک آنچه می خوانید این است بررسی در عمل. بنابراین، در صورتی که هنوز چیزی را اشتباه متوجه شدید و دود جادویی را مشاهده کردید، تابلوی اشکال‌زدایی را که با آن آشنا هستید، یا بهتر است با دو مورد، همراه داشته باشید.

این عادت خوبی است که برگه داده خود را در دسترس داشته باشید خواندن آموزش کسی یا مطالعه کتابخانه شخص دیگری کاملاً ممکن است که راه حل بهینه تری برای مشکل خود در آن پیدا کنید. و برعکس - اگر نمی توانید از برگه اطلاعات بفهمید که رجیستر چگونه عمل می کند، آن را در گوگل جستجو کنید: به احتمال زیاد، شخصی قبلاً همه چیز را با کلمات ساده توصیف کرده یا کد واضحی را در GitHub گذاشته است.

واژه نامه

چند کلمه و نماد مفید که به شما کمک می کند تا به سرعت به دیتاشیت ها عادت کنید. آنچه را که در یکی دو روز گذشته به یاد آوردم، اضافات و اصلاحات قابل استقبال است.

برق
VDC, درست است، واقعی - "بعلاوه"، غذا
در مقابل, Vee به - "منهای"، زمین
جاری - جاری
ولتاژ - ولتاژ
برای غرق کردن جریان - به عنوان "زمین" برای بار خارجی کار کنید
منبع جریان - قدرت بار خارجی
پین سینک/منبع بالا - پین با افزایش "تحمل" بارگذاری

IO
H، بالا – روی پین Vcc
L، کم – روی پین Vss
امپدانس بالا, سلام-Z, شناور - هیچ چیز روی پین وجود ندارد، "مقاومت بالا"، تقریباً برای دنیای خارج نامرئی است.
بالا کشیدن ضعیف, پایین کشیدن ضعیف – مقاومت بالاکش/پایین داخلی، تقریباً معادل 50 کیلو اهم (به صفحه داده مراجعه کنید). به عنوان مثال برای جلوگیری از آویزان شدن پین ورودی در هوا و ایجاد آلارم کاذب از آن استفاده می شود. ضعیف - چون "قطع کردن" او آسان است.
فشار کشش - حالت خروجی پین، که در آن بین سوئیچ می شود زیاد и کم – OUTPUT معمولی از آردوینو.
زهکشی باز - تعیین حالت خروجی که پین ​​می تواند در آن باشد کمیا امپدانس بالا / شناور. علاوه بر این، تقریباً همیشه این یک تخلیه باز "واقعی" نیست، دیودهای محافظ، مقاومت ها و غیره وجود دارد. این به سادگی یک تعیین برای حالت زمین / هیچ است.
زهکش باز واقعی - اما این یک زهکش باز واقعی است: پین در صورت باز بودن مستقیماً به زمین منتهی می شود یا اگر بسته باشد در بلاتکلیفی باقی می ماند. این بدان معنی است که در صورت لزوم می توان ولتاژی بیشتر از Vcc را از آن عبور داد، اما ماکزیمم همچنان در دیتاشیت در قسمت مشخص شده است. حداکثر مطلق رتبه بندی / ولتاژ.

واسط
به صورت سری - به صورت سری متصل می شوند
زنجیر بستن، به زنجیر کشیدن - تراشه ها را با استفاده از اتصال سریال در یک زنجیره جمع کنید و تعداد خروجی ها را افزایش دهید.
تغییر – shift، معمولاً به معنای تغییر کمی است. به ترتیب، برای جابجایی در и برای جابجایی - دریافت و انتقال داده ها به صورت بیت به بیت
چفت - ضامنی که بافر را می پوشاند در حالی که بیت ها از طریق آن جابه جا می شوند. هنگامی که انتقال کامل شد، دریچه باز می شود و بیت ها شروع به کار می کنند.
برای ساعت - انتقال بیت به بیت را انجام دهید، همه بیت ها را به مکان های مناسب منتقل کنید.
بافر دوگانه, ثبت سایه, ثبت پیش بارگذاری - تعیین تاریخ، زمانی که رجیستر باید بتواند داده های جدید را بپذیرد، اما آن را تا مدتی نگه دارد. به عنوان مثال، برای اینکه PWM به درستی کار کند، پارامترهای آن (چرخه وظیفه، فرکانس) نباید تا زمانی که چرخه فعلی به پایان برسد تغییر کند، اما پارامترهای جدید می توانند از قبل منتقل شوند. بر این اساس، موارد فعلی حفظ می شود ثبت سایه، و موارد جدید در آن قرار می گیرند ثبت پیش بارگذاری، در رجیستر تراشه مربوطه نوشته می شود.

همه جور چیز
پیش مقیاس کننده – پیش مقیاس کننده فرکانس
برای تنظیم کمی - بیت را روی 1 تنظیم کنید
برای پاک کردن/تنظیم مجدد کمی - تنظیم مجدد بیت به 0 (تنظیم مجدد – ویژگی صفحه داده STM)

بعدی چیست؟

به طور کلی، یک بخش عملی در اینجا با نمایش سه پروژه در STM32 و STM8 برنامه ریزی شده است که به طور خاص برای این مقاله با استفاده از برگه های داده، با لامپ، SPI، تایمر، PWM و وقفه ساخته شده است:

اگر میکروکنترلرها سرگرمی شما هستند، چگونه و چرا برگه های داده را بخوانید

اما متن زیاد است، بنابراین پروژه ها به قسمت دوم ارسال می شوند.

مهارت خواندن دیتاشیت ها به شما در انجام سرگرمی هایتان کمک می کند، اما بعید است که جایگزین ارتباط زنده با علاقه مندان همکار در انجمن ها و چت ها شود. برای این منظور، هنوز هم باید قبل از هر چیز انگلیسی خود را بهبود بخشید. بنابراین، کسانی که مطالعه را به پایان رسانده اند، جایزه ویژه دریافت خواهند کرد: دو درس رایگان در Skyeng با اولین پرداخت با استفاده از کد HABR2.

منبع: www.habr.com

اضافه کردن نظر