Pic16f628a ile SSD1289 ve xpt2046(ads7843) kullanımı.

Başlatan homer380, 06 Temmuz 2013, 21:15:34

homer380

Biraz uğraştırdı ama en sonunda çalıştırdım.
Buda calışma videosu:http://youtu.be/VQQDXroNaA0

picbasic kaynak kodları:
@ DEVICE pic16f628A                      'i?lemci 16F628                                
@ DEVICE pic16f628A, WDT_ON              'Watch Dog Timer aç?k
@ DEVICE pic16f628A, PWRT_ON             'Power on Timer aç?k
@ DEVICE pic16f628A, PROTECT_OFF         'Kod Protek kapal?
@ DEVICE pic16f628A, MCLR_ON             'MCLR pini kullan?l?yor. on kullanılıyor.OFF kullanılmaz.
@ DEVICE pic16f628A, HS_OSC              'Dahili osilatör kullan?lacak 
@ DEVICE pic16f628A, BOD_OFF
'---------------------------------------------------------------------------------------------------------------
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giri? ç?k??
define osc 20
'---------------------------------------------------------------------------------------------------------------
trisb=%00000000         'irq 5. pine bağlı 
trisa=%00001010         'porta.1 den veri giriişi olacak
'###############################################################################


'tft pin ayarları
symbol wr=portb.0
symbol rd=portb.1
symbol cs=portb.2               'cs=0 ise veri, cs=1 ise komut
symbol rs=portb.3
symbol reset=portb.4
'74hc595 ve dokumatik ekran pin ayarları
symbol irq= porta.3
symbol t_cs=portb.6
symbol clk=portb.7
symbol d_out=porta.0            'spi data cıkısı
symbol d_in=porta.1             'spi data girisi
symbol ap=porta.2               '74hc595 enable(aktif-pasif) ucu aktif_pasif
symbol led= portb.5
'###############################################################################                
al_dusuk var word               ' spi gelen veriyi kaydetmek için ilk 8 bit
al_yuksek var word              ' spi gelen veriyi kaydetmek için ikinci 8 bit
t_komut var word                ' touch komutları
dongu var byte                  ' for next döngüsü için 
komut var word                  ' tft ekran komutları
veri var word                   ' tft ekrana veri göndermek için
yuksek_deger var byte           ' tft ekrana veri-komut göndermek için
dusuk_deger var byte            ' tft ekrana veri-komut göndermek için
sil var byte                     '
i var byte                      ' for next döngüleri için 
j var word                      ' for next döngüleri için
x1 var word                     ' başlagınç koordinatı (apsis-x ekseni)
x2 var word                     ' bitiş koordinatı (apsis-x ekseni)
y1 var word                     ' başlagınç koordinatı (ordinat-y ekseni)
y2 var word                     ' bitiş koordinatı (ordinat-y ekseni)
x1=0:y1=0                       '
'*******************************************************************************
lcd_hazirla_1:   
rd = 1
reset = 1
pause 50
reset = 0
pause 50
reset = 1
pause 50
cs = 0
'################tft ekranı hazıralamak için gerekli komutlar###################        
    komut =$0007:gosub komut_gonder:pause 30
    veri=$0021:gosub veri_yazma:pause 30
'###############################################
    komut =$0000:gosub komut_gonder:pause 30
    veri=$0001:gosub veri_yazma:pause 30
'###############################################
    komut =$0007:gosub komut_gonder:pause 30
    veri=$0023:gosub veri_yazma:pause 30
'###############################################
    komut =$0010:gosub komut_gonder:pause 30
    veri=$0000:gosub veri_yazma:pause 30
    pause 50
'###############################################
    komut =$0007:gosub komut_gonder:pause 30
    veri=$0033:gosub veri_yazma:pause 30
'###############################################
    komut =$0011:gosub komut_gonder:pause 30 'tarama yöntemi soldan-sağdan-aşağıdan-yukarıdan
    veri=$6808:gosub veri_yazma:pause 30
'###############################################
    komut =$0002:gosub komut_gonder:pause 30
    veri=$1000:gosub veri_yazma:pause 30
'###############################################
    komut =$0001:gosub komut_gonder:pause 30
    veri=$2b3f:gosub veri_yazma:pause 30
'###############################################
    komut =$000b:gosub komut_gonder:pause 30
    veri=$5308:gosub veri_yazma:pause 30            
'###############################################
    komut =$0028:gosub komut_gonder:pause 30
    veri=$0006:gosub veri_yazma:pause 30
'###############################################
    komut =$0025:gosub komut_gonder:pause 30         'osilator hızı
    veri=$e000:gosub veri_yazma:pause 30               
'###############################################
    komut =$0022:gosub komut_gonder:pause 30        'tft ye yazma  yapılacağı bildiriliyor
cs=1


goto ekrani_doldur
'*******************************************************************************
veri_yazma:
yuksek_deger=veri.highbyte
dusuk_deger=veri.lowbyte
cs=0      'veri yazma 
rs=1 
shiftout  d_out,clk,1,[dusuk_deger,yuksek_deger] 'data pini, clock pini
ap=1:ap=0:wr=0:wr=1:cs=1
return
'*******************************************************************************
komut_gonder:
yuksek_deger=komut.highbyte
dusuk_deger=komut.lowbyte
cs=0      'komut yazma 
rs=0 
shiftout d_out,clk,1,[dusuk_deger,yuksek_deger] 'data pini, clock pini
ap=1:ap=0:wr=0:cs=0:wr=1:cs=1
return
'*******************************************************************************
ekrani_doldur:
 
veri=$ffff:gosub veri_yazma             'renk kodu
cs=0
for j=0 to 319
    for i=0 to 239
     wr=0
     wr=1   
    next
next
cs=1:veri=$0000:gosub veri_yazma:cs=0
goto basla_spi
'*******************************************************************************
basma:             
cs=1
veri=2016:gosub veri_yazma
cs=0
for j=0 to 4                'x için dongu
    for i=0 to 4            'y için dongu        
    
     wr=0
    wr=1
                                 
    next
next 
cs=1
goto basla_spi
'*******************************************************************************
 adresleme:                                 'tft ekran adresleme (x-y koordinat bilgileri)
 x2=x1+5:y2=y1+5                            'başlama adresinden 3 piksel sonra bitir.

        komut=68:gosub komut_gonder         
        x2=(x2<<8)+x1:veri=x2: gosub veri_yazma    'x2 bitiş adresi 
        
        komut=69:gosub komut_gonder       'x adresi X=240
       veri=y1: gosub veri_yazma
       
       komut=70:gosub komut_gonder       'y2 bitiş adresi adresi (yazmanın biticeği ordinat adresi
       veri=y2: gosub veri_yazma         ' y1 den y2'ye kadar yaz. dongulerde y1-y2 aradaki farka göre)
'############################################################################### 
       komut=78:gosub komut_gonder       
       veri=x1: gosub veri_yazma         'x baslama  adresi 
       
       komut=79:gosub komut_gonder        
       veri=y1: gosub veri_yazma         'y baslama adresi
       
       komut=$0022:gosub komut_gonder       'yazma yapacağımızı bildiriyoz 

goto basma
'************************spi haberleşme kısmı***********************************
  basla_spi:
  while irq=0           'irq 0 ise döngüden cık
  led=0:pause 50
  wend
  led=1 
   gosub algila
    
    goto adresleme
    
  goto basla_spi
  
'******************************************************************************* 
algila:                               'touch gelen veriyi okumak için 
  for dongu=0 to 2
  if dongu=1 then   t_komut=212       'x
  if dongu=2 then   t_komut=148       'y
                cs=1
                pauseus 2
                d_in=1
                clk=0
                t_cs=0           
        shiftout  d_out,clk,5,[t_komut]     'clk düşen kenarda
        pauseus 3
        shiftin d_in,clk,0,[al_dusuk\12]
        t_cs=1
        if t_komut=212 then  gosub hesapla 
        if  t_komut=148 then gosub hesapla       
        irq=1
        pauseus 1
 next    
    
return                          'spi_baslaya geri dönüş var
'*******************************************************************************
hesapLA:                        'touch gelen x ve y leri anlamlı hale getirmek için
if t_komut=212 then 
x1=al_dusuk-108                 'burdaki 108touch okunan en küçük değer
x1=x1**1000                     'touch en büyük x ile en küçük x arasındaki farkın 240 bölümünden
x1=div32 7675                   '6,7666666 gibi bir değer cıkıyor. x1'i 1000 ile carpar 6766 bölersek
PAUSE 1                         'x1 değerini 6,766 bölmüş oluyoruz.
endif

if t_komut=148 then 
y1=al_dusuk-94
y1=y1**1000
y1=div32 5575
PAUSE 1
endif

return                          'algilaya geri dönüş var.
'*******************************************************************************

sadogan

TFT ekranı 16f628a ile yapabilmek taktire şayan.
Tebrik ediyorum.

Kabil ATICI

Filmden fazla bir şey anlaşılmıyor. Keşke filmin sonunda reset butonuna basıpta ekranı sildiğini gösterseydin. Bir süre asetat kalemi ile yazıyorsun diye algıladım.
ambar7

homer380

Alıntı yapılan: sadogan - 06 Temmuz 2013, 22:39:18
TFT ekranı 16f628a ile yapabilmek taktire şayan.
Tebrik ediyorum.
Teşekkür ederim.

Alıntı yapılan: ambar7 - 06 Temmuz 2013, 23:31:51
Filmden fazla bir şey anlaşılmıyor. Keşke filmin sonunda reset butonuna basıpta ekranı sildiğini gösterseydin. Bir süre asetat kalemi ile yazıyorsun diye algıladım.
Buda yeni video umarım görüntü düzgündür. Resim basmak isterdim ama pic16f628a hafızası yeterli değil.

[url=http://youtu.be/zF_ClRoyddA]http://youtu.be/zF_ClRoyddA[/url]

LukeSkywalker


muhittin_kaplan

Haddim Olmayarak Takdir ediyorum. Bizde 32bit yok arm yok "C" Cebelleşelim. Demekki Oluyormuş.

frederic

Helal olsun, derleyiciler ve dillerle savaşmaktan proje üretemeyen arkadaşlara örnek olacaktır bu proje.

Murat Mert

S.A.
Sn. Arkadaşım tebrik ediyorum ellerine sağlık.

Doğru bir söz !

Alıntı yapılan: frederic - 07 Temmuz 2013, 13:52:59
Helal olsun, derleyiciler ve dillerle savaşmaktan proje üretemeyen arkadaşlara örnek olacaktır bu proje.
mert07

arslan74

Merhaba,

Güzel bir çalışma olmuş, arkadaşı tebrik ediyorum. Ancak test etme şansım olmadığı soruyorum. biraz da fazla kuşkucu olduğum için yazıyorum.

Pic16F628'in toplam 2048 komut kapasitesinde ve 224 byte ram hafızasına sahip. Bu işlemi bu kadar hafızaya sığdırmak mümkün mü?

Kafamızda ki soru işaretinin giderilmesi adına, Basic'le uğraşan başka bir arkadaş bunun sınamasını yapabilir mi?

Sanki bana bu işlem, bu kadar hafızayla olmayacak gibi geliyor.

Selamlar


homer380

Alıntı YapPic16F628'in toplam 2048 komut kapasitesinde ve 224 byte ram hafızasına sahip. Bu işlemi bu kadar hafızaya sığdırmak mümkün mü?

Evet mümkün ve derleyince 782 kelime kullanıldı diyor(geriye 1266 komut kalıyor.) yani pic hafızasının yarısını bile kullanmamış oluyorum. Sadece pin sorunu vardı onuda 74hc595 ile aştım.

Maxim

şema varmı acaba devre için ?
güzel çalışma olmuş


skara1214

resim basmak bundan daha zordur herhalde? direk dokunmatik ten hangi noktaya basıldıysa onu renklendir şeklinde çalışıyor herhalde .Yaptıgınız iş muazzam buna saygı duyulur :D
Herkes ölür ama herkes gerçekten yaşamaz

homer380

resim basmakta kolay benim tek yaptığın daha önce tft de için yazılmıs olan  kodları kendi derleyicme uydurmak oldu. en büyük yararı ise datasheet okumayı öğrendim. nereye bakacağımı öğrendim.

fofo