Rf kontrol projesi

Başlatan huseyin0579, 16 Ağustos 2014, 22:19:47

ete

Artık söyleye söyleye dilim nasır tuttu. Kesme kullanılan programlarda PAUSE komutu kullanılmamalı diye.
Zira kullanmış olduğun PAUSE 1000 işlemci için çok büyük bir zaman dilimidir. Bu süre zarfında işlemci 1 milyon işlem yapabilir.
Kesme emri geldiği zaman programın kesme etiketine atlayabilmesi için o anda yürütmekte olduğu BASIC komutunu bitirmesi gerekir. Kesme emri tamda Pause 1000 komutunu işletirken gelirse program kesme etiketine 1000 ms sonra gidecek demektir.
Halbuki Pause 1000 yerine;
GOSUB DELAY deyip programı DELAY isimli gecikme alt programına yollasan orada da;
DELAY:
FOR W=0 to 20000
pauseus 5
next
return
şeklinde bir program parçası kullansan program kesmelere anında cevap verebilecektir. Süre az geliyorsa 20000 rakamını büyütebilirsin.
Ayrıca bana şu satırların mantığını söylermisin?
KAPA:
PAUSE 1000
LOW PORTA.0
RETURN
Kapa etiketinden sonra program önce 1000 ms bekiyor. Neden bekliyor? belli değil. öyle laf olsun diye konmuş bir komut.
Buna benzer bir çok satır var.

Ayrıca ;
     HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
     HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
      HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]
satırları çok fazla yalnızca 1 satır yeterli olur diğerlerini sil.

Asıl hatanın ne olduğunu anlatımından anlamadım. Ama muhtemelen bu hatalar yüzünden istediğin olmuyordur.
Bunları düzelt bakalım sonra tekrar kontrol et ve yne probem var ise sorunun ne olduğunu güzel güzel ve tane tane anlat lütfen.

$RF şeklinde bir işaretçi UDEA modüllerinden birinin zorunlu olarak kullanılması gereken işaretçilerinden birisi idi yanlış hatıramıyorsam. Şayet o modülü kullanıyorsan başka işaretçi kullanamazsın. Başka bir modül kullanıyorsan yada modülün getirdiği bir zorunluluk yok ise istediğin işareti kullanabilirsin. Tavsiyem 3 karekter olması yönündedir.

Ete

huseyin0579

Hocam pause 1000 gecikmesi ile örneğin ilk basçek butonuna bastığım zaman alıcıdaki ilgili pin çıkış verdikten sonra başka bir pini 1sn gecikme ile toggle olarak  sürekli çalışır durumda kalmasını sağlamak ve daha sonra başka bir basçek pin ile alıcı sistemdeki toggle olan bu pini yine 1sn gecikme ile kapatmak istedim amacım alt programda bunu yapmaktı. Daha önce buton kontrolü ile bunu yaptım ve çalışmıştı ama burada sıkıntı aslında kodlar ilk projedeki gibi düzgün çalışmıyor alt programları iptal edip denedim orjinal projede 16f877a kullanmıştık orda sorun yok ama 16f876a için yeniden düzenledim ve çalışmadı hocam isis sümülasyon dosyasını ekliyorum amacım şu kodları orjinale göre çalıştırsam yetiyor. Hocam vericiden basçek pini ile alıcı karttaki ilgili pin ile beraber başka bir pinide toggle olarak 1sn gecikmeli olması için alt program yazmak ve oraya gosub ile göndermek yanlışmı sizce? yani şu şekilde;

BASLA:
 

      IF SINYALb.0=0 AND ALDI=1 THEN
        PORTB.0=~SINYALb.0: GOSUB AC         
      ENDIF

AC:
   PAUSE 1000
   PORTA.0
   RETURN

programda yazılım mantığında hata var herhalde bu şekilde işlem yapmazmı yada alternatif bir çözüm nasıl olmalı amacım programda iki işlemi aynı anda yapabilmek ilk işlem basçek durumu ve devamında toggle olarak çalışan bir pin elde etmek istedim

huseyin0579

Hocam olmuşmu düzenleme yaptım

huseyin0579

Hocam simülasyonu başlatınca butonlara basmadan alıcıdaki portb.3 ile portc.5 kendi kendine flash yapıyor bazı butonlar çalışıyor bunlarda da sıkıntı var programda asıl sıkıntı nedir orjinal programa benzer birşey yapmak istedim neden olmadı en basit olarak bu sistemde 3 tane basçek buton ve 5 tane toggle için düzgün bir program kodu denesem ilk olarak yardımcı olabilir'misiniz? Donanım hazır deneme yapacam sistem düzgün çalışıyormu bakalım kartta hatam yok hocam rica ediyorum bu kart ikinci çalışma oldu smd malzeme v.s işçiliği sıkıntı oldu saygılar.

huseyin0579

#19
Hocam burada orjinal hex kodları 16f876a ile deniyorum değişiklik yapmadan 16f877a ile hazırlanmış kodlar 16f876a ile çalışıyor ama 16f876a için enson yaptığım değişiklikte çalışmadı nerede hata var anlamadım?

ete

Kodlar çalışıyor. Ancak, ne butonların seçiminde bir düzen var neden karşılık gelen ledlerin dizilişinde bir düzen var.
Bu işlerde düzen gerekir. Düzenden şunu kast ediyorum.
PORTA ilk 4 biti buton olarak giriyorsam alıcıda da aynı bitlere led bağlamak düzene uymak demektir.
Bu sayede SINYALA giderken basılan tuşu ihtiva ederek gider alıcı tarafında ise PORTA=SINYALA dediğin zaman vericide bastığın tuşa karşılık gelen ledi yakmış olursun.

Sen ne yapmışsın? Bir tarafta PortB nin tamamını buton olarak kullanmışsın diğer tarafta ledleri PortB nin ilk 4 bitine bağlamışsın. Diğerleri ne olacak?
Yada sorumu şöyle söyleyeyim. Vericideki buton sayısı kadar alıcıda led yok. Nasıl olacak bu?.
Her neyse sen hangi bitleri toggle hangilerini basbırak istiyorsun açıklada bakayım .

Ete

huseyin0579

#21
Hocam benim asıl yapmak istediğim;

Verici:                                 Alıcı:

portb.0=0        ise              portb.0=1  olacak "basçek durumu ve 1sn sonra porta.0 

+5v olacak ve bu şekilde kalacak yani toggle olarak kalacak

portb.1=0        ise              portb.1=1  olacak "basçek durumu

portb.2=0        ise              portb.2=1 olacak "basçek durumu ve 1sn sonra high olan porta.0 pini

0 seviyesine dönecek ve bu şekilde kalacak


hocam burada vericideki portb.0 ve portb.2 pinleri aynı zamanda porta0 için 1 ve 0 durumu sağlamalı toggle şeklinde yani burada sıkıntı olmaz değilmi?

verici portc deki ilk 6 pin ile alıcı portc ilk 6 pin toggle olacak

portc.0=0 ise     portc.0=toggle
portc.1=0 ise     portc.1=toggle bu şekilde hocam, saygılar...

huseyin0579

Hocam kodlar 20mhz ile çalışacak şekilde olabilirmi? Simülasyonu 20mhz için hazırlamış'tım. Saygılar..

ete

#23
Hüseyin yapmak istediğin ile hazırladığın devre bir birinden alakasız gözüküyor. Son istediğinde ,
vericide A portundan bir şey yollanmaması gerekiyor. Yalnızca SinyalB ve SinyalC bilgisi yollansa yeterli oluyor.
O halde neden karmaşık bir devre hazırladın.
Devreni son istediğine göre hazırla bende ilgileneyim.

Yaptığın sistemin başlıca çalışmama sebeplerinden biride program frekansı ile işlemci frekansının tutmaması,
Seri haberleşme parametrelerinin frekanslara uygun verilmemesi şeklinde açıklanabilir. Bir frekansı esas alınca,
- Simulasyon ferakansını (gerçek devrende kristal frekansını) buna uydurman gerekiyor.
- Program içinde OSC frekansını buna uydurman gerekiyor.
- Seri haberleşme parametrelerinin seçilen frekansa göre yenilenmesi gerekiyor.
- Simulasyonda Virtual terminal kullanıyor isen ona ait haberleşme parametrelerininde sisteme uydurulması gerekiyor.

Ete

huseyin0579

Hocam yeni şema çizimi ekliyorum açıklama yazısı şemada var. Ayrıca virtual v.s işlemi olmayacak hocam sadece şu portb.0 ve portb.2 ile kendi basçek çıkışları ile porta.0 pinini toggle olarak 1sn gecikme ile çalışması, hocam kafanız karışmasın sadece vericide portb.0 basıldığında alıcıda portb.0 +5v olduktan sonra 1 sn sonrada porta.0 toggle olacak yine aynı şekilde portb.2 basıldığında alıcıdaki portb.2 +5v olduktan sonra porta.0 1 sn sonra toggle olacak bu mümkümüdür? hocam

ete

#25
Seni tebrik ederim. Epeyce uğraşmışsın güzel bir devre çizmişsin. Ama ,
Verici tarafında PORTA.0 pinine Tuş bağlanmış. Alıcı tarafında bu pin PORTB.0 pini aracılığı ile yakılıyor. O halde Vericideki PORTA.0 pini KIMI yakacak yada söndürecek?
Alıcıdaki PORTA.0 pini toggle olacak demişsin ama açıklamanın toggle ile alakası yok. Bu pin PORTB.0 ile aktive edilecek PORTB.2 ile pasif hale koyulacak. Bu toggle değildir. Adı her ne ise sen koy.
Ben Tus bağlı olan PORTA.0 pinini atlayarak istenenleri yapmaya çalışacağım.

Ete

Dosyalar ilişiktedir.

huseyin0579

Hocam vericideki porta.0 pini boş kalsın önemli değil!...hata olmuş hocam kusura bakmayın...

huseyin0579

#27
Hocam çok teşekkür ederim ALLAH razı olsun ellerinize sağlık, hocam ben farklı deneyimler edindim sizlerle paylaşacağım, hocam 16f876a ı / sp kodlu mikrodenetleyiciler 4 mhz ile çalışıyormuş bu acı bir tecrübe oldu ve sonrasında hani $RF ifadesi varya işte buraya ETE yazmanız aynı zamanda kodlamalı çalışmayı gerçekleştiriyor bana kızabilirsiniz ama bu deneyimde bu gece yarısı gerçekleşti. Hocam bu konuda aynı ortamda iki ayrı alıcı ve verici devreyi bu şekilde deneyecem. Sonuçları paylaşırım hocam tekrar teşekkür ediyorum ve sadece şu konuda bilgi alabilir'miyim. Basçek butonları sürekli basılı tuttuğum zaman belirli gecikmeler ile çalışıyor yani buton bekleme süresinde ufak bir flash var tekrarlama süresi desem daha doğru olur bu konuda basılı tutulduğu sürece aktif olmasını nasıl sağlarım valla hocam süpersiniz nazar değmesin ALLAH her zaman yardımcınız olsun her konuda birde hocam kusur olarak görmeyin bu yorumlarımı acemiliğimizden kaynaklı sadece bu portb.0 ve portb.2 pinlerinde biraz uzun bekleme sözkonusu yani bu pinlerin aktif olmaları basçek olarak diğer portb pinlerinden farklı geldi doğrumudur? Saygılar hocam ben 4mhz için çalıştırdığım dosyaları ekliyorum.

ete

#28
Hüseyin,
Bak iki mesaj öncesinde ne söylemişim. Belliki okumadın yada dikkat etmedin.
"- Seri haberleşme parametrelerinin seçilen frekansa göre yenilenmesi gerekiyor."
Buraya koyduğun ve 4 Mhz için çalıştırdığım dediğin programlara bir beraber bakalım.
- Program 4Mhz için düzenlenmiş. Peki seri haberleşme komutları ona göre düzenlenmişmi? (HAYIR)
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 1
DEFINE HSER_BAUD 2400
DEFINE HSER_SPBRG 25 ' 9600 Baud @ 20MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

bak açıklamasında @20Mhz diyor zaten ne olması gerek?
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


Kesme kısmına şu satırları ekliyorsun ;
   	FOR Y=0 TO 2
    PORTA.4=1
    pause 30
    PORTA.4=0
    pause 30
    NEXT

Ben ısrarla çıkartıyorum sen ekliyorsun. Sonra da gelip "Basçek butonları sürekli basılı tuttuğum zaman belirli gecikmeler ile çalışıyor" diyorsun. Bu yazdığın komutlar yalnızca bir pinden izlenemeyecek kadar kısa aralıklı flash yapmayı sağlıyor ve sana yarar yerine zarar veriyor. Bu yüzden çıkartıyorum sen ekliyorsun. Bu komutlar yaklaşık 180 ms lik bir gecikme yaratıyor.
Komut gecikmesi ile birlikte bu süre neredeyse 200 ma olarak senin komut algılama sürene ekleniyor. Bu süre zarfında işlemci kesme içinde meşgul kaldığı için sürekli basma sonucu gelen yeni emirlari alamıyor ve bas çek butonlarda kesikli çalışmaya sebep oluyor. Bu yüzden kaldırdım. İlla gerekli ise Basla satırının altına koy ve 1 kere çalışmasını sağla yada ;
IF ALDI=1 THEN
deyip altına önce port atamalarını en sonada bu flash döngüsünü yerleştir. Belki orada çalışır. Ama bence tamamen sil bunları.

Elbette PORTB.0 ve PORTB.2 pinlerindeki aktivasyon süreleri farklı ancak aynı gibi gösterilebilir. Sonuçta bu pinlerde ayrıca 1000 ms lik PORTA.0 pinine emir verme işlemi var gecikme oradan kaynaklanıyor.

Bu bir örnek projedir. Elbette bu olumsuzluklar ortadan kaldırılabilir. Daha akıllıca düşünmek belkide algoritma değiştirmek gerekebilir. Ancak bu aşamadan sonrasi artık ileri seviye düşünmeye ve ona göre programlamaya giriyor. Bu tür şeylerde anlatma ile anlatılamayacak şeylerdir. Artık top sende.
Ete 

Not:
4Mhz versiyonunu düzelttim. Bak bakalım bu nasıl olmuş. İlişiktedir.


huseyin0579

Hocam vericideki portb.1 - portb.3 - portb.4 - portb.5 - portb.6 ve portb.7 pinleri ile alıcıdaki ilgili pinler
hangi pine basılırsa bit kaydırma şeklinde çalışıyor yani portb.1 pinine basıldığında ilgili çıkış toggle gibi çalışıyor ve sonrasında diğer pinlere basılması durumunda alıcı karttaki ilgili çıkışlar arasında ledler sürekli yanık kalıyor ama portb.0 ile portb.2 çalışması normal ve aynı zamanda diğer pinlerin bu sürekli çalışır kalma durumuda bu pinler ile pasif duruma geçiyor. Bunu durumu farkettinizmi?

Powered by EzPortal