Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: hamzax - 27 Ocak 2011, 12:59:24

Başlık: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 27 Ocak 2011, 12:59:24
Merhaba,

  PIC Programlamaya başlayacağım.Bunun için C dilini kullanmayı düşünüyorum.Ücretsiz olduğu için Small Device C Compiler(SDCC)'yi seçtim.

Yalnız daha önce bir tecrübem olmadığı için örnekler arıyorum.

İnternetten araştırdım bir kaç örnek buldum tabi anlaması biraz zor geldi bana.
Mesela aşağıdaki kod:

#include "/usr/share/sdcc/include/pic/pic16f627.h"
#define __16f627

typedef unsigned int config;
config at 0x2007 __CONFIG = _CP_OFF &
_WDT_OFF &
_BODEN_OFF &
_PWRTE_OFF &
_ER_OSC_CLKOUT &
_MCLRE_ON &
_LVP_OFF;

#define b1 0x02 /* pin 1 on PORTB */
#define B_OUTPUTS 0xFD /* value used to setup TRISB */

void main(void) {

/* PORTB.1 is an output pin */
TRISB = B_OUTPUTS;

while(1) { /* Loop forever */

//  toggle bit 1
PORTB = (PORTB ^ b1);

}
}

Bu kodları acaba açıklayabilir misiniz?

Teşekkürler
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: sigmoid - 27 Ocak 2011, 13:45:21
fxdev'in kitabını tavsiye ederim. dediğin derleyiciyi hiç kullanmadım. Kullananda duymadım. Ama yazdığın kodlar hitechc derleyicisi ile aynı. Hitech C derleyicisi AnsiiC standartlarına en çok bağlı kalan derleyicidir.

http://www.fxdev.org/muhendislik/hi-tech-pic-programlama/

kolay gelsin.

Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 27 Ocak 2011, 14:06:46
fxdev'in kitabını indiremiyorum.Çünkü megaupload.com açılmıyor.Siz de varsa yollarsanız sevinirim.

Bir de ilk mesajdaki kodu yorumlayabilir misiniz?

Teşekkürler...
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: prof_81 - 27 Ocak 2011, 14:20:52
Buradan  (http://hotfile.com/dl/99885636/1e001f3/Hi-Tech_ile_Pic_Programlama.pdf.html)indirebilirsin.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 27 Ocak 2011, 14:25:45
@prof_81 teşekkürler

Üstteki kodu yorumlayabilir misin?
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: eseneren - 27 Ocak 2011, 17:21:52
Yerinde olsam hitech ile baslardım guzel bır kaynak var Fırat Deveci nin yazdıgı
asagıdakı kod ıcın satırların altına acıklamalar yazdım %100 dogru olmaya bılır yanlısım varsa arkadaslarım duzeltsın ltf


#include "/usr/share/sdcc/include/pic/pic16f627.h"
// bu dızınde olan 627.h dosyasını ekle ( ekle ki asagıda portb
// yazınca portb ne demek o chip ıcın derleyıcı anlayabılsın
#define __16f627


typedef unsigned int config;
config at 0x2007 __CONFIG = _CP_OFF &
_WDT_OFF &
_BODEN_OFF &
_PWRTE_OFF &
_ER_OSC_CLKOUT &
_MCLRE_ON &
_LVP_OFF;
// condigrasyon yapılıyor low power off mclre on vs vs gıbı
#define b1 0x02 /* pin 1 on PORTB */
// derleyıcı ben b1 yazdıgımda sen 0x02 anla ( 0x02 yazmak ıstemıyorum b1 daha kolay gelıyor)
#define B_OUTPUTS 0xFD /* value used to setup TRISB */
// derleyıcı ben B?output yazdıgımda sen 0xFD anla
void main(void) {


TRISB = B_OUTPUTS;
//TRISB b portunun hangı pini gırıs ,cıkıs olacagını belırler
// B_out degerı artık ne ıse onu atıyor tahmınım trısb=0; yanı portb komple cıkıs olsun

while(1) {
//  while parantez ıcı 0 olana kadar ıcındekı kodu ısle
// parantez ıcındekı 1 sabıt oldugundan buraya gıren kod ıcın sonsuz dongudur

PORTB = PORTB + 2;
// portb degerıne ıkı ekleyerek while basına donuyor
}
}
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: fatihkuzucu - 27 Ocak 2011, 18:01:57
CCS C kullan rahat edersin. Bedava sayılır :)
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: Tagli - 27 Ocak 2011, 18:19:56
C18'i de düşünebilirsin. Ücretsiz versiyonu var, sadece optimizasyon konusunda kısıtlama getiriyor. Ancak yeni başlayan biri için bazı ayrıntıları ağır gelebilir. Bir diğer eksisi de 10, 12 ve 16 serileri için desteğinin olmaması. Bu durumda Hi-Tech daha uygun bir tercih olabilir.

CCS C'ye ise hiç bulaşma. Ben kullanmadım ama hakkında kötü şeyler duyuyorum. Bildiğim kadarıyla standart C ile pek alakalı değil, kullanıcıyı hazıra çok alıştırıyor, işin temelini öğrenmeni zorlaştırıyor. Yeni başlayan biri için kolaylığı sebebiyle iyi bir tercih olsa da temel sağlam olmayacağından ileride sorun çıkaracaktır.

Benim tavsiyem eğer gerçekten sabrın, ilgin ve isteğin varsa assembly ile başlaman sonra C18'e (veya C30 vs., PIC ailesine göre) geçmen. Ancak bu saydıklarım yoksa assembly ile hiç uğraşma, seni PIC'ten soğutur. Bu durumda en iyi seçim Hi-Tech C olacaktır.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: eseneren - 27 Ocak 2011, 18:24:03
Alıntı yapılan: fatihkuzucu - 27 Ocak 2011, 18:01:57
CCS C kullan rahat edersin. Bedava sayılır :)
Ben Hi-Tech kullanıyorum.
CCS C de Overload var Hi-Tech de yok :)
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: Erol YILMAZ - 27 Ocak 2011, 18:41:46
Hi-Tech; PIC için oldukça iyi bi derleyici,
CCS daha kolay devreye alınabiliyor ama yazılımı ciddiye alıyorsan pek tavsiye etmiyorum.
PIC16 serisi için Hi-Tech PICC 9.65 PL1 versiyonu ile çalışıyorum.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 27 Ocak 2011, 18:59:38
PIC Programlamayı baştan anlatan bir e-kitap var mı?
Çünkü fxdev'in kitabında kodların açıklamasını anlayamıyorum.
Mesela

void main(void) // Ana fonksiyon alanı
{
ADCON1=0x07; "// PORTA dijital olarak yönlendiriliyor"
TRISA=0x01; "// RA0 giriş olarak yönlendiriliyor"
TRISB=0x00; "// PORTB çıkış olarak yönlendiriliyor"
PORTB=0x00; "// PORTB'nin tüm çıkışları sıfırlanıyor"
PORTA=0x00; "// PORTA'nın tüm çıkışları sıfırlanıyor"
for(;;) // Sonsuz döngüye giriliyor
{
RB0=RA0; // RB0 çıkıĢı RA0 giriĢine eĢitleniyor
}
}

(") işareti içindeki ifadelerden bir anlam çıkaramıyorum.
PORTX 'e verdiğimiz değer ona gönderdiğimiz değer mi oluyor.
TRISB'ye 0x00 verdiğimizde çıkış olarak yönlendirilmesi ne anlama geliyor.
Açıklarsanız sevinirim.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: Erol YILMAZ - 27 Ocak 2011, 19:29:19
Öncelikle biraz C  çalışman gerekiyor.
Biraz da kullanacağın Mcu nun DATASHEETI ni...

C için kitaplar  ve e-kitaplar var.
DATASHEET için Microchip.com sitesine bakabilirsin.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: sigmoid - 27 Ocak 2011, 19:33:50
ileriye dönük düşünüyorsaniz hitechten kullanin. ilk başta zorlanabilisiniz. içinde hazir kütüphanesi yoktur.

ccsc de güzel bir tercihtir. içindebol örneği vardir. kütüphaneleride geniştir. yalniz ansii c standartlarina pek uymaz. bu derlyici ile profesyonel projeleryapanlar biliyorum. küçümsenecek bir derleyici değildir. sadece ilerde başka bir mikrodenetleyiciye geçeceğiniz zaman zorlanirsiniz.

bir diğer alternatifte mikroc dir. www.mikroe.com dan indirebilirsin. help dosyalarinda devre şemasida var. yeni başlayanlar için çok faydali oluyor.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 27 Ocak 2011, 19:46:17
Alıntı yapılan: Allegro - 27 Ocak 2011, 19:29:19
Öncelikle biraz C  çalışman gerekiyor.
Biraz da kullanacağın Mcu nun DATASHEETI ni...

C için kitaplar  ve e-kitaplar var.
DATASHEET için Microchip.com sitesine bakabilirsin.
C dilini yeterince biliyorum dediğin gibi kullanacağım MCU'nun DataSheet'ini iyi incelemem gerekiyor.
fxdev'den indirdiğim kitaptaki örnekleri anlamaya başladım.
Sorun oldukça bu konu başlığı altından bildirmeyi düşünüyorum.
Derleyiciyi değiştirmeyi pek düşünmüyorum sanırım linux üzerinde çalışan tek PIC C Derleyicisi SDCC. :D.Windows kullanmak istemiyorum çünkü elimde yalnızca Windows Vista var o da bildiğiniz üzere aşırı yavaş.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: eseneren - 27 Ocak 2011, 20:53:11
Alıntı yapılan: hamzax - 27 Ocak 2011, 18:59:38
PIC Programlamayı baştan anlatan bir e-kitap var mı?
Çünkü fxdev'in kitabında kodların açıklamasını anlayamıyorum.
Mesela

(") işareti içindeki ifadelerden bir anlam çıkaramıyorum.
PORTX 'e verdiğimiz değer ona gönderdiğimiz değer mi oluyor.
TRISB'ye 0x00 verdiğimizde çıkış olarak yönlendirilmesi ne anlama geliyor.
Açıklarsanız sevinirim.

C de degısken tanımlıyorsun ya o degıskenler mcu ıcınde bır bolgede duruyor.
Kullanabıldıgımız bırde mcu nun kendı kullandıgı kayıt alanları var.
Misal 877A ıcın 06h 8 bitlik adresine "00000011" yuklersen PORTB den 0ve 1. bıtler 1 dıgerlerı 0 olarak cıkıs alırsın.
misal 86h adresinide kendı kullanıyor 8bitlik bir alan bu alana "00001111"
degerını atarsan  PORTB nın  0,1,2,3 bıtlerı ınput 4,5,6,7. bıtlerı cıkıs olarak ayarlanmıs olur.

06h adresıne portb
86h adresıne trısb  adı verılmıs

#define PORTB 0x06
#define TRISB 0x86

yazarsan portb yazınca derleyıcı tanır yada bunları tek tek soylemek yerıne hazır olan kutuphaneyı eklersın.

Lakin MCU ogrenmeden baslamıssın gıbı datasheet olmadan donanımı ogrenmeden en kral yazılım ıle bıle yaptıgın ıslerı gozden gecırmen gerekecek.
Ingılızcen yok ıse 877A ıle ılgılı turkce dokuman da var. Eger cat pat ıngılızcen varsa hıc turkce kaynaklara basvurmadan ıngılızce dokuman oku teknık ıngılızce o kadar zor degıl.
Fırat Deveci kıtabını dikkatli okursan sindire sindire aynı anda ikisi hakkında da fikrin olur 
(yazılım donanım) eksiklerini de datasheet hem bu forumdan bulabilirsin.

Ama tris ne vs dersen acıklarım da cok yavas ılerlersın.

Saygılar
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: fatihkuzucu - 27 Ocak 2011, 22:20:37
Alıntı Yap
ileriye dönük düşünüyorsaniz hitechten kullanin. ilk başta zorlanabilisiniz. içinde hazir kütüphanesi yoktur.
ccsc de güzel bir tercihtir. içindebol örneği vardir. kütüphaneleride geniştir. yalniz ansii c standartlarina pek uymaz. bu derlyici ile profesyonel projeleryapanlar biliyorum. küçümsenecek bir derleyici değildir. sadece ilerde başka bir mikrodenetleyiciye geçeceğiniz zaman zorlanirsiniz.

Bilerek yapılan yanlı yorumlar. CCS Anci C destekler. Hitechde yazılabilecek her kod CCSde de yazılır. Üzerinde birde ccsin hazır lib desteği vardır. Başka derleyiciye niye geçilecek ? Farklı firmanın  mcusu kullanacaksa, farklı derleyici gerekebilir evet. Ancak sanılıyorki al kodu buradan taşı öteki derleyiciye yapıştır derle geç :) . Bu işler bu kadar basit değil. LPC2368-LPC1768 pin to pin uyumlu nxp 32 bit mcu ve ikiside keil ile programlanabiliyor. 2368 de yazılmış bir keil kodunu 1768 e taşıyın bakalım  taşıyabilecekmisiniz ?
Kendi kendinize her şeyi yazma konusunda sabit fikirli olabilirsiniz. Ancak bunu CCS dede yapabilirsiniz. Yoksa o yaramaz, bu daha iyi gibi fikirleriniz nesnel olmaktan çıkıyor.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 28 Ocak 2011, 14:09:30
Alıntı yapılan: eseneren - 27 Ocak 2011, 20:53:11
C de degısken tanımlıyorsun ya o degıskenler mcu ıcınde bır bolgede duruyor.
Kullanabıldıgımız bırde mcu nun kendı kullandıgı kayıt alanları var.
Misal 877A ıcın 06h 8 bitlik adresine "00000011" yuklersen PORTB den 0ve 1. bıtler 1 dıgerlerı 0 olarak cıkıs alırsın.
misal 86h adresinide kendı kullanıyor 8bitlik bir alan bu alana "00001111"
degerını atarsan  PORTB nın  0,1,2,3 bıtlerı ınput 4,5,6,7. bıtlerı cıkıs olarak ayarlanmıs olur.

06h adresıne portb
86h adresıne trısb  adı verılmıs

#define PORTB 0x06
#define TRISB 0x86

yazarsan portb yazınca derleyıcı tanır yada bunları tek tek soylemek yerıne hazır olan kutuphaneyı eklersın.

Lakin MCU ogrenmeden baslamıssın gıbı datasheet olmadan donanımı ogrenmeden en kral yazılım ıle bıle yaptıgın ıslerı gozden gecırmen gerekecek.
Ingılızcen yok ıse 877A ıle ılgılı turkce dokuman da var. Eger cat pat ıngılızcen varsa hıc turkce kaynaklara basvurmadan ıngılızce dokuman oku teknık ıngılızce o kadar zor degıl.
Fırat Deveci kıtabını dikkatli okursan sindire sindire aynı anda ikisi hakkında da fikrin olur 
(yazılım donanım) eksiklerini de datasheet hem bu forumdan bulabilirsin.

Ama tris ne vs dersen acıklarım da cok yavas ılerlersın.

Saygılar
O zaman ilk olarak Fatih Deveci'nin kitabına çalışmam lazım.Bunu bitirdiğim zaman sanırım küçük bir proje için gerekli bilgiye sahip olurum.
---------
Konuda birden derleyici tartışması başladı yalnız ilk mesajımda dediğim gibi derleyici olarak SDCC'yi kullanacağım.

Yardımcı olan arkadaşlara da teşekkür ederim.

Saygılar
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: hamzax - 28 Ocak 2011, 16:50:53
Alıntı yapılan: FxDev - 28 Ocak 2011, 15:37:35
Alıntı yapılan: hamzax - 28 Ocak 2011, 14:09:30
O zaman ilk olarak Fatih Deveci'nin kitabına çalışmam lazım.Bunu bitirdiğim zaman sanırım küçük bir proje için gerekli bilgiye sahip olurum.

;D  ;D
;D ;D Fırat Deveci aklımda niyeyse fatih olarak kalmış.Neyse :)
Alıntı Yap
SDCC interrupt support
o To write an ISR in C, create a function similar to the following format:
void isr_foo() interrupt 1

{}
" This format tells SDCC to generate an interrupt vector (at offset
0x0B from the --code-loc address) that calls isr_foo in response to
interrupt 1.
" It also tells SDCC to generate a RETI instruction instead of a RET
instruction to return from a call to isr_foo().
Biri üst kısmı açıklayabilir mi acaba sanırım SDCC'de interrupt işlemi Hi-tech'ten biraz daha farklı.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: eseneren - 28 Ocak 2011, 18:42:31
Evet arkadasım sen o kıtapla ve datasheetle basla sıkıntı olursa yardımcı olmak ısterım.
"Kitap dusundugunden cok daha fazlası amator denılen ama pıyasadakı cogu profosyonel kıtapdan 40 kat daha ıyı bır kıtap kucuk degıl bır cok projende sana on ayak olacaktır.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: tmcone - 28 Ocak 2011, 20:29:24
Alıntı yapılan: fatihkuzucu - 27 Ocak 2011, 22:20:37
Alıntı Yap
ileriye dönük düşünüyorsaniz hitechten kullanin. ilk başta zorlanabilisiniz. içinde hazir kütüphanesi yoktur.
ccsc de güzel bir tercihtir. içindebol örneği vardir. kütüphaneleride geniştir. yalniz ansii c standartlarina pek uymaz. bu derlyici ile profesyonel projeleryapanlar biliyorum. küçümsenecek bir derleyici değildir. sadece ilerde başka bir mikrodenetleyiciye geçeceğiniz zaman zorlanirsiniz.

Bilerek yapılan yanlı yorumlar. CCS Anci C destekler. Hitechde yazılabilecek her kod CCSde de yazılır. Üzerinde birde ccsin hazır lib desteği vardır. Başka derleyiciye niye geçilecek ? Farklı firmanın  mcusu kullanacaksa, farklı derleyici gerekebilir evet. Ancak sanılıyorki al kodu buradan taşı öteki derleyiciye yapıştır derle geç :) . Bu işler bu kadar basit değil. LPC2368-LPC1768 pin to pin uyumlu nxp 32 bit mcu ve ikiside keil ile programlanabiliyor. 2368 de yazılmış bir keil kodunu 1768 e taşıyın bakalım  taşıyabilecekmisiniz ?
Kendi kendinize her şeyi yazma konusunda sabit fikirli olabilirsiniz. Ancak bunu CCS dede yapabilirsiniz. Yoksa o yaramaz, bu daha iyi gibi fikirleriniz nesnel olmaktan çıkıyor.

CCS C, Ansi C uyumlu olduğunu iddia eder ama mevcut haliyle öyle değildir. Hazır kütüphanelerinin olması, birçok öntanımlı makroyla gelmesi onun Ansi C olmadığı anlamına gelmez. Hitech PICC18 ve C18'de de çevresel birimler için hazır kütüphaneler var. Fakat CCS C'nin varsayılan değer tiplerinin boyutu, kimi saf C sözcüklerinde hata vermesi, çoklu dosya derleme modeli vb. gibi Ansi C den uyumsuz yanları mevcut. Aslında bu üç derleyicinin hiçbirinin %100 Ansi C uyumlu olduğu söylenemez; çünkü gömülü sistemler için bunlar. Örneğin bunlarda PIC'in hafızasının yetersiz olması ve hardware stack olmaması nedeniyle öz yinelemeli (recursive) fonksiyonlara destek verilmez. Bunların birinde yaptığınız işi diğerlerinde de rahatlıkla yapabilirsiniz; hatta sadece bir header dosyası ekleyerek tek bir nokta dahi değiştirmeden (registerlar dahil) kodunuzu bu üç derleyicide derleyebilirsiniz. CCS C nin ve kısmen Hitech C nin en büyük dezavantajı Microchip'in kütüphanelerini kullanmak istediğinizde ortaya çıkar.
Başlık: Ynt: PIC C Başlangıç için Örnekler?
Gönderen: eltci - 02 Temmuz 2011, 13:17:31
yeni başlayanlar için hi tech c