Microchip C30 ile LED on/off
|Merhaba, Şimdiki projemizle microchip C30’a ve dsPIC30F’e giriş yapacağız. Uygulamız çok basit ve portu hi/lo yapamayı sağlıyacağız.
Ücretsiz olan C30’un student versiyonunda rahatlıkla derleyebilirsiniz. Bu küçük uygulamayı 2006’da yaptığım için proje resimlerini ekleyemedim, yeniden kurmakta açıkçası zor geldi. Fakat aşağıya eklediğim resimdeki dsPIC4011 geliştirme boardunda ve dsPIC30F3010 için protoboard’ta denemiştim.
Şimdi uygulamaya geçelim.
/*****************************************************************************/ // Aykut ULUSAN, Elektronik Mühendisi, IZMIR /*****************************************************************************/ // kullanacağımız işlemci dsPIC30F3010 #include "p30F3010.h" // header dosyası // konfigürasyonu girelim, işlemci 20MIPS hızında çalışabilir, 10Mhz xtal ve PLL çarpanı 8 // osc 80Mhz hızında çalışacak bir komut ise 80/4=20Mhz hızında işlenir _FOSC(CSW_FSCM_OFF &amp;amp; XT_PLL8); // osc=10Mhz *8 = 80 MHz _FWDT(WDT_OFF); // Watchdog timer off _FBORPOR(PBOR_OFF &amp;amp; PWRT_64 &amp;amp; MCLR_EN); // Brown-out reset off, Power on reset 64ms,MCLR enable _FGS(CODE_PROT_OFF); // code protect off void DLY_MS(unsigned int ms); // 1ms - 65536ms void DLY_US(unsigned int us); void BIR_USN(void); void PORTLARI_HAZIRLA(void); int main (void){ PORTLARI_HAZIRLA(); while(1){ LATB=0; // ledler off DLY_MS(1000); // 1sn bekle LATB=0x000F; // ledler on DLY_MS(1000); // 1sn bekle } } void PORTLARI_HAZIRLA(void){ ADPCFG = 0xFFFF; // tüm portlar digital PORTB=0; // tüm portları sil PORTC=0; PORTD=0; PORTE=0; TRISB=0x0000; // Portb nin tümü çıkış } void BIR_USN(void){ // 1 usn delay // call ve return ile toplam 200ns asm("REPEAT #15"); // (15+1)x50ns=800 usn asm("nop"); } // 1 usn - 65 535 usn arasında (65,536ms) void DLY_US(unsigned int us){ unsigned int c; for(c=0;c<us;c++) BIR_USN(); } void DLY_MS(unsigned int ms){ unsigned int c; for(c=0;c<ms;c++) DLY_US(1000); } /*****************************************************************************/
20 Yorum
devre şeması baskı devreleri ekleyebilirmisniz acaba saygılar
Merhaba, ben 24f ile bir proje yapacağım, 24f için yazdığım assambly kodlarını MPLAB da bir türlü HEX koduna dönüştüremiyorum.
“Clean: Deleting intermediary and output files.
Clean: Done.
Executing: “E:\Program Files\MPASM Suite\MPASMWIN.exe” /q /p24FJ128GA010 “asmtest1.asm” /l”asmtest1.lst” /e”asmtest1.err” /d__DEBUG=1
Halting build on first failure as requested.”
Bu hatayı veriyor, Proje shirbazıyla yağtığımda da
“Clean: Deleting intermediary and output files.
Clean: Done.
Build aborted. The project contains no source files.”
hatası veriyor..Ufak bir noktayı gözden kaçırıyorum farkındayım ama bir türlü bulamadım…Bu konuda bana yardımcı olursanız çok sevinirim….İyi günler…..
Mrb,
asmtest1.err ve asmtest1.lst dosyasını notepad’le aç hatan orada yazıtor olmalı. “The project contains no source files.” Hata “proje source file içermiyor” anlamında.
Yazdığın programı sanırım projeye eklememişsin. Project menüsü altında “add new file to proje” basarak projeni ekliyebilirsin. (yazdığın c file’ı ekliyeceksin)
Benim asıl sorunum, programı diğer pic çeşitleri için yaptığımda sorun olmuyor, fakat pic çeşidini 24fj128ga010 yaptığımda sorun ortaya çıkıyor. dosyayı bir türlü source kodu olarak kabul etmiyor. resim olarak yolluyorum böylece kendimi daha iyi ifade edebilirim…..
İlginiz için çok teşekkür ederim…
Mrb,
Önceki mesajımda “c” file demişim, asm file diyecekken.
Peki mplab içinde derleyici olarak asm30’u seçtin mi? PIC24 serisi 16bit olduğu için derleyici değişiyor. Resimden bahsetmişsin ama bana ulaşmadı. İstersen eemkutay@yahoo.com‘a atabilirsin.
Mrb Yıldız,
Bana gönderdiğin resmi inceledim ve sorunlarını gördüm. Asm30 için yazdığın program uzantısı “asm” değil “s” olmalıdır.(mesela “led.s” gibi). Bu şekilde yaptığında kaynak kodun “source files” klasörü içinde olacaktır. Fakat PIC24 komut listesini kullanmıyorsun(asm30 komut listesi), eski mplab(8bit) komut listesini kullanıyorsun dolayısyla bu komutlarla programlama yapamazsın. Mesela programında “MOVLW 0b’11111110′” kullanmışsın ama asm30 içinde movlw adında bir komut yok onun yerine “mov.b #0xF0,W0” kullanman gerekirdi.
PIC24,dsPIC30 ve dsPIC33 serisi aynı komut listesini kullanır(sadece pic24 serisi olanlar 10tane civarında dsp komutları vardır onları kullanamazlar)
dspic30F ve asm30 programmer manual’i incele.
Benim yazdığım “https://aykutulusan.com/dspic-asm30-ile-uart” örneği sana referans olabilir.
Mrb,
Yardımlarınız için çok teşekkür ederim, söyledikleriniz sayesinde sorunumu çözdüm, “.s” diye kaydettiğimde hata vermiyor…Acaba 24f ile ilgili daha fazla örnek nerden bulabilirim?
Yardımlarınız için tekrar teşekkür ederim…..İyi günler….
Merhaba
PIC24F serisini anlatan bir kitap var linki aşağıda , kitabı beğenirsen kitabın orjinalini satın al. ( C dili )
http://rapidshare.com/files/66237318/Newnes.Programming.16-Bit.PIC.Microcontrollers.in.C.eBook-Spy.pdf
Kolay gelsin.
Yardımlarınız için teşekkür ederim, bu kaynak işime yarayacak ama benim assembly ile ilgili notlarada ihtiyacım var….Assembly diliyle, C dilini birlikte kullanerak proje yapmak istiyorum. 24f için sizce bu mümkünmü….Sizide rahatsız ediyorum sürekli, kusuruma bakmayın…Herşey için teşekkür ederim…
Merhaba,
Elbette mümkün ama pic18 ve özellikle PIC24F serisinden serisinden sonra microchip, C programlama diliyle uyumlu çalışan donanımları işlemci içinde kullandı bu işleme C optimizasyonu denilmektedir. Yani asm ile yazılmış program ile C dili yazılmış program arasında çok önemli bir fark bellek farkı yoktur. Burada sacede C derleyici farkı ve programcının işlemci bilgisi önemlidir. İşlemci bilgisini gerektirmeyen C derleyicileri de vardır ama tavsiye etmem. Microchip ürünleri için hi-tech C’yi tavsiye ederim. C ile asm karıştırmak istiyorsan mecburen C derleyicisi içinde program yazman gerekiyor. Ama asm’yi kullanmadı da tavsiye etmem çünkü programın taşınabilirliği kaybolur. Yani aynı programı başka bir işlemci veya C derleyicisnde kullanamazsın. Asm örnekleri microchip’in sitesinde oldukça fazla ve illa asm yazacağım diyorsan ve C biliyorsan C ile yazılmış programları kolaylıkla asm’ye çevirebilirsin
Kutay.
Çok teşekkür ederim verdiğiniz bilgiler için….
Merhaba,
Benim bir sorum daha olacaktı. Yazdığım programı pice gömmek istiyorum. Bende Microchip development tools var pic24f için. Yazdığım programı başarıyla derliyorum ama Mplab ıcd 2 ile pice aktaramıyorum. “MPLAB ICD 2 Ready”
mesajı veriyo ama sonrası gelmiyor. Ben dökümanlarınıda inceledim ama bir şey bulamadım, ingilizcem çok iyi değil acaba bu yüzden bir noktayı gözdenmi kaçırıyom, mailinize bir resim yolluyorum orda daha net görürsünüz. Yardımlarınız için şimdiden teşekkür ederim…..
Merhaba,
MPLAB ICD2 disable görünüyor. Yani onu programmer olarak seçmemişsin veya bağlantı sorunun var.
ICD2 orjinal mi yoksa değil mi bilmiyorum. ICD2 usb veya rs232 ise ilgili porta bağla
proje içinde iken Programmer menüsünden ICD2’yi seçtiğinden emin ol,
Debugger menüsünde ICD2 setup wizard’a bas ve ICD2’ne göre ayarları yap (bağlantı rs232 ise 57600 bautrate seçeceksin)
Sonra debug menüsünden/connect’e bas (usb ise çalışır değilse aşağıdaki ayarı yap)
eğer bağlantı rs232 ise bir ayar daha var, bilgisayarım/özellikler/aygıt yöneticisi/bağlantı noktaları/com1 üzerinde sağ click yap
özellikler’e gir ve bağlantı ayarları noktasında 57600/8/yok/1/yok şeklinde olmalı ve asıl gerekli ayar için ise gelişmişe bas
FIFO ile başlayan kısımdaki tik’i kaldır. ve ayarları kaydet.
Sonra ayarların gerçekleşmesi için, PC’yi yeniden başlatmalısın.
Eğer bağlantıda sorun yoksa ve ayarlarda hata yapmamışsan çalışması gerekir.
Kolay gelsin.
Merhaba, dediğiniz ayarları yaptım…..FIFO ile başlayan kısımdaki tiki kaldırdım fakat bu hatayı veriyor.” Please ensure that your system’s serial FIFO buffers are disabled.” uyarısı veriyor. FIFO işaretli oluncada bu uyarıyı veriyor,ben bir resim daha yolluyorum……Birde aklıma takılan bir şey var netten araştırma yaparken Real ICE In-Circuit Emulator diye bir device gördüm….Bu olmadanda ben sadece RS-232 ile veri gönderebilirim dimi boarda. Anladığım kadarıyla bu ürün hızı arttırmak için kullanılıyor….
Merhaba,
Gönderdiğiniz resmi gördüm. ICD2 hala aktif değil görünüyor. Bunun sebepleri
1) Programlayıcı olarak ICD2 seçili değildir
2) Bağlantıda sorun vardır veya takılı değildir veya yanlış portta olabilir.
3) FIFO buffer’lardan dolayı haberleşmiyebilir ama yinede ICD2’yi görmesi gerekir
4) ICD2 ile mplab arasında senkronizasyonu sağlamak için gerekli olan işletim sistemi(OS) ICD2’ye yüklenmemiştir.
ICD2 OS(4.madde) yüklenmemiş olabilir, bunun için, Operation system(OS) yüklemek için programmer menüsündeki download icd2 operation system’e tıkla (ICD2 PC’ye bağlı olacak ve beslemesi vs herşey tamam olmalı ve dün bahsettiğim ayarlar yapılmış olacak)
OS’yi yüklerse bağlantı kurabilmen gerekir.
FIFO tik’ini geri düzeltiysen, tik’i kaldır ve pc’yi resetle sonra yukarıdakileri yap.
kolay gelsin
Kusuruma bakmayın sizi sorularımla sürekli meşkul ediyorum ama sizden başka danışabileceğim kimse yok…..
Söylediklerinizi inceledim, yanlış portta olduğunu sanmıyorum çünkü 1 adet seri port var, kabloda yeni bir kablo. Operation system’i yükledim yine hata veriyor onun resmini yolluyorum. Birde Araştırma yaparken “Aygıt Yöneticisinde Fare ve Diğer İşaret Aygıtların altında Microchip Tools>Microchip MPLAB ICD 2 Firmware Client” olduğunu gösteren bir resim gördüm. Fakat ben kendi bilgisayarımda böyle bir şey göremedim acaba sorun bundan kaynaklanıyor olabilir mi ben bu resmide size yolluyorum…… İlginiz için çok teşekkür ederim….İyi günler dilerim…..
Merhaba,
Gönderdiğin resimde “failed to open port” (com port açılmasında hata) adlı uyarı var. Yani mplab comporta(COM1, COM2 neyse) erişemiyor dolayısıyla ICD2’ye hiç erişemez. Bunun sebebi o portu kullanan başka bir program kullanıyor olabilirsin veya o isimde bir port yoktur. Yani hata senden kaynaklanıyor. İletişim yapılacağı kanalı sağlayamamışsın. Ayrıca ICD2’ye ulaşmadığı için OS’yi yüklememiş. Zaten ingilizce olarak, “dikkat, açılmamış com kanalında işlem yapmaya çalışıyorsun” uyarısı var. Com kanalını kullanan, hangi programsa veya engelleyen ne ise sorunu kaldırmalısınki ICD2 ile haberleşsin. Com port sorununu düzelt ve daha önce bahsettiğim adımları takip et çalışır.
kolay gelsin
Merhaba,
sizi meşkul ediyorum kusuruma bakmayın. Sizden ricam zamanlayıcılar, süre ayarlama konusunda bilgi verebilirmisiniz. 30 saniye yanan, 30 ssaniye sönen led için program yazmaya çalışıyorum ama süreyi tutturamıyorum bir türlü…Sizin yazdığınız programıda referans aldım olmadı…..İyi çalışmalar
Merhaba,
Benim yazdığım zamanlama programı milisaniyeler içinde doğru çalışır. Tam ve kesin ms veya saniye için timer’lar kullanılmalıdır.Eğer saat gibi bir şey yapmak istiyorsanız, timer’larda istenilen hassasiyeti vermez çünkü ana osc xtal o kadar hassas değil bu durumda RTC modulunu ve 32768 xtal kullanmalısın.
Bu günlerde işlerim yoğun ama fırsatım olursa bir kaç güne eklerim
Merhaba. Ben dspic kontrollu bir bitirme projesi aldım ama dspic ile ilgili hiç kaynak bulamıyorum. bana yardımcı olabilir misiniz.