Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: sifirzero - 29 Kasım 2017, 22:15:17

Başlık: lcd sorunu
Gönderen: sifirzero - 29 Kasım 2017, 22:15:17
merhaba arkadaşlar basit lcd ile termometre devresi yapıyorum simülede çalışıyor uygulamada çalışmıyor.netede baktım ama olmadı.
#include<16f877a.h>
#device ADC=10
//#fuses HS
//#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define use_portb_lcd TRUE
#include<flex_lcd.c>

unsigned long int okunan;
float gerilim;

void main()
{

   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   
   set_tris_a(0b000000001);
   set_tris_b(0x00);
   
   output_a(0x01);
   output_b(0x00);
   
   setup_adc(adc_clock_div_32);
   setup_adc_ports(ALL_ANALOG);
   
   lcd_init();
   
   while(1)
   {
   set_adc_channel(0);
   delay_us(20);
   okunan = read_adc();
   gerilim = okunan * 0.00488 * 100;
   
   //printf(lcd_putc,"\f%lu",okunan/2);
   printf(lcd_putc,"\f serkan cetin");
   printf(lcd_putc,"\nDerece=%fc",gerilim);
   delay_ms(1000);
   }
}
   
   






(https://s2.postimg.cc/62qngvy1h/20171129_220916.jpg) (https://postimg.cc/image/62qngvy1h/)

(https://s2.postimg.cc/e88pf5wlx/termotere.png) (https://postimg.cc/image/e88pf5wlx/)
Başlık: Ynt: lcd sorunu
Gönderen: mg1980 - 29 Kasım 2017, 22:50:16
Lcd kontrast ayarını yapsanız...
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 29 Kasım 2017, 22:59:21
Lcd kontrast yaptim.lcd.c kutuphanesi denedim. Lcd kablolari degistirdim.
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 29 Kasım 2017, 22:59:54
Geecekte calistirabilen varmi
Başlık: Ynt: lcd sorunu
Gönderen: esensoy - 29 Kasım 2017, 23:07:12
resimde tam görünmüyor ama kırmızı kablo potun ortasına değil de yan bacağa mı bağlı?


Herneyse doğrusu:
pot orta bacak LCD pin3 yani vdd ile rs arasındakine,
kalan iki bacaktan biri vss diğer vdd ye,
ekran çalışacak ta kontrastı fazla gibi görünüyor
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 29 Kasım 2017, 23:08:53
Kontrasti tam acsamda az az kissamda hicbir yazi cikmiyor
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 29 Kasım 2017, 23:09:37
Pot 10k pot uclari + v0 - ye bagli
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 29 Kasım 2017, 23:10:29
Gerçekte uygulayip calistiran varmi
Başlık: Ynt: lcd sorunu
Gönderen: esensoy - 30 Kasım 2017, 09:01:57
Uygulayıp çalıştıran sayısı = forum üye sayısı - 1 dir heralde,


Ya bordun bozuk ya kablolaman bozuk,
Belki de işlemcinin osilatör katında sorun vardır,
Proteus osilator bozuk olsa bile çalışabiliyor,
Başlık: Ynt: lcd sorunu
Gönderen: Teğmen - 30 Kasım 2017, 09:09:20
@serkancetin LCD soketinin lehimlerini tam yaptın mı ?Onlarda eksiklik olursa da veri aktarılamıyor.?


Ek Bilgi : Resimden tam anlaşılmıyor güç kaynağın yeterli olmayabilir.Ayrı ayrı besle ama sorun pek bu değil gibi osilatöre bak birde lcd bağlantılarına bak tekrar.En çok o karıştırılıyor.
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 30 Kasım 2017, 09:09:39
Hepsini denedim ustam
Başlık: Ynt: lcd sorunu
Gönderen: Teğmen - 30 Kasım 2017, 09:13:54
Güç kaynağından kaç V veriyorsun
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 30 Kasım 2017, 09:15:09
5 volt resimde gorunuyor.
Başlık: Ynt: lcd sorunu
Gönderen: esensoy - 30 Kasım 2017, 09:19:00
ben boyle durumlarda şunu yaparım,
bağlantıya hiç dokunmam,
main fonksiyonu başlarında, giriş çıkışlar tanımlandıktan sonra bir while döngüsü yazarım;
pin durumlarını gözlerim, yalnız işlemciden değil, lcd üzerinden ölç,
output_high ve low komutlarını kendin düzenlersin,


while(1){
output_high(rs rw e d4 d3 d2 d1);
delay_ms(1000);

output_low(rs rw e d4 d3 d2 d1);
delay_ms(1000);
}



Başlık: Ynt: lcd sorunu
Gönderen: Teğmen - 30 Kasım 2017, 09:22:31
5V olduğunu göremedim resimde dikkat etmemişim.

RS ve E pini nereye bağlanıyor onu da seçemedim.
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 30 Kasım 2017, 09:22:43
@esensoy dedigini yapayim. Nette arasturdim lcd.c icinde kod degisikligi yapmis cogu kisi onu denicem eve gidince
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 30 Kasım 2017, 09:24:22
Proteus sekildeki gibi bagladim ustam
Başlık: Ynt: lcd sorunu
Gönderen: esensoy - 30 Kasım 2017, 09:29:22
Al sana çalışan kod:
//coder: PCM Programmer
#define LCD_DB4 PIN_a1
#define LCD_DB5 PIN_a2
#define LCD_DB6 PIN_a3
#define LCD_DB7 PIN_a5


#define LCD_E PIN_e0
#define LCD_RW PIN_e1
#define LCD_RS PIN_e2


#define LCD_CGRAM_ADDR 0x40
#define LCD_DDRAM_ADDR 0x80


#define USE_LCD_RW 1


#define lcd_type 2


#define lcd_line_two 0x40


#define LCD_CHAR_1 0x01
#define LCD_CHAR_2 0x02
#define LCD_CHAR_3 0x03
#define LCD_CHAR_4 0x04
#define LCD_CHAR_5 0x05
#define LCD_CHAR_6 0x06
#define LCD_CHAR_7 0x07
#define LCD_CHAR_8 0x08


int8 const LCD_INIT_STRING[4] =
{0x20 | (lcd_type << 2),0xc,1,6};


void lcd_send_nibble(int8 nibble)
{
output_bit(LCD_DB4, !!(nibble & 1));
output_bit(LCD_DB5, !!(nibble & 2));
output_bit(LCD_DB6, !!(nibble & 4));
output_bit(LCD_DB7, !!(nibble & 8));
delay_cycles(1);


output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}


#ifdef USE_LCD_RW


int8 lcd_read_nibble(void)
{
int8 retval;


#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3
retval = 0;


output_high(LCD_E);
delay_cycles(1);


retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);


output_low(LCD_E);
return(retval);
}


#endif


#ifdef USE_LCD_RW


int8 lcd_read_byte(void)
{
int8 low;
int8 high;


output_high(LCD_RW);
delay_cycles(1);
high = lcd_read_nibble();
low = lcd_read_nibble();
return( (high<<4) | low);
}


#endif


void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);
#ifdef USE_LCD_RW


while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif


if(address)
output_high(LCD_RS);
else
output_low(LCD_RS);
delay_cycles(1);


#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif


output_low(LCD_E);
lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}


void lcd_setcursor_vb(short visible, short blink) {
lcd_send_byte(0, 0xC|(visible<<1)|blink);
}


void lcd_init(void)
{
int8 i;


output_low(LCD_RS);


#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif


output_low(LCD_E);
delay_ms(15);


for(i=0 ;i < 3; i++)
{
lcd_send_nibble(0x03);
delay_ms(5);
}


lcd_send_nibble(0x02);
for(i=0; i < sizeof(LCD_INIT_STRING); i++)
{
lcd_send_byte(0, LCD_INIT_STRING[i]);


#ifndef USE_LCD_RW
delay_ms(5);
#endif
}
}


void lcd_gotoxy(int8 x, int8 y)
{
int8 address;
if(y != 1)
address = lcd_line_two;
else
address=0;
address += x-1;
lcd_send_byte(0, 0x80 | address);
}


void lcd_putc(char c)
{
switch(c)
{
case '\f':
lcd_send_byte(0,1);delay_ms(2);break;
case '\n':lcd_gotoxy(1,2);break;
case '\b':lcd_send_byte(0,0x10);break;


default:
lcd_send_byte(1,c);break;
}


}


#ifdef USE_LCD_RW


char lcd_getc(int8 x, int8 y)
{


char value;


lcd_gotoxy(x,y);
while(bit_test(lcd_read_byte(),7));
output_high(LCD_RS);
value = lcd_read_byte();


output_low(lcd_RS);
return(value);
}


#endif
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 30 Kasım 2017, 09:33:08
@esensoy cok saolasin aradigim kod bu idi. Nettende bunu bulmustum.senin gonderdigini denicem. Çok tesekkurler
Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 30 Kasım 2017, 20:54:27
ustam lcd.c senin verdiğin bilgilerle ölçüşüyor. kabloları tekrar taktım. osilatöre 22p taktım mclr ucuna 4.7k taktım. çalışan hex kodu attım çaıştı. kendi devremde çalıştı. sorun çözüldü. ilgilenenlere çok teşekkürler
Başlık: Ynt: lcd sorunu
Gönderen: fide - 09 Aralık 2017, 23:36:12
Merhaba. Öncelikle lcd yazımında \n çalışmıyor diye biliyorum. Lcd gotoxy ile satırları seçin. Lcdye yazmamasının sebeni bu olabilir. Lcd clear ile başta ekranı silin.


Diğer bir konu lcd kütüphanesinde değişiklik yapın. Her uygulamada komple a portu, c portu müsait olmayabilir. Bu yüzden lcd pinlerinin teker teker tanımlandığı bir kütüphane bulun. Ccs içindeki tanımlamada bu ayarlanabiliyor.


Delay_us(20) çok az. Milisaniye olsa neyse. Mikrosaniye olunca adc çevrimi için çok kısa.

Başlık: Ynt: lcd sorunu
Gönderen: konusan - 12 Aralık 2017, 09:06:11
öncelikle kullandığın 1-16 pinlerinin LCD sıralamasına dikkat etmelisin
LCD nin kontrast ayarı için 1K kullanıyorum
15.pin=+5V
16.pin= GND

yaptığın RS,RW,E, DATA bağlantı uçlarını doğru bağladığına eminsn

ya kablo ya da board unda sıkıntı vardır.

Başlık: Ynt: lcd sorunu
Gönderen: sifirzero - 12 Aralık 2017, 09:08:05
Sorun çözüldü yazmıştım
Başlık: Ynt: lcd sorunu
Gönderen: Teğmen - 12 Aralık 2017, 09:23:47
Alıntı yapılan: serkancetin - 12 Aralık 2017, 09:08:05
Sorun çözüldü yazmıştım
Sorunun çözülmüş olması güzel.Fakat ilk attığın resimde MCLR 1.pin yani buraya besleme vermek gerekir sonradan bunu da yapmışın sanırım. Buraya birde reset devresi yaparsan kontrolördeki program çalışmaz veya herhangi bir sorun ile karşılaşırsa oraya tasarladığın reset devresi ile kontrolöre reset atıp yeniden başlatmış olursun.Nete mikrodenetleyici reset devreleri yaz .Basit bir yapı eğer sorun olursa burdan kafana takılanları sor devam edilir.


İyi Çalışmalar


Edit: Yeni nesil işllemcilerin kendi içerisinde kodun elektriksel güvenliği için reset devresi oluyor sanırım ama yinede siz bunları öğrene öğrene ilerleyin bence.