Adc-Dac Sampling Time Olmuyor?

Başlatan Bayramsumbul, 15 Ağustos 2013, 21:48:38

Bayramsumbul

Arkadaşlar Merhaba.Aklıma Takılan Bir Şeyler Var.
Bildiğim Kadarıyla "Sampling Time" 1 Saniyedeki Örnek Alma Miktarı Yani Çözünürlüktür.(1/hz)
Bir Sesin Sorunsuz Duyulması İçin 8 KHz Yeterli Oluyor.(Ben Bunu 20 KHz'de Tuttuğumu Sanıyorum)

Lafı Uzatmadan Programa Geçiyim:

main.c
#include <stm32f0xx.h>
#include "func.c"
#define Dacout DAC->DHR12R1
void SysTick_Handler()
{
   Dacout=Adcin();
}
int Hz (int hz)
{
   hz=1000000/hz;
   hz=hz*48;
   return (hz);
}
int main()
{
   RCC->AHBENR |= 0x00080000;
   GPIOC->MODER = 0x55555555;
   DacInit(ENABLE);
   AdcInit();
   SysTick_Config(Hz(20000));
   while(1)
   {
   }
}




func.c

#include <stm32f0xx.h>
void AdcInit()
{
   RCC->AHBENR |=0x00020000;//GPIOA Saat Kaynagi Aktif
   GPIOA->MODER |= 0x00000003;//PA0 Analog Giris
   RCC->APB2ENR |= 0x00000200;//Adc Saat Kaynagi Aktif
   ADC1->CR = 0x80000001;//Adc Aktif,Ayar Modunda
   ADC1->CHSELR = 0x00000001;//Donusum Yapilacak Kanal : Kanal 1
}
void DacInit(int x)
{
   RCC->AHBENR |=0x00020000;//GPIOA Saat Kaynagi Aktif
   GPIOA->MODER |= 0x00000300;//PA4 Analog Cikis Olucak
   RCC->APB1ENR |= 0x20000000;//Dac Saat Kaynagi Aktif
   DAC->CR = 0x00000002;//Output Buffer Pasif
   if (x==ENABLE){   DAC->CR |= 0x00000001;}
   else if (x==DISABLE){DAC->CR &= !0x00000001;}
}
int Adcin ()
{
   ADC1->CR |= 0x00000004;
   while (!(ADC1->ISR |= 0x00000004)){}
   ADC1->ISR &= !0x00000004;
   return(ADC1->DR);
}


Programda Systick Timer'ı Kullanıyorum.Saniyede 20000 Defa Örnek Alıp-Çıkış Veriyorum.
Program Bu Haliyle Çalışmıyor.Ama Timer Kullanmayıp Sürekli While (1) Döngüsünde "Dacout=Adcin();" Yaptığım Zaman Hiç Bir Sorun Olmuyor.

Cevaplarınız İçin Teşekkür Ediyorum...
Bir Elektronik Meraklısının Serüveni...

Bayramsumbul

Bir Elektronik Meraklısının Serüveni...