p16f84 ve gold kart

Başlatan Mustafa48, 22 Kasım 2004, 15:02:26

Mustafa48

arkadaşlar pıc16f84a ya dışarıdan gold kart bağlayarak bir led yakmak istiyorun. gold kartın flashına(16f84) 4 haneli rakam yazıp (1234) bunu diğer 16f84a okutup rakam doğru ise portun herhangi bacağından led yakacak. Burada gold kartın epromuna herhangi bir şey yazmıyorum Aşağıda yazdığım proğram sırası ile var

Gold kart için

include "modedefs.bas"
a var word
loop:
a=1234
serout portb.7,N2400,[a]
goto loop
end
bu proğramı hexe çevirdikten sonra Cart Writter proğramı ile gold Karta yazdım. Herhangi bir hata vermedi.

Okuyacak Pic16f84a için yazılan proğram

include "modedefs.bas"
a var word
loop:
serin porta.2,N2400,[a]
if a=1234 then
high portb.0
endif
goto loop
end

bu proğramıda hex yapıp IC progla Pice yükledim.
Bağlantılar şöyle
goldkart ................ Pic
Vcc........................ vcc
Vss.........................vss
mcrl+pullup.............mcrl
rb.7........................ra.2
rb6/clk....................osc1

osilaskopla pic in ra.2 nolu bacağını okuyorum bir bilgi mevcut fakat led yanmıyor. Burada ne hata yapıyorum bulamadım. Gerçi ilk defa smart kart yazıyorum. Şimdiden yardımlarınız için teşekkür ederim

cozturk

karttan çıkan akım normal picteki gibi olmayabilir. 1 tane bc337 buffer at. Belki de led ters bağlanmış olabilir. Vssye  ye katod bağlanacak  :)

Mustafa48

üstadım çok hızlısın teşekkür ederim şimdi deneyeceğim led doğru eminim benim öğrenmek istediğim basicte yazılan proğram mantıklımı bu şekilde çalışırmı aslında devre şeması çizip göndereceğim ama nasıl buraya koyarım bilmiyorum Çizim pdf formatında teşekkürler

Mustafa48

Alıntı yapılan: "cozturk"karttan çıkan akım normal picteki gibi olmayabilir. 1 tane bc337 buffer at. Belki de led ters bağlanmış olabilir. Vssye  ye katod bağlanacak  :)

üstadım bir yanlış anlama var galiba Şöyleki ben zaten başka bir pic daha kullanıyorum karttaki pice direk led bağlamıyorum. Kartı diğer bir 16f84e okutuyorum bilgi doğru ise ledi yak diyorum. Ama bir türlü başaramıyorum yardımlarınızı bekliyorum

cozturk

Haklısın anlamak istediğim gibi anlamıştım. Ben kartın içindeki pici kullanabilir miyiz diye düşünüyordum  da ondan. Bu konuda tecrübem yok. Tahmini olarak önce basit bir deneme yapmanı öneririm.

Mesela serin porta.2,N2400,[a]  demişsin. Bu esnada senin kart bilgi gönderiyor mu ki? pic bunu alıp değerlendirecek ledi yakacak? işte bu gibi mantığa aykırı görünen yerleri gidermek lazım. bir de serin2'yi kullanırsan, x saniye içinde veri gelmez ise label001'e dallan veya yeniden bekle diyebilirsin.

Devrede başka sorunlar da olabilir. Kartın oscsi dışarıda oluyor bildiğim kadarıyla. Dışarıdaki picin oscsinden buraya da gönderebilirsin.

İstersen kartla filan hiç uğraşmadan proteusta da deneyebilirsin. Tabi kartın içindeki pici vs temsil eden bir devre ve okuma yapacak pic olacak.

Mustafa48

cöztürk üstadım bir çok deneme yaptım serin2 yide denedim olmadı hatta dışardaki pice lcd taktım ne gibi data geliyor diye smart karttan gönderdiğim karekterle birlikte bir sürü karekterler geliyor yani anlayacağın smart kartla dış ortamdaki pic tam olarak haberleşmiyor yardımlarınızı bekliyorum Saygılar.

Mustafa48

cöztürk üstadım en sonunda hallettim proğramları aşağıda veriyorum
tek sorunum 4 haneli sayı gönderemiyorum yani 255 e kadar tüm sayıları gönderiyorum fakat 4135 gibi bir rakamı gönderemiyorum bir seferde bunu nasıl yapabilirim
goldkart içindeki pic için

 
include "modedefs.bas"

datap   var portb.7   
veri   var   word
baud    con   84  '9600,N,8,1
 
call rs485_send
pause 150
rs485_send:
veri=55
serout2 datap,baud,[veri]
return

Dışardaki pic 16f84 için

include "modedefs.bas"
datap   var portb.7   
veri   var   word
baud    con   84    '9600,N,8,1
led var portb.0
trisb=%11000110
veri=0
led =0
main:
   pause 20
   if portb.1=0 then son
   serin2 datap,baud,100,main,[veri]
       lcdout $fe,1
     lcdout $fe,2,#veri
     pause 250
   if veri=55  then yak
   led=0
   
goto main
yak:
   led=1
   pause 250
goto main
son:
   led=0
   veri=0
goto main

portb.1 pinine smart kartın siviç ucu bağlı kart takılı iken oku anlamında yapıldı veri değerini 55 yerine 4 haneli rakam gönderemiyorum sizce nasıl düzenleme yapmayılım Tüm yardım eden arkadaşlara saygılar teşekkürler

cozturk

veri var byte[4]  'dersen bu 4 baytlık veri demektir.

veri[0]=4
veri[1]=1
veri[2]=3
veri[3]=5         'dedikten sonra
....
serout2 datap,baud,[veri]   'ile 4135  gitmesi lazım

...
serin2 datap,baud,100,main,[veri]
demişsin. veri word ise sadece 2 baytlık veri gelir. 4135 ise 4 bayttır. ama 2 bayt maks 65535 olmuyor mu? dersen haklısın. ozaman ona göre bakmak lazım.  bu serout2,serin gibi komutların okuma gönderme tipi de vardır. yani binaryi hexi ascii gibi farklı şekillerde gider

1)         A variable preceded by BIN will receive the ASCII representation of its binary value. For example, if BIN B0 is specified and A1000" is received, B0 will be set to 8.  
2)  A variable preceded by DEC will receive the ASCII representation of its decimal value. For example, if DEC B0 is specified and A123" is received, B0 will be set to 123.  
3)  A variable preceded by HEX will receive the ASCII representation of its hexadecimal value. For example, if HEX B0 is specified and AFE" is received, B0 will be set to 254.  
4)  SKIP followed by a count will skip that many characters in the input stream. For example, SKIP 4 will skip 4 characters..  
5)  STR followed by a byte array variable, count and optional ending character will receive a string of characters. The string length is determined by the count or when the optional character is encountered in the input.  
6)  The list of data items to be received may be preceded by one or more qualifiers between parenthesis after WAIT. SERIN2 must receive these bytes in exact order before receiving the data items. If any byte received does not match the next byte in the qualifier sequence, the qualification process starts over (i.e. the next received byte is compared to the first item in the qualifier list). A Qualifier can be a constant, variable or a string constant. Each character of a string is treated as an individual qualifier.  
7)  WAITSTR can be used as WAIT above to force SERIN2 to wait for a string of characters of an optional length before proceeding.  

jashua

peki arkadaşlar bu yazılım devamın da ;

include "modedefs.bas"

datap var portb.7
veri var word
baud con 84 '9600,N,8,1

call rs485_send
pause 150
rs485_send:
veri=55
serout2 datap,baud,[veri]
return

veri yollandıktan sonra veri=55 i değiştirip bir sonraki kullanımda kartı nasıl bloklayabilirim. mesela kart takılacak veri yollanacak daha sonra kartın icindeki ver=55 veri=10 olacak ve kart yeniden yüklenene kadar öyle kalacak.böylece kart yerine takılsa led yanmayacak