Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: ademtosun58 - 22 Mart 2017, 15:43:30

Başlık: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: ademtosun58 - 22 Mart 2017, 15:43:30
Merhaba Arkadaşlar Mplab Xc8 kullanarak hazırldagım projede hex dosyasını pice attıktan sonra ilk çalışmada 2*16 LCD ekranıma Bozuk karakter ler geliyor ("%&31"). Daha sonra pici 1-2 kere resetledigimde sistem düzeliyor ve istedigim fonksiyonlar ekrana geliyor. Bunun sebebi ne olabilir .Elektronik kısımdamı veya yazılımsal olabilirmi?
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: Hittman - 22 Mart 2017, 22:04:24
Eğer breadboard da çalışıyorsanız kristalin sağlam oturup oturmadığını kontrol edin eğer sağlamsa yazılımda fuses ayarlarını kontrol edin. Genelde bu iki durumdan dolayı farklı karakterler görünüyor.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: ademtosun58 - 22 Mart 2017, 22:08:59
Alıntı yapılan: Hittman - 22 Mart 2017, 22:04:24
Eğer breadboard da çalışıyorsanız kristalin sağlam oturup oturmadığını kontrol edin eğer sağlamsa yazılımda fuses ayarlarını kontrol edin. Genelde bu iki durumdan dolayı farklı karakterler görünüyor.


Breadbord değil normal delikli pertinaks üzerinde Yapıyorum yani Lehimli herşey, ayriyeten normal bi role tetikleme için çıkış verdim sistem normal çalışıyor işin içine lcd girince sapıtıyor
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: erdogan_82 - 22 Mart 2017, 22:10:21
Adem devreyi görmeden birşey söylemek pek doğru olmaz ama şöyle birşey başıma gelmişti 16f877 de bir yapmıştım. Sölediğin gibi devrede bir anormallik vardı. Sorunu şöyle çözdüm picin ya 6 nolu ayak veya b6 pini ( tam emin değilim hangisi olduğundan ) bu ayağa 10kohm direnç bağladım sorun çözüldü. Serdar çiçeğin kitabında bu konu anlatılıyor. Bu 877 de öle bir sorun oluyormuş.
     İkincıi aklıma gelende ekrana yazdıracağın şey rakamsal bir değerse yeterli bir hafıza birimi tanıtmamışsındır. Pic ondan da hata verebilir.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: dursuncemal - 22 Mart 2017, 23:26:49
initialize sorunu olabilir.lcd'nin bussy pinini kullaniyormusunuz.

Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: tekosis - 23 Mart 2017, 00:14:02
cihazın ilk açılışında oluşan dalgalanmalar, parazitlerle ilgili bir problem gibi duruyor. lcd nin en pinini mcu ya bağlayıp işlemci ilk çalıştığı anda ekranı disable yapıp ~1 saniye sonra enable yapıp lcd'yi devreye alırsanız probleminiz hallolur.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: ademtosun58 - 23 Mart 2017, 11:01:00
Alıntı yapılan: tekosis - 23 Mart 2017, 00:14:02
cihazın ilk açılışında oluşan dalgalanmalar, parazitlerle ilgili bir problem gibi duruyor. lcd nin en pinini mcu ya bağlayıp işlemci ilk çalıştığı anda ekranı disable yapıp ~1 saniye sonra enable yapıp lcd'yi devreye alırsanız probleminiz hallolur.


Arkadaslar Sistemim de parazit olması veya dalgalanma olayı yok denebilir osilaskop ile ölçtügümde herhangi bi dalgalanma görmüyorum.

D6 pinine pull-up yaptım yine aynı sorun oldu

en pinini delay ile sonra da aktif ettim yine olmadı

Reset bir iki kere basınca bozuk ekran yerine normal ekran geliyor ama gerilimi kapatıp açtıgımda tekrar bozulma oluyor.


(https://s28.postimg.cc/4spebj6op/IMG_2191.jpg) (https://postimg.cc/image/4spebj6op/)

(https://s1.postimg.cc/k5wf4oykr/IMG_2192.jpg) (https://postimg.cc/image/k5wf4oykr/)
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: vitruvius - 23 Mart 2017, 12:28:45
Kodunu paylaşır mısın?
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: ademtosun58 - 23 Mart 2017, 12:32:11
Alıntı yapılan: vitruvius - 23 Mart 2017, 12:28:45
Kodunu paylaşır mısın?

Şöyle bir şey farkettim avometre ile ölçüm yaparken prob u mclr bacağına değdirdigimde ekran düzeliyor .

Mclr bacağındaki bağlantım ise 10 k direnç ile giriyorum ve buton ile toprağa çekiyor.

Acaba araya ufak bi kapasite eklemesimi yapayım
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: mehmet - 23 Mart 2017, 13:56:49
10K drenci düşürebilirsin. 1K * 2.2K civarı. Buton arasına da
100nF kondansatör olabilir.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: vitruvius - 23 Mart 2017, 13:59:53
Devre şemanı da bir paylaş en iyisi.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: ademtosun58 - 23 Mart 2017, 14:17:59
Alıntı yapılan: vitruvius - 23 Mart 2017, 13:59:53
Devre şemanı da bir paylaş en iyisi.


Lcd 4 bit kullanıyorum

RS->D1
En->D0
D4->D4
D5->D5
D6->D6
D7->D7

şeklinde bağlı

void ToggleEpinOfLCD(void)
{
LCD_E = 1;                // Give a pulse on E pin
__delay_us(E_Delay);      // so that LCD can latch the
LCD_E = 0;                // data from data bus
__delay_us(E_Delay);
}


void WriteCommandToLCD(unsigned char Command) 
{
LCD_RS = 0;   // It is a command

PORTD &= 0x0F;   // Make Data pins zero
PORTD |= (Command&0xF0);  // Write Upper nibble of data
ToggleEpinOfLCD();   // Give pulse on E pin

PORTD &= 0x0F;   // Make Data pins zero
PORTD |= ((Command<<4)&0xF0); // Write Lower nibble of data
ToggleEpinOfLCD();   // Give pulse on E pin
}


void WriteDataToLCD(char LCDChar) 
{
LCD_RS = 1;   // It is data

PORTD &= 0x0F;   // Make Data pins zero
PORTD |= (LCDChar&0xF0);  // Write Upper nibble of data
ToggleEpinOfLCD();   // Give pulse on E pin

PORTD &= 0x0F;   // Make Data pins zero
PORTD |= ((LCDChar<<4)&0xF0); // Write Lower nibble of data
ToggleEpinOfLCD();   // Give pulse on E pin
}


void InitLCD(void)
{
// Firstly make all pins output
LCD_E  = 0;   // E  = 0
LCD_RS  = 0;   // RS = 0
LCD_Data_Bus_D4 = 0;  // Data bus = 0
LCD_Data_Bus_D5 = 0;  // Data bus = 0
LCD_Data_Bus_D6 = 0;  // Data bus = 0
LCD_Data_Bus_D7 = 0;  // Data bus = 0
LCD_E_Dir    = 0;   // Make Output
LCD_RS_Dir    = 0;   // Make Output
LCD_Data_Bus_Dir_D4  = 0;   // Make Output
LCD_Data_Bus_Dir_D5  = 0;   // Make Output
LCD_Data_Bus_Dir_D6  = 0;   // Make Output
LCD_Data_Bus_Dir_D7  = 0;   // Make Output

  ///////////////// Reset process from datasheet //////////////
   __delay_ms(40);
   
PORTD &= 0x0F;   // Make Data pins zero
PORTD |= 0x30;   // Write 0x3 value on data bus
ToggleEpinOfLCD();   // Give pulse on E pin

   __delay_ms(6);
   
PORTD &= 0x0F;   // Make Data pins zero
PORTD |= 0x30;   // Write 0x3 value on data bus
ToggleEpinOfLCD();   // Give pulse on E pin

   __delay_us(300);
   
PORTD &= 0x0F;   // Make Data pins zero
PORTD |= 0x30;   // Write 0x3 value on data bus
ToggleEpinOfLCD();   // Give pulse on E pin

   __delay_ms(2);
   
PORTD &= 0x0F;   // Make Data pins zero
PORTD |= 0x20;   // Write 0x2 value on data bus
ToggleEpinOfLCD();   // Give pulse on E pin

__delay_ms(2);
  /////////////// Reset Process End ////////////////
WriteCommandToLCD(0x28);    //function set
WriteCommandToLCD(0x0c);    //display on,cursor off,blink off
WriteCommandToLCD(0x01);    //clear display
WriteCommandToLCD(0x06);    //entry mode, set increment
    WriteCommandToLCD(0x80);
}


void WriteStringToLCD(const char *s)
{
while(*s)
WriteDataToLCD(*s++);   // print first character on LCD
}


void ClearLCDScreen(void)       // Clear the Screen and return cursor to zero position
{
WriteCommandToLCD(0x01);    // Clear the screen
__delay_ms(2);              // Delay for cursor to return at zero position
}

(https://s9.postimg.cc/kc0gwfz2j/Ads_z2.png) (https://postimg.cc/image/kc0gwfz2j/)
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: Hittman - 23 Mart 2017, 15:43:19
Problem şundan kaynaklanıyor. Mclr bacağına bağladığın butona bastığın zaman mikro saniyeler mertebesinde ark meydana geliyor. Bu arkta devrede kararsızlık oluşturuyor ve mikroişlemci butona basılıp basılmadığını ayırt edemiyor. Bunu aşmak için genelde programda rest butonuna basıldığında bir kaç mikro saniye gecikme vererek aşılabilir. Fakat bunu denemeden önce mclr a direk direnç bağlayarak deneyin önce. Yani butonu iptal edip deneyin.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: Hittman - 23 Mart 2017, 15:55:09
Bu iki sitede çözüme dair örnekler verilmiş. Kontrol ediniz.


http://yasintuncel.com/elektronikadina/butonda-olusan-arka-cozum.html (http://yasintuncel.com/elektronikadina/butonda-olusan-arka-cozum.html)


https://elektrokod.wordpress.com/2013/11/18/buton-kontrolu/ (https://elektrokod.wordpress.com/2013/11/18/buton-kontrolu/)
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: pwm.c - 23 Mart 2017, 18:50:02
öncelikle program başına ve lcd_init(); fonksiyonundan sonra bir miktar gecikme koy.
olmadıysa ccs'nin kendi bünyesindeki lcd.c kütübhanesini kullan ancak rw bacağını ilave etmen gerekiyor.
lcd yazma gecikmelerinde oynama yap. bazı lcd çalışma hızları farklı oluyor.
butonları pull-down bağlamışın. bunların hepsini pull-up olarak değiştir ve programı onagöre yeniden düzenle yada pull-down ile ısrarcıysan dirençleri 1k altında düşük değerli kullan.
birde, 877 ve 877a farkına dikkat et. bence hiç kullanma. çok eski ve pahalı malzeme. ayrıca piyasada sahteleri çok fazla. bunların çoğu sorunlu çalışıyor.
birde, devrede niye lm35 kullandın? bu şekilde negatif sıcaklığı ölçemezsin.
son olarak, ccs c versiyonun eski ise hemen güncelle. forumda linkleri var.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: erdogan_82 - 24 Mart 2017, 01:51:56
Arkadaşım senin lcd nin tek sorunu senin Pic Kristalinde sorun var. MCLR ucuna dokunca düzeliyor diyorsun. Kristali değiştir 100 de 90 düzelcektir.
Başlık: Ynt: Pic16f877a ilk Çalışmada LCD bozuk karakter sorunu.
Gönderen: ademtosun58 - 28 Mart 2017, 09:08:42
Alıntı yapılan: pwm.c - 23 Mart 2017, 18:50:02
öncelikle program başına ve lcd_init(); fonksiyonundan sonra bir miktar gecikme koy.
olmadıysa ccs'nin kendi bünyesindeki lcd.c kütübhanesini kullan ancak rw bacağını ilave etmen gerekiyor.
lcd yazma gecikmelerinde oynama yap. bazı lcd çalışma hızları farklı oluyor.
butonları pull-down bağlamışın. bunların hepsini pull-up olarak değiştir ve programı onagöre yeniden düzenle yada pull-down ile ısrarcıysan dirençleri 1k altında düşük değerli kullan.
birde, 877 ve 877a farkına dikkat et. bence hiç kullanma. çok eski ve pahalı malzeme. ayrıca piyasada sahteleri çok fazla. bunların çoğu sorunlu çalışıyor.
birde, devrede niye lm35 kullandın? bu şekilde negatif sıcaklığı ölçemezsin.
son olarak, ccs c versiyonun eski ise hemen güncelle. forumda linkleri var.


Hocam CCs kullanmıyorum Mplab kullanıyorum o yüzden  lcd.h kütüüphanesini kendin oluşturuyorsun.Pic 16f877a orijinal ürün çalıştıgım firma köşe başı malzemecileri ile çalışmıyor. Lm35 sistemimdeki sensörlerden bir tanesi, Telemetri sistemi oluşturuyorum onun için kullanıyorum. Ayrıyeten sorunu çözdüm regülatör devresinin pic ile bağlantısı olan kısma araya bi switch koydum ilk başta gerilimi veriyorum sonra switchi açtıgımda sistem düzeliyor.

Forumda Yanıt Veren yol gösteren tüm abilerime kardeşlerime hocalarıma teşekkür ederim . İyi günler