TMR0 kesmesi ve EUSART KESMESI

Başlatan toprak, 28 Mart 2012, 10:28:02

ete

İstediklerinin hepsini yaptırdım.
Yeni programlar ilişiktedir.
Ete

toprak

#16
Hocam yaptığınız devre simulasyonda çalışıyor.
Fakat devre üzerinde vericide herhangi bir butona basar basmaz alıcıdaki led ve lambanın her ikisi birden yanıyor ve  öylece yanık kalıyorlar. Vericide artık hangi butona bassam da alıcıda hiçbirşey değişmiyor.

Bazen de vericideki butonlara ne kadar bassam da alıcıda hiçbirşey olmuyor. yani ne led ne de lamba yanmıyor.

Devrede herhangi bir hata bulamadım.
Sizin simulasyonda çizdiğinizin aynısı.
4MHz XT yi 22pf ile kullanmışım. Picin besleme uçlarında 100 nf bağlı.
Neden  yanlış çalışıyor halen anlamış değilim.
Picte bozukluk olabilir mi.
yeni bir pic ile denedim yine aynısı oldu
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Benim bir sözüm vardır hatat iki tane. Birincisi, İsisde çalışan devre gerçektede çalışır. Çalışmyorsa kusur yapandadır.
İkinci sözüm ise bir arkadaşımdan alıntıdır. Çalışmayan devre yoktur çalıştırılamayan devre vardır.
Şimdi neden bu sözleri böyle rahat rahat kullanıyorum biliyormusun. yaklaşık altı-yedi yıldır sürekli oarak çalışmayan veya çalıştırılamayan devrelerle uğraşıyorum. Hemde uzaktan kumanda ederek uğraşıyorum. Sonuçta her seferinde basit bir insan hatası çıkıyor. Hatat genellikle yaptıkları hataları sonradan bulup söylemeye utanıyorlar ve diyorlarki temassızlık varmış. Komik geliyor bunlar bana.
Şimdi senin devreyi düşünecek olursak çalışmaması için bir sebep yok. Her şeyi kontrol ettim diyorsun ama bence gözünden kaçanbir şey var. Yoksa devrenin tıkır tıkır çalışması gerekir. Picproje de 628 ile 628A komusunda yazdıklarınıda okudum.
Cevap yazacaktım ama yazmadım. Burada fikrimi söyleyeyim. 628A yeni nesil işlemcidir. 628 den daha iyidir. A serisinde çalışma frekansı 1-20Mhz arasında değişebilir. Ama 628 serisinde her biri üzerinde hangi frekansta çalışacağı yazılıdır.
Ben alırken daima A serisini tercih ederim. Bu nedenle işlemcilere kabahat bulmamalısın. Ama bir yandan da düşünüyorum. Acemilik dönemimde bende bir çok işlemci bozdum. Genellikle programladıktan sonra devreye ters takarak ve zaman zamanda besleme voltajının dozajını kaçırarak işlemcileri bozmuştum. Sonradan akıllandım ve besleme devrelerine titizlikle dikkat ediyorum artık.
Bir yandan 628 lerden bahsederken devre veprogramları 16F688 temeli üzerinde kurdun. Neden bu işlemciyi seçtin diye bir ara düşünmüştüm. Aynı programı 628 için kullanmıyorsundur umarım. Çünki farklılıklar var.

Bu iş için kurduğun devreni ve özellikle RF modüllerini görmedim. Bu nedenle devren konusudna fazla bir yorum yapamayacağım.
Tek söyleyeceğim dikkatlice devreni incele ve hatanı bulmaya çalış.
Gerekirse buraya devre şemasını (her ne kadar aynı desende orada çizilmemiş ama gerçek devrede olması gereken bileşenler mevcut. Ayrıca PCB yerleşim ve bağlantı şemasını da buraya koyarsan daha derinden inceleme fırsatım olabilir.

Ete

toprak

Hocam devreyi tekrar tekrar gözden geçireceğim.
Her ne kadar devrede o kadar çok eleman olmasa da şu an için modülden şüpheleniyorum.
Daha basit bir programla deneyeceğim.
Bu arada 628 hakkında soran aynı bilgisayarlardan foruma giren başka bir arkadaştır hocam.


Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Diyebileceğim tek şey, programlarda bir kusur olmadığıdır. Bu nedenle kusuru devrede veya devre elemanlarında araman gerekiyor.

Yapabileceğin işlerin başında modülleri iptal ederek işlemcileri şemadaki gibi bağlayıp kablolu olarak çalışıp çalışmadıklarına bakman geliyor. Şayet bu şekilde sorunsuz çalışıyorlar ise o zaman modüllerde sorun arayabilirsin.

Modüllerde ufak nüans farklılıkları olabilir. Örneğin 433 Mhz ile 433,92 Mhz de çalışan modüller kısa mesafeden (1-2m) haberleşebilirler ama mesafe artınca sorun çıkartırlar.  Ayrıca anten ayrı bir konudur. PCB üzerinde anten empedansının yaratılmasına dikkat edilmelidir. Gerekirse anten bağlantısı 2-3 cm ileriye çekilmeli ve kanalın etrafı GND (powerplane) ile kaplanmalıdır. Bu işlem antene gerekli olan 50 ohm empedansı sağlar. Mesafe çok uzun değil ise tavsiyem spiral anten kullanman yönünde olacaktır. UDEA sitesinde anten ile ilgili bir pdf dosyası olması gerek. Onu bul ve incele derim.

Ete


toprak

Alici ve verici modülleri söktüm.
Devre çalıştı.
Bu ne demek oluyor hocam. Acaba modüller mi bozuk.
Bunu da yarın aynı modülden bir başka çift ile deneyeceğim.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Elbette sorun modüllerde . Bu apaçık ortada. Modülsüz sistem çalışıyorsa ve modüllerle çalışmıyorsa sorun modüllerin uyumsuzluğunda dır bence. Mümkünse aynı firmanın mamullerini kullanmaya çalış ve çift olarak satılanlardan alıp kullanmaya çalış.

Ete

toprak

#22
Bugün aynı çift modülden yeni olan bir çift ile devreyi yeniden denedim. Fakat yine aynı şey oldu.
Olan şu.  Ben vericide 1.butona basınca alıcıdaki led yanıyor olması gerektiği şekilde . Fakat geri sönmüyor. Dolayısıyla ben başka bir butona bassam da işlem yapmıyor.

Dediğim gibi direk rx tx arası kablo kullandığımda devre istikrarlı çalışıyor.

Hem tx-rx arası kablo hem modüller bağlı iken şöyle birşey yaptım. Ben 1. butona basınca alıcıda led yandı. Fakat sönmedi. Ben tx-rx arası kabloyu birbirine dokundurunca alıcıdaki led söndü. Kablo bağlantısını geri kestim. Velhasıl sonra mesela 3. butona bastım . Led ve lamba yandı. Fakat geri sönmediler. yani takılı kalıyorlar. Tekrar tx-rx arası kabloyu birbirine dokundurunca  led ve lamba söndü.   Sonra kabloyu yine kestim. 4.butona basınca alıcıda led yandı ve yine öyle yanık kaldı. Tekrar tx-rx arası kabloyu birbirine dokundurunca led söndü dolayısıyla sistem kapandı. Yani yapması gerekeni bu şekilde yapıyor.

Modül kullanınca her işlemde takılmasının sebebi nedir acaba.
Bu modülü önceden farklı devrelerde çok kullandım. Hiç arızası olmamıştı. Kaldı ki farklı zamanlarda aldığım 3 çift modülle bugün devreyi yeniden denedim. Aynı sorun devam etti.

Ama dediğim gibi modülsüz de devre çalışıyor.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

Anladğım kadarı ile sistem RF modüllerle çalışırken mesaj almada sorun yaşanıyor.
Bunu muhtelif sebepleri olabilir. Denemeler yaparak sorunu aşmak gerekir.

Öncelikle programda ne yapabiliriz diye baktım ve bir iki değişiklik yaptım.
Bunlardan birincisinde sistemin veri almasının kontrolünü US bit değişkeninden ayırdım.
Zira burada ayrı bir değişken kullanmak gerekmiyor bana kalırsa. Zaten veri gelmiş ise Veri1 ve Veri2 değerleri sıfırdan farklı bir değer olacaktır. Nitekim bu değişikliği yapınca sistem aynı şekilde çalışmasına devam etti.
Sebebini bilemiyorum ama sanki verdiğimiz 5 ms lik veri bekleme süresininde kısa olduğunu sanıyorum. Bu nedenle bu süreyi 10ms ye çıkardım.
Bu iki değişikliği içeren program aşağıdaki şekilde oldu. Bunu derleyip yeniden dene bakalım.

Ete

@ DEVICE pic16F688 'islemci 16F688
@ DEVICE pic16F688, WDT_OFF 'Watch Dog timer kapali
@ DEVICE pic16F688, PWRT_ON 'Power on timer acik
@ DEVICE pic16F688, PROTECT_OFF 'Kod Protek kapali
@ DEVICE pic16F688, MCLR_OFF 'MCLR pini kullaniliyor.
@ DEVICE pic16F688, XT_OSC   'INTRC_OSC_NOCLKOUT  'Dahili osilator kullanilacak
@ DEVICE pic16F688, BOD_OFF

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

SYMBOL LED=PORTC.3
SYMBOL LAMBA=PORTA.0

SYMBOL GIE  =INTCON.7   'genel interruptlary' açiyor
SYMBOL PEIE =INTCON.6   'peripheral interruptlary' açiyor
SYMBOL RCIE =PIE1.5     'USART Recive interrupt enable bit
SYMBOL RCIF =PIR1.5     'USART ALICI TAMPONU DOLU 1

SYMBOL T0IE =INTCON.5    'TMR0  interrupt enable bit
SYMBOL T0IF =INTCON.2    'TMR0  interrupt flag bit CLEAR

OPTION_REG=%10000101    '1/64
CMCON0=7     
ADCON0=0
ADCON1=0
ANSEL=0
WPUA=0

TRISC=%00100000
PORTC=0
TRISA =%00000000
PORTA=0


AL1   VAR BYTE 56
AL2   VAR BYTE 57
SN    VAR BYTE 58
DAK   VAR BYTE 59
TEMP  VAR BYTE
SAYAC VAR WORD
I     VAR WORD

SURE  VAR BIT
SART  VAR BIT
Direk Var BIT
 
PAUSE 200

RCIE=1
PEIE=1
GIE=1
T0IE=0

ON INTERRUPT GOTO KESME

BASLA:
IF DIREK=0 THEN LAMBA=0
LED=0
               
IF SURE=1 THEN   ' 1 dakika dolmuş ise
    SURE=0
    INTCON.5=0:LAMBA=1:LED=1
    GOSUB BIRSN
    LAMBA=0:LED=0:Direk=0
ENDIF
   
    IF  AL1=11 AND AL2=72 THEN   'Buton1 e basılmış ise SART=1 yapılıyor.
        LED=1:SART=1
        GOSUB BIRSN         
    ENDIF
    IF SART=1 AND AL1=21 AND AL2=82 THEN  'Buton2 ye basılmış ise
       LED=1:T0IE=1
       GOSUB BIRSN
    ENDIF
    IF SART=1 AND AL1=31 AND AL2=92 THEN 'buton3 e basılmış ise
       LED=1:LAMBA=1:Direk=1
       GOSUB BIRSN
    ENDIF
    IF SART=1 AND AL1=51 AND AL2=112 THEN  'buton 4'e basılmış ise
       LED=1:SART=0:INTCON.5=0:SURE=0:DAK=0:SN=0 :Direk=0
       GOSUB BIRSN
    ENDIF     

GOTO BASLA


BIRSN:
    FOR I=0 TO 10000
    PAUSEUS 5
    NEXT
    AL1=0:AL2=0
    RETURN
   
DISABLE
KESME:
GIE=0
                 'tüm interruptlari kapat  INTCON.7=0
IF T0IF=1 THEN KESBIR
HSERIN 10,CIK,[WAIT("RED"),AL1,AL2 ]
TEMP=RCREG
RCIF=0
GOTO CIK

KESBIR:
      SAYAC=SAYAC+1      'kesme sayac?  1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme)
      IF SAYAC=61 then      '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
         SAYAC=0             'sayaç s?f?rlan?yor
         SN=SN+1            'saniye de?eri bir art?r?l?yor
            IF SN=60 THEN     'saniye 60 olmu? ise 1 dakika süre geçti o halde
               SN=0           ' saniye s?f?rlan?yor
               DAK=DAK+1       ' dakika de?eri bir art?r?l?yor
               IF DAK=1 THEN
               SURE=1
               LAMBA=0:LED=0:DAK=0:SN=0:SAYAC=0
               ENDIF
             ENDIF
      ENDIF                   
T0IF=0

CIK:                   
GIE=1                  ' INTCON.7=1 kesmeleri açtik.
RESUME                                                                                                                                                                                         ENABLE
END

toprak

#24
Yine aynı sorun var. Alıcıda hiçbir şey olmuyor.
Alıcının bilgiyi almada sorunu devam ediyor.

Ama Tx-Rx arası kablo ile normal çalışıyor.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

YAptığın bu devrenin varsa PCB dosyalarını mümkünse jpg formatında ve mümkünse devreleri yan yana koyup fotoğraflarını çekmeni ve bana yollamanı istersem yapabilirmisin. ?

Gerçekten merak ettim bu kadar inat etmesine sebep ne olabilir diye. Ortada bir terslik var ve sen onu göremiyorsun.Bir başka göz hatta iki göz daha devreye bakması gerekiyor.

Aldığın modüllerin markası , kod numarası nedir onlarada bakmak isterim.

Birde hangi şehirdesin?

Ete

toprak

kullandigim devrenin pcb si ve modulun datasheeti ektedir hocam
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

ete

PCB dosyanı açamadım. Eski versiyon bir kayıt sanırım. Açabilmem için ya aynı dosyayı geri kayıt edeceksin ve kayıt ederken dosya türü olarak Ares 7.0 Layout File seçeceksin veya Region olarak kayıt edip o dosyayı bana ileteceksin.
Dosyayı region olarak kayıt etmek için File menüsünde Export Region seçeneği seçilerek kayıt yapılır.

Modüllerin data sheet'ine baktım. Aslında düşündüğümden farklı modüller kullanmışsın. Bir defa çalışma frekansları 869,5 Mhz bu frekansta çalışmadım. Gerçekte fark etmemesi gerekir. Birde modüller Manchester kodlama kullanıyor. Bu zaman zaman seri iletişimde sorun çıkartıyor. Çünkü senin bir bitin Manchesterde iki bit ile ifade ediliyor. Böylece byte ların süresi uzuyor.
Bence Manchester kullanmasan daha iyi olurdu. Aşağıda yazdığım ikinci muhtemel sorundan değilse senin sorunun manchester kodlamasındandır diyeceğim.

Diğer konu her bir modülde bir power aktivasyon pini olmasıdır. Verici modülde Power-Up pini mevcut. Bu pin HIGH olur ise verici aktif oluyor. Bu pini ya sürekli HIGH da tutacaksın yada işlemcininbir pinine bağlayıp yollama yapmadan önce o pini HIGH yapıp 520 ms bekleyecek ve sonra verileri yollayacaksın. Ardından aynı pini LOW a çekeceksin.

ALıcıda ise bunun tersi olarak Power-Down pini mevcut. Bu pin LOW da olursa alıcı aktif oluyor. High da olursa alıcı standby konumunda bekliyor. Aynı şekilde bu pini ya sürekli LOW da tutacaksın veya işlemcinin bir pinine bağlayıp, veri alması için sürekli LOW da tutacaksın.  Aslında Data sheet de anlamadığım bir kısım var. Şayet Güç kontrol pini bağlanmaz ise maksimum güç ile çalışır diyor ama bir yandan da çalışması için HIGH olması gerekir diy elaf etmiş. Bu çelişki bana göre ama deneme sonunda bulunur ne olduğu.
Bu iki pini dediğim şekilde ayarlamış isen o zaman manchester kodu ile alakalı bir çalışma yapmak lazım gelir.
Yapılacak tek şey var oda HESERIN kodunda 10ms yaptığımız bekleme süresini 100 ms ye hatta mümkünse 250 ms ye çıkarman ve deneme yapman yönündedir. Şayet yine sorun olur ise bence manchester kodlaması olmayan başka bir modül ile deneme yapman gerekir.
Modül alırkende özel bir tercihin yada zorunluluk yok ise 433 Mhz frekansını tercih etmeni öneririm.

Ete

toprak

#28
Proteusun 7.10 surumunü kurmuşum .   En son picprojeden indirdigim surumdür. Yenidir.
Siz kurmamışsaniz acmayabilir hocam.
Modül olarak hangi marka önerirsiniz.

PWRUP ve alıcıda PWRDOWN belirttiğiniz şekilde kullanmışım. Alıcıda PWRDOWN sürekli eksiye bağlı.
Vericide PWRUP veri gönderilmeden önce aktif yapılıyor.
Yalnız ben 520msn bekleme koymamıştım.
520msn bekleyerek denedim . Yine olmadı.

Hserin kodunda 100msn ve 250msn bekleyerek denedim. Olmadı.

Fakat aynı modülü 12f675 ile serin komutunda kullanmışım. Sorun çıkarmamış hocam.
Yine 16F628 de serin komutunda sorun çıkarmamış.
Usartta mı sadece sorun çıkarıyor acaba.
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

toprak

  Hocam elimde farklı olarak ARF54 UART TTL birkaç tane modul var.

  http://www.adeunis-rf.com/files/faq/9/EN/ARF54_Module_868MHz_UG_V7.pdf

  Fakat bu modul hem alıcı hem verıcı.
  Ayrıca çalışma voltajı 3.3 volt
  Bu modulu basıt alıcı ve ayrı olarak verici şeklinde nasıl deneyebilirim
  Modüle zarar vermek istemiyorum.
  PİC ile bağlantılarını direkt yapsak sorun olur mu.
 
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

Powered by EzPortal