GRAFİK LCD İLE DEĞİŞKEN YAZDIRMAK

Başlatan enrique_iglesias, 18 Ocak 2009, 05:26:02

enrique_iglesias

MERHABA ARKADAŞLAR BEN GRAFİK LCD'YE DEĞİŞKEN YAZDIRAMADIM DEĞİŞKEN YERİNE ASCII KARŞILIĞI EKRANA GELİYOR SICAKLIK DECIMAL GÖZÜKMÜYOR NE YAPABİLİRİM??

KODLARIM :
clear 
ADCON1   = 7 

TRISD   = 0 
        TRISB.0 = 0 
        TRISB.1 = 0 
        TRISB.2 = 0 
        TRISB.4 = 0 
        TRISB.5 = 0 
        TRISB.3 = 0
        TRISB.6 = 0

TRISC=0
PORTC=0



pinData     var PORTD '*                         'KULLANILIYOR      
pinWR       var PORTB.3 '* PİN NO 5 PORTB.1      ' SÜREKLİ 1 YAZMADAN SONRA 0 VE 1 YAPILIYOR 
pinRD       var PORTB.2 '* PİN NO 4 PORTB.0      ' SÜREKLİ 1    
pinCS       var PORTB.5 '* PİN NO 15 PORTB.3     ' SÜREKLİ 0
pinA0       var PORTB.4 '* PİN NO 6 PORTB.2      ' DATA YOLLARKEN 0 KOMUT YOLLARKEN 1 ÇEKİLECEK
pinRST      var PORTB.6 '* PİN NO 16             ' SÜREKLİ 1 
PinRST =1
        

sens1   var PORTC.0 
 
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
'SICAKLIK ÖLÇME DEĞİŞKENLERİ----------------------------------------------------------   
SIGN_BITI   VAR HAM.Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
NEGAT_ISI   CON 1           ' Negatif_Cold = 1
Deg         CON 223         ' ° işareti
SIGN        VAR BYTE        '  ISI değeri için  +/-  işaret
TEMP        VAR BYTE         ' Div32 bit hesap için geçici değişken

         

conSet              con   $40 
conScroll           con   $44 
conCursorForm       con   $5d 
conCursorAddress   con   $46 
conCursorRight       con   $4c 
conOverlay           con   $5b 
conWrite           con   $42 
conDisplayON       con   $59 
conDisplayOFF       con   $58 
conCharPerLine      con   $28    ' 40  karakter / satir 


varCommand   Var   BYTE 
varCursor   var BYTE 
varByte      var   BYTE 
varLoop1   var   BYTE 
varLoop2   var   BYTE 
varAddress   var   WORD 

       pinRD  = 1 
       pinWR  = 1 
       pinCS  = 0 
         
        pause 100 

goto main 

' --------------------------- AltProgramlar -------------------------- 

SendData: 
   pinA0   = 0 
   pinData = varByte 
   pinWR   = 0 
'   @ nop 
   pinWR   = 1 
return 

SendCommand: 
   pinA0   = 1 
   pinData = varCommand 
   pinWR   = 0 
'   @ nop 
   pinWR   = 1 
return 

ClearGraphic: 
   varCommand = conCursorAddress 
   gosub SendCommand 
   varByte = $00 
   gosub SendData 
   varByte = $10 
   gosub SendData 

   varCommand = conCursorRight 
   gosub SendCommand 

   varCommand = conWrite 
   gosub SendCommand 
    varByte = %00000000            ' 1 byte = 8 bits = 8 pixels wide 
   for varLoop1 = 1 to 240        ' 240 pixels high 
      for varLoop2 = 1 to 40      ' 40 bytes = 320 bits = 320 pixels wide 
      gosub SendData 
      next varLoop2 
   next varLoop1 
return 

ClearText: 
   varCommand = conCursorAddress 
   gosub SendCommand 
   varByte = $00 
   gosub SendData 
   varByte = $00 
   gosub SendData 

   varCommand = conCursorRight 
   gosub SendCommand 

   varCommand = conWrite 
   gosub SendCommand 
    varByte = " " 
   for varLoop1 = 1 to 30 
      for varLoop2 = 1 to 40 
          gosub SendData 
      next varLoop2 
   next varLoop1 
return 

InitDisplay: 
   varCommand = conSet 
   gosub SendCommand 
   for varLoop1 = 0 to 7 
       lookup varLoop1,[$32,$87,$07,$27,$2B,$EF,$28,$00],varByte 
      gosub SendData 
   next varLoop1 

   varCommand = conScroll 
   gosub SendCommand 
   for varLoop1 = 0 to 5 
       lookup varLoop1,[$00,$00,$EF,$00,$10,$EF],varByte 
      gosub SendData 
   next varLoop1 

   varCommand = conOverlay 
   gosub SendCommand 
   varByte = %00000001 
   gosub SendData 

   varCommand =conDisplayOFF 
   gosub SendCommand 
   varByte = %00000000 
   gosub SendData 
    
   gosub ClearText 
   gosub ClearGraphic 

   varCommand = conDisplayON 
   gosub SendCommand 
    varByte = %00010100 
    gosub SendData 

   varCommand = conCursorAddress 
   gosub SendCommand 
   varByte = $0 
   gosub SendData 
   varByte = $0 
   gosub SendData 

   varCommand =conCursorForm 
   gosub SendCommand 
   varByte = $04 
   gosub SendData 
   varByte = $86 
   gosub SendData 
return 

SetAddress: 
   varCommand = conCursorAddress 
   gosub SendCommand 
   varByte = varAddress.BYTE0 
   gosub SendData 
   varByte = varAddress.BYTE1 
   gosub SendData 

   varCommand = varCursor 
   gosub SendCommand 

      varCommand = conWrite 
      gosub SendCommand 
return 

' ------------------------------- ANA program -------------------------------- 

Main: 
   gosub InitDisplay 
basla:
PAUSE 1000
GOSUB oku1


     varAddress = 0 
      varCursor  = conCursorRight 
      gosub SetAddress 
      
varByte = ISI
gosub SendData
pause 100
goto basla

oku1: 

           OWOUT   sens1, 1, [$CC, $44]' ISI değerini oku
Bekle:
           OWIN    sens1, 4, [Busy]    ' Busy değerini oku
           IF      Busy = 0 THEN Bekle  ' hala meşgulmü? , evet ise goto Bekle..!
           OWOUT   sens1, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    sens1, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
           GOSUB   Hesapla
           RETURN
             
Hesapla:                 ' Ham değerden Santigrat derece hesabı
    Sign  = "+"
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-"  
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10 
       GOTO GEC   
    endif

TEMP = 625 * (HAM+1) 
ISI = DIV32 100 
GEC: 
FLOAT = (ISI //100)/10 
ISI=ISI/100 
RETURN

   
end



SICAKLIK ARTTIKÇA ŞEKİLLERDE DEĞİŞİYOR AMA SICAKLIĞI YAZDIRAMADIM :(

fractal

aynı sorunu ben ccs c de yaşamıştım.ben c biliyorum
orda sprintf diye bir komut var değişkenin türü neyse onu belirtiyorsun

char t[5];
unsigned  int sicaklik;


sprintf(t,%d,sicaklik);
sonra yazdırıyorsun glcd komutu ile.sanırım böçyledyi burda önemli olan

sicaklik değişkeni orda %d ifadesinin uyumlu olması.long icin %lu yazıyorsun.bunların tanımlamarı mevcut.sanırım senin sorun böyle bir yerde...
Restantum cogniscutur Quantum deligutur

Erhan YILMAZ

Yanlış anlamadıysam 8 bitlik değişkeni grafik lcdde göstermeye çalışıyorsun bunun için değişkenin birler onlar yüzler şeklinde bcd karşılığı üretip 3 basamağıda ekrana göndermen lazım örneklemek gerekirse pic basicte

sayi = 123
birler  = sayi Dig 0 ;birler = 3 olur
onlar  = sayi Dig 1 ;onlar = 2 olur
yuzler = sayi Dig 2 ;yüzler =1 olur

her basamağı asciye çevirip ekrana göndermek içinde sayıya hex 30 veya desimal 48 eklersin örnek birler=birler+$30 bu şekilde sayıyı basamaklara ayırıp sonrada ascii koda çevirip grafik lcdde yazdırabilirsin

enrique_iglesias

erhan dostum teşekkür ederim sonunda sorunumu senin verdiğin yöntemle çözdüm ayrıca fractal dostum verdiğin bilgi için sanada teşekkür ederim....

sormak istediğim bir konu daha var ben lcd'deki standart fontları kullanıyorum..Mesela bazı karakterleri örneğin başlıkları nasıl koyu yapabilirim? veya bir şekil bir logo nasıl yapabilirim???

şimdiden teşekkür ederim...

fractal

nasıl koyu yazacağını bilmiyorum.bu sanırım kullandığın lcd ile ilgili olabilir.ve bir analog uygulama gerektirebilir.ama istediğin karakteri yada resmi bmp formatında ekrana basabilirsin.ben c kullanıyorum.micro c nin icinde bu programlar eklenmiş.ve nette fastlcd mi neydi böyle programlar sayesinde kendi şekilllerini ekleye bilirsin.yine değişik fontlart da  mevcut.bu micro c deki program direk c kodlarını hex kodlarını üretiyor.sen programını ekliyorsun okadar.mesela bunun aracılığıyla bmp resmini hex kodalarına dönüştürebilirsin..
Restantum cogniscutur Quantum deligutur

Erhan YILMAZ

Dostum 128x64 lcdler için umut kazanç tarfından yazılmış bir program var yaptığı program ile 128x64 siyah beyaz bmp resmileri veya yazıları bin dosyasına dönüştürüyor bin dosyasını 24cxx serisi eeproma atıp yapacağın programda resmin veya yazının başlangıç adresini belirtip lcdde göstermesi için altprogramı çağırıyorsun resim ekranda gösteriliyor pic resim datalarını eepromdan okuyor fakat program proton basic ile uyarlı veri paketlerini içeriğini açıklanmış kodlar pic basicede çevrilebilir. program gerçekten kullanışlı grafik lcdde gösterceğin resimleri eeprom hafızasında tutuyor picin hafızasında yer kaplamıyor eklediğim dosyada program ve açıklaması mevcut kolay gelsin


GLCD resim yazı çevirici

enrique_iglesias

baya bi zamandır uğraştım ama başarız oldum bu konuda kullandığım lcd 320x240

şu koda tanımlayama çalışıyorum bilmiyorum yanlışmı yapıyorum :
varByte = %00000000            ' 1 byte = 8 bits = 8 pixels wide 
   for varLoop1 = 1 to 240        ' 240 pixels high 
      for varLoop2 = 1 to 40      ' 40 bytes = 320 bits = 320 pixels wide 
      pinA0   = 0 
        pinData = varbyte
        pinWR   = 0 
    pinWR   = 1  
      next varLoop2 
   next varLoop1


burda varbyte değişkenine bu hex kodlarını nasıl tanımlatacağım portd ye tanımlı 8 bitlik ekrana bağlı.

şimdi fastlcd diye bir programla bir resmi bytelara çeviriyorum peki bunları nasıl tanımlamam gerek?

fractal

ccs c kullandığım için sorununu tam anlayamadım cözüm.için. bu bişler ccs c ile cok kolay....grafik lcd lcd ler pek farketmiyor..
Restantum cogniscutur Quantum deligutur

enrique_iglesias

Fractal dostum öncelikle yardımların için teşekkür ederim....proton ve c'ye geçmek için biraz zamana ihtiyacım var ve gerekli olduğunu şimdi daha iyi anladım....

Yalnız mantığını kavramak istediğim için soruyorum :

pic basic ile yukarıdan 9ncu pixel'den sağa doğru hepsini doldurmak istiyorum.

yani bir çizgi çekecem ama yapamadım...

ahmet2004

ClearGraphic: 
   varCommand = conCursorAddress 
   gosub SendCommand 
   varByte = $00 
   gosub SendData 
   varByte = $10 
   gosub SendData 

   varCommand = conCursorRight 
   gosub SendCommand 

   varCommand = conWrite 
   gosub SendCommand 
    varByte = %00000000            ' 1 byte = 8 bits = 8 pixels wide 
   for varLoop1 = 1 to 240        ' 240 pixels high 
      for varLoop2 = 1 to 40      ' 40 bytes = 320 bits = 320 pixels wide 
      gosub SendData 
      next varLoop2 
   next varLoop1 
return



Öncelikle ClearGraphic komutunu incelermisin neler yapılmış.

  varCommand = conWrite
  gosub SendCommand
   varByte = %00000000            ' 1 byte = 8 bits = 8 pixels wide
  for varLoop1 = 1 to 240        ' 240 pixels high
     for varLoop2 = 1 to 40      ' 40 bytes = 320 bits = 320 pixels wide
     gosub SendData
     next varLoop2
  next varLoop1


Burada varByte = %00000000  yerine %00000001  yazarak dene

neler oluyor gözlemle.Grafik pixel basmadan önce kursor adresini bildirmeliyiz.İncele...

enrique_iglesias

ahmet dostum sana ne kadar teşekkür etsem azdır bu 2nci imdadıma yetiştiğin oldu şimdi ekrana istediğim gibi tablo çizebiliyorum biraz karışık oldu ama mantığını sonunda aldım......

yalnız bi sorum olacak...

bu kodlardaki tanımlamalar nedir yani :

conSet              con   $40
conScroll           con   $44
conCursorForm       con   $5d
conCursorAddress   con   $46
conCursorRight       con   $4c
conOverlay           con   $5b
conWrite           con   $42
conDisplayON       con   $59
conDisplayOFF       con   $58
conCharPerLine      con   $28

bunları tam olarak ney ne işe yarar anlayamadım...Anladığımda çok daha güzel şeyler yapacağımı düşünüyorum.

mesela normalde x=0 y=0 'dan başlıyor yazmaya ama ben x=40 y=80 pixel adresinden nasıl başlatırım yazmaya hangi adrese ne eklemeliyim.denedim olmadı...

ahmet2004

Komut Seti:


Döküman:
http://www.4shared.com/file/81989725/90c477f/S1D13305_ahmet2004.html

Bu PDF sed1335 glcd ile ilgili herşey var.

Özelliklede LAYER lar konusuna bak.

enrique_iglesias

teşekkür ederim şimdi daha iyi oldu :) iyi çalışmalar