Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

input capture

Başlatan muhittin_kaplan, 16 Eylül 2013, 18:26:23

muhittin_kaplan

Yok benim Tüm Kodları Yeniden Anlayarak Yazmam Gerekiyor.
(kütüphane ile çalışıncada böyle oluyor. neyi nereye bağladın arkadaş.)

muhittin_kaplan


Aşağıda denediğim proje var. biryerde hata yapıyorum. belki küçük bir yer, miyop olmamdan dolayı göremiyorumdur.
denemeyi PC8 i PA7 bağlayarak yaptım.

PC8 Toggle Sinyal
PA7 Capture input

pc8 i while döngüsünün içerisinde devamlı toggle yapıyorum.

projeyi deneyip çalışıp çalışmadığını yazarsanız, hatanın nerede olduğunuda mümkünse beni bu ızdıraptan kurtarırsınız.

http://www.dosya.tc/server16/dzEBbt/Hc_Sr_04_Stm32F1xx.rar.html

altı üstü HC-SR4 ulrasonic sensör dü


muhittin_kaplan

Sadece Capture Yapsam Dahi ()çok farklı değerler alıyorum.
Çalışan bir örnek varmı elinizde ?

mistek

#33
Hocam sabah örneği deneyeceğim sonucu yazarım.

Birde while içerisinde pin toggle işlemi aralarına biraz gecikme koyarmısınız ? Bit set oluyor birkaç nanosaniye sonra reset oluyor, kenar dedektörü iniş çıkış durumunu fark edemiyordur belki. (Konunun bütününü okumadım "belki" diyerek yazdım.)

-------
Konuya tepeden indiğim için bir sonuca varamadım hocam. Datasheeti adım adım okumak lazım.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

muhittin_kaplan

#34
sadece capture örneğini yapıyorum mistek. yani bana sadece freq bilgisi verebiliyor.
ondaki değerleri bile usart tan gönderdiğimde

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1003

1003

466

466

1002

1002

466

466

1003

1003

466

466

1002

1002

466

466

1002

1002

466

466

1003

1003

466

466

1002


gibi değer ler alıyorum.

mesaj birleştirme:: 20 Eylül 2013, 21:21:19

Orjinal örnek üzerinde yaptığım değişiklik.
USART
GPIOC 8 i pin out olarak kullandım. ve bu çıkışı GPIOA 7 ye yani capture girişine bağladım.
Orjinal örnekte xxxxx_it.h ve c dosyaları kullanmıştı ben TIM3_IRQHandler fonksiyonunu main.c ye aldım. o dosyaları kullanmadım.

/**
  ******************************************************************************
  * @file    TIM/InputCapture/main.c
  * @author  MCD Application Team
  * @version V3.5.0
  * @date    08-April-2011
  * @brief   Main program body
  ******************************************************************************
  * @attention
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
  ******************************************************************************
  */

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_flash.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_usart.h"
#include "misc.h"
#include <stdio.h>
/** @addtogroup STM32F10x_StdPeriph_Examples
  * @{
  */
__IO uint16_t IC3ReadValue1 = 0, IC3ReadValue2 = 0;
__IO uint16_t CaptureNumber = 0;
__IO uint32_t Capture = 0;
__IO uint32_t TIM3Freq = 0;



/** @addtogroup TIM_Input_Capture
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
TIM_ICInitTypeDef  TIM_ICInitStructure;

/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);

void TIM3_IRQHandler(void)
{

  if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)
  {
    /* Clear TIM3 Capture compare interrupt pending bit */
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
    if(CaptureNumber == 0)
    {
      /* Get the Input Capture value */
      IC3ReadValue1 = TIM_GetCapture2(TIM3);
      CaptureNumber = 1;
    }
    else if(CaptureNumber == 1)
    {
      /* Get the Input Capture value */
      IC3ReadValue2 = TIM_GetCapture2(TIM3);

      /* Capture computation */
      if (IC3ReadValue2 > IC3ReadValue1)
      {
        Capture = (IC3ReadValue2 - IC3ReadValue1);
      }
      else
      {
        Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
      }
      /* Frequency computation */
      TIM3Freq = (uint32_t) SystemCoreClock / Capture;
      CaptureNumber = 0;
    }
  }
}

void SetupUSART()
{
      GPIO_InitTypeDef  GPIO_InitStructure;
      USART_InitTypeDef USART_InitStructure;

      /* Enable GPIOA clock                                                   */
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

      /* Configure USART1 Rx (PA10) as input floating                         */
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_10;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
      GPIO_Init(GPIOA, &GPIO_InitStructure);

      /* Configure USART1 Tx (PA9) as alternate function push-pull            */
      GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
      GPIO_Init(GPIOA, &GPIO_InitStructure);

      USART_InitStructure.USART_BaudRate            = 9600;
      USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
      USART_InitStructure.USART_StopBits            = USART_StopBits_1;
      USART_InitStructure.USART_Parity              = USART_Parity_No ;
      USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
      USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
      USART_Init(USART1, &USART_InitStructure);
      USART_Cmd(USART1, ENABLE);
}


void USART_puts(USART_TypeDef* USARTx, volatile char *s){

    while(*s){
        // wait until data register is empty
        while( !(USARTx->SR & 0x00000040) );
        USART_SendData(USARTx, *s);
        *s++;
    }
}
int main(void)
{
  /*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f10x_xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f10x.c file
     */
	SystemInit();
  /* System Clocks Configuration */
  RCC_Configuration();

  /* NVIC configuration */
  NVIC_Configuration();

  /* Configure the GPIO ports */
  GPIO_Configuration();

  SetupUSART();
  /* TIM3 configuration: Input Capture mode ---------------------
     The external signal is connected to TIM3 CH2 pin (PA.07)
     The Rising edge is used as active edge,
     The TIM3 CCR2 is used to compute the frequency value
  ------------------------------------------------------------ */

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM_ICInitStructure.TIM_ICFilter = 0x0;

  TIM_ICInit(TIM3, &TIM_ICInitStructure);

  /* TIM enable counter */
  TIM_Cmd(TIM3, ENABLE);

  /* Enable the CC2 Interrupt Request */
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);


  while (1){
	  int i;
	  GPIO_SetBits(GPIOC,GPIO_Pin_8);
	  	  for (i = 0; i < 1; ++i) {

		}

		  GPIO_ResetBits(GPIOC,GPIO_Pin_8);
		  	  for (i = 0; i < 1; ++i) {

			}

		  	  char Buffer[8];
		  	  sprintf(Buffer,"%ld\r\n",TIM3Freq);
		  	  USART_puts(USART1,Buffer);

  }
}

/**
  * @brief  Configures the different system clocks.
  * @param  None
  * @retval None
  */
void RCC_Configuration(void)
{
  /* TIM3 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1 , ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);


}

/**
  * @brief  Configure the GPIOD Pins.
  * @param  None
  * @retval None
  */
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;

  /* TIM3 channel 2 pin (PA.07) configuration */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8|GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_Init(GPIOC, &GPIO_InitStructure);
}

/**
  * @brief  Configure the nested vectored interrupt controller.
  * @param  None
  * @retval None
  */
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable the TIM3 global Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  while (1)
  {}
}

#endif

/**
  * @}
  */

/**
  * @}
  */

/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

mistek

Hocam NXP de yaptığım çalışmayı anlatayım belki fikir verebilir. ST ile çok farklı bir yapıda olabilir emin değilim.

Timer ın Capture registerı var Capture pinine yükselen kenar-düşen kenar geldiğinde O an ki timer değeri Capture Register içerisine yazılıyor.
Dikkat: Eğer her kesme geldiğinde timer sıfırlanmazsa program while içerisinde dönse bile sonraki kesmede aynı değerler gelmeyebilir.

PWM duty cycle okurken.
1) Capture birimi hem yükselen kenarda kesmeoluşturacak hemde düşen kenarda kesme oluşturacak şekilde ayarlanmalı.
2) Yükselen kenar okunur kaydedilir sonra düşen kenar okunur kaydedilir ikisinin farkı duty değerini verir.

Sizdeki örneği çalıştırdım kesme geliyor ancak tek kenar kontrol olduğu için duty değeri burada nasıl çıkacak onu anlayamadım. Yada otomatik olarak donanım düşen kenarda da timer değerini saklıyor olabilir datasheet e bakmak gerek.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

muhittin_kaplan

Son Verdiğim Örnek, Sadece Freq bilgisi veriyor sanırım. Sadece Capture örneği. PWM input örneğinde ise dediğin gibiymiş. Yani otomatik olarak CCR1 ve CCR2 reg atıyormuş.
(jkramer)

muhittin_kaplan

Yok Arkadaş Datasındaki INPUT PWM ı register ile yaptım. Bundada Int giriyor. ama Ne CCR1 Nede CCR2 Artmıyor.
Pes Ettim.

muhittin_kaplan

timer ı EXTI ile Başlatıp (yükselen Kenar) Yine EXTI ile durdurabilirmiyim (DÜşen Kenar)

muhittin_kaplan

24mhz lik stm32f100rbt6 nın min ölçebileceği freq nedir, 72mhz için 1100hz denmiş

Klein

Ön bölücü 16 bit. 72000000 / 65535 =  1098

muhittin_kaplan

24000000/65535=366 hz mi yani

Klein

Ölçüm yöntemine bağlı. 
Eğer Bir timer kurup  timer taşana kadar geçen sürede kaçdarbe geldiğini sayacaksan, evet ölçebileceğin en düşük frekans bu olacaktır.

Eğer iki kenar arasında geçen süreyi bulup ona göre frekans hesaplayacaksan, çok daha düşük frekansları ölçebilirsin.

muhittin_kaplan

Sormamdaki amaç
acaba freq çok mu düşük deger sapıtık çıkıyor. Freq ve duty ölçmek için bir peryodun bitmesi gerek. peryod bitmeden sayıcı overflow olursa değerim yanlış çıkar diye düşünüyorum.

Klein

Öçeceğin  periyot nedir?