Pic Rf haberleşme problemi

Başlatan ironeyes, 27 Temmuz 2023, 19:21:38

ilyas KAYA

Alıntı yapılan: ironeyes - 29 Temmuz 2023, 10:59:28Evet çalışıyor sıkıntısız.

Aslında o tarz bir verici takımı ile denemedim ancak elimde bir kaç tane bu modüllerden var ve incelerken bişey fark ettim modüllerin hepsinin devre yapısı ayını değil ve o 'değişik' devre yapılı modüllerin birini denemek için değiştirdim ve menzili 4-5 metre fazladan arttı. Ancak hala datashette yazan değerlerin yakınında bile değilim.

Yine benzer bir modül ise bu modüller sorunlu. Trimmer ile ayarlayarak bir miktar daha artar ama daha fazla değil.

https://www.direnc.net/433mhz-rf-trimerli-alici-rws-371

Bu modülü alıp deneyin ancak veri aktarma protokolünde rf sinyalleri daha iyi taşıyabilmek için bazı standartlar var. Fakat bu dediğim 4 5 mt değil 50mt ve sonrası için geçerli.



fay_elektronik

#16
Ete hocam uyarmış uyarma sinyali vermek gerekiyor bence mesafe uzadıkça devredeki beklemelerden dolayı kaçırmalar oluyor olabilir bende bazı devrelerim de kullanıyorum ucuz ve kullanışlı mesafe datasheette yazdıgı kadar uzun değil ama ne kadar para o kadar verim
  ayrıca c syntax hataları cok fazla yazılım diline cok hakim değilsiniz veya başka bir dilden c ye geçmiş gibisiniz ben olsam verileri getchar ile almam interrupt oluşturur alırım yazılımdaki beklemelerin veri kaybına neden olacağı için interrupt iyi bir çözüm olacaktır
  Fark ettiğim buton1 ve buton2 diye değişken kullanmışınız bunlar fiziki bir butonsa değişken olarak tanımlamışsınız eger fiziki bir bir buton tanımlayacaksanız define komutu kullanarak buton pinine isim verebilirsiniz

ironeyes

Alıntı yapılan: fay_elektronik - 30 Temmuz 2023, 20:12:59Ete hocam uyarmış uyarma sinyali vermek gerekiyor bence mesafe uzadıkça devredeki beklemelerden dolayı kaçırmalar oluyor olabilir bende bazı devrelerim de kullanıyorum ucuz ve kullanışlı mesafe datasheette yazdıgı kadar uzun değil ama ne kadar para o kadar verim
  ayrıca c syntax hataları cok fazla yazılım diline cok hakim değilsiniz veya başka bir dilden c ye geçmiş gibisiniz ben olsam verileri getchar ile almam interrupt oluşturur alırım yazılımdaki beklemelerin veri kaybına neden olacağı için interrupt iyi bir çözüm olacaktır
  Fark ettiğim buton1 ve buton2 diye değişken kullanmışınız bunlar fiziki bir butonsa değişken olarak tanımlamışsınız eger fiziki bir bir buton tanımlayacaksanız define komutu kullanarak buton pinine isim verebilirsiniz


Evet çok hakim değilim maalesef modülleri değiştirdim mesafe sorunum ortadan kalktı ancak bu seferde kararsız çalışmaya başladı butondan komut vermesem bile tetikleniyor.Forumda preamble ve manchester coding ile alakalı yorumlar gördüm sanırım sorunun çözümü bunlarda ancak bunları koda nasıl uyarlayacağımı çözemedim.

ilyas KAYA

Alıntı yapılan: ironeyes - 31 Temmuz 2023, 20:58:29Evet çok hakim değilim maalesef modülleri değiştirdim mesafe sorunum ortadan kalktı ancak bu seferde kararsız çalışmaya başladı butondan komut vermesem bile tetikleniyor.Forumda preamble ve manchester coding ile alakalı yorumlar gördüm sanırım sorunun çözümü bunlarda ancak bunları koda nasıl uyarlayacağımı çözemedim.

Kontrol byte lafını arttırın civardaki parazit sinyaller den illaki A harfine denk gelen bir sinyal gelir.
En az 4 byte yani , abcd yada isminizi alın sonra asıl veriyi alın.


ironeyes

Alıntı yapılan: ilyas KAYA - 01 Ağustos 2023, 01:50:11Kontrol byte lafını arttırın civardaki parazit sinyaller den illaki A harfine denk gelen bir sinyal gelir.
En az 4 byte yani , abcd yada isminizi alın sonra asıl veriyi alın.



bunu kod ile nasıl yapabilirim önce kontrol byte gelsin eğer gelirse a  harfini işleme al tarzı bişey mi olacak.

ete

Her şeyden önce alıcıdaki gecikmelerden kurtulmanız lazım. İllaki gerekli ise timer ile gecikme yaratıp gecikme yürütülürken de vericiden bir şey gelip gelmediği sorgulanmalıdır.
Veri yollayan tarafta her yollama işleminin başına 5 adet $00, 5 adet $FF, 5adet $AA peşine "ata" peşine "A" eklemelisin. Burada yalnızca A sizin bilginiz ata işaretçiniz diğerleri ise uyandırma verisi dir. Alıcı kısmında bilgi geldiğinde önce ata yı sorgulamanız doğru ise peşinden gelen A bilgisi alınır. Aslında  ata yı yakalarsanız peşinden geleni sorgulamak gerekmez. Hatta A yı hiç yollamasanızda olur. Çünki A nın haricinde bir başka karekter yollammıyor.
Ata yerine sadece A yollanması tek byte olduğu için sorun çıkartabilir ama ata 3 byte olduğu için veri güvenliği yaratır. Ata yerine kendi seçeceğin 3 farklı karekter koyabilirsin.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ironeyes

Alıntı yapılan: ete - 01 Ağustos 2023, 14:52:28Her şeyden önce alıcıdaki gecikmelerden kurtulmanız lazım. İllaki gerekli ise timer ile gecikme yaratıp gecikme yürütülürken de vericiden bir şey gelip gelmediği sorgulanmalıdır.
Veri yollayan tarafta her yollama işleminin başına 5 adet $00, 5 adet $FF, 5adet $AA peşine "ata" peşine "A" eklemelisin. Burada yalnızca A sizin bilginiz ata işaretçiniz diğerleri ise uyandırma verisi dir. Alıcı kısmında bilgi geldiğinde önce ata yı sorgulamanız doğru ise peşinden gelen A bilgisi alınır. Aslında  ata yı yakalarsanız peşinden geleni sorgulamak gerekmez. Hatta A yı hiç yollamasanızda olur. Çünki A nın haricinde bir başka karekter yollammıyor.
Ata yerine sadece A yollanması tek byte olduğu için sorun çıkartabilir ama ata 3 byte olduğu için veri güvenliği yaratır. Ata yerine kendi seçeceğin 3 farklı karekter koyabilirsin.
Ete

Cahilliğimi bağışlayın ama bu bahsettiğinizi alıcı tarafında nasıl yazacağımı çözemiyorum. Getch() komutu 8 bytelik veri alabiliyor anladığım kadarıyla.

ete

Ardunio dan ve komut kullanımından bende anlamıyorum. Bu nedenle söz ile ne olması gerektiğini anlatmaya çalışıyorum.
Komut listesini incelemen ve var ise peş peşe 3 byte alabilen bir komut bulman bulamıyor isen
peş peşe 1 adet getch() komutu yazıp aldığını BIR isimli byte değişkenine (INT) atman ardından hemen bir tane daha yazıp onuda IKI isimli değişkene ve ardından bir tane daha alıp onuda UC isimli bir değikene yerleştirmen çözüm olabilir.
Sonra IF BIR="A" and IKI="T" and UC="A" THEN
şeklinde bu alınanların istediklerinmi olduğuna bakman ve istediklerin ise ne yapıyorsan onu yapman yeterli olur. Değil ise yeniden karekter almaya gitmelisin.

Hemen belirteyim bu işler benim kullandığım Basic de çok basit.
hSerIn , [WAIT("ATA"),GELEN]
şeklinde tek bir satırlık komut hem ATA bilgisini bulup alır hemde ardından gelecek olan "A" bilgisini alıp GELEN isimli değişkene yerleştirir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ilyas KAYA

https://lastminuteengineers.com/433mhz-rf-wireless-arduino-tutorial/


Burada tüm proje var açıklama ve bağlantılar da gösteriliyor. Chrome ile sayfayı Türkçe ye çevirebilirsiniz.

ironeyes

Teşekkür ederim ancak ben sorunu bir türlü çözemedim ete hocamın dediği gibi tek karakter gönderince parazitten dolayı verici herhangi bir anda tetkikleniyor bunu çözmek için ete hocamın bahsettiği şekilde kod yazmaya çalıştım ama bi türlü çalıştıramadım  :(

sifirzero

kardesim gonderdigin kod ile alici kodlari sade bir sekilde gonderirmisin. çok karisik veri gonderiyorsun.delayıda cok uzun tutma 100 200ms yeterli.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

JOKERAS

Bazı şeyler kolay gibi görünse de o kadar da kolay değildir.
Kopyala yapıştır şeklinde yapılan işten medet umulmaz,zira bu sizi yakar perişan eder.

Bence Siz önce iki İşlemci arasında Data transferini kablo ile hatasız yapın.
Gönderici kodunuz önemli değil, ama alıcı kod mutlaka İnterrupt olmalı!Başka türlüde olur ama en güzel yol Donanıma yaptırmak.
Aksi halde Gelecek olan Dataları ya hatalı alacaksınız,yada kaçıracaksınız.Hatayıda Modülde arayacaksınız.RF modül bir şey yapmaz.Bir Osilatör ile Hamal-Taşıyıcı sinyal üretir.Siz Datanızı bu sinyale module edersiniz.Receiver ise Taşıyıcı Sinyali Filitre eder sadece Ham data kalır.
Modüllerdeki Anteni uzatmak işe yaramadığı gibi durumu daha da berbat hale sokar.Çünkü Belli hesaba göre yapılmış,belli anten empedansı olan bir yapı.Anteni uzatırsanız gürültü artar havadaki kıldan tüyden,her şeyden etkilenir.Bazen Sağırlaşır vs.

Kod yazmayı geliştirmeniz gerekir.Bu şekilde kod olmaz.Sonuçta Led yakıp söndürme işlemi yapmıyorsunuz.