Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2017:envi-logger

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2017:envi-logger [2018/01/22 05:45]
Miroslav Waldecker [SHT21, HP03M a ADC]
2017:envi-logger [2018/01/22 06:23] (aktuální)
Miroslav Waldecker [Záver]
Řádek 531: Řádek 531:
   }   }
 </​code>​ </​code>​
 +
 +==== RTC ====
 +
 +Inicializácia a nastavenie hodín reálneho času:
 +<code c>
 +void Init_rtc(void){
 +
 + rtc_config_t rtcConfig;
 +
 + RTC_GetDefaultConfig(&​rtcConfig);​
 + RTC_Init(RTC,​ &​rtcConfig);​
 +     /* Select RTC clock source */
 + RTC_SetClockSource(RTC);​
 +}
 +
 +void rtc_settime(rtc_datetime_t date){
 +
 +   RTC_StopTimer(RTC);​
 +   RTC_SetDatetime(RTC,​ &date);
 +   RTC_StartTimer(RTC);​
 +}
 +
 +rtc_datetime_t rtc_gettime(void){
 +
 + rtc_datetime_t date;
 +
 + RTC_GetDatetime(RTC,​ &date);
 + return(date);​
 +}
 +</​code>​
 +
 +==== Hlavná slučka a Fat FS ====
 +Kinetis software development kit obsahuje okrem štandardných ovládačov periférií aj middleware pre prácu s USB a SD kartami s podporou Fat FS, ktorý som použil. Tým, že zapisujem namerané údaje v textovom formáte, tieto sú po pripojeni SD karty do počítača bezproblémov spracovateľné. ​ V hlavnej slučke sa periodicky vyčítavajú údaje, ktoré sa okamžite zobrazujú na display-i a každých 10s sa otvorí súbor pre zápis a udaje sa zapíšu vo formáte dátum, čas, koncentrácia CO2, teplota, vlhkosť a tlak. Po zápise sa súbor okamžite uzavrie.
 +<code c>
 +while (1) {
 +
 + date = rtc_gettime();​
 + sprintf(str,​ "​%02hd-%02hd-%04hd %02hd:​%02hd:​%02hd ​    ",​ date.day,
 + date.month,​ date.year, date.hour, date.minute,​ date.second);​
 +
 + LCD_SetTextColor(ASSEMBLE_RGB(0,​ 0, 0));
 + LCD_CharSize(16);​
 + LCD_StringLine(1,​ 1, (uint8_t*) str);
 + co_value = get_concentration();​
 + sprintf(str,​ "​CO2:​%d ppm", co_value);
 + LCD_SetTextColor(ASSEMBLE_RGB(0,​ 0, 0xFF));
 + LCD_CharSize(24);​
 + LCD_StringLine(1,​ 16, (uint8_t*) str);
 +
 + temperature = read_temp();​
 + humidity = read_hum();
 + LCD_SetTextColor(ASSEMBLE_RGB(0xFF,​ 0, 0));
 + sprintf(str,​ "​T: ​  %2.2f C", temperature);​
 + LCD_StringLine(1,​ 40, (uint8_t*) str);
 + LCD_SetTextColor(ASSEMBLE_RGB(0,​ 0, 0xFF));
 + sprintf(str,​ "​RH: ​ %2.2f %%", humidity);
 + LCD_StringLine(1,​ 64, (uint8_t*) str);
 + LCD_SetTextColor(ASSEMBLE_RGB(0xFF,​ 0, 0));
 + pressure = read_pressure();​
 + sprintf(str,​ "​P:​%6.2fhPa",​ pressure);
 + LCD_StringLine(1,​ 88, (uint8_t*) str);
 + Delay(10);​
 +
 + if(card_ok && prev_second != date.second && !(date.second % 10)){
 + sprintf(g_bufferWrite,​ "​%02hd-%02hd-%04hd %02hd:​%02hd:​%02hd %d %2.2f %2.2f %6.2f \r\n", date.day,
 + date.month,​ date.year, date.hour, date.minute,​ date.second,​ co_value, temperature,​ humidity, pressure);
 + f_open(&​g_fileObject,​ _T("/​data.dat"​),​ (FA_WRITE | FA_READ | FA_OPEN_APPEND));​
 +
 + error = f_write(&​g_fileObject,​ g_bufferWrite,​ strlen(g_bufferWrite),​ &​bytesWritten);​
 + f_close(&​g_fileObject);​
 + prev_second = date.second;​
 + }
 + }
 +</​code>​
 +===== Video datalogger =====
 +{{youtube>​R_bAfAzXU1A?​medium}}
 +
 +===== Výpis dát =====
 +V tomto bolku je príklad zmeraných dát, potom ako som začal vetrať. Je vidieť, ako klesá koncentrácia CO2, ale zároveň aj s teplotou...
 +
 +<​file>​
 +14-01-2018 17:20:10 1052 21.98 27.91 1017.92 ​
 +14-01-2018 17:20:20 1021 21.99 27.36 1017.80 ​
 +14-01-2018 17:20:30 971 21.93 26.92 1017.80 ​
 +14-01-2018 17:20:40 955 21.92 26.60 1017.67 ​
 +14-01-2018 17:20:50 939 21.87 25.60 1017.90 ​
 +14-01-2018 17:21:00 920 21.83 24.97 1017.95 ​
 +14-01-2018 17:21:10 909 21.79 24.63 1017.90 ​
 +14-01-2018 17:21:20 884 21.73 24.27 1017.90 ​
 +14-01-2018 17:21:30 898 21.64 24.33 1017.95 ​
 +14-01-2018 17:21:40 883 21.58 23.90 1017.99 ​
 +14-01-2018 17:21:50 917 21.50 24.53 1017.89 ​
 +14-01-2018 17:22:00 905 21.41 24.16 1018.08 ​
 +14-01-2018 17:22:10 872 21.35 23.40 1017.94 ​
 +14-01-2018 17:22:20 862 21.24 23.51 1017.98 ​
 +14-01-2018 17:22:30 909 21.13 23.87 1017.94 ​
 +14-01-2018 17:22:40 861 21.13 22.79 1017.95 ​
 +14-01-2018 17:22:50 833 21.12 22.56 1017.95 ​
 +14-01-2018 17:23:00 841 21.11 22.62 1018.04 ​
 +14-01-2018 17:23:10 821 21.02 22.26 1017.94 ​
 +14-01-2018 17:23:20 814 20.96 22.06 1018.06 ​
 +14-01-2018 17:23:30 803 20.91 21.89 1018.05 ​
 +14-01-2018 17:23:40 819 20.86 21.93 1017.82 ​
 +14-01-2018 17:23:50 864 20.76 23.28 1018.07 ​
 +14-01-2018 17:24:00 841 20.71 22.27 1017.97 ​
 +14-01-2018 17:24:10 799 20.64 21.51 1018.00 ​
 +14-01-2018 17:24:20 794 20.58 21.94 1018.07 ​
 +</​file>​
 +
 +
 +==== Záver ====
 +
 +Tento projekt je prototyp, na ktorom som si overil rôzne senzory, vyskúšal som prostredie MCUXpresso firmy NXP a ich software-ové knižnice pre prácu s ARM procesormi Kinetis KSDK verzie 2.3. K tomu, aby to bol plnohodnotný projekt je nutné prerobiť a dorobiť niekoľko vecí. Najmä radiče pre komunikáciu prerobiť z blokovacieho na neblokovací režim, veľa času stráca procesor tým, že čaká, kým periféria zmeria a odpovie. Ďalej je nutné prerobiť HW vývojovej dosky na zálohovanie z batérie pre kalibračné dáta a hodiny reálneho času. Takisto ovládanie z konzoly a prekopírovávanie uložených dát. Z užívateľského rozhrania je vhodné dorobiť grafické zobrazenie údajov v čase. Debug sériový port, ktorý je teraz použitý previesť na USB com port, a tento sériový port priviesť na malý WiFi modul so serverom, na ktorom budú prístupné namerané údaje z lokálnej siete. Za úvahu stojí aj zmena senzora koncentrácie CO2, keďže je to už pomerne obsolete senzor, ktorý je náchylný na všetky parametre ako napájacie napätie, ktoré v tomto prípade nie je vôbec stabilné, nepresnosť,​ stále je nutné ho kalibrovať a náročný prepočet. ​
 +
 +Zdroje:{{ :​2017:​xwalde01:​envilogger.rar | Zdrojové súbory}}
 +
 +
2017/envi-logger.1516596316.txt.gz · Poslední úprava: 2018/01/22 05:45 autor: Miroslav Waldecker