2*16 lcd de derece ısaretı yanlıs cıkıyor neden?

Başlatan askb, 23 Ağustos 2008, 10:26:47

askb

s.a arkadaslar,
2*16 lcd ekran satın aldım.markası pacer.ısı bılgısını ekrana basıyorum.derece ısaretı olarak 223 sayısını verıyorum.Ama ekranda alt alta 3 adet cızgı cıkıyor.bunun sebebını bılen varsa yardımlarınızı beklıyorum.selamlar kolay gelsın.

707yunus

hocam kod ve şemayı eklersen iyi olur bi arkadaşlarla inceleyelim

askb

hocam yazdıgım kodların ısıs'de calısması normal.kodlar asagıda.sımdı baska bır lcd de deneyecegım.lcd den suphelenıyorum.bakalım sonuc ne cıkacak.




'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2008 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 18.08.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :2 ADET 18B20 ILE ISI OLCUMU YAPILACAK.(KOLLEKTOR VE BOYLER TANKININ ISILARI)
;3 ADET TUSUMUS OLACAK (ENTER,+.-)BU TUSLAR YARDIMIYLA 0-90 C ARASI SISI AYARI YAPILIP HAFIZAYA KAYDEDILECEK.
;1 ADET 220V CIKISI VEREBILEN ROLEMIZ OLACAK(POMPA ROLESI).KOLLEKTOR ISISI > BOYLER FARKI 10 C ISE ROLE CEKECEK.
;POMPA ROLESI AYARLAMA ILE SUREKLI DEVREDE,VEYA SUREKLI DEVRE DISI AYARLANABILECEK.                                                   *
'*          :                                                   *
'****************************************************************
;____________GIRIS-CIKIS ve ATAMALAR AYARLAMA BLOGU_________________________________________
cmcon=7         ;PORTA YI DIJITAL YAPTIK.

DEFINE LCD_DREG PORTB 'LCD data port
DEFINE LCD_DBIT 0 'LCD data starting bit 0 or 4
DEFINE LCD_RSREG PORTB 'LCD register select port
DEFINE LCD_RSBIT 4 'LCD register select bit
DEFINE LCD_EREG PORTB 'LCD enable port
DEFINE LCD_EBIT 5 'LCD enable bit  
DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 2 'Number lines on LCD
DEFINE LCD_COMMANDUS 2000 'Command delay time in us
 

trisa.0=0       ;POMPA ROLE CIKISI
trisa.1=0       ;BOSTA
trisa.2=1       ;ENTER TUSU GIRISI
trisa.3=1       ;ARTI TUSU GIRISI
trisa.4=1       ;EKSI TUSU GIRISI
TRISA.5=0       ;BOSTAKI UC CIKIS
TRISA.6=0       ;BOSTAKI UC CIKIS
TRISA.7=0       ;BOSTAKI UC CIKIS

'TRISB.0=0       ;LCD D4
'TRISB.1=0       ;LCD D5
'TRISB.2=0       ;LCD D6
'TRISB.3=0       ;LCD D7
'TRISB.4=0       ;LCD RS
'TRISB.5=0       ;LCD E
'TRISB.6        ;DQ1 GIRIS CIKISI
'TRISB.7        ;DQ2 GIRIS CIKISI

SYMBOL POMPA=PORTA.0    ;GOSTERILEN ISININ KOLLEKTORE AIT OLD.BILDIREN LED.
'SYMBOL B_LED=PORTA.1    ;BOSTA
SYMBOL ENTER=PORTA.2
SYMBOL ARTI=PORTA.3
SYMBOL EKSI=PORTA.4

SYMBOL DQ1=PORTB.6      ;KOLLEKTOR ISISINI OLCEN SENSOR
SYMBOL DQ2=PORTB.7      ;BOYLER ISININ OLCEN SENSOR
                    ;ındex degıskenı
SN2         VAR BYTE         ;2 SNLIK SURE ICIN
DEGER1      VAR WORD    ;kollektor ısısnın okunması ıcın kull.reg.                
DEGER2      VAR WORD    ;boyler    ısısnın okunması ıcın kull.reg.
kollektor   VAR BYTE    ;kollektor ısısı
boyler      VAR BYTE    ;boyler ısısı
SICAKSUISI  var byte    ;boylerden ıstenen sıcaksu ısı mıktarı.pompa bu ısı degerıne ulsınca duracak veya ulastırana kadar calısacak.
SAYAC1      VAR BYTE    ;programlama menusune gırdıgımızde,program modundan cıkılmazsa,kendılıgınden 20-30 sn sonra cıkması ıcın.
fark        var byte   ;kollektor ısısı-boyler ısısı farkını koyacagımız reg.
;____________GIRIS-CIKIS ve ATAMALAR AYARLAMA SONU_______________________________________

;-------------------------------------------------------------------------------

read 0,sicaksuisi   ;acılıp kapandıgında aklında kalması ıcın hafızayı okuyoruz.bu prog.ma yaparken oncekı sayının uzerıne devam etmek ıcınde gereklı                  
GOSUB PRG_GIRIS_VARMI   ;PRG MAYA GIRLMEK ISTENIYORMU KONTROL ET.
GOSUB sicaklik_olcme
GOSUB ISLEM             ;ELDE EDILEN VERILERE GORE ISLEM YAP.(HAFIZAD VE ISI DEGERLERINE GORE)
GOTO LOOP               ;TARAMAYI TEKRARLA
;-------------------------------------------------------------------------------

;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

PRG_GIRIS_VARMI:

   SN2=0
   FOR SN2=1 TO 20             ;2 SN BOYUNCA TUSA BASILI KALINIYORMU programlamaya gırebılmek ıcın 2-3 sn basılı tutma sartı ıcın.! 255 ı gecersen sn yı word tanımlamayı unutma.
       IF ENTER=1 THEN RETURN  ;3 sn dolmadan bırakılırsa cık
   
   
       PAUSE 10                ;dongu yaparken 3 snlık gecıkme ıcın.(10*200 msn)gecıkme sag.ıcın.
   NEXT SN2
BIRAK:
IF ENTER=0 THEN
   LCDOUT 254,1,128,"  PROGRAMLAMADA "
   PAUSE 1000
   GOTO BIRAK
ENDIF    
;*******************************************************************************************************************

a_2:

sayac1=0                ;10 sn sure ıcın kullanılıyor.baslangıc ıcın sıfırladık.
for sayac1=1 to 200     ;10 sn bu menuyu bekler eger ıslem yapılmazsa cıkar.
;------------------------boyler sıcaklıgını ayarlama blogu----------------------

   lcdout 254,128,     "  SU SICAKLIGI  "  
   lcdout 254,192,     "      ",DEC SICAKSUISI,223,"       "    
       if arti=0 then                  ;b2ısı=40 ıla 90 derece arası ayarlanabılır olacak.                            
           sayac1=0                    ;butona basılmıs   10 sn lık sureyı sıfırla.
           SICAKSUISI=SICAKSUISI+1
           PAUSE 200
           IF SICAKSUISI=99 THEN SICAKSUISI=5        
       endif
       
       if eksi=0 then              ;eger - ya basılmıssa farkı 1 derece azalt.    
           sayac1=0                ;10 sn lık sureyı sıfırla.  
           SICAKSUISI=SICAKSUISI-1
           PAUSE 200
           if SICAKSUISI=5 then SICAKSUISI=99
       endif
                     
       if ENTER=0 then           ;eger prg ye basılmıssa kayded.  
           WRITE 0,SICAKSUISI:PAUSE 20      ;eproma kaydet sonrakı menu ayarına gec          
           lcdout 254,1,128,"AYAR KAYDEDILDI"
           pause 2000         ;2 sn goster
           GOTO cikis2                    
       ENDIF
';-------------------------------------------------------------------------------

cevrim2:

   pause 50
next sayac1
cikis2:
   sayac1=0
   LCDOUT  254,1            
return
;===============================================================================
RETURN
;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa



;ééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé

ISLEM:

ayarlanan_deger_gore_islem: ;ayarlanan suısısı (sıcaksuısı)na ulasılmıssa pompa durmalı.
   if boyler>=sicaksuisi then
       pompa=0
       return
   endif

pompa_on_off:       ;kollısısı>boyler ve fark>=10 ıse pompa calıssın.tersı durum soz konusu ıse dursun.
   
   if kollektor>boyler then
       fark=kollektor-boyler
       if fark>=10 then pompa=1
       if fark<=9 then pompa=0
       return    
   endif
   pompa=0

RETURN
;ééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééééé


 

;===============================================================================

sicaklik_olcme:

   OWOUT DQ1,1,[$CC,$44];SICAKLIGI CEVRIME BASLA
   OWOUT DQ2,1,[$CC,$44];SICAKLIGI CEVRIME BASLA
   PAUSE 750            ;SICAKLIK CEVRIM SURESINI BEKLE
   OWOUT DQ1,1,[$CC,$BE];SICAKLIK DEGERINI ISTIYORUZ
   OWOUT DQ2,1,[$CC,$BE];SICAKLIK DEGERINI ISTIYORUZ
   
   OWIN  DQ1,0,[DEGER1.LOWBYTE,DEGER1.HIGHBYTE]   ;12 BITLIK SONUCu DEGER1 REG. NA ALINIR  
   OWIN  DQ2,0,[DEGER2.LOWBYTE,DEGER2.HIGHBYTE]   ;12 BITLIK SONUCu DEGER2 REG. NA ALINIR  
       
   kollektor=DEGER1/16 ;DEGERI 16 YA BOL VE SONUCU DERECE REG.NA KOY
   boyler=DEGER2/16 ;DEGERI 16 YA BOL VE SONUCU DERECE REG.NA KOY
GOSTER:
LCDOUT 254,128,"KOLLEKTOR  ",DEC KOLLEKTOR,223,"  "
LCDOUT 254,192,"BOYLER     ",DEC boyler,  223,"  "
return
;===============================================================================

707yunus

lcdout 254,128, " SU SICAKLIGI "


buradaki 128  ne işe yarıyor ve birde programda goto loop demişsin loop etiketini görmedim. Belki programın sonsuz döngüye girmiyordur????????

yas

@707yunus 128 değeri lcd yi temizlemeden lcd nin ilk satır ve ilk karekterinin olduğu yere imleci konumlandırmak için

223 değeri derece işareti oluşturmaz 176 veya 186 değerini kullan.

askb

hocam,loop etıketı read yazan satırın hemen altındaydı.deneme ıcın yazdıgım satırı sılerken o da gıtmıs.
2.olarak 128 1.satır,192 2.satır,148 3. satır,242 4.satır ın decımal karsılıkları.

sımdılık sorunu su sekılde cozdum :normalde 223 sayısı derece ısaretıdır.karekter tablosunda bınary karsılıgı=1101111 dır.
ben ıse 11010000 kodunu lcd ye gonderdım dereceye benzer nokta elde ettım.bu karta bu sekılde kullanacagım.elımdekı lcd lerı baska kartda da deneme yapacagım.sonuc aynı olursa bu lcd lerde hata var demektır.aldıgım yere bıldırecegım bu hatayı.bır suru zaman kaybımız oldu neyse.lcd nın arkasındakı kod:pcm160k2-nsw-bbwe-01 mavı ekran goruntu süper ama....

karbal656

Merhaba:
lcdout 254,192, " ",DEC SICAKSUISI,223," "

kod yazım şeklin yanlış tırnak işareti olmayacak.
Örnek:
lcdout 254,192, DEC SICAKSUISI,223

Başarılar.

askb

tırnak kullanmamın nedenı;lcd de yazıyı ortalamk ıcın.ben bu seklıde bırcok kullanımım oldu.4*20 lcd ler ıle bı sorun olmadı.burdakı kullanıs amacı budur.dıkkat edersenız aralarda vırgul var."bosluk",dec sayı,"bosluk" gıbı.

karbal656

Evet haklısın ona dikkat etmedim .

İlginçtir isiste 223 derece işareti olarak gözüküyor.

Başarılar.

yas

Arkadaşlar 223 değerine hangi karakter setinde bakıyorsunuz. Yanlışınız var sistem araçlarından "Karakter İşlemi" çalıştırın ve tip olarak "System" veya "Symbol" veya "Ms Sans" ı seçin ondan sonra bakın karekterin ascii değerine.

askb

arkadaslar hepınıze teşekkür edıyorum.dedıgım gıbı sorunu sımdılık hallettım.dıger lcd lerde de aynı sorun olacak olursa sıze bılgı verırım.sorun yoksa formu mesgul etmemek adına bısey yazmam.kolay gelsın herkese.

Maxim

lcdout 254,192, " ",DEC SICAKSUISI,223," "
neden decimal kod giriyorsunuz

lcdout $FE, $C0, " ",DEC SICAKSUISI,$DF," "
yazın ,olsun bitsin

bu güne kadar hiç sorun yaşamadım.

CLR

Merhaba,

Piyasada ki çoğu LCD'nin driver'ı hd44780'dır. Ve bu LCD'lerde derece işaretinin hex karşılığı 0xDF (veya desimal 223)' dir. Piyasada olan ve bu driver'ı kullanmayan LCD'ler de var.
Muhtemelen "askb" arkadaşın kulandığı lcd'nin driver'ı ks0066'dır ve derece işareti karşılığı 0xD2'dir.

Kolay gelsin.
Knowledge and Experience are Power

askb

eemkutay, hocam.dediginiz gibi.driver olarak ks0066 olmalı.$D2 yı yazınca derece ısaretı cıkıyor.teşekkür ederım.
demekkı bugune kadar kullandıgım lcd ler hep hd44780 tipinde imiş.bu tur bılgılerı unutmamak gerkmıs.hıc aklıma gelmedı.varsa karekter tablosunu buraya koyalım.herkers faydalansın.selamlar.

CLR

Merhaba,

  Driverlarda da çeşitli versiyonlara sahiptir. Bu veriyonlar driver IC üzerinde yazar bu versiyon numaralarına göre LCD'nin karakter tablosu değişir. Bu nedenle LCD hangi driver'ı kullanıyorsa onun datasheet'ini indirip , datasheet içinden driver'ın modeline göre doğru karakter tablosunu bulmak daha mantıklı. Çünkü ks006'nın 5-6 tane versiyonu var.

http://www.datasheet4u.com/html/K/S/0/KS0066_Samsungsemiconductor.pdf.html

Kolay gelsin
Knowledge and Experience are Power