D portunu çıkış yapapamama sorunu

Başlatan er-da, 07 Mart 2017, 23:36:28

er-da

merhabalar..simulasyonda D portu giriş hatası alıyorum
	Device = 16F1939

Config1 FOSC_INTOSC, WDTE_OFF, PWRTE_OFF, MCLRE_OFF, CP_OFF, CPD_OFF, BOREN_OFF, CLKOUTEN_OFF, IESO_OFF, FCMEN_OFF
Config2  WRT_OFF, VCAPEN_OFF, PLLEN_ON, STVREN_ON, LVP_OFF
    Xtal=32
;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------

'*****LCD TANIMLAMALARI******
Declare LCD_DTPort = PORTD                 
Declare LCD_RSPin = PORTC.5               
Declare LCD_ENPin = PORTC.7               
Declare LCD_RWPin = PORTC.6               
Declare LCD_CS1Pin = PORTC.3             
Declare LCD_CS2Pin = PORTC.4               
Declare LCD_Type =  GRAPHIC                'GLCD TİPİ GRAFİK KS0108 128*64B WİNSTAR
Declare Internal_Font = On                 
Declare Font_Addr = 1
Declare GLCD_EXTERNAL_PRINT = PPRINT     
Declare GLCD_CS_Invert = 0
CM1CON0.7=0
CM2CON0.7=0
OSCCON=%11110010
TRISA=%11111111
TRISB=%11111111
TRISC=%00000111
TRISD=%00000000

TRISE=%11111111
ANSELD=%00000000
basla:
         
         Line 1,0,63,127,63     ;
         Line 1,0,0,127,0       ;   yatay çizgiler
       
         Line 1,0,0,0,63         ;    dikey çizgiler
         Line 1,127,0,127,63     ;
         DelayUS 100
GoTo basla


ekleme   :    glcd bağlantılarını ayırdğımda  hata vermiyor çıkış olarak gözüküyor.glcd konfigürasyonunda  mı hata yapıyorum acaba?

er-da

sorunun kaynağı proteus "Logic contention detected on net"hatası veriyordu.hata kodunu tıkladığımda  D portunu giriş gösteryordu .çözümünü bulamadım bu hata heryerde sorulmuş . çözüm olarak simulasyonda glcd nin 300khz olan frekansını 4Mhz yapınca biraz düzelme oluyor yani D portu çıkış olarak ayarı doğru .ayrıca ete hocanın bu hata kodu için yazdıklarınıda okudum...


ete

#2
Sorunun işlemciden kaynaklandığını düşünüyorum. Data sheet'e bakınca PORTD ile alakalı şunları gördüm.
Öncelikle bu portd da kapasitif sensing özelliği olduğu görülüyor. Bu modül pasif edilmeli. CPSCON0=0 ve CPSCON1=0 verilmeli.
AYnı şekilde bu PORT da LCD driver modülü olduğunu gösteriyor ve sanki özellikle bu port bu iş için yapılmış gibi duruyor. Programa bakınca bu modül kullanılmadan LCD normal olarak derleyicinin kontrolünde çalışması gerekiyor. Bu durumda LCD modülününde iptal edilmesi gerekir. İlgili registerler LCDCON ve yanında bir sürü register var. Diğerlerini vermedim çünki gördüğüm kadarı ile LCDCON=0 verilirse modül zaten iptal edilmiş oluyor. Ancak LCDPS (LCD Phase Register) de de bir modül aktivasyon biti gördüm. Bunuda LCDPS=0 şeklinde pasif hale getirmek gerekir. Peşinden LCDREF=0 verilmeli.
Diğer bir konuda yeni nesil işlemcilerde PORT okuma işleminin PORTX ile yapıldığı PORT'a yazma işleminin ise LATX ile yapıldığıdır.
Yani PORTD nin ne olduğunu okumak için TEMP=PORTD demek yeterli. ANCAK PORTD ye diyelimki %00010110 bilgisini yazmak için PORTD=%00010110 yazmak yerine LATD=%00010110 yazmak gerekiyor.
Programda bu hususlarada dikkat etmek gerekir diye düşünüyorum.

İsis genellikle bir pin hem giriş hem çıkış çalışıyor ise bu tür hatalar verebiliyor. Sebebi ise basit Giriş olarak bırakılmış bir pine yazma yaparsanız Lojik Uyuşmazlık hatası veriyor. Yada tersi Çıkış olarak ayarlanmış bir pinden okuma yapmaya kalkarsanız bu tür hatalar ortaya çıkar.  Halbuki bazı komutlar o pini hem çıkış yapıyor hemde pine değer veriyor.
Örneğin Basic de PORTD.1=1 dediğiniz zaman D.1 pini çıkış kabul edilip o pine HIGH değeri verilmiş oluyor.
Aynı işi HIGH PORTD.1 komutu ilede yapabilirsiniz. Bu komutun diğerinden farkı ise HIGH komutu önce o pini Çıkış yapıyor sonra pine 1 değerini veriyor. HIGH PORTD.1 komutu aslında iki aşamalı bir komut ve şöyle işliyor;
OUTPUT PORTD.1
PORTD.1=1
İşte bu gibi durumlarda Isis bazen şaşırabiliyor. Bu daha ziyada RTC de okuma yazma yaparken görülen bir husus. Muhtemelen isis model dosyalarının çok iyi yazılmamış olmasından kaynaklanıyor. Çünki gerçek devrede bu sorunları her ne kadar görmesenizde işlemcinin çalışmasını etkileyen bir şeylede karşılaşmıyorsunuz.

Ete

er-da

hacam yazdıklarınızı yaptım yine hata veriyor ve düzgün görüntülenmiyordu
biryerde gördüm simulasyon yaparken  glcd nin R/W pinini GND ye bağlanınca ve glcd frekansını 1Mhz yapınca hata mesajı almadan çalışıyor.şimdilik sorun kalmadı

Powered by EzPortal