18f2550 LCD Kullanımı, Meşgul Hatası - [ Yardım ]

Başlatan ceyhun.topcuoglu, 07 Aralık 2014, 01:28:25

ceyhun.topcuoglu

18F işlemcilere yeni geçtiğim için birçok sorunla karşılaşıyorum bir kısmını datasheetlerden bir kısmını mplab içindeki .INC dosylarıyla vs. fakat koskoca internette bir tane bile 18f2550 işlemcide PicBasic ile LCD kullanan yok. Bende çareyi size sormak da buldum.

Aldığım hata şu şekilde :


Şu anda kullandığım kodlar da şöyle :
DEFINE OSC 4
DEFINE LCD_DREG PORTB 'LCD DATA BACAKLARI PORTB'YE BAGLI
DEFINE LCD_DBIT 4 'LCD DATA BITLERI HANGİ BITTEN BASLIYOR
DEFINE LCD_EREG PORTB 'LCD ENABLE BACAGI HANGI PORTA BAGLI
DEFINE LCD_EBIT 3 'LCD ENABLE BITI HANGI PORTA BAGLI
DEFINE LCD_RWREG PORTB 'LCD RW BACAGI HANGI PORTA BAGLI
DEFINE LCD_RWBIT 2 'LCD RW BACAGI HANGI BITE BAGLI
DEFINE LCD_RSREG PORTB 'LCD RS BACAGI HANGI PORTA BAGLI
DEFINE LCD_RSBIT 1 'LCD RS BACAGI HANGI BITE BAGLI
DEFINE LCD_BITS 4 'LCD 4 BIT BAGLI
DEFINE LCD_LINES 2 'LCD KAC SIRADAN OLUSUYOR
define lcd_commandus 4500
define lcd_dataus 255 

low PORTB.2 'RW BACAGI EKRANA YAZMAYA IMKAN VERMEK ICIN LOW YAPILDI

TRISB=0   'PORTB giriş/çıkış durumu 1-> Giriş 0-> Çıkış 
cmcon=7
ADCON1=%00001111    ' Analog giriş/çıkış devre dışı

   
basla:
toggle portb.0  'Programın işleyip işlemediğini görmek için

PAUSE 200

LCDOUT $FE,1,"DENEME LCD"
LCDOUT $FE,$C2,"SATIR 2"
PAUSE 1000

goto basla
   
end


Yardımlarınızı bekliyorum Selametle...

Çizim ve kaynak kodu :

onurinci

7.10 versiyonu kullanıyorum,0 hata,uyarı mesaj falan yok direkt çalışıyor.

ete

Genel anlamda bu programın hata vermeden çalışması gerekir. Eksikleri var. Mesela Sigorta ayarların yok ortada. 18F serisi için bu ayarlar hayati önem taşır ve mutlaka programa koyulmalıdırlar.
Önce bu ayarları vereyim, 4 Mhz OSC kullandığına XT tip OSC kullanıyor olacaksın ayarları bu temele göre verdim.
ASM
        __CONFIG    _CONFIG1L, _PLLDIV_1_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_1_1L
        __CONFIG    _CONFIG1H, _FOSC_XT_XT_1H& _FCMEN_OFF_1H & _IESO_OFF_1H
        __CONFIG    _CONFIG2L, _PWRT_OFF_2L & _BOR_ON_2L & _BORV_3_2L & _VREGEN_ON_2L
        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        __CONFIG    _CONFIG3H, _CCP2MX_ON_3H & _PBADEN_OFF_3H & _LPT1OSC_OFF_3H & _MCLRE_ON_3H
        __CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L       
ENDASM


Diğer bir konu da LCD tanımlamalarında vermiş olduğun ;
define lcd_commandus 4500
define lcd_dataus   255
komut satırlarındaki değerler. Bunlarınnormal değerleri
define lcd_commandus 2000
define lcd_dataus   50
şeklinde olmalıdır. PLL kullanıp daha yüksek frekanslarda çalışırsan verdiğin değerlere çıkabilmen mümkün olur. Değilse 4 Mhz de bu değerlere bile gerek yok default değerler işini görecektir.

LCD 'nin ilk çalıştırmada Initalize denilen açılma işleminin yerine getirilmesi gerekir. Bu işlemde LCD registerleri yerli yerine yerleşir ekran temizlenir LCD komut almaya hazır hale getirilmiş olur. Bu işlem yaklaşık 150 ms sürer. Bunu yapan komt da ,
LCDOUT $FE,1  şeklindeki komutdur.
Bu nedenle ilk açılışta bu komutu yalnız verin ve peşine en az 150-200 ms lik bir gecikme koyun. Bu komutdan önce de sorun yaşıyorsanız 150-200 ms lik bir gecikme vererek pic in kendi registerlerini yerleşirme ayarlama süresi olarak verin.
Bu açılımdan sonra artık LCD ye istediğiniz komutu verebilirsiniz.
Bu durumda senin açılış ta LCD komutların şöyle olsa daha uygun olurdu.
Pause 200
LCDOUT $FE,1
pause 150
LCDOUT "DENEME LCD"
LCDOUT $FE,$C2,"SATIR 2"
PAUSE 500

Programınla ilgili kritik noktalar bunlar. Görüyorumki simulasyon programında Versiyon 8 kullanıyorsun. Bana göre buda bir hata. Belkide bütün sorunun asıl kaynağı bu simulasyon . Henüz tam anlamı ile sağlıklı çalıştığı belli olmayan bu versiyon bir çok açıdan sakıncalı. Bir çok kişinin hala kullandığı 7.10 ve daha düşük versiyonlar tarafından verdiğin dsn dosyaları açılamıyor. Şu anda mesaj ekinde verdiğin dosyayı açamadığımız için yeniden çizmek zorunda kalıyoruz. Böyle bir durumda insanın cevap veresi bile gelmiyor.

Ete

mehmet14

#3
İlginiz için teşekkür ederim Ete Hocam ve onurinci arkadaşım.
Sorun tamamen simülasyondan kaynaklanıyorumuş kullandığım Proteus sürümü 8.1
Proteus 8' i bende hiçbir zaman sevedim fakat Virtual USB çok stabil çalıştığı için bu platformda çizmeye başladım.
Böyle sorunlarının olduğunu bilmiyordum sonuçta beta versiyon değil. Şu anda 7.7 kurdum ve sorunsuz bir şekilde LCD kullanabiliyorum. En kısa zamanda 7.10' a geçicem
Çizim dosyasını 7.0 Layout File olarak kaydedicektim fakat bir türlü bulamadım sanırım kaldırmışlar o özelliği.

USB haberleşmede LCD kullanıcaktım, Aslında 20 mhz de kullanıyordum ama o kadar çok programda değişiklik yaptım ki en son 4 mhz de kalmış :)

Sigorta ayarlarını ASM kodu olarak tanımlayamıyorum.Ete hocam sizin bir çok konunuzda 18F için söylediğiniz sigorta ayarlarını referans alarak ve MPLAB içinde ki 18F2550.INC dosyasını inceleyerek bir sigorta ayarı yazmıştım ama MPLAB assemberi derlerken kabul etmedi. Biraz daha kurcaladım PBP3 içindeki 18F2550.PBPINC dosyasında sigorta ayarlarını şu formatta vermiş :

#CONFIG
    CONFIG  PLLDIV = 5            ; Divide by 5 (20 MHz oscillator input)
    CONFIG  CPUDIV = OSC1_PLL2    ; [Primary Oscillator Src: /1][96 MHz PLL Src: /2]
    CONFIG  USBDIV = 2            ; USB clock source comes from the 96 MHz PLL divided by 2
    CONFIG  FOSC = HSPLL_HS       ; HS oscillator, PLL enabled (HSPLL)
    CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor disabled
    CONFIG  IESO = OFF            ; Oscillator Switchover mode disabled
    CONFIG  PWRT = OFF            ; PWRT disabled
    CONFIG  BOR = ON              ; Brown-out Reset enabled in hardware only (SBOREN is disabled)
    CONFIG  BORV = 3              ; Minimum setting
    CONFIG  VREGEN = ON           ; USB voltage regulator enabled
    CONFIG  WDT = ON              ; WDT enabled
    CONFIG  WDTPS = 512           ; 1:512
    CONFIG  CCP2MX = ON           ; CCP2 input/output is multiplexed with RC1
    CONFIG  PBADEN = OFF          ; PORTB<4:0> pins are configured as digital I/O on Reset
    CONFIG  LPT1OSC = OFF         ; Timer1 configured for higher power operation
    CONFIG  MCLRE = ON            ; MCLR pin enabled; RE3 input pin disabled
    CONFIG  STVREN = ON           ; Stack full/underflow will cause Reset
    CONFIG  LVP = OFF             ; Single-Supply ICSP disabled
    CONFIG  XINST = OFF           ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
    CONFIG  DEBUG = OFF           ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
    CONFIG  CP0 = OFF             ; Block 0 (000800-001FFFh) is not code-protected
    CONFIG  CP1 = OFF             ; Block 1 (002000-003FFFh) is not code-protected
    CONFIG  CP2 = OFF             ; Block 2 (004000-005FFFh) is not code-protected
    CONFIG  CP3 = OFF             ; Block 3 (006000-007FFFh) is not code-protected
    CONFIG  CPB = OFF             ; Boot block (000000-0007FFh) is not code-protected
    CONFIG  CPD = OFF             ; Data EEPROM is not code-protected
    CONFIG  WRT0 = OFF            ; Block 0 (000800-001FFFh) is not write-protected
    CONFIG  WRT1 = OFF            ; Block 1 (002000-003FFFh) is not write-protected
    CONFIG  WRT2 = OFF            ; Block 2 (004000-005FFFh) is not write-protected
    CONFIG  WRT3 = OFF            ; Block 3 (006000-007FFFh) is not write-protected
    CONFIG  WRTC = OFF            ; Configuration registers (300000-3000FFh) are not write-protected
    CONFIG  WRTB = OFF            ; Boot block (000000-0007FFh) is not write-protected
    CONFIG  WRTD = OFF            ; Data EEPROM is not write-protected
    CONFIG  EBTR0 = OFF           ; Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks
    CONFIG  EBTR1 = OFF           ; Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks
    CONFIG  EBTR2 = OFF           ; Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks
    CONFIG  EBTR3 = OFF           ; Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks
    CONFIG  EBTRB = OFF           ; Boot block (000000-0007FFh) is not protected from table reads executed in other blocks
#ENDCONFIG


Bu şekilde tanımlamamda bir sakınca var mıdır hocam ? Lakin bu şekilde hem anlaşılır, hem sade bir görünüme sahip.
Eğer doğru bir tanımlama değil ise şunu da denedim PBP3 klasöründeki tanımlamaları bulduğum dosyadan tüm sigorta ayalarını silince ASM kodunu kabul ediyor.

İlginiz için çok teşekkür ediyorum Selametle...

ete

PBP3 kullanıyorsan onun formatına uyman gerekir tabiiki.
Ete

Powered by EzPortal