LPC11C24 PWM.

Başlatan Logan, 25 Temmuz 2012, 10:37:41

Logan

Merhaba Arkadaşlar.

M0 çekirdekli LPC11c24'in PWM özelliğini kullanmak istiyorum. Anladığım kadarıyla içerisinde dahili bir PWM modülü yok. Bu sebeple sayıcıları iki farklı karşılaştırma değişkenine bağlayıp birini iş süresi için diğerini ise frekans için kullanıyoruz. Frekans karşılaştırıcımızı da sayıcıyı resetleyecek şekilde ayarlıyoruz. Pin ayarlarından kullanmak istediğimiz PWM kanalını PWM olarak seçiyoruz. Ayrıca karşılaştırma değişkenlerini, harici karşılaştırma değişkeninden "toggle" çıkış verecek şekilde ayarlıyoruz. Bütün bu ayarları yaptım fakat sanırım gözden kaçırdığım bir nokta var. Nette de örnek program yok. Aramızda bu konuda bana yardımcı olabilecek birisi var mıdır acaba?
İmza.

serhat1990


Hocam Bülent Hocanın STM32F4 karti ile yaptığı örnek bir uygulama var incelemenizi tavsiye ederim.. Timer yardımıyla basitçe yapabilirsiniz...

https://www.picproje.org/index.php/topic,35896.15.html

Logan

serhat1990, yardımın için teşekkür ederim. Fakat yapı olarak STM32F4 ile LPC11C24 pek aynı sayılmaz. Bülent Hoca'nın programında Timer kesmesi kullanılmış. Fakat benim PWM üretmem için kesmeye ihtiyacım yok. Ya da ben öyle zannediyorum :)
İmza.

serhat1990

Hocam , neden gerek yok anlamadım :)

İş süresi için , Benim aklıma gelen iki yol var daha fazlada vardır ama şuan iki yol var :)

Birincisi timer kullanmadan main içerisinde bir değişken saydırıp bu değişkenin değerine göre Pini low-high yapmak . Belli bir değerdede sıfırlamam.

İkincisi kısa süreli bir timer oluşturmak 200nS gibi . Bu timerda bir degişkenin değerine göre yine pini high low yapmak :)

Yanlış anladıysam kusura bakmayın Hocam. İş süresi olayını bu şekilde rahatça çözebilirsiniz...


Logan

Estafurullah serhat1990, yanlış anlama söz konusu değil. Fakat yapıyı ben kafamda tam oturtamadım. TMR16B0 sayıcısına MAT0 ve MAT3 değişkenlerini atadım. MAT0'ı iş süresi olarak, MAT3'ü ise frekans olarak kullanıyorum. Bu sebeple MAT3 değişkenini istenilen değere ulaştığı zaman TMR16B0'ı resetleyecek şekilde kurdum. GPIO0_8 no'lu pin MAT0 çıkışı. Program içerisinde PWM olarak ayarladım. Ayrıca çıkış olarak tanımladım. External Match değişkeni var. Anladığım kadarıyla oradan hangi MAT registerinin nasıl davranması gerektiğini ayarlıyorsun. Ben MAT0 ve MAT3 için toogle tanımladım. Yani 1 iken 0, 0 iken 1 yapacak. Şimdi tüm bu ayarlar dahilinde TMR16B0 MAT0 ile aynı değere ulaştığında PWM çıkışı değişecek. MAT3 değişkenin ulaştığında ise yine PWM çıkışı değişecek ve TMR16B0 sayıcısını resetleyecek. Mantık buraya kadar doğru fakat sanırım External Match Register ile ilgili ve çıkış almak ile ilgili problemler var.
İmza.

fatihinanc

Hocam LPC11C24 için LPC1114 örnekleri kullanılabilir. İkisinin de çekirdekleri M0 için olduğundan kodlar hatasız çalışacaktır.
Hatta Keil'da aynı kodu iki işlemci için de hatasız derleyebilirsiniz. LPC1114 için PWM örneği;

http://www.microbuilder.eu/projects/LPC1343ReferenceDesign/LPC1343_LPC1114_PWM.aspx
http://knowledgebase.nxp.com/showthread.php?p=830

Selamlar...
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

serhat1990

Alıntı yapılan: Logan - 25 Temmuz 2012, 11:28:23
Estafurullah serhat1990, yanlış anlama söz konusu değil. Fakat yapıyı ben kafamda tam oturtamadım. TMR16B0 sayıcısına MAT0 ve MAT3 değişkenlerini atadım. MAT0'ı iş süresi olarak, MAT3'ü ise frekans olarak kullanıyorum. Bu sebeple MAT3 değişkenini istenilen değere ulaştığı zaman TMR16B0'ı resetleyecek şekilde kurdum. GPIO0_8 no'lu pin MAT0 çıkışı. Program içerisinde PWM olarak ayarladım. Ayrıca çıkış olarak tanımladım. External Match değişkeni var. Anladığım kadarıyla oradan hangi MAT registerinin nasıl davranması gerektiğini ayarlıyorsun. Ben MAT0 ve MAT3 için toogle tanımladım. Yani 1 iken 0, 0 iken 1 yapacak. Şimdi tüm bu ayarlar dahilinde TMR16B0 MAT0 ile aynı değere ulaştığında PWM çıkışı değişecek. MAT3 değişkenin ulaştığında ise yine PWM çıkışı değişecek ve TMR16B0 sayıcısını resetleyecek. Mantık buraya kadar doğru fakat sanırım External Match Register ile ilgili ve çıkış almak ile ilgili problemler var.

Anladım Hocam incelemek gerek lpc serisini hiç kullanmadım o yüzden sadece mantıksal olarak yaklaştım kod olarak birşey söyleyemem.. Biz stm32 serisini tutturduk gidiyoruz :)


Logan

Arkadaşlar uzun çalışmalar sonucunda problemi çözdüm. Yazdığım program harfiyen doğru olmasına rağmen çalışmıyordu. Nette gezinirken yabancı bir forumda PWM için yazılan programın Keil derleyicisinde çalışmadığını fakat NXP'nin kendi derleyicisi olan LPCpresso programında çalıştığını anlatan bir konuya rastladım. Denemek için son çare olarak LPCpresso programını indirdim. Biraz uğraşla programı adapte ettim ve çalıştı. Aynı kodlar ile aynı mantıkta Keil derleyicisinde çalışmayan program LPCpresso ile çalıştı. Emin olmak için Keil kurulu başka bir bilgisayarda denedim yine sonuç değişmedi. Şu an kullanmakta olduğum Keil derleyicinin versiyonu 4.14'tür. belkide kürek yüzünden çalışmıyor emin değilim. Fakat dediğim gibi sadece Timer PWM rutinlerinde sorun çıkarıyor.

Aklınızın bir köşesinde bulunsun.

İyi günler.
İmza.

serhat1990

Alıntı yapılan: Logan - 26 Temmuz 2012, 16:25:22
Arkadaşlar uzun çalışmalar sonucunda problemi çözdüm. Yazdığım program harfiyen doğru olmasına rağmen çalışmıyordu. Nette gezinirken yabancı bir forumda PWM için yazılan programın Keil derleyicisinde çalışmadığını fakat NXP'nin kendi derleyicisi olan LPCpresso programında çalıştığını anlatan bir konuya rastladım. Denemek için son çare olarak LPCpresso programını indirdim. Biraz uğraşla programı adapte ettim ve çalıştı. Aynı kodlar ile aynı mantıkta Keil derleyicisinde çalışmayan program LPCpresso ile çalıştı. Emin olmak için Keil kurulu başka bir bilgisayarda denedim yine sonuç değişmedi. Şu an kullanmakta olduğum Keil derleyicinin versiyonu 4.14'tür. belkide kürek yüzünden çalışmıyor emin değilim. Fakat dediğim gibi sadece Timer PWM rutinlerinde sorun çıkarıyor.

Aklınızın bir köşesinde bulunsun.

İyi günler.

Hocam bilgi için teşekkürler. STM serisindede kontrol etmek lazım ...

Logan

Son gelişme.

Keil'in en son derleyicisini yükledim yine sonuç değişmedi. Fakat sorunu sanırım buldum. GPIO0_8 nolu pini PWM olarak ayarlayamıyorum. Direk ram adresine atama yapmama rağmen sonuç değişmiyor. Çok ilginç.
İmza.