pic f84 le rf için encoder nasıl olacak

Başlatan mukoali, 01 Şubat 2003, 15:58:48

mukoali

slm
benim problemim pic in bir çıkşından belli değerlerde bir dalga çıkmak ve rf sinyali ile başka bir yerden bu sinyali başka bir pic le almak
ama alan pic gönderilen sinyali bilecek yani bir nevi encoder ve decoder devrasi olacak bunun için yardımlarınızı bekliyorum
gönderme için ben belli aralıklarla portu high ve low yapıyorum
almak için de count ve pulsin kullanıyorum ama yaptığım denemelerde pic düzensiz çalışıyor açma sinyali gelince açıyo sonra yine açma sinyali gelince kapatıyo kapatma sinyali de gelince kapatıyo
velhasıl olmadı başka komutlarla olurmu nasıl olur yardımlarınızı bekliyorum

Prof.EleCTroN

USART'ı olan PIC kullan (PIC16F627 veya PIC16F628 gibi) bir kesme programı birde ana programla bu işi halledersin. Gönderici tampona yazar USART gönderir alıcıya bilgi gelince kesme programına dallanır veriyi alır ve işleme koyar.

mukoali

ilgin için teşekkürler electronicman

ama birazdaha açmanı isteyecem alıcı damı f628 olacak usartla nasıl kod gönderecem biraz daha somut açıklayabilirsen sevinirim
şimdi ben birazda f628 çalışayım bakalım ne olcak

Prof.EleCTroN

Alıcıda USART'ı olan bir PIC kullanacaksın (PIC16F628), gönderdiğin veri alıcıdaki belleğe dolduğu zaman PIC kesme vektörüne dallanacak, burada gelen veriyi USART registerından okuyacaksın ve işyeyeceksin. Baud rate oranını tam olarak ayarlamak istiyorsan göndericiyide PIC16F628 seçersin, SPBRG register ve xtall aynı değer verirsin. USART kullanmak için ilk önce baud rate'i belirleyeceksin bu oranın hesabını PIC16F628'in datasheet'inde öğrenebilirsin sonra bu değeri SPBRG registerına yazacaksın TXSTA ve RCSTA registerlarına gerekli değerleri yaz ve veri gönderme alma işlemine hazır. PICBASIC kullanmadığım için hangi komutlarla bu işlemler yürür bilmiyorum. C veya ASM olursa yardımcı olabilirim.

mukoali

sağolasın ustam ama bende pic basic le prg yazıyom asm okadar iyi değil anladığım kadarıyla bu işi f628 de serin2 ve serout2 yle yapabiliriz pic basic bilen arkadaşlar yardım ederlerse bu iş olacak bir de veriyi f84 le göndersem f 628 le alabilirmiyim yada serout2 komutları f84 ü desteklemiyor mu 2 taraf ta f84 kullandım serin ve serout la haberleştiremedim destek beklemeye devammm

Prof.EleCTroN

Gönderici F84 olabilir ama baud rate AUSART'lı bir PIC kadar hassas olmayabilir.

mukoali

slm usta bir de f628 le bayramdan sonra deneyecem sonucu yazarım inşallah olur yardımların için teşekkürler

mhk

'**********************************
'*  Name    : Alıcı                                                 *
'*  Author  : H. KORATEŞ                                   *
'*  Notice  : Copyright (c) 2002                         *
'*          : All Rights Reserved                              *
'*  Date    : 29.11.2002                                      *
'*  Version : 1.0                                                   *
'*  Notes   : Alıcı kod çözücü devre                    *
'*          :    16F877 kullanıldı                              *
'**********************************

include"modedefs.bas"
Define  LCD_DREG      PORTD   ' LCD bağlantılarını tanımla
Define  LCD_DBIT     4
Define  LCD_RSREG     PORTE
Define  LCD_RSBIT     0
Define  LCD_EREG      PORTE
Define  LCD_EBIT      1

TRISA = %00000000   ' PORTA nın tüm bitlerini çıkış olarak ayarla
TRISB = %11110000     ' PORTB nin tüm bitlerini giriş ve çıkış olarak ayarla
TRISC = %10000000   ' PORTC nin tüm bitlerini çıkış olarak ayarla

 ADCON1 = 7         ' PORTA ve  E dijital giriş çıkış olarak ayarla
       Low PORTE.2      ' LCD R/W low = yazma modu
       Pause 300            ' LCD başlamak için bekle


alinanveri  var byte
tekrar  var byte

alinanveri=0
porta=0:portb=0:portc=0
lcdout $FE,1,"Seri Haberlesme."
pause 1000
anadongu:

'for tekrar=0 to 50
serin portc.7,n2400,alinanveri
'if alinanveri<1 or alinanveri>8 then portc.2=0

if alinanveri=1 then lcdout $FE,1,"PA0 Aktif!!!":portc.2=1:portc.0=1:portc.1=0
if alinanveri=2 then lcdout $FE,1,"PA1 Aktif!!!":portc.2=1:portc.1=1:portc.0=0
if alinanveri=3 then lcdout $FE,1,"PA2 Aktif!!!":portc.2=1:portc.0=1:portc.1=0
if alinanveri=4 then lcdout $FE,1,"PA3 Aktif!!!":portc.2=1:portc.1=1:portc.0=0
if alinanveri=5 then lcdout $FE,1,"PA4 Aktif!!!":portc.2=1:portc.0=1:portc.1=0
if alinanveri=6 then lcdout $FE,1,"Veri 6":portc.2=0:portc.1=0:portc.0=0
if alinanveri=7 then lcdout $FE,1,"Veri 7"
if alinanveri=8 then lcdout $FE,1,"Veri 8"
lcdout $FE,$c0,"Alinan veri=",#alinanveri

pause 1
'next tekrar
goto anadongu
end



'**********************************
'*  Name    : Verici                                               *
'*  Author  : H. KORATEŞ                                   *
'*  Notice  : Copyright (c) 2002                         *
'*          : All Rights Reserved                              *
'*  Date    : 29.11.2002                                      *
'*  Version : 1.0                                                   *
'*  Notes   :Verici kodlayıcı program                  *
'*          :  16F84 kullanıldı                                   *
'**********************************
TRISA=%11111111
TRISB=%00000000
include"modedefs.bas"
gondveri  var byte
giris   var porta
gondveri=0

portb=0:porta=0

'**************** ANADÖNGÜ **********************
anadongu:
pause 50
if giris=17 then gondveri=6:gosub verigonder:pause 1000:goto anadongu
if porta.0=1 then gondveri=1:gosub verigonder
if porta.1=1 then gondveri=2:gosub verigonder
if porta.2=1 then gondveri=3:gosub verigonder
if porta.3=1 then gondveri=4:gosub verigonder
if porta.4=1 then gondveri=5:gosub verigonder

goto anadongu

'************ Seri iletişim alt programı ********************
verigonder:
serout portb.0,n2400,[gondveri]
return
end

Benim basit olarak yaptığım denemek için kullandığım programlar  bunlar. İlk program 16 F877 kullanarak alıcı  programı. İkinci ise verici programı. Oldukça iyi sonuç verdi.Alıcı devrede portc.7 alıcı girişi , ikinci devrede portb.0 verici devre çıkışıdır. Yani biribirine uyumlu veri gönderebilen bir verici ile alcı devresinin giriş çıkışı bu iş için uyguyndur. Elinizde bulunan veri ileten ve alan alıcı verici devrelerle bunu kullanabilirsiniz. Piyasada bulunan 4 kanallı alıcı verici devresi ile ben bunu yaptım. Umarım işinize yarar. Kendinize iyi bakın.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mukoali

teşekkürler mhk

senin verdiğin prg mantığı ile ben de bu işi başardım f84 le gönderdiğim bir veriyi f628 le almayı becerebildim en sonunda yardımlarınızdan dolayı minnettarım yalnız bir sorum daha olacak
bu serout la benim anladığım 8 bit veri gönderilebiliyor 16 bit bir veriyi nasıl gönderecem 2 ayrı 8 bit olarakmı yada nasıl bir mantığı var bu konuda da bilgi verirsen sevinirim.

mukoali

gerçi bu soruma cevap gelmemiş ama bir soru daha sormak istiyorum f84 le gönderdiğim veriyi f628 le direk kablo bağlantısı yapınca alıyorum ama

bir verici üzerinden 111 mhz de denedim gönderince alamıyorum burda problemi aşmak için ne yapmam lazım lm358 kullandım ama sonuç alamadım

cozturk

Kardeş,

LM358'i nasıl kullandığını bilmiyorum ama schmit trigger gibi  kullanman gerekiyor.

Piyasada bir ara 25 milyona satılan genel amaçlı 304 MHZ,  2-4 kanal uzaktan kumandalarda lm358 böyle  kullanılmıştı.

mukoali

slm cozturk

schmit trigger la ilgili uygulama devre şemaları olan bir adres verebilirsen yada sende devre varsa gönderebilirsen sevinirim

çünkü nasıl bir devre şekli veya kullanılan elamanlar ne değerde olacak o konuda bilgim yok
benim devrede kullandığım lm358 devresinde anladığım kadarıyla gelen veriyi üstünde geldiği frekanstan ayırt etmeye yarıyor ama bir türlü çalıştıramadım