Seri İletişim ve TMR0 Kesmesi Sorunu

Başlatan erdemefe, 29 Ekim 2012, 02:42:03

ete

Hiç bir özelliği yok o pinin. Mutlaka devrende sorn vardır. Yada giriş yapmışsın dır ve dahili pullup larıda açınca pinde sürekli high görürsün.
Ete

erdemefe

Hocam şu anda tekrar kontrol ettim pull-up dirençleri iptal ve o RB5 TRISB registerında 0, devrede sorun olacak birşey de yok çünkü simulasyonda da çalışmıyor.
Dosyaları ekliyorum hocam 74hc595lerin data pinini değiştirdiğinizde göreceksiniz ki devre çalışacak.

ete

PORTB.5 pini aynı zamanda USART da TX pinidir. Dolayısıyla USART kullandığın için işlemi onu TX olarak tutuyor olmalı.

Ete

erdemefe

anladım hocam aslında gönderme yapmıyorum tek taraflı iletişim ama. o biti kullanamayacakmıyım gene de

Mucit23

İşlemci bozuk olabilir. Daha önce başıma geldi. Farklı bir işlemciyle denedinmi?
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

erdemefe


Mucit23

Dikkat etmemişim. Sanırım usart kullanıyorsun. Usart normalde 1 konumunda bekler. Sen gönderme yapmasanda usart donanımı aktf olduğu sürece rx ve tx 1 konumunda bekler.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

toprak

Alıntı yapılan: erdemefe - 03 Mart 2013, 15:40:52
anladım hocam aslında gönderme yapmıyorum tek taraflı iletişim ama. o biti kullanamayacakmıyım gene de

Tam anlayamadım. Başta 16f628 kullanıyordun. 16f628 için usart TX ayagı RB2 dir.  16F88 için RB5 dir.
Bir de programda dikkatimi çeken başta işlemciyi belirtmemişsin.
Acaba buralarda bir karışıklık mı var?
Kişi kesinliklerle başlarsa gideceği yer kuşkulardır, ama kuşkularla başlayacak kadar doygun ise kesinliklere ulaşır.

erdemefe

Arkadaşlar yardımlarınız için teşekkür ederim 16f88 kullandığım için TX pini boştayken 1 konumundaydı pini değiştirince sorun düzeldi

Hattuşa

slm ete hocam bir soru aklıma takıldı paylaşayım dedim, şimdi ultrasonıc yöntemle mesafe ölçümü devresi yapayım istedim. bu devrede TMRL ve TMRH  sayaçlarını çalıştıracağım. bu sayaçların çalıştırılmasında işlemcinin kristalinin etkisi varmıdır? kısaca 4MHZ kristal bağlamak ile 20MHZ kristal bağlamanın sayıcıya etkisi olur mu?

ete

Hemde nasıl olur. Bu sayaclar dahili osilatörden clk palsi alırlarsa durum şöyle olur.
4 Mhzde bir clk palsi 4 Mhz/4=1 Mhz işlemcinin programlarda kullandığı frekans oluyor. Buradan 1 clk palsi süresi  (T(us)=1.000.000/F (Hz) ) 1.000.000/1.000.000=1 us olarak bulunur.
Kristal 20 Mhz olur ise 20/4=5 Mhz. Buradan 1 clk palsi süresi 1.000.000/5.000.000 =0,2 us olacaktır.
Bu nedenle CLK hesaplarını işlemci frekansına göre yapmak gerekir. PicMultiCalc programı bunu işlemci frekansına göre yapıyor. Onu kullan.

Ete

Hattuşa

#56
haklısınız hocam aslında bu proje biraz eğitim amaçlı olur benim için, aşağıda adamın yazdığı koda göre sizce yeterince hassas bir hesap ve ölçüm yapılabilir mi? yani  siz olsanız daha sağlıklı nasıl yapardınız?

isisde denedim tmr ve hesaplama çalışıyor, tabi ultrasonic alıcı verici kullanma imkanımız isisde olmadığı için bizde kendimizi kandıralım diyerek sinyal genratorunden düşük pulse vererek simülasyon yapmaya çalıştık. amaç en azından kodu çalışabilirliğini test etmeyi hedeflemek.

PAUSE 250
TRISB = %00100000
SURE VAR WORD ;DE⁄‹fiKENLER TANIMLANIYOR
VERICI VAR PORTB.1
ALICI VAR PORTB.2
LCDOUT $FE,1 ;EKRANI TEMIZLE
T1CON = %00000001 ;TIMER1 ÖLÇEKLEME 1/1
PIE1.0=1 ;TIMER1'‹ ETK‹NLEfiT‹R
PIR1.0=0 ; TIMER1 TAfiMASINI TEM‹ZLE
INTCON = %11000000 ;DIfi KESMELERI ETK‹NLEfiT‹R
ANADONGU:
PAUSE 50 ;FARKLI ÖLÇÜMLER ARASINDAK‹ BEKLEME
SURE = 0
PIR1.0 = 0
HIGH VERICI ;40 KHZ L‹K S‹NYAL‹ GÖNDER
PAUSEUS 250
LOW VERICI
TMR1L = 0 ;TIMER1'‹ SIFIRLA
TMR1H = 0
WHILE 1=1 ;YANSIMAYI D‹NLE
IF ALICI = 0 THEN
SURE.LOWBYTE = TMR1L ;YANSIMA ALINIRSA O ANK‹ TIMER DE⁄ER‹N‹ TUT
SURE.HIGHBYTE = TMR1H
GOTO GOSTER
ENDIF
IF PIR1.0=1 THEN ANADONGU
WEND
GOTO ANADONGU
GOSTER:
LCDOUT $FE,1,"UZAKLIK" ;ÖLÇÜLEN UZAKLI⁄I EKRANA YAZ
LCDOUT $FE,$C0,#((SURE)/58), " cm"
PAUSE 25
GOTO ANADONGU



ete

Programın yazılış şekli pek hoşuma gitmedi. Ben olsam şöyle yazardım.

HIGH VERICI ;40 KHZ L‹K S‹NYAL‹ GÖNDER
PAUSEUS 250
T1CON=0
TMR1L = 0 ;TIMER1'‹ SIFIRLA
TMR1H = 0
LOW VERICI  'bu noktada TMR1 önceden sıfırlanmalı ve TMR1 aktif hale getirilmelidir.
T1CON=1
WHILE  ALICI=1:WEND
T1CON=0
SURE.LOWBYTE = TMR1L ;YANSIMA ALINIRSA O ANK‹ TIMER DE⁄ER‹N‹ TUT
SURE.HIGHBYTE = TMR1H
GOTO GOSTER


Ete

Hattuşa

#58
ete hocam bişey daha yapamadım  ;D

şimdi bu TMRL ve TMRH değerlerini 20 kez okutmak istiyorum, yani gönderme ve süre ölçme kısmını 20 kez yapıp her seferinde okuduğum süre değerini bir değişken dizisine atmak ve bunları küçükten büyüğe sıralayarak ortadaki değeri kullanmak istiyorum, amacım stabil bir değer elde etmek ne var ki isisden baktığımda bu 20 değeri tam alamıyorum


for z =0 to 20
HIGH VERICI ;40 KHZ L‹K S‹NYAL‹ GÖNDER
PAUSEUS 250
T1CON=0
TMR1L = 0 ;TIMER1'‹ SIFIRLA
TMR1H = 0
LOW VERICI  'bu noktada TMR1 önceden sıfırlanmalı ve TMR1 aktif hale getirilmelidir.
T1CON=1
WHILE  ALICI=1:WEND
T1CON=0
SURE.LOWBYTE = TMR1L ;YANSIMA ALINIRSA O ANK‹ TIMER DE⁄ER‹N‹ TUT
SURE.HIGHBYTE = TMR1H
A[z] =SURE
IF PIR1.0=1 THEN ANADONGU
next

For X =0 To 18
   For Y =(X +1) To 19
      If A[X] >A[Y] Then
       TeMp =A[X]
           A[X] =A[Y]
           A[Y] =TeMp
      EndIf
    Next Y
    Next X
SoNuC =(A[10] +A[11] +A[12]) /3
GOTO GOSTER



diyerek 20 sonucun ortadan 3 tanesinin ortalamasını alıp stabil bir sayı elde etmek istiyorum ama olmuyor, 1. veya 2. A değişkeninden sonrası hep 0 oluyor, sizce nerde hata yapıyorum.

ete

Bu işi isis de yapmak zor olsa gerek. Zira alıcı çıkışı sinyal olmadığı zaman HIGH da durması gerek.
Bunu sağlayan alıcı devresindeki opamp gurubu olsa gerek. Kodu ona göre düzenlenmiş idim.

Diğer bir konuda aman aşımı durumu ,
IF PIR1.0=1 THEN ANADONGU  komut satırında TMR1 sayacı aşıma uğrar ise kesme oluşacak ve buna bağlı olarak sistem döngüden çıkıp ANADÖNGÜ ye gidecektir. Böylece senin 20 defa okuma işinde engellenmiş olacaktır.

TMR1 sayacı 16 bitlik sayaç olduğuna göre enbüyük ölçülecek zaman aralığı 65535 us olacaktır (4 Mhzde) Orjinal program 4Mhz kristal frekansına göre hazırlanmış. Sen 20 Mhz de çalıştırıyorsun. Zaman farkınbı dikkate aldınmı? Zira 20 Mhzde TMR1 en fazla    65535 x 0,2=13107us lik süre sayabilir.

Ete

Powered by EzPortal