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 ;
}