خواندن همزمان چند داده و ذخیره آن در SD CARD با سیستم عامل RTOS

400,000 ریال

ما قبلاً نحوه استفاده از ADC ، DHT11 ، SD CARD و FreeRTOS را آموزش داده ایم. امروز در این آموزش قصد داریم ، همه آنها را با هم ترکیب کنیم. ما داده های را که از طریق ADC به آن متصل است ، خواهیم خواند و از سنسور دما DHT11 نیز خوانده شده ، و این داده ها را به کارت SD خواهیم ریخت. کل این فرآیند در تسک های مختلف FreeRTOS انجام خواهد شد.

 

توضیحات

ما قبلاً نحوه استفاده از ADC ، DHT11 ، SD CARD و FreeRTOS را آموزش داده ایم. امروز در این آموزش قصد داریم ، همه آنها را با هم ترکیب کنیم. ما داده های را که از طریق ADC به آن متصل است ، خواهیم خواند و از سنسور دما DHT11 نیز خوانده شده ، و این داده ها را به کارت SD خواهیم ریخت. کل این فرآیند در تسک های مختلف FreeRTOS انجام خواهد شد.

در تصویر بالا تنظیمات ADC است که در آن از کانال ۱ استفاده خواهیم کرد. TIM7 برای تأخیر در میکرو ثانیه مورد استفاده قرار می گیرد که برای عملکرد سنسور DHT11 مورد نیاز خواهد بود. TIM1 به عنوان تاخیر دوره ای استفاده می شود ، که در آن هر ۲ ثانیه یک وقفه ایجاد می شود. ما از این وقفه جهت ریلیز یا انتشار یک سمافور برای عملیات تسک مربوط به DHT11 استفاده خواهیم کرد.

غیر از راه اندازی فوق ، ما همچنین باید FATFS ، FreeRTOS و SPI را راه اندازی کنیم. برای دریافت اطلاعات بیشتر در مورد تنظیمات این موارد ، می توانید کد را بارگذاری کرده و پرونده .ioc مربوط به کیوب را بررسی کنید ، یا برای توضیحات مربوط به این مجموعه مورد استفاده ، می توانید پروژه های موجود در وب سایت را مشاهده کنید.

 

بخش های مهم کد سورس

;uint16_t ADC_VA

;int Temperature, Humidity

;xTaskHandle ADC_Task_Hnadler

;xTaskHandle DHT_Task_Hnadler

;xTaskHandle SDCARD_Task_Hnadler

;xSemaphoreHandle DHT_SEM

 

در بالا ، ما متغیرهایی را برای ذخیره داده های ADC و دما ایجاد کرده ایم. همچنین ، سه هندلر به همراه ۱ هندلر semaphore نیز تعریف شده است.

;(“/”) Mount_SD

;()Format_SD

;Create_File(“ADC_DATA.TXT”) 

;Create_File(“TEMP.TXT”)

;(“/”)Unmount_SD

 

در داخل تابع اصلی ، ما پرونده ها را ایجاد می کنیم ، جایی که داده ها بعداً توسط تسک ها به روز می شوند.

 ;()DHT_SEM = xSemaphoreCreateBinary

   ;xTaskCreate(DHT_Task, “DHT”, 128, NULL, 1, &DHT_Task_Hnadler)

  ;xTaskCreate(ADC_Task, “ADC”, 128, NULL, 2, &ADC_Task_Hnadler)

  ;xTaskCreate(SDCARD_Task, “SD”, 128, NULL, 3, &SDCARD_Task_Hnadler)

   HAL_TIM_Base_Start(&htim7);  // us delay timer 

HAL_TIM_Base_Start_IT(&htim1); // periodic delay timer 

  ;()vTaskStartScheduler

 

در حال حاضر ما می خواهیم سمافور و سه تسک را ایجاد کنیم. در اینجا ، اولویت بالاتر SDCARD_Task است ، زیرا ما نمی خواهیم کار دیگری را برای جلوگیری از آن انجام دهیم ، در حالی که تسک در دسترسی کارد SD است. در این حالت ممکن است خرابی درایو اتفاق بیفتد.

TIM7 را به طور معمول و TIM1 را در مد وقفه شروع کنید. دلیل این امر این است که TIM1 در هر ۲ ثانیه وقفه ای را ایجاد می کند.

و در آخر برنامه زمانبندی (scheduler) را شروع خواهیم کرد.



مدت ویدئو: ۴۵ دقیقه

نوع آموزش: فارسی 

کد سورس: دارد

شماتیک مدار: دارد

تست روی سخت افزار: دارد

کامپایلر: IAR Embeded

کتابخانه: HAL Library


توجه: برای پخش ویدئو نرم افزار های KMPlayer و K-Lite Codec Pack در سیستم شما نصب باشد. و از نرم افزار ۷zip برای خارج کردن پروژه از حالت فشرده استفاده کنید.