Pic24FJ128GA006 ile 16-Bit Mimarisine Giriş

Başlatan serhat1990, 18 Kasım 2012, 23:12:15

serhat1990

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/

AsHeS


serhat1990

C30 vermiş olduğum linkte yazıyor :)

İyi Çalışmalar.

Murat Mert

S.A.
Alışkanlık ve birazda bilmemezliğin korkusu ile 8 bitten  çıkamadık. Derlerya korkunun ecele faydası yok biryerden dalmak lazım.
mert07

serhat1990

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 .

Erol YILMAZ

Ö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

serhat1990

@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 ...

ULAGA

Ellerine sağlık Serhat.
Giriş niteliğinde güzel bir uygulama olmuş.

serhat1990

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...

ULAGA


serhat1990

Teşekkür ederim Hocam ;)

Sizede kolay gelsin ; günlerin saatlerinin uzayabilmesi dilekleriyle :)

berat23

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ı.

serhat1990

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...

berat23

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.

serhat1990

#14
@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 Dosyası biraz incelenince ,

ayrıca

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.