sto cercando di rilevare la distanza tramite il seguente sensore: http://www.settorezero.com/wordpress/il-sensore-ad-ultrasuoni-hc-sr04/, per stamparla su display successivamente.
Premetto che il sensore funziona, perché genero un PWM che mi da un impulso da circa 20us e sull'oscilloscopio rilevo l'echo, e riconvertendolo mi da la misura in cm.
Il problema è che non ho ben capito come settare il TIM1 per catturare l'echo prodotto dal sensore e come leggere il valore del registro.
- Codice: Seleziona tutto
/* GPIOA Configuration:TIM1 Channel1 as alternate function open-drain */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// enable timer clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = 0;
TIM_ICInitStructure.TIM_ICFilter = 0;
TIM_ICInit(TIM1 , &TIM_ICInitStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = 0;
TIM_ICInitStructure.TIM_ICFilter = 0;
TIM_ICInit(TIM1 , &TIM_ICInitStructure);
TIM_SelectInputTrigger(TIM1 , TIM_TS_TI1FP1);
TIM_SelectSlaveMode(TIM1 , TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(TIM1 , TIM_MasterSlaveMode_Enable);
while(1){
capture = TIM_GetCapture1(TIM1);
lcd_pos(0,1);
printf("Temp: %d", capture);
}
Questo è il codice, se qualcuno mi spiegasse cosa fanno di preciso i settaggi del timer gliene sarei grato.
Grazie in anticipo