Küçük bir yardım lütfen...

Başlatan ersangundogdu, 10 Ağustos 2014, 10:15:49

ersangundogdu

Arkadaşlar yapmaya çalıştığım devrenin çizimlerini ve ete hocanın programını ekledim, küçük bir açıklama yazdım. Çok uğraştım ancak alıcı kısımda ufak bir ilerleme kaydedebildim. Ancak sonuca ulaşamadım. Sizlerden yardım rica ediyorum...

İlyas KAYA

Kodlar aşağıdadır.
Yalnız veri olarak "50" değil o anki ledlerin durumunu yani "sayac" ı gönderiyorum. Böylece daha kararlı çalışacaktır.

Alıcı kısımda da aynı değişikliği yaptım. Kodları inceleyiniz.



Verici:


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 16.02.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'@ DEVICE pic12F675                      'işlemci 12F675                               
'@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
'@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
'@ DEVICE pic12F675, PROTECT_OFF         'Kod Protek kapalı
'@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
'@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF

' #CONFIG
'      __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_ON
'#ENDCONFIG


DEFINE OSCCAL_1K 1
DEFINE OSC 4
CMCON = 7
ANSEL=0
TRISIO=%00000010
GPIO=0

SYMBOL CIKIS=GPIO.0
SYMBOL TUS=GPIO.1
LED VAR GPIO.2
LED2 VAR GPIO.5

VER VAR BYTE
VER=0
sayac var byte
KES VAR BIT

PAUSE 100


BASLA:

IF TUS=1 THEN KES=0

IF TUS=0 AND KES=0 THEN
   sayac=sayac+1
   VER=SAYAC
GOSUB GONDER
KES=1
ELSE

ENDIF
   

SELECT CASE SAYAC
CASE 1
LED=1
LED2=0

CASE 2
LED=1
LED2=1

CASE 3
LED=0
LED2=0
SAYAC=0


END SELECT


       
  GOTO BASLA

GONDER:
    SEROUT2 CIKIS,813,[Rep $AA\5, Rep $00\5, Rep $FF\5]
    SEROUT2 CIKIS,813,["E","T","E",VER]
    RETURN

END





ALICI:


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 16.02.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'@ DEVICE pic12F675                      'işlemci 12F675                               
'@ DEVICE pic12F675, WDT_ON              'Watch Dog timer açık
'@ DEVICE pic12F675, PWRT_ON             'Power on timer açık
'@ DEVICE pic12F675, PROTECT_OFF         'Kod Protek kapalı
'@ DEVICE pic12F675, MCLR_off            'MCLR pini kullanılMIYOR.
'@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_ON & _CP_OFF

'#CONFIG
'     __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _MCLRE_OFF & _CP_ON
'#ENDCONFIG


DEFINE OSCCAL_1K 1
DEFINE OSC 4
CMCON = 7
ANSEL=0
TRISIO=%00000001
GPIO=0

SYMBOL GIRIS=GPIO.0
SYMBOL LED=GPIO.1
SYMBOL LED2=GPIO.2
I VAR BYTE
AL VAR BYTE
AL=50
PAUSE 100

BASLA:
    SERIN2 GIRIS,813,[WAIT("ETE"),AL]

SELECT CASE al
   
CASE 1
LED=1
LED2=0

CASE 2
LED=1
LED2=1

CASE 3
LED=0
LED2=0

END SELECT


GOTO BASLA
END

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ersangundogdu

Ne kadar teşekkür etsem az. Tam istediğim gibi olmuş. Elleriniz dert görmesin...

ersangundogdu

#3
Sayın İlyas Kaya; verdiğiniz kodlara sadık kalarak bir kaç değişiklik yaptım, devreyi board üzerinde denedim. Enerji verdiğimde ilk butona basışta devre tepki vermiyor. Sonrasında normal çalışıyor. İsiste olmuyor bu olay. Enerjiyi verdikten sonra 20-30 saniye beklersem sorun yok. Aslında çok problem değil ama çözümü kolay ise yardımcı olur musunuz?

ersangundogdu

Beslemeden kaynaklanıyormuş. 2 kondansatör ekledim düzeldi.

ersangundogdu

Arkadaşalar bu devreyi yaptım, çalışıyor fakat şöyle bir sorun var: Vericide tuşa bastığımda 1 nolu led yanıyor fakat alıcıda hareket olmuyor. Bu olay her zaman olmuyor fakat arada bir olsada haberleşme sorunu oluyor. Alıcı ve vericide anten kullandım. Sinyal gücünü daha fazla arttırma imkanım yok maalesef. Yada verici beslemesini 12 volt mu yapsam? Kar yada yağmur yağdığında sorunun artacağını düşünüyorum. Aklıma şöyle bir düşünce geldi: Bir rf alıcı verici kit daha eklesek, her iki devreyi çift taraflı haberleştirsek, yani tuşa basıldığında alıcı sinyali işlediğinde farklı şifre ile karşı sinyal gönderse. Verici bu sinyali alıp ilgili ledi yaksa. Programda çok değişiklik yapmak gerekir mi? Yada değişen bir şey olmaz mı? Kodlarda değişiklik olayını beceremedim. Yardımcı olursanız sevinirim...

BİDİL

12 voltla beslemen bir şey değiştirmeyecektir nihayetinde 5 volta regüle edeceksin. İkinci bir rf bir anlam veremedim (o da olmazsa üçüncü bir rf mi ekleyeceksin:) )

Acizane fikrim;
Butonu isıs daki gibi bağladıysan GP2 ye pullup yapsan iyi olur derim. Belkide sebebi bu olabilir diye düşünüyorum. Birde Boardın sağlam olduğundan emin ol.

ersangundogdu

BİDİL; rf konusunda pek bilgin olmadığı anlaşılıyor. Vericiler 12 volta kadar beslenebilir. Üçüncü rf kitinin gereksiz olduğunu senden daha iyi biliyorum. Picin dahili pullup dirençlerini aktif ettiğim için harici dirence gerek yok. Board sağlam olmasa devre çalışmaz. Üslubuna dikkat et lütfen...

BİDİL

"Yada verici beslemesini 12 volt mu yapsam?" evet haklısın bu kısmı yanlış anlamışım.
Beni affet kırdıysam özür dilerim.

ersangundogdu

Önemli değil kardeşim. Hepimiz bazen hata yapabiliyoruz...

ete

Pek çok kişi gibi Ersan da senkron denilen şeyin önemini bilmiyor.
Seri haberleşme zamanın çok küçük bir diliminde yapılan bir bilgi alışverişidir.
Senkron işide bu alışverişin uyum içinde yapılması işlemine verilen addır.
Güncel hayatta yaşadığımız olaylar ile benzetme yapmaya çalışayım.
Bir trene bineceksiniz. Siz trenden önce gelip istasyonda beklerseniz treni kaçırma ihtimaliniz sıfırdır. Zaten oradasınız ve tren bir kaç dakika bile dursa trene mutlaka binersiniz. Ama siz istasyonun dış kapısında sigara içerken tren gelmiş ve biraz bekleyip gitmiş ise treni kaçırırsınız. Seri data yollama da bu işe benzer. Seri datayı alacak olan birim beklemede ise datayı alır. O anda 1ms lik bir gecekme yaratacak başka bir iş yapıyor olsa bile bu bilgileri alamayacaktır.

Senin program da olası kusurlar şunlar;
1. Verici programda bol keseden pause 100 kullanmışsın. Bu gecikmeler senkronu bozacak komutlardır. Pause gerekli ise kullanılır yoksa dur şuraya bir gecikme koyayım diye kullanılmaz.
2. Tuş kontrolü daha kolay yapılabilirdi.
     IF TUS=0 THEN
         SAYAC=SAYAC+1
          WHILE TUS=0:WEND
          PAUSE 50
      ENDIF
     şeklinde ki komut dizilimi aynı işi görebilirdi.
     Tabiiki burada sayac değeri tuşa bastıkça artmış olacak. Ancak sayac=4 olunca orada sıfırlanıyor. Hadi bunda sorun yok diyelim. Ama sayac=0 iken ne olacak. Sistem boşuna çalışmış olacaktır. Hiç olmazsa sayac=0 iken bir gönderme yapılmamasını sağlaman iyi olurdu.

İşaretçi bilgisi ortalama 3 karekterden oluşursa sistem daha iyi çalışmaktadır. Sen 5 karekter kullanarak sistemi senkrondan uzaklaşılsın diye zorluyorsun adeta.

Alıcı programa gelince,
Elbette alma işi USART ile olsa daha stabil bir alma verme işlemi yapabilirdin. Tabiiki bunun için USART portu olan bir işlemci kullanman gerekecektir.

Alıcı programda da bol keseden Pause lerin kullanımı devam etmiş. Case komutundan sonra verdiğin pause ne işine yarayacak?. Bana kalırsa alıcı programdaki bütün pause leri kaldırmalısın. Döngü ne kadar çabuk tekrarlanırsa alma ihtimalin o kadar artar.

Ete

ersangundogdu


ersangundogdu

Değerli üstadlar; eklediğim devrede bir kaç değişiklik yapmak istedim beceremedim. Acemiliğimi bağışlayın. Verici devredeki butona her basışta ekranın 1. satırında ''1. KADEME, 2. KADEME, 3. KADEME, SİSTEM OFF'' yazısını yazdıramadım. Yani butona 1 kez bastığımda eranda ''1. KADEME'' yazacak. Tekrar bastığımda ''2. KADEME'' tekrar bastığımda ''3. KADEME'' tekrar bastığımda ''SISTEM OFF'' yazacak. Butona her basışta bu döngü devam edecek. Verici ekranda ne yazıyorsa alıcı ekranda da o yazacak. Uzaktan şofben kontrolü için yaptığım devreye adapte etmek istiyorum. Lütfen bir yardım edin. Saygılar...

İlyas KAYA

Yapamadığınız kısmı nedir ?

zaten her butona basıldığında işlem yapan kısmı yapmıştınız. Geriye sadece ekrana yazmak kalıyor.
Siz neresinde takıldınız ?


Ekrana yazdırma için ise ;


IF KADEME<4 THEN

lcdout $fe,1,#KADEME,".KADEME"
         ELSE
LCDOUT $FE,1,"SISTEM OFF"
         ENDIF



Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ersangundogdu

Sayın İlyas Kaya; en son eklediğim devre farklı. O devre üzerinde yardım rica etmiştim...

Powered by EzPortal