20mhz 16f877A ccs ve 2x16lcd

Başlatan muhittin_kaplan, 23 Ağustos 2010, 16:23:38

muhittin_kaplan

Herzaman yaptığım (genelde 4 Mhz) 2x16 lcd ile çalışmam gerekti. breadboard üzereine kuuracağım deneyi hazırladım. değerleri görmek için lcd kullanmak istedim. ama nafile 2 adet lcd denedim. pic in sağlamlığını led programı ile denedim. 20mhz de lcd lerde problem oluyor diye bir konu hatırlıyorum. neden olabilir LCD de değer göremiyorum.

ferdem

LCD.C kütüphanesindeki beklemeler 20MHz de kısa kalıyor, delay_cycles(1) yerine delay_cycles(5) veya delay_cycles(10) yazıp deneyebilirsiniz. İyi çalışmalar.

stlg

Sisteminiz 4 mhz ile calısıyormu ?
ALLAHA EMANET OLUNUZ Hoştur bana senden gelen,  Ya gonca gül yahut diken,  Ya kaftandır yahut kefen,  Kereminde hoş lütfunda hoş.

acemi2010

Alıntı yapılan: ferdem - 23 Ağustos 2010, 16:35:19
LCD.C kütüphanesindeki beklemeler 20MHz de kısa kalıyor, delay_cycles(1) yerine delay_cycles(5) veya delay_cycles(10) yazıp deneyebilirsiniz. İyi çalışmalar.

+1

tayyar

Zamanlamalarla ilgili bir problem olması gerekli diye hatırlıyorum. zamanında pic basic yazarken 20mhz ile lcd sürmek istemiştim ozmanlar bayağı bir tırmalatmıştı bana. sonrasında Ete hoca basicte 1 satırlık bir kod ekletmişti ve işin içinden çıkartmıştı beni.

main.h içerisindeki kristal ile ilgili satıra dikkat etmek gerekli sanırım. zamanında sütten ağzım yandığı için ccs de hiç denemedim 20mhz ve lcd ikilisini.

Ferdem'in açıklaması mantıklı geldi denemek lazım.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

muhittin_kaplan

CCS de de Proton da da Durum aynı, Yarın 4mhz ile tekrar deneyeceğim.
Ayrıca Ferdem in önerisini 20Mhz için yapacağım.

radres

CCS C'de 20Mhz'de LCD.c dosyası normal şekilde çalışıyor. Kullanmıştım. Kodlarının en azından başını yani temel kurulum kısımlarını gönderirsen belki varsa hatayı görebiliriz.

muhittin_kaplan

Kodlarda bişey yok.
her iki dilde de A değişkenini LCD de saydırmaya çalıştım. CCS de wizardı kullandım.

radres

Wizardda ayarları doğru yaptıysan sorun olacağını sanmıyorum. Ama dediğim gibi kodları görürsem daha iyi yardımcı olabilirim. Belki LCD'ye saydırıp yazdırdığın sayılar için aralarında koyduğun bekleme sürelerinde de sorun olabilir. Çok hızlı ikinci üçüncü sayıyı yazdırıyorsan (bekleme için cycle kullandıysan) belki sorun yaratıyordur. Yinede basitçe kodu gönderirsen bende derleme yapıp senin için bir denerim.

muhittin_kaplan

#include "C:\Documents and Settings\Muhittin KAPLAN\Belgelerim\ccs projeler\MyLcd\main.h"
#include <lcd.c>
#define use_portd_lcd true
void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   int8 a=0;
   lcd_init();
   // TODO: USER CODE!!
   lcd_gotoxy(1,1);
   
   for (a=1;a<=0xff;++a)
   {
   	printf(LCD_PUTC,"\fn=%u",a);
   	Delay_Ms(200);
   }
}


Gözden Kaçırdığım Bişeymi Var
ISIS de çalışıyor Gercek Devrede Problem var.

radres

main.h dosyasındaki sigorta ve osilatör ayarları gibi temel başlangıç ayarları için kullandığın komutları gönderebilirmisin? Bir bakayım. Verdiğin kodda şimdilik bir hata göremedim.

muhittin_kaplan

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                 	//No Watch Dog Timer
#FUSES HS                    	//High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                 	//No Power Up Timer
#FUSES NOPROTECT             	//Code not protected from reading
#FUSES NODEBUG               	//No Debug mode for ICD
#FUSES NOBROWNOUT            	//No brownout reset
#FUSES NOLVP                 	//No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                 	//No EE protection
#FUSES NOWRT                 	//Program memory not write protected
#FUSES RESERVED              	//Used to set the reserved FUSE bits

#use delay(clock=20000000)

radres

Valla kodlarında bir yanlışlık göremedim. Sadece

#include <lcd.c>
#define use_portd_lcd true

komutlarında lcd.c dosyasını ekledikten sonra LCD'nin D portuna bağlanacağını belirtmişsin. #define use_portd_lcd true komutunu lcd.c dosyasını eklemeden önce yazman gerekiyor. Zaten normal şartlarda aksini belirtmedikçe D portuna bağlı kabul edildiği için bir sorun çıkmamış. Ama başka port tanımlamada yukarıda yaptığın gibi yaparsan sorun çıkar. Bunu senin sorunun için değilde aklında bulunsun diye söyledim. Şu an gerçek ortamda deneme imkanım olmadığı için deneyemiyorum. Ama dediğim gibi ben CCS C v4.3X sürümünde 20Mhz'de LCD.c dosyasını kullanarak B portuna bağlı LCD'yi gerçek ortamda aynı şekilde çalıştırdım. Ama yeni sürüm CCS'de (CCS C 4.107 gibi) bunu denemedim. Belki diğer arkadaşların dediği gibi LCD dosyasındaki cycle komutlarındaki değerleri arttırarak sorun çözülüyordur. Gerçek ortamda yarın falan deneme yapabilirsem daha net bilgi veririm sana. Şimdilik aklıma başka bir şey gelmedi.

muhittin_kaplan

bugün denedim, elimde boardarda kullandığım iki adet 2x16 lcd de bozukmuş. ama yinede 20mhz de ccs de çalıştıramadım.

zamzam23

bende suan 18f452  20mhz ıle lcd suruyorum problem yasamadım. belkı lcd kontrast ayarında bısıler vardır lcd calısıyordur ama sen göremıyorsundur.Vo ucuna pot baglayıp ayar yapmayı deneyın.benım lcd de 5 nolu bacak vo.