Tag Archive: pic


1-)Mikrokontrolör çalışmıyorsa güç verdiğinizden emin olun.

2-)Mikrokontrolör çalışmıyorsa RST/MCLR pinine en az 10kOhm direnç ile 5V/3.3V güce bağlayın, aksi takdirde Şam’dan biri gelip RST/MCLR pinine güç vermedikçe mikrokontrolör sürekli kendini yeniden başlatır, bir türlü kodunuz çalışmaz.

3-)Seri port iletişimde sorun yaşıyorsanız, ayarladığınız baudrate değeri muhtemelen sistem saat frekansı ile oluşturulamıyor ya da hatalı oluşturuyor. Sağlıklı bir seri iletişimde baudrate oluşturmada en fazla %0.2 hata olmalıdır.

4-)Seri iletişimde mikrokontroler tx pini iletişim kurulacak entegrenin rx pinine, mikrokontroler rx pini iletişim kurulacak entegrenin tx pinine bağlanmalıdır. Israrla tx pinini tx pinine, rx pinini rx pinine bağlayıp çalışmıyor bu diyen insanlar dahi var.

5-)Mikrokontrolöre verilecek voltaj ilgili datasheet den bakılıp ona göre seçilmelidir. Örneğin bazı entegreler 2.7V-5.5V arasında çalışabilirken bazıları 4.5V-5.5V arasında çalıabilmektedir. Voltajda varolan gürültüler mikrokontrolörün beklenmedik anlarda yaniden başlamasına (reset) sebebiyet vermektedir. + ve – voltaj terminalleri arasına takılacak kapasitör (100uF kafi olur) gürültüleri büyük oranda engeller.

6-)I2C iletişimi çalışmıyorsa I2C iletişim hızınıza bağlı olarak iletişim hattının (SCL ve SDA hattı) 4.7k yada 10k direnç ile 5V/3.3V bağlanması (pull up) gerekir. Bağlanacak dirençler iletiim hızına bağlı olarak entegrenin datasheet’inde belirtilmiştir.

7-)PIC mikrokontrolörin I2C ve SPI hat pinleri çakışık olan entegrelerinde I2C ve SPI aynı anda donanımsal olarak kullanılamıyor.

8-)Atmel AVR ISP ile programlanırken programlayaıcı tarafından görülemiyorsa AVR’nin sigorta (fuse) ayarları değiştirilmi olabilir. En son kaydedilen değerlere uygun kristal osilatör takılması gerekir. AVR’ler ilk alındığında eğer entegre iç osilatörü varsa programlamak için harici osilatöre gerek duymazlar.

Devamı gelecektir, şimdilik bu kadar.

Karşılaştığım bir sorunu sizlerle paylaşıyorum. 8-bit PIC’lerde donanımsal SPI ve I2C aynı anda kullanılamıyor. I2C ye ait pinler SPI pinleri ile çakışık, dolayısıyla iletişimde sıkıntı çıkartıyor.

16F877, 18F452 vs. için geçerlidir diğerlerinde test etmedim. Belki pinleri çakışmayan entegreleri vardır, bilemiyorum.

After a long search on the net, I found no library to use it with pic. And I wanted to write my own library :) . Çoşar Dindar- my friend- wrote a library for this purpose. Just copy&paste and save it as header file:)

// bu library çalışması için SPI library si projeye eklenmiş olmalıdır.

// MikroC SPI library must be added to project
// Library için Çoşar Dindar’a teşekkürlerimi borç bilirim

// Thanks Çoşar for this library
// Bu dosya hyetik.wordpress.com ‘da yayınlanmıştır.

// This library was published on hyetik.wordpress.com

// Bu kütüphane GPL lisanslıdır.

// This library is licenced under GPL

#define cs portb.f7

char get_status();

// buffer write
void buffer_write(short buffer_no,int adres,char *ptr,int n) {
cs=0;
delay_us(1);
if(buffer_no==1)
Spi1_Write(0×84);  // buffer1 write
else if(buffer_no==2)
Spi1_Write(0×87);  // buffer2 write
Spi1_Write(0);
Spi1_Write(adres>>8);      // 15-8
Spi1_Write(adres);         // 0-7
for(;n>0;n–,ptr++) {
Spi1_Write(*ptr);
}
cs=1;
delay_us(10);
}

// buffer read
void buffer_read(short buffer_no,int adres,char *ptr,int n) {
cs=0;
Delay_us(1);
if(buffer_no==1)
Spi1_Write(0xd4);  // buffer1
else if(buffer_no==1)
Spi1_Write(0xd6);  // buffer2
Spi1_Write(0);
Spi1_Write(adres>>8);
Spi1_Write(adres);
Spi1_Write(0);    // dummy write
for(;n>0;n–,ptr++) {
*ptr=Spi1_Read(0);
}
cs=1;
delay_us(10);
}

//buffer to main memory
void write_buffer_to_main(short buffer_no,long page) {
int stat;
stat=get_status();
if(stat&1==1)     // 512 int
page=page<<9;
else               // 528 int
page=page<<10;
cs=0;
delay_us(1);
if(buffer_no==1)
Spi1_Write(0×83);  //from buffer1
else if(buffer_no==2)
Spi1_Write(0×86);  //from buffer2
Spi1_Write(page>>16);
Spi1_Write(page>>8);
Spi1_Write(page);
cs=1;
delay_ms(10);   // GECİKME!!  ŞU ANDA DATAFLASH YAZMA İŞLEMİ YAPIYOR
}

//buffer through main memory
void write_buffer_thr_main(short buffer_no,int adres,long page,char *ptr,int n) {
char stat;
stat=get_status();
if(stat&1==1) {    // 512 int
page=page<<9;
adres=adres&511;
page=page|adres;
}

else           {    // 528 int
page=page<<10;
adres=adres&1023;
page=page|adres;
}
cs=0;
delay_us(1);
if(buffer_no==1)
Spi1_Write(0×82);  //from buffer1
else if(buffer_no==2)
Spi1_Write(0×85);  //from buffer2
Spi1_Write(page>>16);
Spi1_Write(page>>8);
Spi1_Write(page);
for(;n>0;n–,ptr++)
Spi1_Write(*ptr);
cs=1;
delay_ms(10);   // GECİKME!!  ŞU ANDA DATAFLASH YAZMA İŞLEMİ YAPIYOR
}

// directly main memory page read
void read_main(int adres,long page,char *ptr,int n)  {
char stat;
stat=get_status();
if(stat&1==1)   {  // 512 int
adres=adres&511;
page=page<<9;
page=page|adres;
}
else             {  // 528 int
adres=adres&1023;
page=page<<10;
page=page|adres;
}

cs=0;
Delay_us(1);
Spi1_Write(0xd2);
Spi1_Write(page>>16);
Spi1_Write(page>>8);
Spi1_Write(page);

Spi1_Write(0);   // dummy write s
Spi1_Write(0);
Spi1_Write(0);
Spi1_Write(0);

for(;n>0;n–,ptr++)
*ptr=Spi1_Read(0);
cs=1;
Delay_ms(10);
}

char get_status() {
char stat;
cs=0;
delay_us(1);
Spi1_Write(0xd7);
stat=Spi1_Read(0);
cs=1;
delay_us(10);
return stat;
}

void dataflash_init() {
Spi1_Init_Advanced(_SPI_MASTER_OSC_DIV64,_SPI_CLK_IDLE_LOW,_SPI_DATA_SAMPLE_END,_SPI_HIGH_2_LOW);
cs=1;
}

WordPress.com'dan blog alın. | Tema Motion, volcanic tarafından yapılmıştır.
Takip Et

Get every new post delivered to your Inbox.