Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: serhat1990 - 18 Kasım 2012, 23:12:15

Başlık: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 18 Kasım 2012, 23:12:15
Merhaba arkadaşlar , 16-bit mimarisine giriş amaçlı bir buton-led uygulaması yaptım . 16-Bit Pic mikrokontrolör'ler ile çalışmayı düşünen arkadaşlara başlangıç adına yardımı olur diye paylaşıyorum . Umarım yardımı dokunur.

Hepinize iyi çalışmalar dilerim ...

/* Serhat Evcim
18.11.2012
  Butona basınca Ledin Durumunu tersleyen Program

*/

#include <p24fj128ga006.h>      // İşlemci Header Dosyası yüklenir.

_CONFIG1 ( JTAGEN_OFF & FWDTEN_OFF & GCP_OFF & BKBUG_OFF & COE_OFF  ) // Config Ayarları Yükleniyor ...
_CONFIG2 ( POSCMOD_HS & FNOSC_PRI & OSCIOFNC_OFF & FCKSM_CSDCMD & IESO_OFF ) // Config Ayarları Yükleniyor ...

/* ________________ Global Değişkenler __________________ */

unsigned char i=0; // işaretsiz i değişkeni tanımladık ( 0-255 )

/* ________________ Sistem Tanımlamaları ________________ */

#define LED1 _LATB8          // RB8  ' e led1 ismini atadık.
#define LED2 _LATB9          // RB9  ' e led2 ismini atadık.
#define LED3 _LATB10      // RB10 ' e led3 ismini atadık.
#define LED4 _LATB11      // RB11 ' e led4 ismini atadık.

#define ButtonPressed_1 _RB2 // RB2 ' ye ButtonPressed_1 ismini atadık.
#define ButtonPressed_2 _RB3 // RB3 ' e  ButtonPressed_2 ismini atadık.
#define ButtonPressed_3 _RB4 // RB4 ' e  ButtonPressed_3 ismini atadık.
#define ButtonPressed_4 _RB5 // RB5 ' e  ButtonPressed_4 ismini atadık.



void port_ayar(void) // Giriş - Çıkış Port ayarlarını yapar...

{

_TRISB2  = 1 ; // TRISB2  ' yi giriş olarak ayarladık...
    _TRISB3  = 1 ; // TRISB3  ' ü  giriş olarak ayarladık...
    _TRISB4  = 1 ;          // TRISB4  ' ü  giriş olarak ayarladık...
    _TRISB5  = 1 ; // TRISB5  ' ü  giriş olarak ayarladık...
_TRISB8  = 0 ; // TRISB8  ' i  çıkış olarak ayarladık...
_TRISB9  = 0 ; // TRISB9  ' u  çıkış olarak ayarladık...
    _TRISB10 = 0 ; // TRISB10 ' u  çıkış olarak ayarladık...
    _TRISB11 = 0 ; // TRISB11 ' i  çıkış olarak ayarladık...


    LED1 = LED2 = LED3 = LED4 = 0; // çıkışlar temizlenir..

}

void islem(void) // İşlemler Bu fonksiyonda olur ;)

{

if(!ButtonPressed_1){while(!ButtonPressed_1);LED1=!LED1;} // Buton1' e basılıysa el çekilene kadar bekler ve led1'i tersler..
else if(!ButtonPressed_2){while(!ButtonPressed_2);LED2=!LED2;} // Buton2' ye basılıysa el çekilene kadar bekler ve led2'i tersler..
else if(!ButtonPressed_3){while(!ButtonPressed_3);LED3=!LED3;} // Buton3' e basılıysa el çekilene kadar bekler ve led3'i tersler..
else if(!ButtonPressed_4){while(!ButtonPressed_4);LED4=!LED4;} // Buton4' e basılıysa el çekilene kadar bekler ve led4'i tersler..

}

int main() // Ana fonksiyon...

{
port_ayar(); // Port ayarlarını yükleriz...

while(1)

{

islem(); // Sürekli butonları okur ve ledlere yansıtır Durumu ...

}
}


Aşağıdaki linkte sayfanın en altından program dosyası , devre şemasını indirebilirsiniz...

http://embeddedsystems-turkey.com/pic24fj128ga006-ile-16-bit-mimarisine-giris-2/ (http://embeddedsystems-turkey.com/pic24fj128ga006-ile-16-bit-mimarisine-giris-2/)
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: AsHeS - 18 Kasım 2012, 23:28:35
C30 mu Hi-Tech mi bu ?
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 18 Kasım 2012, 23:30:54
C30 vermiş olduğum linkte yazıyor :)

İyi Çalışmalar.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: Murat Mert - 22 Kasım 2012, 10:59:37
S.A.
Alışkanlık ve birazda bilmemezliğin korkusu ile 8 bitten  çıkamadık. Derlerya korkunun ecele faydası yok biryerden dalmak lazım.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 12:54:42
A.selam Hocam ; mesajınızı şimdi gördüm ...

Size katılıyorum Hocam ; eğer başlamassak biraz daha 8 bitler ortalıkta gözükmeyecek hal alacak :) En azından ufaktan girmek lazım . Şimdi bir board çiziyorum bununla ilgili , paylaşacam bunun üzerinde örnekler paylaşacam . Daha ucuz olan bu modellere geçmeli artık . Yada performansına göre ucuz diyelim :) Korkuyoruz neden heryerde 877 ile örnek var 16f84'den bahsetmiyorum bile ama bu denetleyicilerde pek fazla örnek bulunmuyor nasıl yapacaz kimse yapmamış ben neden yapayım gibi bir düşünce oluşuyor kafalarda . O yüzden bir yerden başlamalı ...


İyi Çalışmalar Dilerim .
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: Erol YILMAZ - 06 Aralık 2012, 13:05:25
Öncelikle Z80 gibi bir CPU yu bilmek lazım.
Aksi halde 16 bit 32 bit 8 bit apayrı anlamlar ifade ediyor...

PIC16 ve PIC18 kırpılmış Cpu özellikleri ile basitleştirilmiş bir yapı,

Ben Z80, 8080 yada 6800 eğitimi almadım ama almam gerekiyormuş diye düşünüyorum.

Geçen gün meraktan PIC16 için tamamen Makine kodunda bir program yazdım...
14 Bitlik 6 komut yazması yarım saatime yakın aldı...
Bunu bilmeden bir üste geçmenin iyi olmadığını düşünüyorum.

ASM ile yazmaktan da keyifli opcode lar ile yazmak :)

NOT: Bunalmış'a da tavsiye edilir.

01011010000011
01000000000110
01001010000011
01010000000110
01000000000110
10100000000100
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 13:18:15
@Allegro Hocam haklısınız . Bazı şeyleri öğrenerek üstünde durarak geçmeli . Fakat geçmeli :) :)

Bu arada Hocam ; opcode ' lar ile kod yazmak bende istiyorum ama sadece bir kere , sonrasında bir daha hex dosyasına bile bakmam :) :)
Biraz fazla uğraş gerektiyor gibi duruyor ...
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: ULAGA - 06 Aralık 2012, 13:24:36
Ellerine sağlık Serhat.
Giriş niteliğinde güzel bir uygulama olmuş.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 13:32:59
Alıntı yapılan: ULAGA - 06 Aralık 2012, 13:24:36
Ellerine sağlık Serhat.
Giriş niteliğinde güzel bir uygulama olmuş.


Teşekkür ederim Hocam ; elimde yapmış olduğum çalışmalar mevcut ama daha koyamadım siteye . İlk olarak bir board çiziyorum . Baskı devresiyle falan basacam . En azından takip etmek isteyenler kendi deneme boardlarını basıp çalışabilirler . Bu iş kağıt üstünde pek olmuyor :) Board çizimlerinden sonra  çalışmalara tam hız devam ...

İyi Çalışmalar Dilerim...
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: ULAGA - 06 Aralık 2012, 13:34:06
Güzel fikir, kolaylıklar diliyorum sana. :)
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 13:35:27
Teşekkür ederim Hocam ;)

Sizede kolay gelsin ; günlerin saatlerinin uzayabilmesi dilekleriyle :)
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: berat23 - 06 Aralık 2012, 14:17:39
bu x bit mimarisi lafı çok yerli yersiz kullanılıyor. gördüğüm,genelde herkes C ile kod yazıyor ,işlemcinin "mimarisi" ile ilgilenen yok.bu yüzden 8-16-32 olmuş fark yok.burada asıl bahis çevre birimleri,o da 16-32 bit mimari ile değişen birşey değil,işlemciye bağlı.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 14:30:43
Alıntı yapılan: berat23 - 06 Aralık 2012, 14:17:39
bu x bit mimarisi lafı çok yerli yersiz kullanılıyor. gördüğüm,genelde herkes C ile kod yazıyor ,işlemcinin "mimarisi" ile ilgilenen yok.bu yüzden 8-16-32 olmuş fark yok.burada asıl bahis çevre birimleri,o da 16-32 bit mimari ile değişen birşey değil,işlemciye bağlı.

Program yazmada pek fark var diyen yok zaten Hocam . Ben 24f serisine bir kaç kütüphane yazdım orda biraz farkına varılıyor diyebilirim , registerlar 16 bit oluyor falan . Diğer türlü çoğu şey aynı diyebiliriz . 16-Bit mimarisine girişten kastımız 16-bit işlemciler ile programlamaya giriş yapmak ... Bu işlemcilerin kullanımına ait pek fazla örnek bulunamamasından kaynaklanan kaçınmayı bir nebze olsa gidermek amacımız. Umarım açıklayıcı olmuştur.

İyi çalışmalar...
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: berat23 - 06 Aralık 2012, 14:37:51
Alıntı yapılan: gerbay - 06 Aralık 2012, 14:33:54
hocam çok fark var, biraz uğraşın görürsünüz farkları..
gerbay yazınca birkaç saniye düşünüp yazmak icap ediyor:)

mcu daki peripheral lara ait bir register ın illa işlemci ile aynı bit genişliğinde olması gerekmiyor,bu yine x bit mimariden kaynaklanan bir durum değil. konfigürasyon bitleri işlemciye ait birimler değil,nihayetinde peripheral.

fark yok demiyorum,böyle anlaşılmaz diyorum aslında.farkı anlamak için işlemciye dair kodlarla asm yazmak lazım. böyle c ile yazınca aradaki tek fark işlemci değişmiş oluyor,a reg.ine 0xac değilde 0x123f yazmış oluyorsunuz.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 14:39:02
@Gerbay Hocam ; size katılıyorum . Özellikle register düzeyinde kodlar yazmaya başladıkça ortaya çıkıyor farklar ... Burada paylaştığım örnek sadece Giriş/ Çıkış işlemi yapmaktan pek fazla birşey kullanmadık o yüzden böyle gözükebilir...

http://ww1.microchip.com/downloads/en/devicedoc/39747C.pdf (http://ww1.microchip.com/downloads/en/devicedoc/39747C.pdf) Dosyası biraz incelenince ,

ayrıca

http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en024805 (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en024805)

sayfasını inceleyince farklar ortaya çıkmaya başlayacak ...

@Berat23 Hocam sizinle aynı düşüncedeyiz yalnız biraz yanlış anlaşılma var gibi :)

İyi Çalışmalar Dilerim.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: Erol YILMAZ - 06 Aralık 2012, 15:18:32
endian deyince aklıma nedense  hintlinin bulduğu bir şey geliyordu.
Demek ki ENDian demekmiş :)
Teşekkürler Gerbay hocam, dikkatimizi bilmediğimiz bir konuya çektiğin için...
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: berat23 - 06 Aralık 2012, 16:59:20
gerbay hocam,internette epey bilgi var ama dediğiniz gibi asıl meselelere kimse değinmiyor.ben genellikle edaboarda da bakarım,orada da durum çok farjklı değil. bir bilgi isteyen mesaj ve arkasından onlarca banada lazım mail adresim bu tipinde mesaj. mesela çok blog var ama bloglardaki yazıların çoğu x incelemesi,y kutu açılışı tipinde. siz gerçekten birşeyler anlatan bir blog açsanız mesela iyi olur(mesajlara verdiğiniz uzun ve detaylı cevaplardan nasıl bir blog yazacağınız az çok belli oluyor). şahsen ben yeterince malzeme topladığıma inandığım an,internette bulunmayan ya da türkçe bulunmayan konularda içeriği olan bir blog açma fikrim var.

yalnız burdan şu çıkmasın,ben basit-kompleks farketmeksizin insaların internette blog açıp birşeyler anlatmasına karşı değilim,küçümsemiyorumda.her bilginin bir muhatabı vardır,boşa gitmez. sadece ciddi bilgi bulmadaki zorluklardan bahsediyorum.ciddi derken kritik teknolojileri falan kastetmedim,geneli iki kitap karıştırmayla anlaşılacak şeyler.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: Klein - 06 Aralık 2012, 18:14:51
Endian konusunun açılması iyi oldu. Hatta bunun için arkadaşın konusunu dağıtmadan başka bir başlığa da geçilebilir. 
8 bit işlemcilerden gelen alışkanlıklar yüzünden çok konuşulan veya önemsenen bir konu değil sanırım.  SPI,I2C gibi sistemlerle haberleşirken sistem nasıl veri istiyorsa LSB first, veya MSB first ona göre ayarlayıp veriyi gönderiyorduk.  Modbus protokolü big endian çalışıyor. 8 bit sistemle çalışırken , zaten 16 bit veriyi iki parça halinde gönderiyorduk, veriyi 8 bit registere sıralarken önce +1 registeri sonra registeri yerleştiriyorduk.  Şimdi 32 bit işlemciye geçtik. Ama bakıyorum modbus rutinlerim halen aynı. 8 bit işlemcide yazdığım şekli neredeyse koruyor.  Siz hatırlatana kadar da ben bunu niye direk 16 bit veya 32 bit göndermiyorum diye düşünmedim açıkçası.  STM32'de DMA ile veri gönderirken Big endian veya Little endian seçimiyapabiliyormuyuz diye de hiç araştırmadım.  Hatırlatma iyi oldu.
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: Murat Mert - 06 Aralık 2012, 21:08:04
Alıntı yapılan: serhat1990 - 06 Aralık 2012, 12:54:42
A.selam Hocam ; mesajınızı şimdi gördüm ...

Size katılıyorum Hocam ; eğer başlamassak biraz daha 8 bitler ortalıkta gözükmeyecek hal alacak :) En azından ufaktan girmek lazım . Şimdi bir board çiziyorum bununla ilgili , paylaşacam bunun üzerinde örnekler paylaşacam . Daha ucuz olan bu modellere geçmeli artık . Yada performansına göre ucuz diyelim :) Korkuyoruz neden heryerde 877 ile örnek var 16f84'den bahsetmiyorum bile ama bu denetleyicilerde pek fazla örnek bulunmuyor nasıl yapacaz kimse yapmamış ben neden yapayım gibi bir düşünce oluşuyor kafalarda . O yüzden bir yerden başlamalı ...


İyi Çalışmalar Dilerim .

Evet bir yerden dalmak gerekeli.
Allegro hocam sayesinde CCS C ye geçtim buradan kendisisne selam ve saygılarımı sunuyorum. Şarkıcıların ben sizler için varım gibi seromanisine döndü. Erol hocam saygılar. :D
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: drmp - 06 Aralık 2012, 21:22:41
alegro hocama katılmamak elde değil  universite okurken  96-99 yıllarında  z80 ve 8085 eğiti almıştık maalesef o zaman bilgisayar imkanımız olamdığından  hocamız z80 nin bütün registerlerini bize ezberletmiş  kağıt üzerinde derleme yapıp ( asm >> hex )  deney setine yükleyip çalıştırırdık ,yanlış anlamayın her zaman ilk seferede çalış mıyordu maalesef   .hey gidi günler
Başlık: Ynt: Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş
Gönderen: serhat1990 - 06 Aralık 2012, 22:32:32
Big Endian , Little Endian konularını ilk olarak Microchip eğitiminde görmüştüm . @Gerbay Hocamın dediği gibi pek fazla geçmiyor kitaplarda falan .

Konu ile alakası yok yalnız Pic micro'lar little endian , ethernet big endian . Microchip ethernet dökümanlarının bana göre karmaşık olan yapısı bu little - big endian arası geçişlerden mi kaynaklanıyor acaba .

İyi Çalışmalar Dilerim...