LM35 ADC Veri Gelmeme Sıkıntısı

Başlatan sfsyn, 10 Mart 2018, 18:17:01

sfsyn

Arkadaşlar lm35 den aldığım değeri 7 segmentte okumak istiyorum ama herhangi bir sıcaklık değeri ölçemiyorum. Sadece rastgele bir değer gösteriyor ve sıcaklık formülündeki değerler değişince o değerde değişiyor. Sensörü söktüğümde iste tekrar aynı değer gözüküyor. Yani sensörden veri alamıyorum.


#include "stm32f0xx.h"

void ADC_init(void);
uint16_t adc_okuu (void);


void delay(int val)
{
  int i=0;
	val=val*500;
	for(i=0;i<val;i++)
	{
	}
}
 
 uint16_t cevir7segment(uint16_t sayi)
{
	
switch (sayi)
	{
  case 1: return 0x0000000C;
	case 2: return 0x000000B6;
	case 3: return 0x0000009E;
	case 4: return 0x000000CC;
	case 5: return 0x000000DA;
	case 6: return 0x000000FA;
	case 7: return 0x0000000E;
	case 8: return 0x000000FE;
	case 9: return 0x000000DE;
	case 0: return 0x0000007E;
	}	
	
	
}


	void delay_disp ()
	{
	
	unsigned int i=0 ;
		for (i = 0; i < 600000; i++) ;
	}	
		
	
int main(void)
{
	RCC->APB2ENR |= 0x00000200 ;//ADC clock enable
		RCC->AHBENR |= 0x00080000 ; //c aktif
	
//	RCC->CR |= 0x00010000; // HSE ON
//	while(!(RCC->CR & 0x00020000 ))  //HSEon hazir mi kontrol edildi
		
	RCC->CFGR|=0x000000A0; //System clock 8 e bolundu
	RCC->AHBENR |= 0x00020000 ; //  a portu aktif
	GPIOA->MODER |= 0x00005555 ; // PA9 U I/O AKTIF 
  RCC->AHBENR |= 0x00040000 ; //  b portu aktif
	GPIOB->MODER |= 0x00100015 ; // b output modunda 
	GPIOB->ODR = 0x00000407; 
	 
 
		ADC_init();
		delay(100);
	  ADC_init();
		delay(100);
		uint16_t sonuc=0 ;
		float sicaklik=0.0 ;


	while (1) 
    {
			
     
    sicaklik= adc_okuu() ;
			sonuc=((sicaklik/4095)*5)*2300;
	 
    
			
delay(5);			
			
		
GPIOB->ODR = 0x00000001;	
GPIOA->ODR =cevir7segment(sonuc%10);
delay(5);
	
GPIOB->ODR = 0x00000002;	
GPIOA->ODR =cevir7segment((sonuc%100-sonuc%10)/10);			
GPIOA->ODR |=  0x00000001 ;  //dp nokta
			delay(5);	

GPIOB->ODR = 0x00000004;	
GPIOA->ODR =cevir7segment(((sonuc%1000)-(sonuc%100))/100);
delay(5);
	
GPIOB->ODR = 0x00000400;	
GPIOA->ODR =cevir7segment(((sonuc%10000)-(sonuc%1000))/1000);
delay(5);

		
		  
  }
}

 
	void ADC_init(void){
		GPIOC->MODER |= 0x00000003  ;//c0 analog mod
		ADC1->CHSELR |= 0x00000404 ; //kanal 10

		
		RCC->APB2ENR |= 0x00000200 ;//ADC clock enable
		RCC->AHBENR |= 0x00080000 ; //c aktif
	ADC1->CFGR1	|= (0x00000010|0x00000000);  // 8BÝT
//	ADC1->CFGR1 |=  0x00002000 ; //SÝNGLE MOD	
	 // ADC1->CFGR1 	|= 0x00000008 ; // 10bit sayfa 

	
	
	ADC1->CR |= 0x00000001 ; //ADC enable	
  ADC1->CR |= 0x00000004 ; //adc start

	

	}	

	
 
	uint16_t adc_okuu (void)
	{  
		ADC1->CR |= 0x00000004;
		
	while ((ADC1->ISR & 0x00000004) == 0)/* Wait end of conversion */
{

}
	

		
		uint16_t deger=0 ;		
		deger = ADC1->DR ;  //çalýþ
		return deger ;
	
	}