PIC C Başlangıç için Örnekler?

Başlatan hamzax, 27 Ocak 2011, 12:59:24

hamzax

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

sigmoid

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.


hamzax

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

prof_81


hamzax

@prof_81 teşekkürler

Üstteki kodu yorumlayabilir misin?

eseneren

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
 }
}
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

fatihkuzucu

CCS C kullan rahat edersin. Bedava sayılır :)
Exp.Kits http://tinyurl.com/3qhs8pm   Küçük adamların, küçük fikirleri... Büyük adamların, büyük hayalleri...

Tagli

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.
Gökçe Tağlıoğlu

eseneren

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 :)
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

Erol YILMAZ

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

hamzax

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.

Erol YILMAZ

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

sigmoid

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.

hamzax

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

eseneren

#14
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
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk