Hazırlayan: Hasan ARSLAN – Emeği geçen Kişilere Teşekkürler Hi-Tech Picc Microchip firmasının üretiği PIC serisi uC için Ansi-C standartlarına uygun bir C derleyicisidir. Hi-Tech değişik PIC serileri için değişik C derleyicinse sahip. PIC10, PIC12 ve PIC16 serisi için PICC derleyicisini var. PIC18 serisi için PICC-18 derleyicisi var. Ayrıca 16 bit ve 32 PIC ler için birer derleyiciye sahiptir.
Hi-Tech sadece Microchip firmasının uC leri için C derleyisine sahip değil aynı zaman da diğer uC üreticisin üretiği chiper içinde C derleyicisine sahip. Windows, Mac ve Linux sürümleri için derleyicileri mevcut.
Hi-Tech Profesyonel bir derleyici olduğu için fiyatı pahalıdır. Ancak bedava olan kısıtlı PICC-lite sürümü de mevcut. Bazı mikroişlemcilere 2k ROM ve 2 Bank kullanma imkanı veriyor. Bu da bir çok proje için yeterlidir.
Ben size Hi-Tech 8.35PL2 sürümümü kurulumunu ve Mplab’a nasıl entegre edileceğini anlatacağım.
Öncelikle Microchip sitesinten Mplab programını indirin ve kurun. Daha sonra picc-setup v8.05PL2.exe programını çalıştırın. Kurulum bittikten sonra C:\HT-PIC dizinin içine kurmuluyor. Bu klasör altında picc_mplab6_setup.exe dosyasını çalıştırdığınızda Kendisini Hi-Tech derleyicisini otomatik Mplab’a entegre ediyor. activate.exe ise programı lisanlamak için kullanılıyor.
Bu işlemler bittikten sonra Mplab altında basit bir proje yapmaya gecelim.
Mplab Altına proje oluşturalım. Project -> Project Wizard secelim.
İleri ye basın..
Kulanacağınız işlemciyi seçin. Biz şimdi PIC16F628A sectik. İleri basın
Şimdi kullanacağımız dereliciyi seçelim. Biz Hi-Tech PICC de yazacağımız için aşağıdaki seceneği seceğiz
Bu işlemden sonra projeyi hangi klasöre oluşturacağımız soracaktır Browse ile belli bir klasörüe seçebiliriz yada kendimiz yeni bir klasör oluşturabiliriz. Biz şimdi yeni bir klasör oluşturalım.
Bu oluşturduğumuz klasörün içine projemize bir isim verip ‘kaydet’ tuşuna basalım.
Karşımıza çıkan pencereye ileri diyelim.
Bu pencere projenize hazır başka kütüphaneleri eklemek için dir.
Biz boş bir proje oluşturacağızmız için. İleri diyelim. Karşımız en son proje ile ilgili bilgi sayfası gelecek. Son tuşuna bastık tan sonra yeni bir proje yapmış oluruz.
Mplab artık bu şekilde gözükecektir.
Burada hiçbir kod ve header dosyası olmadığı için Source files ve Header Files içleri boş tur.
Hi-Tech Kod dosyası olurturmak
Basit olması sebebiyle HT-PIC klasörün altındaki Samples`lerden örnek vereceğim. Basit bir Led flasör devresi yapalım.
Bunu için Zaman döngü kodlarına gerek ihtiyac var. Samples klasöründeki döngü kodunu Kendi proje klasörümüzün altına kopyalıyoruz.
C:\HT-PIC\samples\delay\
içinde ki delay.c ve delay.h doyalarını aşağıdaki projemizin bulunduğu klasöre kopyalalım.
C:\Hi-Tech_Egitim\Proje1\
Sonra bu dosyaları projemize dahil edelim . Source file in üzerine gelip farenin sağ tuşuna basalım. Çıkan menuden Add Files… secelim.
iki dosyayıda secip ac dediğimizde artık bu dosyalarda kendi projemize dahil olmuştur.
Şimdi bize bir de main programın olduğu dosya lazım o dosya olmadığı için onu yeni oluşturacağız. Sol üst köşedeki New files butonun bastığımızda Yeni bir dosya oluşturacaktır.
Bu yeni dosyayı bir isim verip kayıt edelim ve projemize dahil edelim. Ama önce içine bir şey yazmak gerek boş dosyayı kayıt etmiyor.
Save file diyoruz. Yeni dosyamızın proje ile aynı klasöre kayıt edin.
Soure files den Add Files den bu dosayı proje dahil edelim.
Şimdi projemize bu dosyayıda eklemiş oluyoruruz.
Artık projemiz kod yazacak hale gelmiştir.
Hi-Tech de Kod yazmak
Şimdi ana_program.c dosyasının içinde kod yazmaya başlıyoruz. Önce bazı başlık dosyalarını eklememiz gerek. Sigorta ayarlarını kodun içinde yapıyoruz. Sonra ana programı yazmaya başlıyoruz.
Örnek1: Birinci program çalışma mantığı. Bir tane giriş, bir tanede çıkış bacağı olacak giriş bağcına göre çıkış bacağı aynı şeklide değişecek. Giriş bacağı olarak Portb0 ,cıkış bacağı olarakta Porta0 yapıyoruz.
// ana_program.c // Main progam dosyası #include#include "delay.h" //__IDLOC(0123); // Sigorta ayarlarının yapıldığı yer __CONFIG(PROTECT & CPD & INTIO & MCLRDIS & WDTDIS & LVPDIS & PWRTEN & BOREN ); void main(void) // Ana program { TRISA = 0b00000000; TRISB = 0b00000001; PORTA = 0b00000000; PORTB = 0b00000001; OPTION = 0b00000000; // PullUp dirençleri devreye sokar. CMCON = 0x07; // PORTA analog pinlerini kapatır. PortA Dijitale dönüştür. while (1) { // Sonsuz döngü programı bunun içine yazacağız. if ( RB0 ) //RB0 bacağı sıfır değil ise. RA0 = 1; else RA0 = 0; //RB0 bacağı sıfır ise. } } // ana_program sonu
Aşağıdaki resim programın Mplab altına görünümü
Fare gösterildiği yerde Build All direkt CRTL+ F10 ile programı derleyebilirsiniz.
Derledikten sonra ekrana derleme bilgileri cıkacaktır. Eğer BUILD SUCCEEDED yaziyorsa derleme işlemi düzgün yapılmıştır demektir. Bu durumda hiçbir hata mesajı gözükmüyor.
Bu işlemin sonunda derleyici bazı yeni dosyalar oluşturur.
Proje_1.hex : Makine kodu, pic yüklenecek kod
Uzantısı *.cce dosyaları ilgili kod dosyalara ait uyarı (warning) ve hata (error) mesajlarını verir.
Dosyaların için içi boş olduğuna göre hiçbir hata veya uyarı mesajı yok demektir. Şimdi bunu test etmek için ISIS de simülasyonunu yapalım.
Aşağıdaki gibi örnek çizim yaptım.
Şimdi bu aynı proje klasörümüze kayıt edelim ve Simülasyonun içinde kendi yazdığımız kodu ekleyelim. PIC üzerine gelip fare ile 2 kere tıklarsanız PIC ait bir pencere ortaya çıkar.
Biz PIC16F628 iç kristalini seçtiğimiz için kristal frekansı 4MHz olacak. Program File: içine kodumuzu ekliyoruz.
simülasyon için iki tane farklı dosya seçeneğimiz var. Proje_1.hex seçersek programı çalıştırabiliriz. Ama kodlarımızı adım adım çalıştıramayız. Kodları tek tek çalıştırmak için Proje_1.cof uzantılı dosyayı çalıştırmalıyız.
Bu işlemden ok ile onaylıyoruz. Simülasyonu başlatmak için Sol alt köşedeki Play tuşuna basıyoruz. Simülasyon başlamış olur. Ekrana söyle bir görüntü cıkar.
Görüldüğü gibi RB0 bacağı Lojik 1 olduğu için RA0 bacağı da Lojik 1 konumdadır. Butona bastığımızda ise RB0 bacağı lojik 0 çekileceği için RA0 bacağıda lojik 0 olacak.
Pause tuşuna basarsak Programın kaldığı yeride durdurmuş oluruz.
Örnek 2: Şimdi bir başka örnek kod yazalım bu sefer sadece led flash yaptın.
// ana_program.c // Main progam dosyası #include#include "delay.h" //__IDLOC(0123); // Sigorta ayarlarının yapıldığı yer __CONFIG(PROTECT & CPD & INTIO & MCLRDIS & WDTDIS & LVPDIS & PWRTEN & BOREN ); void main(void) // Ana program { TRISA = 0b00000000; TRISB = 0b00000001; PORTA = 0b00000000; PORTB = 0b00000001; OPTION = 0b00000000; // PullUp dirençleri devreye sokar. CMCON = 0x07; // PORTA analog pinlerini kapatır. PortA Dijitale dönüştür. while (1) { // Sonsuz döngü programı bunun içine yazacağız. RA0 ^= 1; // RA0’i 1 ile Xorla. Bu işlem RA0 bacağının cıkışını tersler. DelayMs(250); // 250 ms bekler. 1 bytelik değer gecebildiğimiz için 255 DelayMs(250); // büyük sayı veremiyoruz. O yüzden 3 defa aynı fonksiyonu DelayMs(250); // çağırdım. Toplam ortalama 750ms gecikme olur. } } // ana_program sonu
Böyle program yazmanın ilk adımlarını atmış oluruz. Bundan Örnek C kodlarını daha ayrıntılı anlatmaya çalışacağım. Çalışmalarınızda Başarılar,
Hasan ARSLAN
Hi-Tech PICC eğitimi Ders 2
Kod yazmaya devam edeceğiz.
Örnek 3: Bu sefer tuşa her bastığımızda Led in durumunu değiştirsin. Şimdi sadece ana program döngüsü içindeki kodları yazıyorum diğer kodları boş yere tekrar etmemek için. Yazmayacağım
while (1) { // Sonsuz döngü programı bunun içine yazacağız. if ( RB0 ){ // RB0 bacağı sıfır değil ise. RA0 ^= 1; // Cıkışı tersle. DelayMs(50); // parazitleri görmemek için bekleme süre. while (RB0); // Tuştan elini cekene kadar bekle } }
Bu işlem tuşa basıb cektikten sonra cıkışı tersler eğer cıkışı basmada terslemke istiyorsak o zaman koda ufak bir değişiklik yapmamız gerekiyor.
while (1) { // Sonsuz döngü programı bunun içine yazacağız. if ( !RB0 ){ // RB0 bacağı sıfır ise. RA0 ^= 1; // Cıkışı tersle. DelayMs(50); // parazitleri görmemek için bekleme süre. while ( !RB0 ); // Tuştan elini çekene kadar bekle. } }
Bu durumda tuşa her bastığımızda çıkışı tersler. Ünlem ! işaretinin anlamı lojik değildir. Dolaysıyla bir şeyin lojik tersini almak içinde kullanılabilir. O zaman cıkışın değilini almak için şöyle bir kodda yazabiliriz.
while (1) { // Sonsuz döngü programı bunun içine yazacağız. if ( !RB0 ){ // RB0 bacağı sıfır ise. RA0 = !RA0; // Cıkışı tersle. DelayMs(50); // parazitleri görmemek için bekleme süre. while ( !RB0 ); // Tuştan elini çekene kadar bekle. } }
Kod farklı göründe aynı işlevi görecektir.
Örnek 4: Simdi Ledlerle basit bir kara şimşek yapalım. Onun için led sayısını artırmamız gerek. Botunu iptal edip Portb nin bütün bacaklarına LED bağlıyorum.
Portb0 bağacını daha önceden giriş olarak ayarladığımız için şimdi onu çıkış olarak ayarlamamız gerekiyor. Tris registerleri hangi pinlerin giriş – çıkış olacağını belirliyor.
Acılışta zaten ilk olarak onları yapiyoruz.
Kod :
TRISA = 0b00000000; TRISB = 0b00000001; // RB0 giriş olmuş. PORTA = 0b00000000; PORTB = 0b00000001;
Giriş çıkışı basit aklınızda tutmak için INPUT ilk harfi I, OUTPUT baş harfi O çağrışım yapabilirsiniz. Yani 1 olursa INPUT, 0 olursa OUTPUT olur. Bu durumda TRISB registerini 0 sıfır yapıyoruz o zaman hepsi çıkış olmuş olur. Aşağıdaki gibi bir kod yazıyoruz.
void main(void) // Ana program { TRISA = 0b00000000; TRISB = 0b00000000; PORTA = 0b00000000; PORTB = 0b00000000; OPTION = 0b00000000; // PullUp dirençleri devreye sokar. CMCON = 0x07; // PORTA nin analog pinlerini kapatır. Dijital Prota dönüştür. while (1) { // Sonsuz döngü programı bunun içine programımızı yazacağız. unsigned char sayac = 0; // işlem yapmak için geçici bir register // kullanıyoruz. do{ PORTB = (1 << sayac++); // bu işlem 1 değerini sayacın değeri kadar // sola öteler. ++ işareti sayacın sağında // olduğu öteleme işleminden sonra sayac // değişkenini 1 artırır. DelayMs(250); // bekleme döngüleri DelayMs(250); } while (sayac < 8); // Bu işlemi 8 defa yap. } }
Şimdi sağ ve sola kayacak şekilde bir kod yazalım.
void main(void) // Ana program { TRISA = 0b00000000; TRISB = 0b00000000; PORTA = 0b00000000; PORTB = 0b00000000; OPTION = 0b00000000; // PullUp dirençleri devreye sokar. CMCON = 0x07; // PORTA analog pinlerini kapatır. Dijital prota dönüştür. while (1) { // Sonsuz döngü programı bunun içine yazacağız. unsigned char sayac = 0; // işlem yapmak için gecici bir register // kullaniyoruz. do{ PORTB = (1 << sayac++); // bu işlem 1 değerini sayacın değeri kadar // sola öteler. ++ işareti sayacın sağında // olduğu öteleme işleminden sonra sayac // değişkenini 1 artırır. DelayMs(100); } while (sayac < 8); // Bu işlemi 8 defa yap. do{ PORTB = (0b10000000 >> sayac++); // bu işlem 0b10000000 değerini sayacın değeri kadar // sağa öteler. ++ işareti sayacın sağında // olduğu öteleme işleminden sonra sayac // değişkenini 1 artırır. DelayMs(100); // Bekleme süresi } while (sayac < 8); // Bu işlemi 8 defa yap. } }
Bir kara şimşek programı yapmış bulunuyoruz. Görüldüğü gibi C de kod yazmak hem kolay hem de zannedildiği kadar zor değil. Artık portların kullanımı giriş çıkış işlemlerini öğrenmiş bulunuyoruz. Bu işlemden sonra daha ileri konulara geçeğiz.
Mplap altında PIC18 derleyicisini eklemek
Öncelikle Mplab altında PICC-18 kurulmuş mu diye bakıyoruz.
“ Project -> Set Language Tool Location “ açtığımızda göreceğiz.
Çıkan pencerede Hi-Tech PICC-18 Toolsuite içini incelerek görürüz. Kurulu olduğu yeri “Location” bölümünde gösteriyor. Eğer “Location” bölümü boş ise o zaman bu derleyici MPLAP altında tanıtılmamış demektir. Bunu otomatik yaptırmak yerine kendinizde elle yerini belirtebilirsiniz. Ben burada “PICC-18 8.35 PL2” versiyonunu kullanıyorum.
Ele yapmak yerine onun Tıpkı PICC gibi PICC-18 derleyicisinin de bunu otomatik yapan programı var.
“C:\HTSOFT\PIC18\” klasörünün içinde ki “picc-18_mplab6_setup.exe” programını çalıştırırsanız kendisini otomatik MPLAB altına entegre edecektir.
Hi-Tech PICC Program Yazma Kılavuzu;
Şifre-Pass: 320volt.com
Yayım tarihi: 2008/11/15 Etiketler: c dili, derleyici, Hi Tech, isis, microchip, mplab, PIC18, PICC, program, proteus, simulasyon
ben fazla bir şey anlamadım ama anlatım için çok uğraşmışsın teşekkürler:):)
Paylaşım için saol bu bilgiler çok işime yarıcak
çook iyi bir şey yapmışsınız. bende çoktandır bir HEX dosyası nasıl yapalirim derdi ile uğraşırken siz böyle bir şey yapmışsınız. teşekkürler.
böyle güzel işler yapma umuduyla.
Arkadaşım c derleyemiyorum aldığım hata mesajı şöyle yardımcı olursan sevinirim teşekkürler:
Clean: Deleting intermediary and output files.
Clean: Deleted file “C:\Hi-Tech_Egitim\proje1.mcs”.
Clean: Done.
Executing: “C:\HT-PIC\BIN\PICC.EXE” -C -E”delay.cce” “delay.c” -O”delay.obj” -Zg9 -O -ASMLIST -Q -MPLAB -16F628
Executing: “C:\HT-PIC\BIN\PICC.EXE” -E”proje1.lde” “C:\Hi-Tech_Egitim\delay.obj” -M”proje1.map” -O”proje1.cof” -O”proje1.hex” -Q -MPLAB -16F628
Error[000] : undefined symbol:
Error[000] : _main (C:\HT-PIC\LIB\picrt40c.obj)
BUILD FAILED: Sat Nov 22 15:43:52 2008
sanırtım senin problemin delay.c dosyasının include edilememesi
bunun için sana önerim HI-tech program dosayasını bul(program files içinde)
burasa SAMPLES klasörü içinde DELAY klasörü altındaki DELAY.C dosyasını ve garanti olsun diye DELAY.H dosyasını koplaya ve bu klasörden çık ve SAMPLES klasöründen de çık ve INCLUDE klasörü içine bu dosyaları yapıştır daha sonra compile etmeyi yeniden dene
Arkadaşım bu tip programlama işlerine ben yabancıyım ama öğrenme isteğim var paylaşımıdan benim gibi öğrenme arzusu olanlar sanırım yararlanabilirler paylaşımına içtenlikle ve samimi olarak teşekkürlerimi ifade edmek isterim ellerin dert görmesin
Selam,vermiş olduğnuz bilgiler için tşk’ler.
Güzel bir site,güzel çalışmalar açıklayıcı ifadeler,herşey için tşk’ler,
buradaki bilgileri görüp faydalandıktan sonra tşk’süz geçmek olmaz,
tekrar teşekkürler 🙂
Sayın Hocam
BASLA GOTO
PIC e gönül verenlerden olarak, bu paylaşım için size teşekkür eder ve bu tür paylaşımlarınızın devamını dilerim.
END
Merhaba,
Kurulum ile alakalı ufak bir video veya sunum hazırlayacağım. Buradaki resimlerin bir kısmını kullanmayı düşünüyorum.
İzniniz var mı acaba, öğrenmek isterim?
Dilerseniz dosyayı hazırladıktan sonra yollayabilirim.
Teşekkürler.
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: “C:\HT-PIC\BIN\PICC.EXE” -C -E”test.cce” “test.c” -O”test.obj” -Zg9 -O -ASMLIST -Q -MPLAB -16F628A
Halting build on first failure as requested.
BUILD FAILED: Thu Jan 07 11:56:15 2010
bendede böle bir hata veriyor dediklerinizi yaptım uyguladım hala bir degişiklik olmadı öncede kullanıyordum aynı şeyleri yapınca şimdi olmuyor yardımcı olursanız sevnirm..
Error[000] 0 : undefined symbol amp
Halting build on first failure as requested.
BUILD FAILED: Sun Apr 11 14:56:10 2010
bu hata ne anlama geliyor.
kaynak dosyadaki http://rapidshare.com/files/164074599/Hi-Tech-PICC-egitim.rar kodlar ile çalışın
sayın Gevv hocam burada bahsedilen
picc-setup v8.05PL2.exe
picc_mplab6_setup.exe
activate.exe
dosyaları bulamıyorum.asagıdaki rapid linkten de indiremedim.
http://rapidshare.com/files/164074599/Hi-Tech-PICC-egitim.rar
lütfen gerekli dosyaları 320volt.com a yükleyebilir misiniz? acil hi tech ile yazılmıs c dosyam var.hex yapamadım.lütfen yardım edin.
[email protected]
Clean: Deleting intermediary and output files.
clean: Deleted file “C:UserspcDesktopaf.mcs”.
Clean: Done.
Executing: “C:PICCLITEBINPICL.EXE” -C -E”af.cce” “af.c” -O”af.obj” -Zg9 -O -ASMLIST -Q -MPLAB -16F877
Halting build on first failure as requested.
BUILD FAILED: Mon May 12 11:49:11 2014
bu soruna bu çözüm bulan varsa acil paylaşsın
merhaba,mplab indirdigimde c dilindeyazamıyorum hı-tech i seçemiyorum çünki hı-tech yok bununiçin ne yapabiliirim?? extra bir şeymi indirmem gerekiyor?