GSM MODÜL - PIC RS232 BUFFER PROBLEMİ

Başlatan tekosis, 23 Haziran 2011, 22:18:12

tekosis

Selamün Aleyküm arkadaşlar. Benim şöyle bir problemim var henüz çözemedim.

Devrem pic ile gsm modül uygulaması. Picin girişlerindeki herhangi bir değişimde kullanıcısına sms yolluyor.

Gsm modül ile pic'li devre arasında rs232 iletişimi kuruyorum ve senaryolardan birinin gereği olarak devre ile modülü aynı anda çalıştırıyorum.

* Devrem ilk 20 saniye bekliyor ve bütün kesmelere kapalı.
* Bu yirmi saniyelik bekleme sırasında gsm modülde açılıyor ve kendine ait ayarları yapıyor.
* Gsm modül açıldığı andan itibaren bu yirmi saniye boyunca ayarlarını yaptığına dair "call ready" tarzında verileri seri port ile cihazıma gönderiyor fakat ben bununla ilgilenmiyorum.(bu sırada pic 20 saniyelik bekleme döngüsünde ve kesmeler pasif)
* Devrem yirmi saniye sonunda kendi RCREG kayıtçısını, diğer değişkenlerini temizliyor ve kendi portlarındaki girişleri kontrol ediyor eğer bir aksilik olursa gsm modül üzerinden  rs232 ile gerekli kişilere sms atmaya çalışıyor.
* Problem şu ki bu senaryoda benim devrem sms gönderme sırasındaki raporları algılayamıyor, yanlış okuyor, haberleşmede hata oluyor.
Eğer önce gsm modülü çalıştırırsam ve modül tam olarak aktif olduktan sonra pic'li devremi çalıştırısam devrem çok rahat çalışıyor, haberleşme sıkıntısı yaşamıyorum.

Anladığım kadarı ile cihazları aynı anda çalıştırdığımda pic pasif beklemede iken modülün gönderdiği veriler bir şekilde USART RECEIVE bloğunda bir hataya sebep oluyor. Bu sıkıntıyı RCREG'i sıfırlayarak halledemedim. Sizce başka ne yapabilirim?
İlginize şimdiden teşekkür ederim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

FEHMİ_ASM

#1
     RCSTA/OERR bitini kontrol ediyor musun? Bu bit, veri almada alınan veri henüz okunmamışken başka bir byte gönderildi ise Ljk-1 olur (Üstüne yazma hatası.)

     Bir de PIC'i başlangıçta çalıştırıp, USART modülünü de yaklaşık 20-21 sn. sonra açmayı dene.

tekosis

OERR hatasını inceleyeceğim teşekkür ederim. 21 saniye olayına gelince gsm modül yaklaşık 13 saniyede tamamen hazır hale geliyor ben garanti olsun diye 20 saniye bekletiyorum. Sanırım zamanı uzatmaya gerek yok ama OERR hatasını mutlaka inceleyeceğim. Teşekkür ederim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

FEHMİ_ASM

   Eğer OERR biti L-1 oluyor ise yine RCSTA Registeri'nin CREN bitini önce L-0, sonra da L-1 yap. Böylelikle bu hata bildirisini sıfırlayabilirsin.

tekosis

Alıntı yapılan: FEHMİ_ASM - 23 Haziran 2011, 22:58:14
   Eğer OERR biti L-1 oluyor ise yine RCSTA Registeri'nin CREN bitini önce L-0, sonra da L-1 yap. Böylelikle bu hata bildirisini sıfırlayabilirsin.
Çok teşekkür ederim. Dediğin şekilde meseleyi hallettim. Ama şu an aklımdaki daha büyük mesele bunu nasıl hallettim?  Bu hatanın neden kaynaklandığını anlamazsam uyuyamam :) Tekrardan ilgin için teşekkür ederim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

tekosis

Aslında en başta yapacağım işi üşengeçlikten en son yaptım ve RCSTA kayıtçısını henüz inceledim. Burada 7. bit olan SPEN biti ile programın başlangıcında SPEN=0 diyerek seri portu tamamen devre dışı bırakıyorum. 20 saniye sonunda SPEN=1 diyerek seri portu aktif yapıyorum ve OERR hatası oluşmadan program rahat olarak çalışıyor.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

FEHMİ_ASM

 tekosis hocam,
   USART protokolünde RX'e bir veri geldiğinde bunu okumak zorundasın. Yani Read etmelisin. Eğer 1 Byte'lık veri  RCREG'in ilk tamponuna yüklendiğinde okumazsan RSR ikinci Byte'ı almaya başlar.İkinci Byte da alınıp RCREG'in ikinci tamponuna yüklenerek sırada bekler. Hala okumadı isen RSR üçüncü Byte'ı alıp tam RCREG'e yüklemeye çalıştığı anda OERR biti donanım tarafından set edilir.
   Kolay gelsin.

tekosis

Fehmi Bey, ne diyeyim Allah razı olsun...
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.