2x16 Lcd'yi 74hc595 ile sürme

Başlatan makine_terbiyecisi, 04 Şubat 2017, 17:39:44

makine_terbiyecisi

Merhaba arkadaşlar,
Lcdyi proteus simülasyonunda çalıştırabiliyorum. Ama gerçek ortamda saçma sapan karakterler ekrana geliyor.



yararlandığım site: http://ccspicc.blogspot.com.tr/2016/08/interfacing-pic16f877a-3-wire-serial-lcd-74hc595-ccs.html

74hc595 entegresini bağlarken neyi gözden kaçırdığımı bulamadım. Datasheeti kontrol ettim yine de birşey bulamadım.

# ÖĞRENELİM, ÖĞRETELİM #

sifirzero

ustam oradaki devrelerden birsini simülasyondaa denedim çalıştıramadım.başka birşeylerde yapıyor olabilir.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

makine_terbiyecisi

Alıntı yapılan: serkancetin - 04 Şubat 2017, 18:02:30
ustam oradaki devrelerden birsini simülasyondaa denedim çalıştıramadım.başka birşeylerde yapıyor olabilir.

@serkancetin  sitedeki 74hc595 ile lcd kontrol devresini simülasyonda çalıştırdım. Resmini de attım. Anlamadığım simülasyonda çalıştığı halde gerçek devrede çalışmamasıdır.
# ÖĞRENELİM, ÖĞRETELİM #

ibra

Benim dikkatimi çeken şey ise lcd input pinlerini gnd yapılmış, fotoda ise boşta bırakılmış..
A_C5h5n5

makine_terbiyecisi

Arkadaşlar, 74hc595 ile 2x16 LCD uygulaması yapmış kimse yok mu koca forumda  :o
# ÖĞRENELİM, ÖĞRETELİM #

94220039

Ben Yapmışım.  :)
Vermiş olduğun devreden farklı olarak. 8 no'lu ucu gnd'ye vermişim. RS'yi 15 no'lu pin'e değil 7 no'lu pine bağlamışım. 11 ve 12 no'lu pinleri, PIC'in ayrı bacaklarına bağlamışım. Birde programı asm'de yazmışım.

makine_terbiyecisi

Alıntı yapılan: 94220039 - 04 Şubat 2017, 21:09:53
Ben Yapmışım.  :)
Vermiş olduğun devreden farklı olarak. 8 no'lu ucu gnd'ye vermişim. RS'yi 15 no'lu pin'e değil 7 no'lu pine bağlamışım. 11 ve 12 no'lu pinleri, PIC'in ayrı bacaklarına bağlamışım. Birde programı asm'de yazmışım.

:D
Pinlerin durumu yazılan koda göre değişir.
Kodu inceledim, her şey yerli yerinde. Kodda bir hata göremedim.
Bağlantı hatalı ise nasıl olur da simülasyonda çalışır ?
# ÖĞRENELİM, ÖĞRETELİM #

Murat Mert

mert07

94220039

Alıntı yapılan: makine_terbiyecisi - 04 Şubat 2017, 21:57:37
:D
Pinlerin durumu yazılan koda göre değişir.
Kodu inceledim, her şey yerli yerinde. Kodda bir hata göremedim.
Bağlantı hatalı ise nasıl olur da simülasyonda çalışır ?


8 no'lu pin'i Gnd'ye bağlamanı öneririm.




pwm.c

bazı LCD ekranların veri yazma hızları farklı oluyor. yüksek hızlarda sorun çıkarabilirler. programdaki gecikme sürelerinde biraz oynama yap.
birde örnek verdiğin projede 16F877A kullanılmış ancak sen 18F4431 ile yapmışın. proteus bazı donanım ayarlarını gözardı edebilir.

eğer istersen sana başka bir örnek uygulama vereyim. belki işini görür. devre 74hc164 ile yapılmıştı ancak örnek olsun diye 74HC595 uyarlamsınıda şemaya ekledim. ikisi birlikte çalışıyor. elinde hangisi varsa onu kullanabilirsin.

devre şeması:


ccs c kodları:
#include <12f683.h> 
#FUSES INTRC_IO,NOWDT,NOMCLR,NOCPD,NOPROTECT,NOBROWNOUT
#use delay(Internal=8M)  

#define LCD_E     PIN_A1
#define LCD_CK    PIN_A4   
#define LCD_DAT   PIN_A5
#include <lcd_3_pin.c>
int16 tarih;
void main(){ 
delay_ms(100);
            set_tris_a(0b00001000);
            output_a(0x00);
            setup_oscillator(OSC_8MHZ);   
            setup_adc_ports(NO_ANALOGS|VSS_VDD);
            setup_adc(ADC_OFF);
            setup_comparator(NC_NC_NC_NC);
            setup_vref(FALSE);
            tarih=2017;
            lcd_init(); 

while(TRUE){

         printf(lcd_putc,"\f PWM.C \n 3 wire LCD ");
         delay_ms(1000);
         printf(lcd_putc,"\f Picproje \n %Lu ",tarih);
         delay_ms(1000);

         
}
}


lcd_3_pin.c kütübhanesi:
//#include <lcd_3_pin.c>

//#define LCD_E     PIN_A0
//#define LCD_CK    PIN_A1   
//#define LCD_DAT   PIN_A2 

//========================================
int RS_bit;
#define lcd_type 2        // 0=5×7, 1=5×10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line 

 
int8 const LCD_INIT_STRING[4] =
{
 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5×8 dots
 0xc,                    // Display on
 1,                      // Clear display
 6                       // Increment cursor
 };

 
//————————————-
void lcd_send_nibble(int8 nibble, int rs_bit)
{

int x;
if(RS_bit==1)
   nibble=nibble|0x10;

for(x=0;x<5;x++){
         output_bit(LCD_DAT,shift_right(&nibble,1,0));
         delay_cycles(1);
         output_low(LCD_CK);
         delay_us(1);
         output_high(LCD_CK);}

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

//———————————–
//—————————————-
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
//output_low(LCD_RS);
RS_bit=0;
delay_us(100);

 
if(address)
   //output_high(LCD_RS);
   RS_bit=1;
else
   //output_low(LCD_RS);
   RS_bit=0;

 delay_cycles(1);

 
output_low(LCD_E);

lcd_send_nibble(n >> 4,RS_bit);
lcd_send_nibble(n & 0xf,RS_bit);
}

//—————————-
void lcd_init(void)
{
int8 i;

//output_low(LCD_RS);
RS_bit=0;

output_low(LCD_E);

delay_ms(20);

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

lcd_send_nibble(0x02,RS_bit);

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

    delay_ms(5);

   }

}

//----------------------------

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':                //limpia pantalla
      lcd_send_byte(0,1);
      delay_ms(8);
      break;

    case '\n':                //cambio de linea
       lcd_gotoxy(1,2);
       break;

    case '\b':                //retrocede 1 caracter
       lcd_send_byte(0,0x10);
       break;

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

//------------------------------

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


hex dosyası:
:1000000001308A00532900000A108A100A11820761
:1000100028340C34013406340A108A100A1182077D
:100020000C342034503457344D342E34433420347F
:100030000A342034333420347734693472346534EC
:1000400020344C3443344434203400340A108A10B1
:100050000A1182070C34203450346934633470340C
:1000600072346F346A34653420340A3420342534D1
:100070004C347534203400343030840000080319C7
:100080004E280230A100A001A00B4428A10B432858
:100090009730A000A00B4A28800B41280800380B9D
:1000A00052283716B9013908043C031C6B28031089
:1000B000B70C03185D2885125E28851683168512F5
:1000C000000005128312051265288316051283129B
:1000D0000516B90A532883168510831285147028D3
:1000E000712883168510831285100800A401423000
:1000F000A000A00B79280000B40803198228013061
:10010000A4008328A40100008316851083128510A3
:10011000350EB6000F30B6053608B7002408B80013
:100120004F2035080F39B600B7002408B8004F201B
:100130000800A40183168510831285101430B000C6
:100140003C20A7012708023C031CB0280330B7005D
:100150002408B8004F200530B0003C20A70AA22890
:100160000230B7002408B8004F20A7012708033C3D
:10017000031CC62827080420A800B4012808B500DD
:1001800076200530B0003C20A70AB62891292F0818
:100190000C3A0319D228063A0319DA28023A03194D
:1001A000F028F528B4010130B50076200830B00001
:1001B0003C20FA280130B0000230B100310BE128B8
:1001C000E4284030B200E528B20101303002B20725
:1001D00032088038B300B4013308B5007620FA281D
:1001E000B4011030B5007620FA280130B4002F0891
:1001F000B500762008000408AE00280EF038AA00EA
:10020000AA07E23EAB00323EAD0028080F39AB072B
:10021000AB07AD07E93EAC00AC07AC07270E0F39C2
:10022000AC07AD07AC0DAD0DAD09AD0D27080F390D
:10023000AD07AA0D0730A9000A30AD07AC03031CB7
:100240001D29AC07AB03031C2129AB07AA03031C20
:100250002529AA07A903031C29292930840007306E
:100260002E052E1384072D30040203192E170008C3
:10027000A000031D43292E1B43292E1A4F29AE1916
:10028000432920304629AE152E123030A007A80190
:100290000408A7002008AF00C72027088400840AAC
:1002A0002E1F3329B52903081F39830071308316A7
:1002B0008F0090010F0883121F1383161F109F10C9
:1002C0001F119F110730831299006430B0003C2049
:1002D00008308316850085018312850171308316ED
:1002E0008F0090010F0883121F1383161F109F1099
:1002F0001F119F1183121F100730990083160508E4
:10030000850006308312A000A00B84290000190884
:100310008C118316990107308312A600E130A500E5
:100320009928A70127080C20A70AA000AF00C72022
:1003300015302702031D92290430A700FA30B000BF
:100340003C20A70B9E29A70127082620A70AA0006A
:10035000AF00C7200D302702031DA42910308400F0
:100360002608A8002508A700FB282030AF00C720DA
:100370000430A700FA30B0003C20A70BBA2991291D
:02038000630018
:02400E00C43CB0
:00000001FF

_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

bigbey

Simulasyonda vac ve gns uçları bağlanmada dahi devre simüle olarak çalışır .Ancak gerçek devrede 16 nolu üç +5volta 8 nolu üç gns ye bağlanması gerekli 74hc595 entegresi için
TA6R

makine_terbiyecisi

Öncelikle yanıtlarınız için teşekkür ediyorum.
> Devre bağlantılarını datasheet okuyarak yaptım. ondan yana sıkıntı olmadığına eminim.

> Program 8MHz kristal baz alınarak yapılmış. Ben ise 25Mhz ile süreceğim. Dolayısıyla @pwm.c hocamın dediği gibi yazma hızından dolayı lcd tepki vermiyor olabilir. Kod içindeki bekleme süreleri ile oynamam gerekecek.
# ÖĞRENELİM, ÖĞRETELİM #