Biraz uğraştırdı ama en sonunda çalıştırdım.
Buda calışma videosu:http://youtu.be/VQQDXroNaA0 (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.
'*******************************************************************************
TFT ekranı 16f628a ile yapabilmek taktire şayan.
Tebrik ediyorum.
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.
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 (http://youtu.be/zF_ClRoyddA)[/url]
Güzel çalışma.
Haddim Olmayarak Takdir ediyorum. Bizde 32bit yok arm yok "C" Cebelleşelim. Demekki Oluyormuş.
Helal olsun, derleyiciler ve dillerle savaşmaktan proje üretemeyen arkadaşlara örnek olacaktır bu proje.
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.
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
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.
şema varmı acaba devre için ?
güzel çalışma olmuş
proteusda pic16f628a ve 74hc595 simülasyonu var.
http://www.dosya.tc/server12/PREaNH/tft_ekran_proteus.rar.html (http://www.dosya.tc/server12/PREaNH/tft_ekran_proteus.rar.html)
(http://l1307.hizliresim.com/1c/d/q5pvq.jpg)
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
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.
Dosyayı tekrar yüklermisin silinmiş
Eğer bizim forumda da olsa idi ben bunu yakıştırırdım,
(http://s8.postimg.cc/et1wb8t9d/Psc_Contest_Winner_short.jpg) (http://postimg.cc/)
Teşekkür ederim. Sizin gibi üstatlar dururken bana bu yakışmaz.
Helal olsun çok temiz ve güzel bir çalışma hele ki bread boardda bunu kurmak çok sıkıntılı bir durum ama güzel olmuş tebrikler :)
Sevgili Hocam bunu mcu ile değilde 8086 ailesi bir işlemciye Ram takıp , sd yi de harddisk gibi kullanarak yapabilirmiyiz , aslında şunu sordum , tft standartı ms dos un ekran kartını kullanma standartı ile aynı , yane vga.sys gibi , yani bunu 8086 ile kullanırsak celaron , atom benzeri şeylerdede kullanırız ,
valla konuyu hortlatıyorum fakat direk konu sahibinin dikkatini daha çabuk çekebilirim.
Ben bu ekranda butonlar koymayı planlıyorum toggle yada bas bırak olacak şekilde. bunun için hangi işlemciyi kullanmam gerekir ve nasıl bir yol izlemem gerekir. örnek kod parçacığı filan var midir?
şimdiden teşekkürler
Buton eklemek oldukça kolay. Butonların koordinatlarıni alıp nereye basıldığıni bilmek yeterli oalcaktir. Işlemci seçimi ise sizin yapacağınız projeye göre değişir. Ben suan 18f 4550 kullanıyorum fazlası ile yetiyor . Ama fotoğraf basması 9 sn sürüyordu en son daha hızlı bir işlemci ile daha hızlı işlemler yapılabilir. Yazılımsal SPI yerine donanımsal SPI kullanmak işi daha da hizlandiracaktir.