ARM yeni başlayanlar için sorular

Başlatan aykut54, 05 Kasım 2011, 20:27:39

aykut54

Merhaba Herkese:)

Arm işlemcilere yeni başlamış biri olarak  şimdilik bilmediğim  soruları sormak istiyorum. Burdaki sorular benim gibi bilmeyenlerede yol gösterebilir. Hatta dilerseniz soruları bu başlık altındada soralım Ne dersiniz?

ilk sorum;
1) Nasıl datasheet okunur? Datasheet okuduğunuzda nelere dikkat ederseniz?

2. sorum ise;
2) Aşağıdaki yazılıma LPC_GPIO2 -> DIR |= 1<<4; 	//GPI02 Registeri 4.bit GPIO2 Çıkış GPIO2.4 pinine 1 sn aralıklar ile flaş yapan programı ilave ettim fakat ilgili pinde herhangi bir hareketlilik göremedim. Hatta  GPIO2'nin 2,8,10bitlerinide denedim fakat bir hareketlilik göremedim.
LPC_GPIO2 -> DATA |= (1<<4);                      
bekleme ();                             
LPC_GPIO2 -> DATA &= ~(1<<4);
bekleme ();
   

Burdaki kod çalışıyor. Denendi.
#include <lpc11xx.h>                      

void bekleme (void)  {                        
  unsigned long  d;
  for (d = 0; d < 1000000; d++);           
}
 //Saat kaynagi olarak 12mhz harici kristalli sistem osilatörü ayarlarnir
 void osc_init(void){
 	LPC_SYSCON->SYSOSCCTRL = 0x00; // krsital baglama araligi 1-20MHz + Osilatör pllye gönderilmez.
 	LPC_SYSCON->PDRUNCFG &=~(1<<5); // sistem osilatörünü aç
	LPC_SYSCON->MAINCLKSEL = 1; // main clock = sistem osilatörü
	LPC_SYSCON->MAINCLKUEN = 0;	// main clock seçme
	LPC_SYSCON->MAINCLKUEN = 1;	// güncellemesi
 	}


int main (void) {
  LPC_GPIO0 -> DIR |= 1<<7;	  //GPIO Registeri 7.bit
  LPC_GPIO1 -> DIR |= 1<<10; //GPI01 Registeri 10.bit
  LPC_GPIO3 -> DIR |= 1<<0; 	//GPI03 Registeri 0.bit	  
  osc_init();

  while (1)  { 

	LPC_GPIO0 -> DATA |= (1<<7);                      
    bekleme ();                             
	LPC_GPIO0 -> DATA &= ~(1<<7);
	bekleme ();
	
	LPC_GPIO1 -> DATA |= (1<<10);                      
    bekleme ();                             
	LPC_GPIO1 -> DATA &= ~(1<<10);
	bekleme (); 

	LPC_GPIO3 -> DATA |= (1<<0);                      
    bekleme ();                             
	LPC_GPIO3 -> DATA &= ~(1<<0);
	bekleme (); 
	


  }
}


3)giriş ve çıkış tanımlamada ya da biti set ya da clr etmede başka bir kod kullanabilirmiyim? Bana biraz karışık geldi:)

son olarak LPC1114 Kartında bir gariplik mi var anlamadım. Kodu işlemci içerisine yükliyorum fakat bir türlü kod çalışmıyor. LPC1114 usb soketini çıkartıp tekrar taktığım zaman bu sefer yazılan program işlemeye başlıyor. Bu sorun sizdede varmı?

İyi çalışmalar. Bu vesile ile herkesin kurban bayramı mübarek olsun.

fahri-

LPC1114 kartına yükleme yaptığınızda debug konumunda kalıyor. Programın realtime çalışması için run etmelisin.

MC_Skywalker

#2
yaptığın bit işlem. önce or sonra and işlemine tabitutup port durumunu değiştiriyorsun. Arm için genelede böyledir.

aşağıdaki gibide yapılabilir mcu üreticisine göre register adlarının farklığından dolayı değişiklik.

lpc1768 için

int main (void) {
LPC_GPIO1->FIODIR = 0x000000FF; 			//giris cikis ayarlama komutu 1 cikis 0 giris
                                                                                // 1. biti cikis digerleri giris
while (1) 
    {										//sonsuz döngü
        LPC_GPIO1->FIOSET = 0x00000001; 		//1. biti 1 yap
        Gecikme(500); 						       //bekleme yap (yaklasik 500 msn - 12Mhz de)
        LPC_GPIO1->FIOCLR = 0x00000001; 	      //1. biti 0 yap
        Gecikme(500); 						      //bekleme yap (yaklasik 500 msn - 12Mhz de)
    }
}


lpc2138 için

int main (void) {
GPIO1->FIODIR = 0x000000FF; 			//giris cikis ayarlama komutu 1 cikis 0 giris
                                                                                // 1. biti cikis digerleri giris
while (1) 
    {										//sonsuz döngü
        GPIO1->FIOSET = 0x00000001; 		//1. biti 1 yap
        Gecikme(500); 						       //bekleme yap (yaklasik 500 msn - 12Mhz de)
        GPIO1->FIOCLR = 0x00000001; 	      //1. biti 0 yap
        Gecikme(500); 						      //bekleme yap (yaklasik 500 msn - 12Mhz de)
    }
}

Mujdat117

#3
merhaba benim de bir sorum olucak
lpc1114f ekspres kit mevcut fakat pc bağlantısında sorunm var aşağıdaki hata msjlarını alıyorum
ayarlarını nasıl yapabilrim?
proje açılırken bu hatayı veriyor

debug yapmaya çalışırken


Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

aykut54

hocam benimde başıma geldi ama tam olarak nasıl yaptığımı hatırlamıyorum aktivasyon kodunu girmeniz gerekiyor bunun içinde nxp sitesine üye olmanız gerekiyor diye hatırlıyorum ama tam emin değilim. Size önerim. Ben programı  keil 4.22 yazıp arm içine programı lpc expressoda atıyorum. Keilde şükür böyle sorunlar yok:)

Sizdeki sorun aktivasyon ile alakalı.

Mujdat117

aykut54 hocam teşekkür ederim aktivasyon işini haletim.
fakat hala debuger ve yüklemede aynı hataları veriyor. aslında C de ve  Arm da hiç tecrübem ve bilgim yok ikisinide yeni öğrenmeye çaışıyorum.
verdiğiniz bilgiler için teşekkürler.
Ayinesi iştir kişinin lâfa bakılmaz.Şahsın görünür rütbe-i aklı eserinde

M_B

Merhaba Aykut54;
Yukarda  " Burdaki kod çalışıyor. Denendi. "
dediğin kodu bende keil  le compile edeyim dedim
Altaki gibi hataya rastladım.

Test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc11xx.o).
main'in icine SystemInit fonksiyonu nuda ekledim gene aynı hatayı aldım.

Project ->new uVision  project kısmında işlemciyi  NXP LPC1114/201 seciyorum yoksa altakılerden birisini mi secmem gerekiyor  LPC1114/202 , LPC1114/301 ve LPC1114/302 secimleride mevcut.

Bu konudaki dusunceniz cozumunuz nedir.
Sorunu cozemezsek proje klasorunu bir yere yukleyip onunla deneme yapmak isterim.

Kolay gelsin.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Erhan YILMAZ

Alıntı yapılan: M_B - 07 Kasım 2011, 21:07:50
Merhaba Aykut54;
Yukarda  " Burdaki kod çalışıyor. Denendi. "
dediğin kodu bende keil  le compile edeyim dedim
Altaki gibi hataya rastladım.

Test.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc11xx.o).
main'in icine SystemInit fonksiyonu nuda ekledim gene aynı hatayı aldım.

Project ->new uVision  project kısmında işlemciyi  NXP LPC1114/201 seciyorum yoksa altakılerden birisini mi secmem gerekiyor  LPC1114/202 , LPC1114/301 ve LPC1114/302 secimleride mevcut.

Bu konudaki dusunceniz cozumunuz nedir.
Sorunu cozemezsek proje klasorunu bir yere yukleyip onunla deneme yapmak isterim.

Kolay gelsin.

\Keil\ARM\Startup\NXP dizininde bulunana system_LPC11xx.c dosyasını projeye dahil etmek gerek

M_B

Alıntı yapılan: tamirci_erhan - 07 Kasım 2011, 22:09:48
\Keil\ARM\Startup\NXP dizininde bulunana system_LPC11xx.c dosyasını projeye dahil etmek gerek

Tesekkurler hocam oldu. 
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

son olarak LPC1114 Kartında bir gariplik mi var anlamadım. Kodu işlemci içerisine yükliyorum fakat bir türlü kod çalışmıyor. LPC1114 usb soketini çıkartıp tekrar taktığım zaman bu sefer yazılan program işlemeye başlıyor. Bu sorun sizdede varmı?

hocam bu durumun olmaması ıcın LPCXpresso da program atarken Erase options bolumunde

* mass erase
- nin secili olması gerekiyor o zaman kabloyu cıkarıp takmadan direkmen progran atılınca calısıyor.


İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Ali_54

bölüm başlığı nedeniyle buradan sormak istedim bende. stm32f4 168mhz arm a geçmek istiyorum. ama arm la hiç uğraşmadım. hiç bilmiyorum. pic lere aşınayım biraz. arm lar için nereden başlamamı önerirsiniz arkadaşlar? direk stm32f4 alsam zor mu gelir? yoksa lpc100 serisi falan diyolardı onlardan mı başlamalıyım?
1 harf öğretenin 4 gün kölesi olurum.

MC_Skywalker


z

Alıntı yapılan: Ali_54 - 26 Kasım 2011, 22:20:43
bölüm başlığı nedeniyle buradan sormak istedim bende. stm32f4 168mhz arm a geçmek istiyorum. ama arm la hiç uğraşmadım. hiç bilmiyorum. pic lere aşınayım biraz. arm lar için nereden başlamamı önerirsiniz arkadaşlar? direk stm32f4 alsam zor mu gelir? yoksa lpc100 serisi falan diyolardı onlardan mı başlamalıyım?

Eger C dilinde program yazmak suretiyle ARM ciplerini kullanacaksan ve su ana kadar hic ARM ile ugrasmadiysan.

Bilmem ne firmasinin X cipi kolay deniyorsa bunun ogrenme zorlugu senin icin 100 uzerinden 50 ise. CM4 cipin ogrenme zorlugu da 100 uzerinden 50 olacaktir.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

haydarpasamikro

Bence şimdilik hiç uygulama kartı almayın. Proteus ISIS ile LPC21xx devre simülasyonu yapılabiliyor. Biraz standart C öğrenenmek ile yola çıkın. Temel C dili  kavramlarına aşina olduktan sonra KEİL MDK-ARM deneme versiyonu ile örnek programları inceleyerek ve mutlaka seçtiğiniz mikro nun manual ini hatim ettikten sonra adım adım çevrebirim uygulama programcıkları yazarak ilerleyin. Sonra kafanıza tak edip bir deneme kartı almak gerekirse yeni teknolojiye geçiş yapın. Mesela ARM Cortex M3. Ben de Keil in MCB1700 kiti var. Pahalı ama birçok ileri uygulama için uygun. Dediğim gibi basit led, buton uygulamaları için Proteus İsis ile başlayın. Ancak İsis in kütüphanesinde tüm ARM modelleri yok. LPC21xx bikaç modeli.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

aykut54

Herkese merhaba

Elimdeki LPC1114 arm boardu ile uygulamaya yapmaya başladım, Amma velakin bu boarda bulunan portların pinlerini çıkış yapmama rağmen pinlerde herhangi bir hareket görmedim.

Mesela aşağıdaki programda GPIO0,1,2, Pinleri çıkış yapıldı fakat  bu pinlerde led olmasına rağmen led çok düşük bir voltajda sabit yanıyor, Aynı programı GPIO8,9  Pinleri için yazdığımda  ilgili pinlerde hareket var,

Bu sorun yazılımsal ya da donanımsal bir sorun mu? Böyle bir sıkıntı yaşayan oldumu?

#include <lpc11xx.h>                      

void bekleme (void)  {                        
  unsigned long  d;
  for (d = 0; d < 100000; d++);           
}
 //Saat kaynagi olarak 12mhz harici kristalli sistem osilatörü ayarlarnir
 void osc_init(void){
 	LPC_SYSCON->SYSOSCCTRL = 0x00; // krsital baglama araligi 1-20MHz + Osilatör pllye gönderilmez.
 	LPC_SYSCON->PDRUNCFG &=~(1<<5); // sistem osilatörünü aç
    LPC_SYSCON->MAINCLKSEL = 1; // main clock = sistem osilatörü
    LPC_SYSCON->MAINCLKUEN = 0;	// main clock seçme
    LPC_SYSCON->MAINCLKUEN = 1;	// güncellemesi
 	}


int main (void) 
 {
  LPC_GPIO2 -> DIR |=0xFFFFFFFF;
  
  osc_init();

  while (1)  { 

				LPC_GPIO2 -> DATA |=0x00000001;
				bekleme ();                             
				LPC_GPIO2 -> DATA &=0x00000000;
				bekleme (); 
   
					LPC_GPIO2 -> DATA |=0x00000002;                      
					bekleme ();                             
					LPC_GPIO2 -> DATA &=0x00000000;
					bekleme (); 

				LPC_GPIO2 -> DATA |=0x00000004;                      
				bekleme ();        
				LPC_GPIO2 -> DATA &=0x00000000;
				bekleme (); 


           }
 }