12F675 RF Alıcı problemi

Başlatan ahmetyilmaz871987, 15 Kasım 2015, 23:10:28

ahmetyilmaz871987

Merhaba arkadaşlar,

Sistem de 2 adet verici 1 adet alıcı devre vardır verici devreleri daha önce defalarca(aynı devreyi) yaptım fakat alıcı devreyi PIC16F628A kullanmak yerine PIC12F675 kullanarak denemek istedim fakat devre çalışmıyor. GPIO.0'dan verinin geldiğini osilaskop ile görebiliyorum fakat çıkışlar aktif olmuyor. Acaba bir satırı mı unuttum diye ugraşıp durdum fakat birşey bulamadım farklı bir gözün bakması daha iyi olur diyerek size sormak istedim. Devrede alıcı GPIO.0 a bağlı ve GPIO.1 ve GPIO.2 her biri transistoru 1sn açıp kapatması gerekiyor hata var ise yardımcı olursanız sevinirim. Saygılarımla....

@ DEVICE pic12F675                                                   
@ DEVICE pic12F675, WDT_ON             
@ DEVICE pic12F675, PWRT_ON             
@ DEVICE pic12F675, PROTECT_OFF       
@ DEVICE pic12F675, MCLR_off           
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT 
include "modedefs.bas"
DEFINE OSCCAL_1K 1
DEFINE OSC 4

GPIO=0
TRISIO= %00000110
INPUT GPIO.0
OUTPUT GPIO.1
OUTPUT GPIO.2
ANSEL=0
cmcon=7
GPIO=0

T1CON = %11110101
T1CON.3 = 0
OPTION_REG.7=0
WPU=%00000000

SYMBOL RF_IN=GPIO.0

MSB VAR BYTE : MSB=$00
LSB VAR BYTE : LSB=$00
X   VAR BYTE : X=0
I   VAR BYTE : I=0
FOR I=0 TO 1
GPIO.2=1 : GPIO.1=1 : PAUSE 250
GPIO.2=0 : GPIO.1=0 : PAUSE 250
NEXT I
PAUSE 300

MAIN:
   
serin2 GPIO.0,396,[WAIT("KRONO"),MSB,LSB] ' PIC'in uyanması için veri gönder (burası standart AA00FF verisi)

    IF  MSB=$02 AND LSB=$F0 THEN
        GPIO.1=1 : GPIO.2=0
        PAUSE 1000
    ENDIF
   
    IF  MSB=$02 AND LSB=$F7 THEN
        GPIO.1=0 : GPIO.2=1
        PAUSE 1000
    ENDIF
   
    GPIO.2=0 : GPIO.1=0 : MSB=$00 : LSB=$00 : PAUSE 1

GOTO MAIN
END
ahmet yılmaz

kayatech

12F için serin2 desteklemeyebilir. SERIN ile deneyin bir de

ahmetyilmaz871987

Hocam daha önce GPIO.5 ile buna benzer bir program yazmıştım ve problem yaşamadım serin2 kullanarak.
ahmet yılmaz

malitronık

 GPIO portunun  adreslerini  yani 0x05 ve 0x85(tris olanı) adresini programın başında  tekrar ata.


ÜC

Geleni diğer pinden PC ye göndererek izleseniz ?

vale9

Serin2'de wait kullanmak yüzyılın sorunudur! Orada takılıyordur muhtemelen. Wait kullanmak yerine gelen dataları bir yere atıp, içinde KRONO sözcüğü var mı diye kontrol ettirmeni öneririm.
Hayat 1'ler ve 0'lardan ibarettir.

ete

SERIN2 komutunda WAIT fonksiyonu çalışır. Defalarca denedim bunu. Çalışmayan timeout parametresidir.
Bence program istediği veriyi alamıyor o yüzden çalışmıyordur. Bana kalırsa MSB first yerine LSB first dene yani komutu;
serin2 GPIO.0,396,[WAIT("KRONO"),LSB,MSB]
şeklinde dene bakalım. Yerleri ters olabilir.

Programda da gariplikler var. Mesela;
TRISIO= %00000110 komut satırı ile GPIO.0 pinini önce çıkış yapıyor ardından INPUT GPIO.0 komutu ile onu Input olarak değiştiriyorsun. Benzer işler sonradan gelen diğer iki pin içinde yapılıyor.  Aşağıdaki 3 satırı tamamen silip TRISIO= %00000001 yazmak yeterlidir.

INPUT GPIO.0
OUTPUT GPIO.1
OUTPUT GPIO.2

Bir başka çift dikiş ;
T1CON = %11110101
T1CON.3 = 0
komutlarında. birinci komut satırında zaten T1CON.3=0 yapılmış birdaha vermeye neden gerek duyuluyor acaba?.
Alttaki satır tamamen lüzumsuz. Silinebilir.

GPIO.0 pini için sembol kullanılmış. RF_IN ama hiç bir yerde kullanılmamış. Halbuki SERIN2 komutu şöyle yazılabilirdi
serin2 RF_IN ,396,[WAIT("KRONO"),LSB,MSB]

Seri haberleşmede en önemli faktör Senkron yakalamaktır. Senkronu engelleyen en önemli faktör ise pause komutlarıdır. Bence GOTO MAIN öncesinde yer alan PAUSE 1 komutu oradan silinmelidir. Bir işe yaramıyor orada zaten.

Bilginin nereden ve nasıl yollandığıda bazen önem taşır. Başında bir uyandırma (Preambıl)yok ise yakalamak zorlaşabilir.

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