RF Haberleşme ve PWM

Başlatan tosun54, 27 Şubat 2014, 18:17:04

tosun54

Pıc programlama konusunda yeni birisi olarak aranıza yeni katıldım. Siz üstatlarımızın katkılarıyla çok şeyler öğreneceğimize inanıyorum.  Daha önceden yayınlanmış rf devresi üzerinde değişiklik yaparak kayın biraderimin de yardımıyla bir alıcı verici devresi yaptık fakat pwm konusunda ve bir kaç konuda yetersiz kaldık. Siz değerli üstatlarımın bu konularda yardımlarını bekliyorum.

Projemizde yapmak istediğimiz şeyler:

1- İleri tuşuna basınca her iki motorda hareket edecek
2- sol tuşa basılınca sol motor duracak sağ motor hareket edecek
3- sağ tuşa basılınca sağ motor duracak sol motor hareket edecek
4- yukarı tuşuna basınca 3. motor çalışacak (sol)
5- aşağı tuşuna basınca 3. motor ters yönde çalışacak(sağ)
6- led1 tuşuna basınca çıkışa bağlı led yanacak tekrar basınca sönecek
7- led2 tuşuna basınca çıkışa bağlı led yanacak tekrar basınca sönecek
8- led3 tuşuna basınca çıkışa bağlı led yanacak tekrar basınca sönecek
9- ileri hareket motorlarının hızı düşürülecek. Pwm

  Beşinci maddede dahil olmak üzere yazılı olanları yapabildik diğerleri konusunda bize yardım edebilirmisiniz acaba. pbp kodları ekte

zeus48

Mrb arkadaşım . Denizaltımı yapacaksın ?

ete

Ortada ne şema var ne de programların açıklanan kriterlere uyum sağlıyor. Bir yerlerden bir şeyler almışsın ama 6-9 maddeler arasındaki birimler ve kriterleri programlarda hiç yer almıyor. Bunları kim ?, hangi kritere göre programa yerleştirecek. Müneccim olmak gerekir.
Ete

tosun54

Konuyu ya ben tam manasıyla anlatamadım yada yanlış anlaşıldım. Ben zaten beşinci madde de dahil olmak üzere oraya kadar olan kısmı hallettim sıkıntı ledlerin butona basılı olduğu müddetçe yanması bırakınca sönmesi ben basınca yanık kalsın tekrar basınca sönsün istiyorum  ledler yanık iken diğer fonksiyonlarında çalışmasını. PWM ile ilgili birşeyin programda olmamasının nedeni benim yaptığım çalışmada motorlar çok hızlı dönüyor bunları yüzde elli oranında yavaşlatılması bunuda pwm ile yapıp yapamayacağım yapılırsada biraz açıklama bekledim. Dosyaların sonhalini ekledim.

enginkanat

ledlerin butona basınca yanık kalmasını istiyorsan TOGGLE kullanabilirsin
if veri=%11111101 then portb=%00000010       'LED1 yerine
if veri=%11111101 then toggle portb.1 kullanırsan butona basınca led yanar, butona tekrar basınca led söner
alıcı devrede rb3 pwm çıkışıdır, verici devrede bir buton daha koyarak yine toggle ile yarım devir tam devir yapabilirsin.
yani;
if devir=0 then  serout PORTA.1,T2400,["TOSUN54",DEGER] ile pwm değerini 0 (%100) yada 1(%50) olarak gönderirsin alıcıda da pwm çıkışını buna göre değerlendirirsin
ancak transistör ile bu durum motorlara ne kadar yansır bilemem,

zeus48

Arkadaşım  mrb bence sen önce ne istediğini karar vermelisin, Çünki yazdıklarını tekrar oku. Demişsinki ben basılı tuttuğum sürece yanık kalsın ,bırakınca sönsün. Sonrada ben basınca yansın,tekrar basınca sönsün. Olmadı ne istediğini karar ver sonrada yaz

tosun54

Alıntı yapılan: zeus48 - 02 Mart 2014, 23:28:35
Arkadaşım  mrb bence sen önce ne istediğini karar vermelisin, Çünki yazdıklarını tekrar oku. Demişsinki ben basılı tuttuğum sürece yanık kalsın ,bırakınca sönsün. Sonrada ben basınca yansın,tekrar basınca sönsün. Olmadı ne istediğini karar ver sonrada yaz


Merhaba yazdığım yazıyı tekrar okudum fakat sen yanlış anlamışsın şu anki hali butona basılı olduğu sürece ledin yanması butonu bırakınca ledin sönmesi, benim istediğim butona birkere basınca ledin yanması ikinci kez basınca ledin sönmesi hepsi bu

tosun54

Alıntı yapılan: enginkanat - 02 Mart 2014, 09:46:42
ledlerin butona basınca yanık kalmasını istiyorsan TOGGLE kullanabilirsin
if veri=%11111101 then portb=%00000010       'LED1 yerine
if veri=%11111101 then toggle portb.1 kullanırsan butona basınca led yanar, butona tekrar basınca led söner
alıcı devrede rb3 pwm çıkışıdır, verici devrede bir buton daha koyarak yine toggle ile yarım devir tam devir yapabilirsin.
yani;
if devir=0 then  serout PORTA.1,T2400,["TOSUN54",DEGER] ile pwm değerini 0 (%100) yada 1(%50) olarak gönderirsin alıcıda da pwm çıkışını buna göre değerlendirirsin
ancak transistör ile bu durum motorlara ne kadar yansır bilemem,

Vermiş olduğunuz TOGGLE komutunu denedim fakat olmadı butona basınca led yandı bırakınca söndü. Butona basılı tutunca led flash yapıyor yani olmadı.

enginkanat

Birden fazla buton sinyali alıyorsunuz. While Wend komutu kullanarak bunu çözebiliriz.
while buton=0
wend
Gibi kullanarak buton sinyali kesildiğinde wend ten sonraki işlemlere atlar.

zeus48

arkadaşım senin istediğin  TOGGLE  komutu ile olur.  TOGGLE komutundan sonra 300msn bir geçikme koy olur olmuyorsa hata sende

ete

Biraz olsun kafanızda canlandırma yeteneğinizi çalışıtırın.!!!
Program sizin el hareketlerinizden daha hızlı çalışır bunu en baştan kabul edin lütfen.
Şimdi bir tuşa basma işleminde yürütülen işlkemleri adım adım inceleyelim isterseniz.

Tusa bastın. Basılınca bir ledi yakacaksın ancak bir kere basınca yanacak tekrar basınca sönecek diyorsunuz öyle yapalım.
BASLA:
IF TUS=1 THEN TOGGLE LED
bu komut tuşa basılır basılmaz LED yanıyorsa söndürecek yanmıyorsa yakacaktır. (LED=1-LED komutu ile aynıdır)
GOTO BASLA
Program ledi yaktıktan sonra anında yada bir kaç mikro saniye içinde yeniden GOTO BASLA komutunu görecek ve yeniden IF TUS=1 THEN TOGGLE komutunu görecek sen daha elini tustan çekemeden aynı komut satırı bir kere daha çalışıtırlacak program tarafından. Dolayısıyla yanan led sönecek. Daha sen elini çekemediğin için yeniden aynı satıra programın gelmesi kuvvetle muhtemel. Artık şansına elini çektiğin an led durumu nerede kalmış ise sen görsel olarak son durumu göreceksin.

Peki IF TUS=1 THEN TOGGLE LED komutunu tuşa basılınca yalnızca bir kere çalıştırmak ve elimi tuştan çekmediğim sürece de bir daha çalışmamasını nasıl sağlarız? Tabiiki ilave bir komut ile şöyle
IF LED=1 THEN
   TOGGLE LED
   WHILE TUS=1:WEND
    PAUSE 30
ENDIF
işte bu komut dizisi ile TOGGLE led satırı yalnızca bir kere çalışır ve sen elini tuştan çekmediğin sürece başka iş yapmaz program. Bıraktıktan sonra az bir gecikme koyularak tuş titremesinin önüne geçilmeside gerekir.
Bütün yapman gereken şey bu mantığı kendi programına adapte etmen.
Ben tuşa basılma şeklini TUS=1 olunca kabul ettim. Sende TUS=0 olunca basılıyor olabilir bunlara dikkat edip ona göre gerekli düzeltmeleri yapman gerekir.
Hadi başar bakalım şu işi.

Ete


tosun54

teşekkürler yardımlarınızla istediğimi yapabildim. Bir sorum daha olacak acaba ekteki devreyi vericinin çıkışına bağlasam alıcı ile verici arasındaki haberleşme mesafesini arttırabilir miyim. Mevcut şekli ile açık alanda yaklaşık 80m kadar mesafe 150-200m kadar olsa çok daha iyi olacak.

zeus48

sana daha basit bir çözüm üreteyim verici modul hangisini kullanıyorsun ?

enginkanat

O sema analog için. İdea 'nın uzun mesafe alıcı vericileri var.

zeus48

udea nın ask verici modülünü kullan . Beslemeye +5v   değil +12v ver dediğin mesafeye hiçbir ek devre yapmadan ulaşacaksın.

Powered by EzPortal