<p style="padding:0 0 0 0; margin:0 0 0 0;">zdravim,</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">chtel jsem s tim merenim nejdrive zaukolovat studenta, ktery zrovna neco s merenim frekvence dela, ale projevil se jako malo akcni, tak jsem to zkusil napsat sam a mam tu takovou zahadu...</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">- vzal jsem 32f469 discovery, ktery byl zrovna po ruce a umi citac na 180MHz.. </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">- pomoci 16-bit TIM8 a Input capture 1 na nabeznou a Input capture 2 na sestupnou hranu plnim v preruseni dve pole temi capture hodnotami</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">- po skonceni mericiho intervalu to prepocitam - ze dvou sousednich capture vypocitam interval mezi nimi..  (pro pozadovanou frekvenci cca 2000Hz to je uz pres periodu citace.., ale to neva, staci jeden if a dva ruzne vypocty..)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">- sectu vsechny intervaly a vydelim poctem a spocitam z toho frekvenci.. tohle funguje fajn..  rozliseni na mHz sedi s generatorem.. (ted to mam uz pres komparator, z generatoru jde sinus...)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">ted jsem jeste chtel pridat preruseni od preteceni citace, kde se bude jen inkrementovat promenna, abych mohl porovnat co se nameri pokud vezmu jen prvni a posledni hranu a to mezi nimi spocitam jako n*delka citace..</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">no nicmene po pridani toho preruseni zaclo blbnout mereni frekvence, uz to nebylo 2000.003 Hz (s generatorem nastavenym na 2k), ale zacly se tam objevovat cisla jako 1988 apod.. </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">to se asi vyresilo zmenou preempt. priority toho preruseni HAL_NVIC_SetPriority(TIM8_UP_TIM13_IRQn, 1,0);    coz uplne nechapu proc..  (capture preruseni je 0,0)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">myslel jsem, ze se se proste nejdriv vykona jedno a pak druhe, nic moc dlouheho se tam nedela, aby to tech radove 250us co je mezi hranami nestihalo..  zkousel jsem i "odstranit" defaultni HAL_TIM_IRQHandler(&htim8); (jen vynulovat dany flag, ale to take nepomohlo..)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">takze ted funguje mereni frekvence, ale ten citac preteceni dava na muj vkus prilis rozdilne vysledky.. 3280-3287 , cekal bych maximalne rozdil o 1-2.. zacatek a konec mericiho intervalu </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">merici interval je dany  HAL_Delay(1200);  coz asi sedi dobre, protoze pocet capture udalosti za tento interval se lisi max. o jednicku..</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">tak kdyby prosim nekdo tusil co delam spatne tak budu rad, chtel jsem to zitra jet omerit do Pruhonic s tou protonovou elektronikou...</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">diky</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">v.p.</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">prumer f, stdev, min, max, pocet capture udalosti,  to same pro sestupnou hranu, pocet overflow udalosti timeru..</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">zhruba po pulce jsem zvysil o 1mHz frekvenci generatoru</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0036 000.25283 1999.0775 2000.8330 02403 2000.0040 000.25277 1999.1441 2000.8108 02403 03280</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0037 000.25213 1999.0775 2000.7663 02403 2000.0037 000.25873 1999.0997 2001.1000 02403 03287</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0038 000.25065 1998.8999 2000.9442 02403 2000.0035 000.25082 1999.1663 2000.8330 02403 03284</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0036 000.25054 1999.1219 2000.9665 02403 2000.0037 000.26431 1999.1663 2000.7663 02403 03284</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0036 000.25113 1999.1441 2000.9220 02403 2000.0038 000.25522 1998.9887 2000.8553 02403 03284</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0038 000.25457 1999.2107 2000.8330 02403 2000.0037 000.25393 1999.0997 2000.8108 02403 03285</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0039 000.25858 1998.9887 2000.8108 02403 2000.0039 000.25096 1999.1663 2000.8775 02403 03284</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0047 000.24779 1999.2107 2000.8553 02403 2000.0047 000.24856 1999.1441 2000.8330 02403 03285</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0048 000.25248 1999.0775 2000.8998 02404 2000.0045 000.24580 1999.1885 2000.8330 02403 03282</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0047 000.24880 1999.1441 2001.0555 02403 2000.0048 000.25746 1999.1441 2000.8998 02403 03282</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">2000.0048 000.25074 1999.2107 2000.8330 02403 2000.0047 000.25710 1999.1441 2000.8108 02403 03283</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">main:</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">MX_GPIO_Init();</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  MX_TIM1_Init();</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  MX_USART3_UART_Init();</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  MX_USART6_UART_Init();</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  MX_TIM2_Init();</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  MX_TIM8_Init();</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE BEGIN 2 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);<span style="white-space: pre;"> </span>//enable capture interrupt</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_2);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_Delay(20);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  TIM8->DIER &= 0xFFF8;  <span style="white-space: pre;"> </span>//disable IC1, IC2, Overflow</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE END 2 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* Infinite loop */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE BEGIN WHILE */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  while (1)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  {</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">    /* USER CODE END WHILE */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">    /* USER CODE BEGIN 3 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>//  HAL_UART_Transmit_IT(&huart3, (uint8_t*)aTxStartMessage, 10);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, RESET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  if(trigger_flag>0){</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  trigger_flag = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  periodcount = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  index1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  index2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  stdev1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  stdev2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  suma1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  suma2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1_min = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1_max = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq2_min = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq2_max = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, RESET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  //HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_1);<span style="white-space: pre;"> </span>//enable capture interrupt</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  //HAL_TIM_IC_Start_IT(&htim8, TIM_CHANNEL_2);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  TIM8->SR &= 0xFFFFFFF8;  <span style="white-space: pre;"> </span>//clear flags?</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(2);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  TIM8->DIER |= 0x07;  <span style="white-space: pre;"> </span>//enable IC1, IC2, Overflow</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(1200);<span style="white-space: pre;"> </span>//measure for 1.2 sec</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  //HAL_TIM_IC_Stop_IT(&htim8, TIM_CHANNEL_1);<span style="white-space: pre;"> </span>//disable</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  //HAL_TIM_IC_Stop_IT(&htim8, TIM_CHANNEL_2);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  TIM8->DIER &= 0xFFFFFFF8;  <span style="white-space: pre;"> </span>//disable IC1, IC2, Overflow</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED2_GPIO_Port, LED2_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, RESET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  if(index1>10){</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  for(unsigned int il=0; il<(index1-1);il++){<span style="white-space: pre;"> </span>//rising edge</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  if(incap1[il]<incap1[il+1]){</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  rescap1[il]=65536-incap1[il]+incap1[il+1];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  }else{</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  rescap1[il]=131072-incap1[il]+incap1[il+1];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  for(unsigned int ik=0; ik<(index1-1);ik++){</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  suma1 += rescap1[ik];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1 = index1-1;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1 /= suma1;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1 *= f_constant;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  er_sum = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1_min = freq1;<span style="white-space: pre;"> </span>//initialize the min-max freq values...</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  freq1_max = freq1;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  for(unsigned int im=0; im<(index1-1);im++){</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  temp_f = f_constant;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  temp_f /= rescap1[im];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  if(temp_f < freq1_min) {freq1_min = temp_f;};</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  if(temp_f > freq1_max) {freq1_max = temp_f;};</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  er_f = freq1;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  er_f -= temp_f;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  pow_f = er_f;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  pow_f *=er_f;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  er_sum +=pow_f;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  stdev1 = er_sum;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  stdev1 /= (index1-2);<span style="white-space: pre;"> </span>//std.dev. suma(diff^2)/(n-1)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  stdev1 = sqrt(stdev1);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  if(index2 > 10){</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>stejne jako pro rising edge, akorat index2...</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED3_GPIO_Port, LED3_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, RESET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  sprintf(buffers,"%09.4f %09.5f %09.4f %09.4f %05u ",freq1,stdev1,freq1_min,freq1_max,index1);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  strl = strlen(buffers);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_UART_Transmit_IT(&huart3, buffers, strl);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(10);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_UART_Transmit_IT(&huart6, buffers, strl);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(10);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  sprintf(buffers,"%09.4f %09.5f %09.4f %09.4f %05u %05u\r\n",freq2,stdev2,freq2_min,freq2_max,index2, periodcount);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  strl = strlen(buffers);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_UART_Transmit_IT(&huart3, buffers, strl);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(10);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_UART_Transmit_IT(&huart6, buffers, strl);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(10);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_GPIO_WritePin(LED4_GPIO_Port, LED4_Pin, SET);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  }else{</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  HAL_Delay(1);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">preruseni:</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">void TIM8_UP_TIM13_IRQHandler(void)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">{</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 0 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>if(TIM8->SR & 0x01){<span style="white-space: pre;"> </span>//timer overflow</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>      periodcount++;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">//<span style="white-space: pre;"> </span>      TIM8->SR &= 0xFFFFFFFE;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"><span style="white-space: pre;"> </span>};</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE END TIM8_UP_TIM13_IRQn 0 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_TIM_IRQHandler(&htim8);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE BEGIN TIM8_UP_TIM13_IRQn 1 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE END TIM8_UP_TIM13_IRQn 1 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">}</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">/**</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  * @brief This function handles TIM8 capture compare interrupt.</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">void TIM8_CC_IRQHandler(void)</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">{</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE BEGIN TIM8_CC_IRQn 0 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  if(TIM8->SR & 0x02){<span style="white-space: pre;"> </span>//Input capture channel 1</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  <span style="white-space: pre;"> </span>  incap1[index1]= TIM8->CCR1;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">      index1++;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">    //  TIM8->SR &= 0xFFFFFFFD;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  if(TIM8->SR & 0x04){<span style="white-space: pre;"> </span>//Input capture channel 2</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  <span style="white-space: pre;"> </span>  incap2[index2]= TIM8->CCR2;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  <span style="white-space: pre;"> </span>  index2++;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  <span style="white-space: pre;"> </span>//  TIM8->SR &= 0xFFFFFFFB;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  };</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE END TIM8_CC_IRQn 0 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  HAL_TIM_IRQHandler(&htim8);</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE BEGIN TIM8_CC_IRQn 1 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">  /* USER CODE END TIM8_CC_IRQn 1 */</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">}</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int incap1[5000];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int incap2[5000];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int index1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int index2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned int periodcount = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">volatile unsigned char trigger_flag = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int rescap1[5000];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int rescap2[5000];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int suma1=0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int suma2=0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int avg1=0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int avg2=0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int esum1=0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int esum2=0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned int diff1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned int diff2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int power1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned long int power2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">unsigned char strl = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">char buffers[200];</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq1_min = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq1_max = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq2_min = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double freq2_max = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double temp_f = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double er_f = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double pow_f = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double er_sum = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double stdev1 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">double stdev2 = 0;</p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;"> </p>

<p style="padding:0 0 0 0; margin:0 0 0 0;">______________________________________________________________<br />
> Od: "Jan Waclawek" <konfera@efton.sk><br />
> Komu: "HW-news" <hw-list@list.hw.cz><br />
> Datum: 23.10.2019 12:36<br />
> Předmět: Re: mereni frekvence s stm32<br />
></p>

No dobre, ale aj v tom PLL je pointa v tom filtri.<br />
 <br />
 Ak sa urobi ten filter dobre, tak ten capture/DMA na hrany bude fungovat<br />
 dobre, a potom sa moze pouzit aj fourierka ako pan kolega Mrazik bol<br />
 spomenul.<br />
 <br />
 Ale ak je toho sumu vela, tak z toho to capture/DMA "povybera" niektore<br />
 hrany, a z toho podla mna uz nic rozumneho nepojde vytiahnut.<br />
 <br />
 Z cite technickej stranky, ak by mal pan kolega Petrucha problem rozchodit<br />
 to capture/DMA, myslim, ze mu tu viaceri vieme s tym poradit/pomoct, je to<br />
 relativne lahke cvicenie s asi tuctom registrov.<br />
 <br />
 wek<br />
 <br />
 <br />
 <br />
 ----- Original Message ---------------<br />
 <br />
 >To bylo kvůli tomu, aby se prostým počítáním period změřil kmitočet s rozlišením lepším než 1Hz, <br />
 >když je k dispozici měřicí okno do 2s (viz původní příspěvek).<br />
 >Myslím že to tak bylo, měřilo se 1s a pokud by bylo PLL 100x, tak byl výsledek s rozlišením 0,01Hz.<br />
 >Jak jsem psal, bylo to realizované standardní logikou, nebyl tam žádný MCU.<br />
 ><br />
 >Tomáš<br />
 ><br />
 ><br />
 ><br />
 >To ze sa da pomocou PLL a vhodneho filtra lovit zo sumu je jasne.<br />
 >Ako tomu ale pomoze vynasobit frekv. PLL ked sa tym vynasobi aj chyba?<br />
 >Tu by som povedal, ze diablik vysokeho nasobku spocival v niecom inom <br />
 > <br />
 >j.<br />
 > <br />
 >From: Hw-list [mailto:hw-list-bounces@list.hw.cz] On Behalf Of Tomáš Hamouz<br />
 >Sent: 23. októbra 2019 11:53<br />
 >To: HW-news<br />
 >Subject: Re: mereni frekvence s stm32<br />
 > <br />
 >Kdysi jsem narazil na krásný magnetometr, řešený diskrétní logikou, ale neuložil si ho a už nenašel:-(<br />
 >(kdyby si někdo vzpomněl, prosím pošlete odkaz)<br />
 ><br />
 >Do jaké míry tomu měření můžete pomoct analogovým HW?<br />
 >Princip byl takový, že se podle přijatého signálu pomocí PLL řídil VCO na nějakém vysokém násobku (100x?) a měřil se kmitočet toho VCO.<br />
 >PLL se chytne i na zašuměném signálu a zbytek je už jednoduchý. <br />
 ><br />
 >Tomáš<br />
 ><br />
 ><br />
 >> Zdravim,<br />
 >>  <br />
 >> kdyz bych chtel pomoci STM32 merit co nejpresneji frekvenci v<br />
 >> rozsahu cca 1000-3000 Hz, jak na to? Signal je k dispozici cca 1-2<br />
 >> s, behem teto doby je potreba udelat co nejpresnejsi mereni.. signal<br />
 >> je pred komparatorem dost zasumeny (SNR cca 10-25dB) - je to pro<br />
 >> hratky s protonovym precesnim magnetometrem, kdyby to nekoho<br />
 >> zajimalo...(pozdeji treba s Overhauserovym magnetometrem)<br />
 >>  <br />
 >> Pokud jsem to spravne pochopil, tak High Resolution Timer  ma sice<br />
 >> nejake "events" priraditelne treba k vystupu komparatoru, ale jinak asi neni pro tento ucel vhodny?<br />
 >>  <br />
 >> Cili pouzit normalni 32-bit general purpose timer, taktovat ho co<br />
 >> nejvyssi frekvenci - 180MHz treba pro STM32F446RE.. a pouzit input<br />
 >> capture.. chteli bychom zkusit jestli ovzorkovani vsech nabeznych a<br />
 >> sestupnych hran oproti prostemu zmereni prvni a posledni hrany treba<br />
 >> z baliku 3000 period signalu 2000Hz (1.5s delka mereni) prinese nejake zlepseni..<br />
 >>  <br />
 >> Diky<br />
 >> V.P.<br />
 >> _______________________________________________<br />
 >> HW-list mailing list  -  sponsored by www.HW.cz<br />
 >> Hw-list@list.hw.cz<br />
 >> <a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br />
 _______________________________________________<br />
 HW-list mailing list  -  sponsored by www.HW.cz<br />
 Hw-list@list.hw.cz<br />
 <a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a><br />