Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: sfsyn - 10 Mart 2018, 18:17:01

Başlık: LM35 ADC Veri Gelmeme Sıkıntısı
Gönderen: sfsyn - 10 Mart 2018, 18:17:01
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 ;

}