From 205366bfb2f9f23e8f01e390b3b349091e671825 Mon Sep 17 00:00:00 2001 From: maxxir_w Date: Sat, 23 Mar 2019 14:16:43 +0400 Subject: [PATCH] All OK --- .../1284BOOT.BIN.bootloaded | Bin 0 -> 42694 bytes .../globals.h | 4 +- .../main.c | 286 ++++++++++++++++----- 3 files changed, 224 insertions(+), 66 deletions(-) create mode 100644 20_m1284p_BTLD_WIZNET_BLYNK_FTPD_FATFS_SDCARD/1284BOOT.BIN.bootloaded diff --git a/20_m1284p_BTLD_WIZNET_BLYNK_FTPD_FATFS_SDCARD/1284BOOT.BIN.bootloaded b/20_m1284p_BTLD_WIZNET_BLYNK_FTPD_FATFS_SDCARD/1284BOOT.BIN.bootloaded new file mode 100644 index 0000000000000000000000000000000000000000..9c2c13239fee3319f49f5edef9a2c01f40b2ad77 GIT binary patch literal 42694 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%0D$zSMs^HlI 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 via WIN7 nslookup - actually need to use DNS resolving +//Resolve here via DNS query see below Domain_IP[4] +//uint8_t blynk_server_ip[4] = {139, 59, 206, 133}; // Blynk cloud server IP (cloud.blynk.cc, 8422) +//uint8_t BLYNK_RX_BUF[DATA_BUF_SIZE]; + +uint8_t BLYNK_TX_BUF[BLYNK_DATA_BUF_SIZE]; + +//BLYNK Virtual pins state changed flags +uint8_t v15_changed; +uint8_t v20_changed; + +//***********BLYNK related: END + +//***************** DNS: BEGIN +////////////////////////////////////////////////// +// Socket & Port number definition for Examples // +////////////////////////////////////////////////// +#define SOCK_DNS 5 + +unsigned char gDATABUF_DNS[512]; +//#define IP_WORK + +//////////////// +// DNS client // +//////////////// +uint8_t Domain_name[] = BLYNK_DEFAULT_DOMAIN; // BLYNK server URI +uint8_t Domain_IP[4] = {0, }; // Translated IP address by DNS Server +//***************** DNS: END + //***********Prologue for fast WDT disable & and save reason of reset/power-up: BEGIN uint8_t mcucsr_mirror __attribute__ ((section (".noinit"))); @@ -245,6 +282,79 @@ uint16_t adc_read(uint8_t channel) } //***************** ADC: END +//*********************************Timer2 PWM: BEGIN +/* + * Handle PWM out PD7-PIN15: + * OCR2A = 0/127/255; Duty 0/50/100% + + * Handle PWM out PD6-PIN14: + * OCR2B = 0/127/255; Duty 0/50/100% + + */ +void pwm8bit_timer2_init(void) +{ + //PWM on TIMER2 (PD7/OC2A) && TIMER2 (PD6/OC2B) + // PHASE CORRECT PWM 8-bit mode setup + // 31.25kHz FREQ OUT + + // Set PD7 to OUT + DDRD |= (1<<7); + // Set PD6 to OUT + DDRD |= (1<<6); + /* + * Clear OCnA/OCnB/OCnC on compare + * match when up-counting. Set + * OCnA/OCnB/OCnC on compare match + * when downcounting. + */ + TCCR2A = (1<> MCU is: %S; CLK is: %luHz\r\n", str_mcu, F_CPU);// MCU Name && FREQ PRINTF(">> Free RAM is: %d bytes\r\n", freeRam()); + //Wizchip WIZ5500 Ethernet initialize + IO_LIBRARY_Init(); //After that ping must working + print_network_information(); + + + /* DNS client Initialization */ + PRINTF("> [BLYNK] Target Domain Name : %s\r\n", Domain_name); + DNS_init(SOCK_DNS, gDATABUF_DNS); + + /* DNS processing */ + int32_t ret; + if ((ret = DNS_run(netInfo.dns, Domain_name, Domain_IP)) > 0) // try to 1st DNS + { +#ifdef _MAIN_DEBUG_ + PRINTF("> 1st DNS Respond\r\n"); +#endif + } + else if ((ret != -1) && ((ret = DNS_run(DNS_2nd, Domain_name, Domain_IP))>0)) // retry to 2nd DNS + { +#ifdef _MAIN_DEBUG_ + PRINTF("> 2nd DNS Respond\r\n"); +#endif + } + else if(ret == -1) + { +#ifdef _MAIN_DEBUG_ + PRINTF("> MAX_DOMAIN_NAME is too small. Should be redefined it.\r\n"); +#endif + ; + } + else + { +#ifdef _MAIN_DEBUG_ + PRINTF("> DNS Failed\r\n"); +#endif + ; + } + + if(ret > 0) + { +#ifdef _MAIN_DEBUG_ + printf("> Translated %s to [%d.%d.%d.%d]\r\n\r\n",Domain_name,Domain_IP[0],Domain_IP[1],Domain_IP[2],Domain_IP[3]); +#endif + //IOT BLYK app init: + /* Blynk client Initialization */ + PRINTF("Try connect to BLYNK SERVER [%s]: %d.%d.%d.%d:%d..\n\r",Domain_name,Domain_IP[0],Domain_IP[1],Domain_IP[2],Domain_IP[3],BLYNK_DEFAULT_PORT); + blynk_begin(auth, Domain_IP, BLYNK_DEFAULT_PORT, BLYNK_TX_BUF, SOCK_BLYNK_CLIENT); + } + else + { + PRINTF("> [BLYNK] Target Domain Name : %s resolve ERROR\r\nReboot board..\r\n", Domain_name); + while(1); + } + + //Short Blink LED 3 times on startup @@ -586,44 +738,25 @@ int main() #if defined(F_APP_FTP) ftpd_init(netInfo.ip); #endif -//**************************************HTTPD init: BEGIN - /* HTTP Server Initialization */ - //Should not used here - //httpServer_init(TX_BUF, RX_BUF, MAX_HTTPSOCK, socknumlist); // Tx/Rx buffers (1kB) / The number of W5500 chip H/W sockets in use - //reg_httpServer_cbfunc(NVIC_SystemReset, NULL); // Callback: NXP MCU Reset - //reg_httpServer_cbfunc(NULL, NULL); // Callback: Still not used here ARV System reset, AVR WDT reset - //In this demo all www content saved onto SD-Card (you must copy all from folder to ROOT SD-Card) -//**************************************HTTPD init: END - - /* Loopback Test: TCP Server and UDP */ - // Test for Ethernet data transfer validation + uint32_t timer_link_1sec = millis(); //uint32_t timer_httpd_1sec = millis(); uint32_t timer_uptime_60sec = millis(); bool run_user_applications = true; + uint8_t blynk_restore_connection = 1; + uint8_t timer_led2_push_10sec = 0; + static uint8_t _msg[64] = "\0"; while(1) { //Here at least every 1sec wdt_reset(); // WDT reset at least every sec - /* HTTPD */ - /*HTTPD timer 1 sec interval tick*/ - //Should not used here - /* - if((millis()-timer_httpd_1sec)> 1000) - { - //here every 1 sec - timer_httpd_1sec = millis(); - //////////////////////////////////////////////////////// - // SHOULD BE Added HTTP Server Time Handler to your 1s tick timer - httpServer_time_handler(); // for HTTP server time counter - //////////////////////////////////////////////////////// - } - */ - // TODO: insert user's code here if(run_user_applications) { + // Blynk process handler + blynk_run(); + //for(i = 0; i < MAX_HTTPSOCK; i++) httpServer_run(i); // HTTP Server handler //for(i = 0; i < MAX_HTTPSOCK; i++) httpServer_run_avr(i); // HTTP Server handler avr optimized @@ -684,27 +817,46 @@ int main() } #endif - //!! SW1 pressing action - if(!sw1_read())// Check for SW1 pressed every second - { - // SW1 is pressed - //led1_high(); //LED1 ON - if(prev_sw1) - { - //!! Здесь по факту нажатия кнопки (1->0 SW1) - //!! Debug only - //PRINTF("SW1 is pressed\r\nADC0/PA0 is: %u\r\n", adc_read(0)); - PRINTF("SW1 is pressed, Reboot the board..\r\n"); - while(1); - }//if(prev_sw1) - prev_sw1 = 0; // Store SW1 state for next iteration - }//if(!sw1_read()) - else - { - // SW1 is unpressed - //led1_low(); // LED1 OFF - prev_sw1 = 1;// Store SW1 state for next iteration - }//if(!sw1_read())else.. + + //!!Blynk every seconds tasks + //To restore GPIO state on start-up application + if(blynk_restore_connection) + { + if(is_blynk_connection_available()) + { + blynk_restore_connection = 0; + //Requests Server to re-send current values for all widgets + PRINTF("++blynk_syncAll event\r\n"); //Just for debug + blynk_syncAll(); + } + } + + //Virtual pins state change check here + if(v15_changed) + { + v15_changed = 0; //Drop flag + //Push message with changed V15 value (LED PWM PIN15/PD7 ) + blynk_push_virtual_pin(15); + + } + else if(v20_changed) + { + v20_changed = 0; //Drop flag + //Push message with changed V20 value (LED1 D20/PC4) + blynk_push_virtual_pin(20); + } + //Every 10sec event for LED2 PIN13, and uptime device + if(++timer_led2_push_10sec == 10) + { + timer_led2_push_10sec = 0; //Clear timer_led2.. + //Every 10sec toggle, and push LED2 PIN13/PD5 state to BLYNK server (widget Value Display) + led2_tgl(); + blynk_push_pin(13); + + //Every 10sec push message: "Uptime: xxx sec; Free RAM: xxxxx bytes", to BLYNK server (widget Terminal) + SPRINTF(_msg, "Uptime: %lu sec; Free RAM: %d bytes\r\n", millis()/1000, freeRam()); + blynk_push_virtual_pin_msg(1, _msg); + } } @@ -779,9 +931,15 @@ static void avr_init(void) led1_conf(); led1_low();// LED1 is OFF + led2_conf(); + led2_low();//LED2 is OFF + sw1_conf();//SW1 internal pull-up + //pwm8bitfast_timer2_init(); // PD7/OC2A used as FAST 8bit PWM (62.5kHz FREQ OUT) + pwm8bit_timer2_init(); // PD7/OC2A used as PHASE CORRECT 8bit PWM (31.25kHz FREQ OUT) + sei(); //re-enable global interrupts return;