Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => CC5X => Konuyu başlatan: picusta - 31 Ekim 2005, 14:39:12

Başlık: CC5X Kütüphanesi
Gönderen: picusta - 31 Ekim 2005, 14:39:12
Merhaba CC5X ile ilgilenenler bilir, CC5X ile gelen pek kütüphane yok gibi. sadece birkaç matematik kütüphane ile geliyor o kadar.
En basitinden, PIC'in eeprom'una bisay yazacaksiniz, gidip datasheet'i karistirip assembler kodunu aynen C de yaziyorsunuz. Eger böyle ufak fonksyonlari bir araya getirebilirsek, bir kütüphane olusturabiliriz. CCS'in built-in fonksyonlarinin open-source hali gibi. Tartismasiz CC5X PIC(16) için en iyi compiler olur.
Su an aklima gelen fonksyonlar: Eepromayaz(..,..),Eepromdanoku(...), Flashayaz(..), Lcdinit(..), Lcdgönder(..), PWMayarla(..,..) ,vs....
Belki daha sonra bu kütüphane PIC Library projesinin bir parçasi olur.
Bu compiler için yazilmis fonksyonlar diger C compilerlari ile de çalisir, birkaç include yapilirsa tabii.
örnek olarak ilk kodu veriyorum (Daha önce baska yerde vermistim). Umarim gerisi gelir, insanlar katilir.


//**********************************************************************
//EEprom'a yazma proseduru : 8 bitlik degiskeni belirtilen adrese yazar
//**********************************************************************

void Eeproma_yaz(uns8 sayi,uns8 adres){

  while(WR==1);// EEPROM'a yazilimadigini kontrol et, bitmesini bekle
  //sayiyi adrese yaz
  EEADR=adres; //yazilacak adres seçilir
  EEDATA=sayi;  // yazilacak veri yazmaça girilir
  /*EEPROM'a yazmak için yapilmasi gereken kod. bkz. sayfa 35  
(16F87x datasheet)*/
  EEPGD=0;
  WREN=1;          //Yazmaya basla
  GIE=0;             //Burda interruptlar kapatiliyor
  EECON2=0x55;
  EECON2=0xAA;
  WR=1;
  GIE=1;             //Interruptlar tekrar açilir
  WREN=0;
}
Başlık: CC5X Kütüphanesi
Gönderen: Macera - 08 Kasım 2005, 16:05:14
İ2c için örnek teşkil edebilecek kodlarıda ben ekde veriyim.
Bu kodlar için epey deneme yanılma çalışması yapmak zorunda kaldım.
Aşağıdaki kodları Atmel 24C32 tipi bir hafıza biriminde çalıştırdım.



#define I2C_EE_WRITE   0b10100000
#define I2C_EE_READ    0b10100001

void i2c_init(void)
{
   SSPSTAT = 0;// Cleared all status bits
   SMP     = 0;// Disable slew rate control
   SSPADD  = 0x0B;// 400kHz
   SSPCON  = 0;// Cleared all Configuration bits
   SSPEN   = 1;// Enabled serial port
   SSPM3   = 1;// I2C Master with  Fosc based clock
   SSPCON2 = 0;
   PORTC = 0b.0000.0000;
   TRISC  = 0b.0001.1000;
}
void i2c_write(uns16 eeadr,uns8 data)
{
   SSPIF   = 0;
   SEN   = 1;
   while (SEN);//       Start Condition Ok!
   SSPIF   = 0;
   SSPBUF  = I2C_EE_WRITE;// Write condition
   while (ACKSTAT);//   Is received?
   while (!SSPIF);
   SSPIF   = 0;
   SSPBUF  = eeadr.high8;
   while (!SSPIF);
   ACKDT   = 1;
   SSPIF   = 0;
   SSPBUF  = eeadr.low8;
   while (!SSPIF);
   SSPIF   = 0;
   SSPBUF   = data;
 //  while (ACKSTAT);//   Is received?
   while (!SSPIF);
   ACKEN   = 1;
   SSPIF   = 0;
   while (ACKEN);
   while (!SSPIF);
   SSPIF   = 0;
   PEN     = 1;
   while (PEN);
   while (!SSPIF);
   ACKDT   = 0;  
}

uns8 i2c_read(uns16 eeadr)
{
   uns8    ee_data;
   SSPIF   = 0;
   SEN   = 1;
   while (SEN);//       Start Condition Ok!
   SSPIF   = 0;
   SSPBUF  = I2C_EE_WRITE;// Write condition
   while (ACKSTAT);//   Is received?
   while (!SSPIF);
   SSPIF   = 0;
   SSPBUF  = eeadr.high8;
   while (!SSPIF);
   SSPIF   = 0;
   SSPBUF  = eeadr.low8;
   while (!SSPIF);
   SSPIF   = 0;
   RSEN   = 1;
   while (RSEN);//     Start Condition Ok!
   SSPIF   = 0;
   SSPBUF  = I2C_EE_READ;// Write condition
   while (ACKSTAT);//   Is received?
   while (!SSPIF);
   SSPIF   = 0;
   ACKDT   = 1;
   RCEN    = 1;
   while (RCEN);
   SSPIF   = 0;
   ee_data = SSPBUF;
   while (ACKSTAT);//   Is received?
   ACKEN   = 1;
   SSPIF   = 0;
   while (ACKEN);
   while (!SSPIF);
   PEN     = 1;
   SSPIF   = 0;
   while (PEN);
   while (!SSPIF);
   ACKDT   = 0;
   return ee_data;
}

uns8 i2c_readcurrent(void)
{
   uns8 ec_data;
   SSPIF   = 0;
   SEN   = 1;
   while (SEN);//       Start Condition Ok!
   SSPIF   = 0;
   SSPBUF  = I2C_EE_READ;// Write condition
   while (ACKSTAT);//
   while (!SSPIF);
   SSPIF   = 0;
   ACKDT   = 1;
   RCEN    = 1;
   while (RCEN);
   SSPIF   = 0;
   ec_data = SSPBUF;
   while (ACKSTAT);//   Is received?
   ACKEN   = 1;
   SSPIF   = 0;
   while (ACKEN);
   while (!SSPIF);
   PEN     = 1;
   SSPIF   = 0;
   while (PEN);
   while (!SSPIF);
   ACKDT   = 0;
   return ec_data;
}

Başlık: CC5X Kütüphanesi
Gönderen: picusta - 10 Kasım 2005, 00:14:59
CC5X ile Hi-tech kodunun uyumlulugu ne kadardir acaba?
http://www.microchipc.com/sourcecode
sitesindeki Hi-tech kodlarini CC5X ile kompil edersek çalisirmi? Ne degisiklikler yapmak gerek?
Başlık: CC5X Kütüphanesi
Gönderen: CaFFeiNe - 10 Kasım 2005, 20:43:59
CC5X CCS den dahamı küçük kod üretiyor yani neden CC5X?
Başlık: CC5X Kütüphanesi
Gönderen: Erol YILMAZ - 10 Kasım 2005, 21:28:38
Alıntı yapılan: "CaFFeiNe"CC5X CCS den dahamı küçük kod üretiyor yani neden CC5X?

Evet CC5X cok daha kompakt kod uretiyor.
CCS kadar luks fonksiyonlari olmasa da byte lerin hesabini yapanlar icin ideal :)
Başlık: CC5X Kütüphanesi
Gönderen: picusta - 11 Kasım 2005, 15:55:40
CCS, C programlamasini bilen ve mikrodenetleyicinin yapisini iyi bilmeyen, kaynaklari optimal bir sekilde kullanmayanlar için ideal olabilir.
Başlık: CC5X Kütüphanesi
Gönderen: nuwanda - 24 Mart 2007, 11:20:04

//--------------------------------------------------------------------
//////////////////////---PWM ÇIKIŞ İŞLEVLERİ---//////////////////////
//--------------------------------------------------------------------

void PWMayar()
{

TRISC=0xF0;
PORTC=0x00;

//Not: 1Mhz için:
//PWM period = (PR2 + 1)*4 * Tosc* TMR2 prescalar
//16.384 mS  =  256 *  4 * 1uS * 16  -> 61Hz
//20 mS nominal

PR2=0XFF;

//PWM dutycyle = [CCPR1L:CCP1CON<4:5>]*Tosc*TMR2 prescalar
// 1500uS   = 93 *   1uS * 16
//1.5mS için CCPR1L:CCP1CON<4:5> =93


CCP1CON.4=1; //
CCP1CON.5=1;
CCPR1L=255;

CCP2CON.4=1;
CCP2CON.5=1;
CCPR2L=255;

TRISC.2=0;
TRISC.1=0;

T2CON = 0b.0000.0111; //POSTSCALE 1:1, TMR2 ON, PRESCALE 1:16

CCP1CON=0xFF; //PWM MODE

CCP2CON=0xFF; //PWM MODE

PSA=1;

PS0=1;
PS1=0;
PS2=1;

}


//--------------------------------------------------------------------
//Yukarıdaki fonksiyon ile pwm kullanabilmek için örnek kod
//--------------------------------------------------------------------

void setMotor(unsigned val1) //PWM Çıkışı -> PORTC.2
{
CCPR1L=val1;
}
Başlık: cc5x de programda problem var
Gönderen: chorckbey - 05 Ağustos 2008, 14:59:10
Arkadaşlar cc5x de bir program yazdım derledim ve proteusta denedim çalışıyor ama pic 16f628 e atınca çalışmıyor sigortaları ayarlayamadım galiba ama onda sigortalar nasıl ayarlanıyor programa ne yazmam gerekiyor kendi içindeki osilatörü kullanmak istiyorum şimdiden çok teşekkür ederim yardımlarınızı bekliyorum iyi çalışmalar