Analog veriyi Led parlaklığını kontrol etmede kullanmak

Başlatan jankilodvandam, 20 Nisan 2016, 13:45:53

jankilodvandam

STM32F4 Discovery geliştirme kartımdaki adc modülünü kullanarak aldığım analog veriyi pwm oluşturup board üzerindeki ledlerin parlaklığıını kontrol etmek için kullanmak istiyorum. Sharp( GP2Y0A21YK Kızılötesi Sensör 10 - 80 cm)  sensörü uzak mesafeyi algılarsa en az yanmasını, yaklaştıkça led parlaklığının artmasını istiyorum. Derlediğim kod şu şekilde



#include "stm32f4xx.h"
 uint16_t Read_ADC(void)
{
	ADC_RegularChannelConfig(ADC1,ADC_Channel_9,1,ADC_SampleTime_84Cycles); //adc verisini hesaplayacak fonksiyon.
	ADC_SoftwareStartConv(ADC1); //dönüsümü baslatir.
	while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//içerdeki _art sagland1kca alta gecmez.
	return ADC_GetConversionValue(ADC1);	
}

int main(void)
{	
	
TIM_TimeBaseInitTypeDef 		TIM_TimeBaseInitStruct;
 TIM_OCInitTypeDef 					TIM_OCInitStruct;
GPIO_InitTypeDef 						GPIO_InitStruct;
ADC_InitTypeDef						  ADC_InitStruct;
uint16_t ADC_Data;
		
	
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	
	  GPIO_InitStruct.GPIO_Pin 		= GPIO_Pin_12;
	GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd	  = GPIO_PuPd_NOPULL;
    GPIO_InitStruct.GPIO_Mode 	= GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStruct);
	

	GPIO_InitStruct.GPIO_Pin 		= GPIO_Pin_13;
	GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd	  = GPIO_PuPd_NOPULL;
    GPIO_InitStruct.GPIO_Mode 	= GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
		
	GPIO_SetBits(GPIOD, GPIO_Pin_13);

	GPIO_PinAFConfig(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
	
    TIM_TimeBaseInitStruct.TIM_Prescaler = 0;
    TIM_TimeBaseInitStruct.TIM_Period = 8399;
    TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStruct);
    TIM_Cmd(TIM4, ENABLE);
   TIM_ITConfig(TIM4,TIM_IT_Update, ENABLE);


    TIM_OCInitStruct.TIM_OCMode 			= TIM_OCMode_PWM1;
    TIM_OCInitStruct.TIM_OutputState  = TIM_OutputState_Enable;
    TIM_OCInitStruct.TIM_OCPolarity   = TIM_OCPolarity_High;

    TIM_OCInitStruct.TIM_Pulse = 2099;
    TIM_OC1Init(TIM4, &TIM_OCInitStruct);
    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
	
ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
ADC_Init(ADC1, &ADC_InitStruct);
   ADC_Cmd(ADC1, ENABLE);
		
		

		

 while (1)
 {
			
			ADC_Data = Read_ADC();
	 
			TIM_SetCompare1(TIM4,ADC_Data);
			
 }}


Yardımcı olacak birileri var mıdır.