طراحی رابط کاربری روی نمایشگرهای سری DWIN، بدون درک درست از مکانیزم مدیریت داده، به سرعت به بنبست میرسد. ابزار Data variable در نرم افزار DGUS یکی از مفاهیم محوری این محیط است که نحوه تبادل اطلاعات بین میکروکنترلر و نمایشگر را تعریف میکند. اگر این مکانیزم درست پیکربندی نشود، نه دادهها بهموقع بهروز میشوند، نه رابط کاربری رفتار قابل پیشبینی خواهد داشت.
Data Variable چیست و چه جایگاهی در DGUS دارد
در محیط DGUS، هر عنصر بصری روی صفحه، از یک عدد ساده تا یک نوار پیشرفت، باید به یک منبع داده متصل باشد. Data Variable این منبع را فراهم میکند؛ یک آدرس مشخص در حافظه که مقدار آن میتواند توسط میکروکنترلر نوشته یا خوانده شود و نمایشگر بر اساس تغییر آن واکنش نشان میدهد.
جایگاه این ابزار در معماری DGUS بسیار اساسی است. برخلاف محیطهای گرافیکی ساده که دادهها را بهصورت ثابت نمایش میدهند، DGUS با تعریف متغیرهای دادهای آدرسپذیر، یک لایه ارتباطی بین سختافزار و UI ایجاد میکند. هر بار که مقدار یک آدرس تغییر میکند، اجزای UI مرتبط با آن آدرس بلافاصله بهروز میشوند. این مدل رفتاری، طراحی رابط کاربری واکنشپذیر را بدون نیاز به منطق رندرینگ دستی ممکن میسازد.
تفاوت مهم اینجاست: Data Variable صرفاً یک متغیر برنامهنویسی نیست. یک موجودیت آدرسپذیر در حافظه نمایشگر است که هم توسط CPU داخلی DWIN مدیریت میشود، هم از طریق پورت سریال در دسترس سیستم خارجی قرار میگیرد.

پل ارتباطی بین سختافزار و رابط کاربری در نمایشگرهای DGUS
ساختار فنی متغیر داده و نحوه ذخیرهسازی در حافظه
متغیرهای داده در DGUS بهصورت word (دو بایت) در حافظه ذخیره میشوند. هر آدرس متغیر معادل یک واحد ۱۶ بیتی است و برای دادههای بزرگتر مانند اعداد ۳۲ بیتی یا رشتهها، چند آدرس متوالی اشغال میشود. این ساختار ثابت است و باید هنگام طراحی نقشه حافظه پروژه لحاظ شود.
آدرسدهی در SRAM و FLASH
DWIN دو فضای حافظه مجزا برای متغیرها در اختیار میگذارد:
- SRAM (حافظه موقت): دادههایی که در حین اجرا تغییر میکنند، مثل مقادیر سنسور یا وضعیت سیستم، در این ناحیه ذخیره میشوند. محتوای SRAM پس از قطع برق پاک میشود.
- FLASH (حافظه دائم): برای مقادیر پیشفرض و پیکربندیهایی که باید پس از راهاندازی مجدد حفظ شوند، استفاده میشود. نوشتن مکرر روی FLASH به دلیل محدودیت سیکلهای نوشتن توصیه نمیشود.
انتخاب نادرست بین این دو فضا یکی از خطاهای رایج در پروژههای تازهکار است. دادههایی که باید پس از راهاندازی مجدد نمایشگر حفظ شوند، حتماً باید از FLASH خوانده شوند، نه SRAM.
تعریف و پیکربندی Data Variable در محیط DGUS
در محیط طراحی DGUS II، تعریف یک متغیر داده از طریق پنجره تنظیمات اجزای UI انجام میشود. هر کامپوننت یک فیلد «VP Address» (Variable Pointer Address) دارد که آدرس متغیر مرتبط با آن را مشخص میکند. این آدرس باید بهصورت هگزادسیمال وارد شود و با آدرسهای سایر متغیرها تداخل نداشته باشد.
یک نکته عملی: قبل از شروع طراحی، یک جدول نقشه حافظه (Memory Map) برای پروژه تهیه کنید. آدرس هر متغیر، نوع داده و اندازه آن را ثبت کنید. این کار در پروژههای با بیش از چند ده متغیر، از تداخل آدرسها و اشکالزدایی طاقتفرسا جلوگیری میکند.

نمایی از یک محیط کار آزمایشگاهی در حال پیکربندی متغیرها در نرمافزار DGUS II، به همراه جدول نقشه حافظه (Memory Map) و تجهیزات الکترونیکی
تنظیم نوع داده: integer، float و رشته
DGUS از چند نوع داده پشتیبانی میکند که باید در تنظیمات کامپوننت مشخص شوند:
- Integer (عدد صحیح): سادهترین نوع. مقدار بهصورت مستقیم در یک یا دو word ذخیره میشود. برای نمایش دما، شمارنده یا وضعیت رله مناسب است.
- Float (اعشاری): به چهار بایت نیاز دارد و باید دو آدرس متوالی اشغال کند. فرمت ذخیرهسازی از استاندارد IEEE 754 پیروی میکند.
- String (رشته): هر کاراکتر یک بایت اشغال میکند و طول رشته باید از پیش تعریف شود. برای نمایش پیام وضعیت یا نام واحد مناسب است.
انتخاب نوع داده اشتباه، بدون پیام خطا، باعث نمایش مقادیر نامعقول میشود. مطمئن شوید نوع داده در طرف میکروکنترلر و DGUS یکسان است.
اتصال متغیر داده به اجزای رابط کاربری (UI Components)
پس از تعریف آدرس متغیر، باید آن را به یک کامپوننت UI متصل کرد. DGUS اجزای متعددی دارد که هر کدام با متغیر داده رفتار خاصی دارند. کامپوننت «Variable Icon» یک آیکون را بر اساس مقدار عددی آدرس انتخاب میکند. «Slider» مقدار آدرس را بر اساس موقعیت لغزنده مینویسد. «Data Variable Display» مقدار عددی خام را با فرمت قابل تنظیم نمایش میدهد.
نکتهای که اغلب نادیده گرفته میشود: یک آدرس متغیر میتواند به چند کامپوننت همزمان متصل شود. این ویژگی برای همگامسازی نمایش یک مقدار در چند صفحه مختلف بسیار کاربردی است، فقط کافی است یک آدرس مشترک تعریف شود و هر صفحه همان آدرس را نمایش دهد.
اتصال ورودیهای لمسی (Touch Controls) به متغیرها هم از همین مکانیزم پیروی میکند. وقتی کاربر یک دکمه را لمس میکند، مقداری از پیش تعریفشده به آدرس مشخصی نوشته میشود. میکروکنترلر با خواندن این آدرس، رویداد لمس را تشخیص میدهد.
ارتباط Data Variable با میکروکنترلر از طریق پروتکل سریال
ارتباط بین میکروکنترلر خارجی و نمایشگر DWIN از طریق UART انجام میشود. پروتکل این ارتباط ساختار ثابتی دارد: هر بسته با هدر 0x5A 0xA5 شروع میشود، سپس طول بسته، دستور (خواندن یا نوشتن)، آدرس متغیر، و داده میآیند.
برای نوشتن یک مقدار روی آدرس متغیر، دستور 0x82 استفاده میشود. برای خواندن از آدرس، دستور 0x83 ارسال میشود و نمایشگر با بستهای حاوی داده پاسخ میدهد. نرخ بیت پیشفرض روی ۱۱۵۲۰۰ bps تنظیم است، اما قابل تغییر است.
یک نکته حیاتی برای عیبیابی: اگر میکروکنترلر داده میفرستد اما نمایشگر واکنش نشان نمیدهد، اول هدر بسته را بررسی کنید. اشتباه در مقدار هدر باعث میشود نمایشگر کل بسته را نادیده بگیرد. همچنین آدرس متغیر در بسته سریال باید با آدرس تعریفشده در پروژه DGUS دقیقاً مطابقت داشته باشد.

تست و بررسی سیگنالهای ارتباط سریال (UART) بین میکروکنترلر و نمایشگر هوشمند
خطاهای رایج در کار با متغیرهای داده و روش عیبیابی
بیشتر مشکلاتی که در کار با Data Variable پیش میآید، نه از نقص ابزار، بلکه از سوءتفاهم در نقشه حافظه یا پروتکل ارتباطی ریشه میگیرد. رایجترین موارد:
- تداخل آدرس: دو متغیر با نوع داده مختلف که از یک آدرس شروع میشوند. نتیجه: هر دو مقادیر غیرمنتظره نشان میدهند.
- عدم تطابق نوع داده: میکروکنترلر float میفرستد اما کامپوننت DGUS روی integer تنظیم است. داده تفسیر نادرست میشود.
- فراموش کردن آپلود فایل پیکربندی: تغییرات در محیط DGUS اعمال نمیشوند مگر اینکه فایلهای پروژه روی کارت حافظه نمایشگر بارگذاری شوند.
برای عیبیابی سریع، از ابزار مانیتور سریال استفاده کنید و بستههای ارسالشده را بایت به بایت بررسی کنید. اگر نمایشگر پاسخ میدهد اما مقدار نادرست است، مشکل معمولاً در نوع داده یا ترتیب بایتها (Big-Endian در برابر Little-Endian) است.
نکات عملی پیش از استقرار پروژه نهایی روی نمایشگر
قبل از اینکه پروژه را روی نمایشگر نهایی نصب کنید، یک چکلیست ساده زمان زیادی را ذخیره میکند:
- نقشه حافظه پروژه را بازبینی کنید و مطمئن شوید هیچ دو متغیری آدرس مشترک ندارند.
- همه کامپوننتهای UI را با مقادیر شبیهسازیشده تست کنید، قبل از اتصال به میکروکنترلر واقعی.
- فایلهای پروژه (بهویژه پوشه DWIN_SET) را با نسخه کامپایلشده نهایی جایگزین کنید.
- تنظیمات baud rate روی نمایشگر را با کد میکروکنترلر تطبیق دهید.
- رفتار متغیرها پس از روشن شدن مجدد نمایشگر را بررسی کنید؛ مطمئن شوید مقادیر پیشفرض درست بارگذاری میشوند.
یک توصیه آخر: اگر پروژه در محیطهای پر نویز الکتریکی مستقر میشود، مکانیزم تایید داده را در کد میکروکنترلر پیاده کنید. DGUS پاسخ خواندن را برمیگرداند، اما صحت داده در شرایط تداخل الکترومغناطیسی باید در لایه نرمافزاری تضمین شود.
تسلط بر ابزار Data variable در نرم افزار DGUS، در واقع تسلط بر منطق ارتباطی کل پروژه است. وقتی نقشه حافظه درست طراحی شود و پروتکل سریال بدون خطا پیادهسازی شود، رابط کاربری نمایشگر دقیقاً همان رفتاری را خواهد داشت که در طراحی هدف بوده است.
سوالات متداول درباره استفاده از ابزار Data Variable در نرمافزار DGUS
- چرا مقدار Data Variable روی نمایشگر بهروز نمیشود، در حالی که میکروکنترلر داده را ارسال میکند؟
معمولاً آدرس SRAM تعریفشده در DGUS با آدرسی که میکروکنترلر به آن مینویسد مطابقت ندارد. آدرس VP (Variable Pointer) در هر دو طرف باید یکسان باشد. همچنین بررسی کن که فرمت داده (integer دو بایتی یا float چهار بایتی) در پروتکل سریال با نوع تعریفشده در متغیر داده همخوانی داشته باشد؛ مغایرت نوع داده خاموشترین نوع خطاست چون هیچ پیام خطایی نمایش داده نمیشود. - تفاوت ذخیرهسازی Data Variable در SRAM و FLASH چیست و کدام را انتخاب کنم؟
SRAM برای مقادیر پویا که میکروکنترلر مرتباً آنها را تغییر میدهد استفاده میشود؛ بعد از قطع برق محتوا از بین میرود. FLASH برای مقادیر ثابت یا پیشفرض مناسب است که باید بعد از راهاندازی مجدد دستگاه حفظ شوند. در پروژههای اندازهگیری صنعتی، مقادیر آستانه و کالیبراسیون را در FLASH و خوانشهای لحظهای سنسور را در SRAM تعریف کن. - چطور یک متغیر داده از نوع float را درست روی نمایشگر نمایش دهم؟
در DGUS نوع داده را روی 0x01 (32-bit float) تنظیم کن و تعداد ارقام اعشار را در فیلد Decimal Point مشخص کن. میکروکنترلر باید مقدار را بهصورت IEEE 754 با ترتیب بایت Big-Endian ارسال کند. خطای رایج: ارسال float با ترتیب Little-Endian است که عدد کاملاً اشتباه روی صفحه ظاهر میشود. - چرا بعد از آپلود پروژه روی نمایشگر، مقادیر Data Variable صفر یا تصادفی هستند؟
فایل 22_Config.bin که تنظیمات متغیرهای داده را نگه میدارد بهدرستی جنریت یا کپی نشده. مطمئن شو که عملیات Generate از منوی DGUS انجام شده و تمام فایلهای بین 0_DWIN_SET وارد حافظه داخلی نمایشگر شدهاند. فقط کپیکردن فایلهای تصویر کافی نیست. - چطور یک متغیر داده را به چند UI Component مختلف (مثل نمودار و برچسب متنی) همزمان متصل کنم؟
همان آدرس VP را در تنظیمات هر Component جداگانه وارد کن. DGUS آدرس SRAM را بهعنوان منبع مشترک میخواند و هر Component بهطور مستقل مقدار را نمایش میدهد. محدودیتی در تعداد Component هایی که به یک آدرس اشاره میکنند وجود ندارد، اما اطمینان حاصل کن که نوع داده هر Component با فرمت مقدار ذخیرهشده سازگار باشد. - هزینه پردازشی خواندن و نوشتن مکرر Data Variable روی پایداری نمایشگر چه تاثیری دارد؟
نوشتن در SRAM محدودیت سیکل ندارد و برای بهروزرسانیهای پرتکرار (مثل هر ۱۰۰ میلیثانیه) مشکلی ایجاد نمیکند. نوشتن مکرر در FLASH اما عمر حافظه را کاهش میدهد؛ FLASH نمایشگرهای DWIN معمولاً ۱۰۰٬۰۰۰ سیکل نوشتن را تضمین میکنند. مقادیری که بیش از چند بار در ساعت تغییر نمیکنند را در FLASH ذخیره کن، بقیه را در SRAM.