Basit PIC Firmware

zaten öyle yapıyorum furkan. Bir header file eksik onu çıkardım projeden. Build edince de makefile yok diyor.
 
Bizim elemanın eklediği kod eksik. nbprojects ve mcc_generated_files dizinlerini temizliyorum ve tekrar generate dediğim halde Makefile üretilmiyor. Demekki MCC konfigürasyonunun kendisinde bile yok Makefile.

Zaten bu MCC saçmalığına da gerek yok. pic24_c_template_1 diye bir örnek program var. Tamamen Makefile ve C kaynak kodlarından oluşuyor. Onu yükledim, bendeki PIC'e göre yapılandırmayı değiştirdim, sonra da ICD4 debugger kullanıldığını belirttim ve şimdi işlemci üzerinde çalışıyor. Burada debugger ile PIC'e yüklettim, main'deki ilk fonksiyon olan ConfigureOscillator bir breakpoint koydum ve şu anda o breakpoint'ta durdu.

a.png
 
Gerçi gene nbproject diye bir dizin oluşturmuş ve içinde bir sürü ıvır zıvır var, ama oradaki şeylerle benim işim yok, mplabx onlarla ne yapıyorsa yapsın. Benim için önemli olan bir makefile var, C kaynak kodları var ve bunlar xc16 ile derlenip bir hex file oluşuyor :)

Örnek programı şöyle açtım. mplabx ilk çalıştırıldığında bir start page çıkıyor. Orada sol üstte PROJECTS Open Sample var. Oradan de PIC24 C Template seçiyorsun.

Bunu seçince sana minimal, ama birden fazla C kaynak kodundan oluşan bir proje oluşturuyor. Projedeki fonksiyonların hepsi boş, o yüzden bu projeyi oluşturup derleyince hiçbirşey yapmayan bir programın oluyor :)
 
Evet şimdi iki şey lazım bana bu reset işini halletmek için:

1) İlgili portları çıkış olarak yapılandırmam lazım
2) Bir tane delay fonksiyonu lazım, çünkü reset palsını şöyle 100 ms falan aktif tutmam gerekiyor.

Şemanın ilgili kısmı şöyle

a.png


Hatta burada bir de LED pini var. Onunla şöyle bir klasik LED blink ile işe başlayabiliriz :)
 
Bu xc16 tamamen açık kaynak bir derleyici, bu çok hoşuma gitti! Bakıyorum şimdi komut satırında kullanılan parametre ve opsiyonlara, benim linux gcc'de kullandığım parametre ve opsiyonlara çok benziyor. Yani bu xc16, aslında PIC mimarisi için özelleştirilmiş bir gcc sürümü! Tam da benim aradığım birşey :)
 
Bu xc16 tamamen açık kaynak bir derleyici, bu çok hoşuma gitti! Bakıyorum şimdi komut satırında kullanılan parametre ve opsiyonlara, benim linux gcc'de kullandığım parametre ve opsiyonlara çok benziyor. Yani bu xc16, aslında PIC mimarisi için özelleştirilmiş bir gcc sürümü! Tam da benim aradığım birşey :)

XC16 ya hiç bakmadım ben XC8 ile ilgileniyorumda farklı olan ne ki onu anlamadım ?
 
XC8 de gene gcc bazlı olabilir, yoksa aynı şekilde XC ile başlamazdı.
 
Evet şimdi iki şey lazım bana bu reset işini halletmek için:

1) İlgili portları çıkış olarak yapılandırmam lazım
2) Bir tane delay fonksiyonu lazım, çünkü reset palsını şöyle 100 ms falan aktif tutmam gerekiyor.

Şemanın ilgili kısmı şöyle

1804 eklentisine bak

Hatta burada bir de LED pini var. Onunla şöyle bir klasik LED blink ile işe başlayabiliriz :)

XTAL frekansa göre bir döngü kurulabilir. veya kullanmadığınız bir timer donanımı varsa onun ilede yapılabilir. hatta timer cok daha hassas olur.
 
Sadece makefile ve xc16 yı komut satırından çalıştırarak boş bir programın için bir hex file oluşturdum. Yani hiç MPLABX IDE kullanmadan, sadece xc16 ile.

Tabi hex dosyayı programlamak için ve debug etmek için IDE gerekecek. Aslında komut satırı debugger'i de var ama o nedense doğru çalışmadı bende. Bir tür java hatası veriyor.
 
Bu şekilde komut satırından makefile ile build yapmanın en büyük avantajı, IDE'deki menülerde, diyalog kutularında ve ayar pencerelerinde bulunan yüzlerce ayarın durumundan bağımsız olarak, deterministik olarak bir hex file oluşturabilmek. Bu şekilde oluşturulan bir programı, IDE ile debug etmek de mümkün.

Ama daha önce PIC program yazmadığım için bazı temel ayarların ve yapılandırmaların ne olduğunu bilmiyorum. O yüzden en azından bunların ne olduğunu görmek için sıfırdan bir proje oluşturdum, üç tane GPIO yapılandırdım ve MCC ile kodu ürettim. Sonra da üretilen koddaki yapılandırmaları bir kenara kopyaladım. Bunları datasheet'ten bakacağım ve ne işe yaradığını anladıktan sonra benim projeye uygun şekilde değiştireceğim.

MCC ile üretilen kodda temel olarak şu yapılandırmalar var:

1) Clock osilatör ayarı
2) GPIO ayarı

Şu aşamada bunun dışında herhangi bir çevre birimi kullanmayacağım. İnterrupt da kullanmayacağım. O yüzden bunların en azından şimdiki aşamada yapılandırılmasına gerek yok. İnterrupt ile ilgili de bir yapılandırmak yoksa, tüm interrupt'ların ya kapalı, yada hiçbirşey yapmayan default fonksiyonlar çağırdığını varsayıyorum.
 
Breakpoint'lar ile ilgili bir tuhaflık da görüyorum. şöyle bir program hazırladım:

Kod:
#include <xc.h>

static void init_clock(void)
{    /* program burada duruyor */
}

static void init_gpio(void)
{
}

int main(void)
{
    init_clock();     /* HW breakpoint bu satırda */
    init_gpio();

    return 0;
}


Bu programda init_clock() fonksiyonuna bir hardware breakpoint koyuyorum ve programı debug etmeye başlıyorum. Ama program bu satırda duracağına init_clock fonksiyonunun en başında duruyor. Yani o fonksiyona girdikten hemen sonra duruyor :)

Bunu araştırdım internette, bilinen bir problemmiş :mad: Hatta "skid effect" isim bile vermişler buna


Yani bir hardware breakpoint set ettiğinde, tam o noktadaki komutun türüne bağlı olarak bir veya birkaç komut daha işledikten sonra işlemci durduruluyor. Bu sorun sadece hardware breakpoint'larda görülüyor. Software breakpoint ile denedim, bu sorun oluşmuyor. Her işlemci ailesinin kendine özgü böyle tuhaflıkları var işte ...
 
Abi windows için komut satırından sadece XC8 kullanarak ben nasıl derletebilirim programı ? ben bir türlü o kısmı cözemedim.

Benim basit örnek projeyi zip olarak ekledim. Tabi ben Linux altında yaptım bunu. Windows'da aynı şeyi yapmak için bir kere Windows altında çalışan bir make programı bulacaksın. Sonra da zip dosya içindeki environment-xc16 daki değişkenleri tanıtman lazım.

Veya cygwin kullandıysan kur onu windows'a. Cygwin altında bu zip dosyadaki proje aynen derlemesi lazım (tabi xc16 tam olarak kurulu ise. IDE kurulu olmasına gerek yok).
 

Ekler

  • test.zip
    1.8 KB · Görüntüleme: 195
Benim basit örnek projeyi zip olarak ekledim. Tabi ben Linux altında yaptım bunu. Windows'da aynı şeyi yapmak için bir kere Windows altında çalışan bir make programı bulacaksın. Sonra da zip dosya içindeki environment-xc16 daki değişkenleri tanıtman lazım.

Veya cygwin kullandıysan kur onu windows'a. Cygwin altında bu zip dosyadaki proje aynen derlemesi lazım (tabi xc16 tam olarak kurulu ise. IDE kurulu olmasına gerek yok).

Ama bence sen boşver windows'u. At formatı, debian linux kur ve oradan devam edelim :) Ben burada MPLABX kurulumunu sıfırdan yaptım, çıkabilecek bütün musibetleri de gördüm ve çözdüm. Sen aynı sorunları yaşamayacaksın.
 
Ama bence sen boşver windows'u. At formatı, debian linux kur ve oradan devam edelim :) Ben burada MPLABX kurulumunu sıfırdan yaptım, çıkabilecek bütün musibetleri de gördüm ve çözdüm. Sen aynı sorunları yaşamayacaksın.

Allahtan benim şu kırık dökük leptop'da denedim. ubuntu kuruluydu. normal leptoptumda flasha Debian iso yazdırdım. ordan diğer leptopu formatlıyacaktım fakat debianı kuramadım. cok karışık ve bir sürü seçenek var Disk kurma kısmına geldim orada patladım :D gerisini getiremedim. ubuntuyuda silmiş. şimdi GNU komut ekranı acılıyor. orda kalıyor. yarın sakin kafayla bir daha bakacağım birde 2 tane kurulum var ben direk kur dedim. o yüzden mi gitti acaba komut satırını actı direk.
 

Forum istatistikleri

Konular
5,833
Mesajlar
99,476
Üyeler
2,476
Son üye
mrmandos

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top