Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Cortex ARM => Konuyu başlatan: yamak - 04 Ekim 2011, 13:22:16

Başlık: LPC1768 ADC Hızı
Gönderen: yamak - 04 Ekim 2011, 13:22:16
Merhaba arkadaşlar lpc1768 adc hızının kaç sps olduğunu bilen var mı? Benim ölçümümde saniyede 187500 örnek alabildim acaba en fazla bu kadar mı örnek alınabiliiyo?Bu arada adc hızım 12.5 mhz idi.
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: GreeN - 04 Ekim 2011, 13:57:38
Tam emin değilim ama 13 Mhz de 200.000 örnek alabiliyorsun sanırım. http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc17xx.pdf
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: -Hasan- - 04 Ekim 2011, 17:02:20
Alıntı yapılan: gerbay - 04 Ekim 2011, 14:11:41
DMA kullanmıyorsanız bir de DMA kullanarak deneyin

Hocam nedir bu DMA? ne işe yarar?
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: yamak - 04 Ekim 2011, 20:10:07
Acilimi direct memory access. Yani bellege direkt olarak erisime  yariyo. Mesela adc olcumunden alina sonucu control unitesine hic ugramadan okunabiliyo. Bu da programin calismasini hizlandiriyo. Genelde sinyal isleme gibi uygulamalarda fazla kullaniyo.
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: z - 04 Ekim 2011, 20:16:49
ADC continuous run modunda çalışmıyorsa hızınızı düşüren faktör ADC ye start veren kod ile sonuçları okuyan kod parçacıkları olacaktır.
Varsa FIFO'lardan yararlanarak okuma süresini kaldırabilirsiniz fakat start etme işleminden zaman kaybediyor olabilirsiniz.

 
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: yamak - 05 Ekim 2011, 00:29:10
Alıntı YapADC continuous run modunda çalışmıyorsa hızınızı düşüren faktör ADC ye start veren kod ile sonuçları okuyan kod parçacıkları olacaktır.
Varsa FIFO'lardan yararlanarak okuma süresini kaldırabilirsiniz fakat start etme işleminden zaman kaybediyor olabilirsiniz.
Hocam adc nin kendine ait fifo su yok ama lpc1768 gpdma sı adc birimi destekliyo.Dma kullanabilirim.
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: z - 05 Ekim 2011, 02:33:27
Dene tabiki. Ben ADC ile ilgili kodlarini merak ettim. Beli sorunun kaynagi orasidir.
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: yamak - 05 Ekim 2011, 02:35:05
Hocam kodlar bunlar:

#include <lpc17xx.h>
#include "lpc_glcd.h"
#include <stdio.h>
#include <yusuf_lpc17xx_delay.h>
uint32_t sonuc,i=0,j=0,k;
unsigned char f[]=" ";
uint32_t g[3000];
uint32_t sonuc_al(void);
void pll_hazirla(void)
{

    LPC_SC->SCS=0x20;
LPC_SC->CLKSRCSEL=0x01;
LPC_SC->CCLKCFG=0x02;
LPC_SC->PLL0CON=0x01;
LPC_SC->PLL0CFG=0xb;
LPC_SC->PLL0FEED=0xAA;
    LPC_SC->PLL0FEED=0x55;
while(!(LPC_SC->PLL0STAT&(1<<26)));
LPC_SC->PLL0CON=0x07;
LPC_SC->PLL0FEED=0xAA;
    LPC_SC->PLL0FEED=0x55;
LPC_SC->PCLKSEL0=0;
}
void adc_init(void)
{
LPC_PINCON->PINSEL3 &= ~(3UL<<30);
LPC_PINCON->PINSEL3 |=(3UL<<30);
LPC_PINCON->PINMODE3=2;
LPC_SC->PCONP |=1<<12;
LPC_ADC->ADCR=1<<5|1<<8|1<<21;

}
uint32_t adc_hesapla(void)
{
while(!(LPC_ADC->ADDR5&(1UL<<31)));
  j++;
sonuc=LPC_ADC->ADDR5;
return((sonuc>>4)&0xFFF);
}
void adc_start(void)
{
LPC_ADC->ADCR |=(1<<16);
}
void adc_stop(void)
{
LPC_ADC->ADCR &=~(1<<16);
}
uint32_t sonuc_al(void)
{
uint32_t i,hesap,kusurat,tam;
adc_start();
hesap =adc_hesapla();
adc_stop();
hesap=((hesap*3300)/(4096));

return(hesap);
}
void TIMER1_IRQHandler(void)
{
  int k=0;
LPC_TIM1->IR=0xFF;
LPC_TIM1->TCR=0;
sprintf(f,"%d\n\r",i);
send_string_uart0(f);
DelayMs(0,1000);
for(k=0;k<=i;k++)
{
  sprintf(f,"%d->%d \n\r",k,g[k]);
send_string_uart0(f);
}
}
void timer_init(void)
{
LPC_TIM1->TCR=0x02;//reset timer
    LPC_TIM1->IR=0xFF;//tüm kesmeleri restle
    LPC_TIM1->MR1=10*24000;
    LPC_TIM1->MCR=24;
    LPC_TIM1->TCR=0x01;//start timer
    LPC_TIM1->PR=0x00;//prescalar deger.Örnegin 2 oldugun her 3 tick de bir sayar.
NVIC_EnableIRQ(TIMER1_IRQn);
}
int main(void)
{
    pll_hazirla();
    LPC_GPIO2->FIODIR=0XFF;
LPC_GPIO2->FIOCLR=0XFF;
adc_init();
glcd_init();
uart0_init();
timer_init();
i=0;
while (1)
{
i++;
g[i]=sonuc_al();
}

}
Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: z - 05 Ekim 2011, 03:13:10
Sen ADCyi baslatiyor ardindan durduruyor veri uzerinde islem yapiyor ve sonucu rama tasiyorsun tekrar ADC yi baslatiyorsun.
Uretici firma reklam amacli max hizdan bahsederken boyle yapmaz.

Cipini hic tanimiyorum fakat, ADC hizini anlamak icin  Burst bitini set eder ve bir daha dokunmazdim. ADC Kanallari sira ile olcerdi. Ancak bu modda en buyuk donusum hizina cikabilirsin. (Zaten senin bulacagin deger de clklar duzgun set edildi ise 13Mhz icin cevrim hizi 200khz olacaktir)

-----------

Kodunu detayli incelemedim ama i nin alip basini gitmesini engelleyen bir kontrol yok gibi.

i=0;
while (1)
{
i++;
g =sonuc_al();
}

Başlık: Ynt: LPC1768 ADC Hızı
Gönderen: yamak - 05 Ekim 2011, 03:43:58
Hocam cevabınız için teşekkür ederim. Program 10 ms saniye boyunca çalışıp sonra timer kesmesi içinde verileri uarttan gönderiyo ve timerı kapatıyorum bu yüzden ben sadece 10 ms de ölçtügü değerleri görüyorum.Bu arada zaten şimdilik bu hız benim için fazlasıyla yeterli.Yapmak istediğim şey ses sinyalini örneklemekti.Zaten ses için saniye de yaklaşık 10000 örnek alsam da yeterli.Sadece merak ettiğim için bi deneyeyim dedim.