lcd simülasyonda titreme

Başlatan elvanmurat, 22 Ağustos 2013, 23:02:24

elvanmurat

ete hocam

tasarladığım devrenin simülasyonunda lcdde yazılar kıprısıyor.sorunu simülasyondamı, programdamı tam anlamıs degilim.yardımcı olursanız cok sevinirim.

est32

her seferinde ekrana yazı yolluyor her seferinde ekranı temizle komutunu çalıştırıyor ve bunların arasında sadece 100ms yani 0.1 saniye bekleme yapıyorsun. bence algoritmayı değiştirmelisin.

Şu mantıkla çalış;
Basla etiketi altında sadece butonları kontrol et, eğer herhangi bir butona basılmışsa hangi buton olduğunu öğrenmek için başka bir alt programa sıçra ve gerekli ise sadece o zaman yine başka bir alt programda LCDOUT $FE,1,"132 KIZILAY ODTU     " tarzı komutlarını kullan.
bekleme komutlarını da sadece buton gecikmesi için kulanabilirsin. bu şekilde çalışma yaparsan ekrana sadece 1 defa yazı yollamış olursun ve işlemci bir tuşa basmadığın sürece butonları taramakla meşgul olur.

Hatta başka bir alt programda da LCDOUT $FE,$C0,"HAT NO:01" kısmını 1 kez yazar 01,02...kısımlarını da değişken olarak atayıp program belleğinden kazanabilirsin. Am buna şimdilik gerek yok, ileride daha karmaşık ve daha fazla bellek isteyen progtamlarda bunu uygulamak daha akıllıca olur, fakat kendini geliştirmen için de yapmaya çalışsan iyi olur.

est32

Elim boştu söylediklerimi kendim yaptım, ileride daha profesyonel programlar yapmak istiyorsan program mantığına çok dikkat et. Haşa kendim de çok biliyor değilim ama zamanında ben de uğraşarak az da olsa kendimi geliştirdim.
Eksikler hatalar olabilir, üzerine çok düşmedim, bi sorun çıkarsa kendin düzeltmeye çalışırsın, olmadı buradan yine yardım istersin...
Türkçe karakter ekledim, eğer onları iptal edersen daha az program belleği kullanılır.
hex ve diğer dosyalar ektedir.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [ESAT METİN ERDOĞAN]                              *
'*  Notice  : Copyright (c) 2010 [İZİNSİZ KULLANMAK HARAMDIR]   *
'*          : All Rights Reserved                               *
'*  Date    : 23.08.2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
trisa=%00011
trisb=0

@ device pic16f628a
@ device pic16f628a, wdt_off
@ device pic16f628a, pwrt_on
@ device pic16f628a, protect_off
@ device pic16f628a, mclr_off
@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT

CMCON=7

DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2
'*****************************TÜRKÇE KARAKTERLER***************************************
LCDOUT $FE,$40,10,0,17,17,17,17,14,0'0.KARAKTER Ü HARFİ
LCDOUT $FE,$48,14,17,16,16,17,14,4,0'1.KARAKTER Ç HARFİ
LCDOUT $FE,$50,4,0,14,4,4,4,14,0'2.KARAKTER HAFIZASI İ HARFİ
LCDOUT $FE,$58,10,0,14,17,17,17,14,0'3. KARAKTER HAFIZASI Ö HARFİ
LCDOUT $FE,$60,14,16,16,14,1,30,4,0'4. KARAKTER HAFIZASI Ş HARFİ
'**************************************************************************************
SYMBOL YUKARI=PORTA.0
SYMBOL ASAGI=PORTA.1
SYMBOL RELAY1=PORTA.2
SYMBOL RELAY2=PORTA.3
HATNO VAR BYTE

LOW PORTB.2
PORTB=0
HATNO=1
PAUSE 500
'*******************************************************************************
LCDOUT $FE,1,"EFE ELEKTRON",2,"K"
LCDOUT $FE,$C0,"S",2,"STEM KONTROL"
PAUSE 500
GOSUB TUS_OKU
'*******************************************************************************
BASLA:

IF YUKARI=0 or ASAGI=0 THEN PAUSE 100:GOSUB TUS_OKU'program sürekli burada dolaşıyor
'bu şeklide ekrana sadece 1 kez yazı yazılmış oluyor, titreme önlenmiş oldu
GOTO BASLA
'*******************************************************************************
TUS_OKU:

    IF YUKARI=0 THEN
    RELAY1=1:WHILE YUKARI=0 : WEND : HATNO = HATNO +1 : RELAY1=0
    ENDIF
   
    IF ASAGI=0 THEN
    RELAY2=1:WHILE ASAGI=0:WEND:HATNO=HATNO-1:RELAY2=0
    ENDIF

    IF HATNO>5 THEN HATNO=1
    IF HATNO<1 THEN HATNO=5

    IF HATNO=1 THEN GOSUB HAT1
    IF HATNO=2 THEN GOSUB HAT2
    IF HATNO=3 THEN GOSUB HAT3
    IF HATNO=4 THEN GOSUB HAT4
    IF HATNO=5 THEN GOSUB HAT5

RETURN
'*******************************************************************************
HAT1:
LCDOUT $FE,1,"132 KIZILAY ODT",0
GOSUB ALT_SATIR
RETURN
'*******************************************************************************
HAT2:
LCDOUT $FE,1,"411 H.KADIN"
GOSUB ALT_SATIR
RETURN
'*******************************************************************************
HAT3:
LCDOUT $FE,1,"132 ",3,"ZPETEK"   
GOSUB ALT_SATIR
RETURN
'*******************************************************************************
HAT4:
LCDOUT $FE,1,"482 UYANI",4
GOSUB ALT_SATIR
RETURN
'*******************************************************************************
HAT5:
LCDOUT $FE,1,"421 GAZ",2,"NO"
GOSUB ALT_SATIR
RETURN
'*******************************************************************************
ALT_SATIR:
LCDOUT $FE,$C0,"HAT NO:",DEC2 HATNO
RETURN
'*******************************************************************************
END

ete

#3
Sorun elbette sürekli ekranın temizlenmesi. Bunu bir şekilde önlemek ve yalnızca gerçekten temizlenmesi gerektiği zaman ekranın temizlenmesini sağlamak gerekir. Gerçekten temizlenme ihtiyacı yalnızca HatNo değiştiği zaman olacaktır. Hep aynı hat nosu olduğu zaman ekrana sabit bir bilgi verileceği için ekranın temizlenmesi gerekmiyor. Bu neden bende hat nosu değiştiği zaman degisti isimli bir bit değişkeni kullandım. Bu değişken set edildiği zaman önce ekranı temizleyip sonra ekrana verilenleri verdikmi istediğin stabilite yakalanmış olacaktır.

Bir iki düzeltilmesi gereken şey vardı onları da düzelttim.
Program Aşağıda dır.

Ete
@ device pic16f628a
@ device pic16f628a, wdt_off
@ device pic16f628a, pwrt_on
@ device pic16f628a, protect_off
@ device pic16f628a, mclr_off
@ DEVICE pic16F628a, INTRC_OSC_NOCLKOUT
trisa=%00000011
trisb=0
CMCON=7

DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2


SYMBOL YUKARI=PORTA.0
SYMBOL ASAGI=PORTA.1
SYMBOL RELAY1=PORTA.2
SYMBOL RELAY2=PORTA.3
HATNO VAR BYTE
degisti var bit

LOW PORTB.2
PORTB=0
HATNO=1
LCDOUT $FE,1
PAUSE 10


LCDOUT $FE,1,"EFE ELEKTRONIK"
LCDOUT $FE,$C0,"SISTEM KONTROL"
PAUSE 500
Degisti=1                                         

BASLA:

IF YUKARI=0 THEN
HIGH RELAY1
WHILE YUKARI=0:WEND
PAUSE 50
HATNO=HATNO+1:degisti=1                       
IF HATNO=6 THEN HATNO=1         
LOW RELAY1
ENDIF

IF ASAGI=0 THEN
HIGH RELAY2
WHILE ASAGI=0:WEND
PAUSE 50
HATNO=HATNO-1:degisti=1
IF HATNO=0 THEN HATNO=5
LOW RELAY2
ENDIF
IF DEGisti=1 then
  lcdout $fe,1
  degisti=0
endif 
IF HATNO=1 THEN GOSUB HAT1
IF HATNO=2 THEN GOSUB HAT2
IF HATNO=3 THEN GOSUB HAT3
IF HATNO=4 THEN GOSUB HAT4
IF HATNO=5 THEN GOSUB HAT5
pause 100
GOTO BASLA


HAT1:
LCDOUT $FE,$80,"132 KIZILAY ODTU     "
LCDOUT $FE,$C0,"HAT NO:01"
RETURN

HAT2:
LCDOUT $FE,$80,"411  H.KADIN     "
LCDOUT $FE,$C0,"HAT NO:02"
RETURN

HAT3:
LCDOUT $FE,$80,"132 OZPETEK        "   
LCDOUT $FE,$C0,"HAT NO:03"
RETURN

HAT4:
LCDOUT $FE,$80,"482  UYANIS"
LCDOUT $FE,$C0,"HAT NO:04 "
RETURN

HAT5:
LCDOUT $FE,$80,"421 GAZINO"
LCDOUT $FE,$C0,"HAT NO:05"
RETURN


END

elvanmurat

sayın ete ve est32 hocam

her iki programıda simüle ettim.ikiside gayet düzgün sekilde calışmaktadır.pıc programlamada cok yeniyim.ete hocamın dersleriyle biseyler yapmaya calışıyorum.bi arkadasımın tavsiyesıyle pıclerle ilgilenmeye basladım ve devre tasarımında herseyın hayal gücüyle sınırlı olmadıgını farkettim.bu forum sayesinde insallah programlama konusunda yeterli seviyeye gelecegim.yardımlarınız icin tesekkür eder calısmalarınızda basarılar dilerim.

Powered by EzPortal