lpc1769 adc sorunu

Başlatan burakoz1989, 24 Ocak 2013, 12:51:15

burakoz1989

merhaba arkadaşlar elimde expkits exlpc100-2 kiti var örnek uygulamardan adc yi çalıştırmaya çalışıyorum fakat 3-4 gündür çalıştıramadım daha doğrusu program çalışıyor grafik lcdye  ilk veri geliyo fakat ADC_Oku(POT1);    kumutundan sora bir işlem yapmıyo komutun içinde kalıyor biraz uğraştığımda ADC_Oku(POT1);   komutunu çağırdığımda bu komutun içindeki
while ((LPC_ADC->ADGDR & 0x80000000UL) == 0);

while sonsuz döngüsünden çıkmadığını gördüm acaba adc çevrimi neden tamamlanmıyor yanlış yaptığım atladım bir şey mi var ilginiz için şimdide teşekkür ederim
kodlar;
main.c
#include "LPC17xx.h"
#include "ks0108.h"
#include "stdio.h"
#include "delay.h"
#include "adc.h"

#define POT1				0
//#define POT2				1
#define LDR				    2



/********************************************************************************************/
int main (void)
{

   uint32_t  adc;
   char adc_bilgisi[63];
	
  SystemInit ();
	SysTick_Config(12000000/1000);

	LPC_GPIO0->FIODIR = 0x0000FFFF;
	ks0108_init();


	DelayMs(500);
	
    while(1){
	 	ks0108_text(1,1,"adc basliyor",1,1);

	adc=ADC_Oku(POT1);		
 
	sprintf(adc_bilgisi,"   POT1= %4d   ",adc);
 
	ks0108_text(1,10,adc_bilgisi,1,1);

	ks0108_text(1,20,"burak",1,1);
	

	DelayMs(250);

	}
}


adc.c
#include "adc.h"
#include "LPC17xx.h"
#include "delay.h"

 /**********************************************************************/
int ADC_Oku(char ADC_kanal)
{
	uint32_t u32PCLKDIV, u32PCLK;


  	LPC_SC->PCONP |= (1 << 12);


	switch (ADC_kanal)
	{
	 	case 0:
	  		LPC_PINCON->PINSEL1 |= (1U<<14);
			break;
	 	case 1:
	  		LPC_PINCON->PINSEL1 |= (1U<<16);
			break;
	 	case 2:
	  		LPC_PINCON->PINSEL1 |= (1U<<18);
			break;
	 	case 3:
	  		LPC_PINCON->PINSEL1 |= (1U<<20);
			break;
	 	case 4:
	  		LPC_PINCON->PINSEL3 |= (3U<<28);
			break;
	 	case 5:
	  		LPC_PINCON->PINSEL3 |= (3U<<30);
			break;
	 	case 6:
	  		LPC_PINCON->PINSEL0 |= (2U<<6);
			break;
	 	case 7:
	  		LPC_PINCON->PINSEL0 |= (2U<<4);
			break;
	}
	
	DelayMs(1);

  	u32PCLKDIV = (LPC_SC->PCLKSEL0 >> 6) & 0x03;
  	
	switch ( u32PCLKDIV )
  	{
		case 0x00:
		default:
	  		u32PCLK = 12000000/4;
			break;
		case 0x01:
	  		u32PCLK = 12000000;
			break; 
		case 0x02:
	  		u32PCLK = 12000000/2;
			break; 
		case 0x03:
	  		u32PCLK = 12000000/8;
			break;
  	}


	LPC_ADC->ADCR = ( 1 << ADC_kanal ) | 	
					( ( u32PCLK  / ADC_CLK - 1 ) << 8 ) |  
					( 0 << 16 ) | 	
					( 0 << 17 ) |  		
					( 1 << 21 ) |	
					( 0 << 24 ) |  						
					( 0 << 27 );	

	DelayMs(1);

	LPC_ADC->ADCR |= (1UL << 24);

	while ((LPC_ADC->ADGDR & 0x80000000UL) == 0);


	return ((int)((LPC_ADC->ADGDR >> 4)&0x00000FFFUL));
}

burakoz1989

soruma cevab verebilecek kimse yokmu?

burakoz1989

arkadaşlar kafayı yiyecem ya kaç gündür  uğraşıyorum bir el atında halledelim şu sıkıntıyı ya :(

buzkırıcı

Hocam Bende aynı sorunla karşılaşmıştım. Kodunu incelemedim ama donanımsal olarak şunu yapman lazım;

ADC modülü beslemesi olan Vdda 3.3v var ve Vssa grounda çek,  ADC çalışması için Vrefn pinine 3v3 referans gerilimi uygulamalsın.
Eğer kodda da sıkıntı yoksa çevrimi yapıyor.
İmza Atmayı bilmem Parnak Bassam olur mu?

burakoz1989

Alıntı yapılan: buzkırıcı - 26 Ocak 2013, 23:06:03
Hocam Bende aynı sorunla karşılaşmıştım. Kodunu incelemedim ama donanımsal olarak şunu yapman lazım;

ADC modülü beslemesi olan Vdda 3.3v var ve Vssa grounda çek,  ADC çalışması için Vrefn pinine 3v3 referans gerilimi uygulamalsın.
Eğer kodda da sıkıntı yoksa çevrimi yapıyor.
hocam çok sağolun ilgilendiğiniz için şuan kitim yanımda yok sınava geldim pazartesi deniyecem inş. fakat bir şey sormak istiyorum datasheeti özellikle inceledim fakat sizin sölediklerinizi göremedim bu bilgileri nereden öğrendiniz acaba bir kaynakta yazıyosa bende incelemek isterim  hocam birde benim kitin şemasında vdda ve vref kondansatörle toprağa çekilmiş vssa ise boşta  vdda ve vref pinine nasıl 3.3v gerilim verecez zaman ayırıp soruma cevap verdiğiniz için çok teşekkür ederim :)

buzkırıcı

 bende aynı kitte çalıştıramamıştım. ;D  Notlarımın arasında ADC çalışması için Vrefn pinine 3v3 referans gerilimi uygulamalsın. yazmışım kaynak olarakda lpc1769 un usermanuel inde sf: 103 de olması lazım.
İmza Atmayı bilmem Parnak Bassam olur mu?

burakoz1989

Alıntı yapılan: buzkırıcı - 27 Ocak 2013, 00:24:34
bende aynı kitte çalıştıramamıştım. ;D  Notlarımın arasında ADC çalışması için Vrefn pinine 3v3 referans gerilimi uygulamalsın. yazmışım kaynak olarakda lpc1769 un usermanuel inde sf: 103 de olması lazım.
hocam ben kaç gündür adc ünitesine bakıyorum aklımada gelmedi değil fakat herhangi bir uyarıda görmedim meğersem pinconguration da anlatmışlar adamlar çok saolasın pazartesi deneyip yazacam inş çalışır :)

burakoz1989

hocam dediklerinizi datasheetdeki gibi yaptım gayet güzel çalışıyo çok teşekkür ederim yardımınız için :)