PIC16F877A LCD sorun

Başlatan hlale, 25 Kasım 2024, 19:19:08

hlale

Merhaba,

aşağıda yazılan kod proteus ortamında çalışıyor fakar fiziki devrede lcd çalışmıyor bu konuda yardımlarınızı rica etmekteyim.


@__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF

   include "MODEDEFS.BAS"
	 
	OPTION_REG.7=1
	 
	define OSC 4
	 
	ADCON1 = 7
	CMCON  = 7
	 
	'***********LCD Tanymlamalary***********
	 
	DEFINE LCD_DREG PORTB  'LCD data pinleri PORTBye ba?ly
	DEFINE LCD_DBIT 4      'LCD data bitleri hangi bitten ba?lyyor
	DEFINE LCD_EREG PORTB  'LCD enable pini hangi porta ba?ly
	DEFINE LCD_EBIT 3      'LCD enable biti hangi porta ba?ly
	DEFINE LCD_RWREG PORTB  'LCD RW baca?y hangi porta ba?ly
	DEFINE LCD_RWBIT 2      'LCD RW pini hangi bite ba?ly
	DEFINE LCD_RSREG PORTB  'LCD RS pini hangi porta ba?ly
	DEFINE LCD_RSBIT 1      'LCD RS pini hangi bite ba?ly
	DEFINE LCD_BITS 4      'LCD 4 bit ba?ly
	DEFINE LCD_LINES 2      'LCD kaç syradan olu?uyor
	PAUSE 200              '200 milisaniye bekleme yap
	 
	 
	 
	'***********Özel Karakter Tanymlamalary
	LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece Y?areti
	LCDOUT $FE,$48, 4, 14, 4, 4, 4, 4,14,0 'Y Harfi
	LCDOUT $FE,$50, 14, 17, 16, 16,16,17,14,4 'Ç Harfi
	LCDOUT $FE,$58, 14, 17, 16, 14,1, 17,14,4 '? Harfi
	 
	'***********Port Ayarlary***********
	    
	        
	    TRISA=%00101111
	    TRISB=0
	    TRISC=0
	    TRISD=1
	    TRISE=0
	    
	    
	    
	    PORTA=0
	    PORTB=0
	    PORTC=1
	    PORTD=0
	    PORTE=0
	  
	 
	'***********Sensör Tanymlamalary***********
	 
	Busy        VAR BIT        ' Busy Status-Bit
	HAM        VAR    WORD        ' Sensör HAM okuma de?eri
	ISI        VAR WORD        ' Hesaplanmy? ISI de?eri
	Float      VAR WORD        ' Holds remainder for + temp C display
	X          VAR WORD      
	ISARET_BITI  VAR HAM.Bit11  '  +/- sycaklyk Y?aret biti,  1 = olursa eksi sycaklyk
	EKSI_ISI  CON 1          ' Syfyr altynda isaret biti=1  oluyor kontrol için
	DERECE    CON 223        ' ° i?areti
	ISARET    VAR BYTE        '  ISI de?eri için  +/-  i?aret
	TEMP        VAR word      ' Div32 bit hesap için geçici de?i?ken
	SYMBOL COMM_PIN=PORTD.0    ' One-wire Data-Pin "DQ" PortB.0 da
	Set var byte
	SAYI var byte
	SAYI1 var byte
	SAYI2 var byte
	 
	'***********LCD yi Kullanyma Hazyr Hale Getir***********
	 
	LOW PORTB.2 'RW baca?y ekrana yazmaya imkan vermek için LOW yapyldy.
	set=40
	 
	lcdout $FE,1 
	PAUSE 250  ' LCD nin kullanyma hazyr hale gelebilmesi için gerekli süre
	lcdout $FE,1 
	 
	LCDOUT $FE,$80,"****TASARIM****"                
	pause 1500
	lcdout $FE,1
	pause 200  
	 
	'***********Program Ba?langycy***********
	 
	  Basla:
	  
	    high portc.1
	    high portc.2
	    high portc.3    
	      
	    gosub sensoroku
	    SAYI=250
	    SAYI1=200
	    
	    LCDOUT $FE,$C0, "SET : ",#set
	    PAUSE 500
	    
	    
	    if porta.1=0 or porta.0=0 then 
	    goto ayaryap
	    endif
	    
	        
	    if ISI=>set then
	    low porte.1          'motor
	    endif
	    if ISI<set-5 then
	    high porte.1
	    endif
	      
	    
	    IF ISI<=18  THEN
	    low porte.1
	    ENDIF
	    
	    IF ISI>=75  THEN
	    low porte.1
	    ENDIF  
	        
	    IF ISI>=15  THEN
	    high porte.0          'devir
	    ENDIF  
	    
	    if ISI<=12 then
	    low porte.0
	    endif
	    
	    IF ISI<=$4 THEN HIGH PORTE.0
	    
	    
	    IF porta.3=0 then
	    pause 100      
	    Gosub Fan
	    endif  
	    
	    IF porta.5=0 then
	    pause 100      
	    Gosub Yukleme
	    endif
	    
	    ;IF porta.4=0 then
	    ;pause 100      
	    ;Gosub dur
	    ;endif    
	        
	          
	          
	Goto Basla
	 
	'***********1. Sensörü Oku***********
	 
	SENSOROKU: 
	          OWOUT  Comm_Pin, 1, [$CC, $44]' ISI de?erini oku
	Bekle:
	          OWIN    Comm_Pin, 4, [Busy]    ' Busy de?erini oku
	          IF      Busy = 0 THEN Bekle    ' hala me?gulmü? , evet ise goto Bekle..!
	          OWOUT  Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
	          OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' Yki byte oku ve okumayy bitir.
	          GOSUB  Hesapla
	          RETURN
	    
	Hesapla:                ' Ham de?erden Santigrat derece hesaby
	 
	    
	    ISARET  = "+"
	    IF ISARET_BITI = EKSI_ISI THEN
	      ISARET  = "-"  
	      HAM=~HAM+2
	    ENDIF
	    ISI=HAM*10/16
	    FLOAT = ISI//10
	    ISI=ISI/10
	 
	    LCDOUT $FE,$80,"TEMP:",ISARET,DEC ISI,".",DEC1 (Float),Derece,"C " '2. satyrda ysy
	    RETURN
	    
	    
	    '*********** Ayarlama Yap *********
	 
	 
	ayaryap:
	 
	 
	    LCDOUT $FE,$80,"  SET & ENTRY  "                
	    LCDOUT $FE,$C0, "SET : ",#set,".0",0,"C "
	    
	    pause 75  
	    if set=90 then
	    else
	        if porta.0=0 then 
	        set=set+1
	        pause 100
	        endif
	    endif
	    
	    if porta.1=0 then 
	      set=set-1
	      IF SET=255 THEN SET=0
          pause 100   
	    endif    
	    
	    
	    if porta.2=0 then
	    LCDOUT $FE,$80,"  SET EDILDI  "
	    lcdout $FE,1
	    pause 1000
	    goto Basla
	    endif
	        
	    
	goto ayaryap
	    
	 
	 
	Fan:
	 
	    low porte.1  
	    LCDOUT $FE,1
	    LCDOUT $FE,$83,"MANUEL FAN"
	    lcdout $FE,$C0,"SURE = ",DEC SAYI
	    PAUSE 1000
	    SAYI=SAYI-1  
	    IF SAYI=0 OR PORTA.3=0 THEN
	      lcdout $FE,1 
	      PAUSE 250
	      return
	    else
	      GOTO FAN
	    ENDIF
	    
	    LCDOUT $FE,1
	    
	    return
	    
	Yukleme:
	 
	    LOW PORTE.0
	    LOW PORTE.1
	    high PORTE.2
	    LCDOUT $FE,$80, "    YUKLEME    "
	    LCDOUT $FE,$C0, "    YAPILIYOR  "
	    PAUSE 4000    
	    If porta.5=0 THEN
	       LCDOUT $FE,1
	       PAUSE 100
	       low PORTE.2 
	       return
	    else 
	       GOTO yukleme
	    ENDIF
	    
	;Dur:
	 
	    ;high porte.1  
	    ;LCDOUT $FE,1
	    ;LCDOUT $FE,$83,"STOP"
	    ;lcdout $FE,$C0,"SURE = ",DEC SAYI
	    ;PAUSE 1000
	    ;IF porta.0=1 THEN
	    ;PAUSE 250
	    ;GOTO Basla
	    ;ENDIF
	    
	    LCDOUT $FE,1
	    
	    return
      
      
      
     GOTO BASLA
      
     End

onurinci

Proteusta Clock frekansını yazdımı çalışır. sigortalarda X-TAL osc seçip 4 mhz kristal taktınızmı ?

birde bu işlemcide MCLR pinini mutlaka +5 VCC 'ye bir dirençle çekmek gerekiyor..

ete

#2
Öncelikle aşağıdaki linkte yazılı olanları bir gözden geçirin.
Simulasyonda çalışıpda fiziki olarak yapılıp çalışmayan devrelerde mutlaka Simulasyonun var saydığı birimlere bakmak gerekiyor. Linkte bu konulara açıklık getirilmiştir.

https://etepic.com/index.php/topic,1670.0.html

sorunu bulup devrenizi çalıştırdığınızda mutlaka sorun neymiş burada belirtin ki diğer arkadaşlara rehber olsun.

Bu arada programda bir kusur var. YUKLEME isimli etikete GOSUB ile gidiliyor ama oradan dönüşü GOTO BASLA komut satırı ile yapılıyor. Bu program çalıştıktan bir müddet sonra stack taşması hatasına sebep olur ve program kilitlenip kalır.
Hatayı düzeltmek için ya YUKLEME isimli etikete giderken GOTO ETIKET şeklinde gitmek yada oradan dönüşte GOTO BASLA yerine RETURN komutunu yazmak gerekir.


Ete


hlale

Başlangıç olarak proğram çalışıyor 30 sn sonra LCD 1.satır kare kare görünüyor.Proğram diğer tüm fonksiyonları yerine getiriyor. Sensör okuyor ve portlara bağlı mosfet ve transistörleri tetikliyor..

ete

#4
Sonradan stack taşması nedeni ile kilitleniyordur. Programda ve tanımlalarda hata yok zaten.
Bir şekilde programın çalışmasını durduruyor.
Ben yalnızca bir tanesini görebildim kusurun. Belki başkalarıda vardır.
Bu nedenle simulasyonda çalıştırıp olanbitene bir bakmak lazım. Simulasyon en azından stack taşmasınıda gözlemleyip söylüyor sana. İllaki stack taşması olacak diye bir kural yok ancak bunu yaratacak bir sebep var ortada. Başka kusurları da gözlemlemek gerekir ki buda epeyce bir araştırma gerektirebilir. Bize verdiğin yalnızca text şeklinde kod bununla bizim bir sonuca ulaşmamaız mümkün değil maalesef. İş sana düşüyor. Bir sürü ip ucu verdik bunları değerlendir.

Mesela bir tane daha gördüm. FAN isimli etikete bakarsan program bu etikete GOSUB ile geliyor ve her halukarda RETURN ile dönmeli. Etiketin en altında RETURN var ama bir iki satır üstünde şarta bağlı olarak GOTO BASLA bulunuyor bu yanlış ve hata işte. Burada da RETURN olmalı. GOSUB ile geldiğin yerden kesin olarak GOTO ile dönmemelisin. Şart ne olursa olsun.
Bu iki kusur programı bir müddet sonra kilitler. Anlaşılan Stack nedir bilmiyorsun yada biliyor ama önemini kavramamışsın.
STACK bir ara depo hafızasıdır. Program GOSUB ile bir yere gittiği zaman program ayrıldığı adresi (tekrar aynı yere dönebilsin diye) STACK içine atar.Bu hafızada son giren ilk çıkar prensibi uygulanır. Atılan bu adres bilgisi ilk RETURN komutu görüldüğünde geri alınır.
Ancak siz GOSUB ile gidip GOTO ile geri döndüğünüzde oradaki adresi kullanmamkış olursunuz ve yaklaşık 7-8 hafızadan oluşan bu STACK de bir hafıza kayıp etmiş duruma düşersiniz. Bir kaç döngüden sonra STACK hafızasında adres koyacak yer kalmaz. Böylece program nereye g,deceğin bilmez ve kilitlenir kalır. Umarım anlaşılmıştır.

Normal şartlarda bir kod konusunda yardım istenirse en azından devre şeması yada daha iyisi simulsyon devresini buraya kod ile birlikte koymak gerekir. Kimse yeniden şema çizmekle uğraşmak istemez üstelik senin nasıl bir devre çizdiğin daha önemlidir.

Yazdıklarına bakarak ben bir şema oluşturmaya başladım ve gördümki programda başka kusurlarda var.
- TRISA komutuna bakılırsa yalnızca PORTA.0 giriş pini olarak atanmış durumda.
Ancak programa bakınca;

if porta.1=0 or porta.0=0 then 
komut satırında PORTA.1 den bir giriş beklendiği görülüyor. O pini giriş olarak ayarlamaz isen ve oraya bir pullup direnci bağlamaz isen o pin LOW olarak gözükür ve programda otomatikman komutun gereği olarak Goto Ayaryap satırına uygun olarak Ayaryap etiketine gider. O halde yapılacak iş PORTA.1 pinini de giriş olarak ayarlamak ve o pine bir pullup direnci bağlamak gerekir.

programda Ayar kısmında PORTA.2 pinide giriş olarak kullanılmış. Bu nedenle bu pininde giriş yapılması ve pine bir pullup  direnci ile buton bağlanması gerekir.


	    IF porta.3=0 then
	    pause 100      
	    Gosub Fan
	    endif 
Bu kodlara bakarsan PORTA.3 pinide giriş olmalı. Giriş yapılmadığı için o pinde LOW gözüküyor ve program Ayaryap etiketine gitmese bile bu seferde FAN etiketine gitmek istiyor. PORTA.3 pini de giriş yapılmalı ve o pinede bir Pullup direnci bağlanmalı.

	    IF porta.5=0 then
	    pause 100      
	    Gosub Yukleme
	    endif
bu kodlara bakınca PORTA.5 pini de giriş olması gerektiği anlaşılıyor.
Pin giriş yapılmalı ve bu pinede bir Pullup dirrenci bağlanmalı.
Bu durumda TRISA=%00101111 şeklinde değer almalı.
Giriş olarak ayarlanan pinlerde sanırım birer Buton olacak. Şema vermediğin için ne yaptığını yada yapmak istediğini anlamak mümkün değil maalesef.
Yukarıda dediklerimi yaparsan ekranın normal çalışma moduna göreceğini görebilirsin.
Programın olması gereken şeklini senin verdiğin kodları değiştirerek aynı yere yerleştirdim.
İlk mesajın kod ekranında sağ üst taraftaki işarete tıklarsan kodun tamamını kopyalamış olursun. Bu şekilde yap ve kendi programını bununla değiştir ve yeniden derleyip denemeye çalış bakalım ne olacak sonuç.
Ben yine hem şemayı hemde kodları ilişikte veriyorum.

Ete


istinaf duvarı

#5
Bu görüntü aynı zamanda LCD'nin sadece besleme pinlerini bağladığımızda ortaya çıkan görüntü. Kontrast ile alakası yok. LCD MCU ile bağlantı kuramadığında ilk satırı yakıp öyle kalır. Sizin bulmanız gereken şey neden iletişim kurulamıyor.



LCD'nin sadece üst satırını kullanan bir kodunuz varsa sorun kontrasttan da kaynaklanıyor olabilir. Bunun dışında kontrast kaynaklı bu hata çıkmaz.

hlale

#6


devre şeması dosya ekinde.

Yardım ve yorumlar için teşekkürler..

osc 4 ve 16 Mhz olarak test edildi.

hlale

@__CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF



include "MODEDEFS.BAS"

OPTION_REG.7=1
 
define OSC 16

ADCON1 = 7
CMCON  = 7
 

'***********LCD Tanýmlamalarý***********

DEFINE LCD_DREG PORTB   'LCD data pinleri PORTBye baðlý
DEFINE LCD_DBIT 4       'LCD data bitleri hangi bitten baþlýyor
DEFINE LCD_EREG PORTB   'LCD enable pini hangi porta baðlý
DEFINE LCD_EBIT 3       'LCD enable biti hangi porta baðlý
DEFINE LCD_RWREG PORTB  'LCD RW bacaðý hangi porta baðlý
DEFINE LCD_RWBIT 2      'LCD RW pini hangi bite baðlý
DEFINE LCD_RSREG PORTB  'LCD RS pini hangi porta baðlý
DEFINE LCD_RSBIT 1      'LCD RS pini hangi bite baðlý
DEFINE LCD_BITS 4       'LCD 4 bit baðlý
DEFINE LCD_LINES 2      'LCD kaç sýradan oluþuyor
PAUSE 200               '200 milisaniye bekleme yap



'***********Özel Karakter Tanýmlamalarý
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0 'Derece Ýþareti
LCDOUT $FE,$48, 4, 14, 4, 4, 4, 4,14,0 'Ý Harfi
LCDOUT $FE,$50, 14, 17, 16, 16,16,17,14,4 'Ç Harfi
LCDOUT $FE,$58, 14, 17, 16, 14,1, 17,14,4 'Þ Harfi

'***********Port Ayarlarý***********
    
        
    TRISA=%1111111
    TRISB=%11111111
    TRISC=%11110001
    TRISD=%11001100
    TRISE=%111
    
    
    
    PORTA=%1111111
    PORTB=%00000000
    PORTC=%00000000
    PORTD=%00000000
    PORTE=%000
  

'***********Sensör Tanýmlamalarý***********

Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR	WORD        ' Sensör HAM okuma deðeri
ISI         VAR WORD        ' Hesaplanmýþ ISI deðeri
Float       VAR WORD        ' Holds remainder for + temp C display
X           VAR WORD       
ISARET_BITI   VAR HAM.Bit11   '   +/- sýcaklýk Ýþaret biti,  1 = olursa eksi sýcaklýk
EKSI_ISI   CON 1           ' Sýfýr altýnda isaret biti=1  oluyor kontrol için
DERECE     CON 223         ' ° iþareti
ISARET     VAR BYTE        '  ISI deðeri için  +/-  iþaret
TEMP        VAR word       ' Div32 bit hesap için geçici deðiþken
SYMBOL COMM_PIN=PORTD.0    ' One-wire Data-Pin "DQ" PortB.0 da
Set var byte
SAYI var byte
SAYI1 var byte
SAYI2 var byte

'***********LCD yi Kullanýma Hazýr Hale Getir***********

LOW PORTB.2 'RW bacaðý ekrana yazmaya imkan vermek için LOW yapýldý.
set=40

lcdout $FE,1 
PAUSE 250   ' LCD nin kullanýma hazýr hale gelebilmesi için gerekli süre
lcdout $FE,1 

LCDOUT $FE,$80,"****TASARIM****"             	
pause 1500
lcdout $FE,1
pause 200  

'***********Program Baþlangýcý***********

  Main:
  
    high portc.1
    high portc.2
    high portc.3     
      
    gosub sensoroku
    SAYI=250
    SAYI1=200
     
    LCDOUT $FE,$C0, "SET : ",#set
    PAUSE 500
    
    
    if porta.1=0 or porta.0=0 then 
    gosub ayaryap
    endif
    
        
    if ISI=>set then
    low portc.1           'motor
    endif
    if ISI<set-5 then
    high portc.1
    endif
       
    
    IF ISI<=18  THEN
    low portc.1
    ENDIF
    
    IF ISI>=75  THEN
    low portc.1
    ENDIF   
        
    IF ISI>=15  THEN
    high portc.2           'devir
    ENDIF   
    
    if ISI<=12 then
    low portc.2
    endif
    
    IF ISI<=$4 THEN HIGH PORTC.2
    
    
    IF porta.3=0 then
    pause 100       
    Gosub Fan
    endif  
    
    IF porta.5=0 then
    pause 100       
    Gosub Yukleme
    endif
    
    ;IF porta.4=0 then
    ;pause 100       
    ;Gosub dur
    ;endif    
        
          
          
Goto Main

'***********1. Sensörü Oku***********

SENSOROKU: 
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI deðerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy deðerini oku
           IF      Busy = 0 THEN Bekle    ' hala meþgulmü? , evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' Ýki byte oku ve okumayý bitir.
           GOSUB   Hesapla
           RETURN
    
Hesapla:                 ' Ham deðerden Santigrat derece hesabý

    
    ISARET  = "+"
    IF ISARET_BITI = EKSI_ISI THEN
       ISARET   = "-"  
       HAM=~HAM+2
    ENDIF
    ISI=HAM*10/16
    FLOAT = ISI//10
    ISI=ISI/10

    LCDOUT $FE,$80,"TEMP:",ISARET,DEC ISI,".",DEC1 (Float),Derece,"C " '2. satýrda ýsý
    RETURN
    
    
    '*********** Ayarlama Yap *********


ayaryap:


    LCDOUT $FE,$80,"   SET & ENTRY  "             	
    LCDOUT $FE,$C0, "SET : ",#set,".0",0,"C "
     
    pause 75  
    if set=90 then
    else
        if porta.0=0 then 
        set=set+1
        pause 100
        endif
    endif
    
    if set=0 then
    else
        if porta.1=0 then 
        set=set-1
        pause 100
        endif
    endif    
    
    
    if porta.2=0 then
    LCDOUT $FE,$80,"   SET EDILDI   "
    lcdout $FE,1
    pause 1000
    return
    endif
        
    
goto ayaryap
    


Fan:

    low porte.1   
    LCDOUT $FE,1
    LCDOUT $FE,$83,"MANUEL FAN"
    lcdout $FE,$C0,"SURE = ",DEC SAYI
    PAUSE 1000
    SAYI=SAYI-1   
    IF SAYI=0 OR PORTC.1=0 THEN
        lcdout $FE,1 
        PAUSE 250
        return
    else
        goto Fan
    ENDIF
        LCDOUT $FE,1
    return
        
Yukleme:

    LOW PORTE.0
    LOW PORTE.1
    high PORTE.2
    LCDOUT $FE,$80, "     YUKLEME    "
    LCDOUT $FE,$C0, "    YAPILIYOR   "
    PAUSE 4000    
    If porta.5=0 THEN
        LCDOUT $FE,1
        PAUSE 100
        low PORTC.3 
        return
    else
        goto yukleme
    ENDIF
    
    
;Dur:

    ;high porte.1   
    ;LCDOUT $FE,1
    ;LCDOUT $FE,$83,"STOP"
    ;lcdout $FE,$C0,"SURE = ",DEC SAYI
    ;PAUSE 1000
    ;IF porta.0=1 THEN
    ;PAUSE 250
    ;GOTO Basla
    ;ENDIF
     
    ;LCDOUT $FE,1
    
    ;return   
    
     
   GOTO main 
     
  End

kodu düzenledim ama sonuç değişmedi

bağlatılarda sorun göremedim gözden kaçan başka bir detay var ama farkedemiyorum..

ete

Sen aslında çok şey düzenlemişsin.
TRIS registerlerinin hepsini giriş yapmışsın hangi sebeple acaba?

Mesajdaki kodu değiştirmeyi unutmuşum, şimdi değiştirdim.
Sen en iyisi onu kopyala ve onu derleyip kullan. Yaptıkların yine yanlış çünki.

Varsa elinde başka bir LCD kullanmaya da çalışsan fena olmayacak. Elindeki bir şekilde bozulmuş gibi gözüküyor.

Ete

hlale

#9
Hocam  A portu tamamı input olarak kullanılacaktır.

boşta kalan I/O ları GND bağlantısı yaptım harmonik ve gürültülerden etkilenmemesi için.

16Mhz osc 33pf ve 20pf ile test ettim.
3 larklı ldc ile aynı sonuc alıyorum.
osilakop ile kontrolleri yaptım tüm değerler uygun.

istinaf duvarı

Ana fonksiyonun başında 500ms delay ver bakalım ne olacak?

Bir de LCD'nin lehimlerini kontrol et, çatlak, soğuk lehim vs. var mı?
Kullanılmayan D0-D3 pinlerini VDD ya da GND'ye çek. Float durumda kalmasın.

Bana kalırsa en temizi I2C LCD. Sadece dört kablo bağlıyorsun miss.  :)

mehmet

#11
LCD 2 numaradaki 10K direnci çıkarınız. Direkt bağlayınız.
LCD'nin LED pinine seri bir diyot ekleyiniz.
/MCLR pini pull-up olmalı.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

hlale


Özdisan firmasından yeni MCU aldım kodlama yaptım sorunsuz çalıştı..

Yardımlarınız için teşekkürler..

istinaf duvarı

#13
16x2 formatında OLED'ler de varmış. Besleme bağlantısı sadece 2 pin. VDD ve VSS, normal LCD'de olan Vo pini bunlarda NC, yani boş. Arka ışık bağlantısına da ihtiyaçları yok, zaten arka ışık pinleri de NC, yani boş.

Vo pinine ihtiyaç olmaması güzel bir şey. Trimpot bağla, görüntü gelinceye kadar çevir zahmetinden kurtarıyor.

 Aliexpress'te falan satılıyor.

Edit:Özdisan satıyormuş. En ucuzu 15 dolar falan. Çok pahalı. Geleneksel LCD'ye devam.

onurinci

resiztans.net'ten yıllar evvel 3 adet aldım . dip sarı portakala yakın görüntü muhteşem 50USD idi. artık alamam.EAW162-X9LG

Powered by EzPortal