PIC 16F877A İLE FREKANS OKUMA_OKUYAMAMA

Başlatan yusufrov, 13 Aralık 2015, 18:07:39

yusufrov

Merhaba Arkadaşlar,

2 haftadır frekans okumaya calışıyorum pıc ile p521 opto kullanıyorum okunan frekansı ekrana yazmak istiyorum fakat bir turlu yazdıramadım.

arkadaşım protonda yaptıgı yazılımda counter kullanarak her turlu okuypor aynı devreyi ben kurup count komutu ile frekans okuyamadım bir turlu acil yardımınız gerekli.

Programım aşagıdaki gibi.


'****************************************************************
'*  Name    : RPMLIMIT.BAS                                      *
'*  Author  : yusuf kılıç                                       *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 04.10.2015                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

@ __config _HS_OSC & _WDT_OFF & _LVP_OFF & _CP_OFF & _BODEN_OFF

DEFINE LCD_RSREG    PORTB
DEFINE LCD_RSBIT    4     
DEFINE LCD_EREG     PORTB
DEFINE LCD_EBIT     5     
DEFINE LCD_DREG     PORTB
DEFINE LCD_DBIT     0     
DEFINE LCD_BITS     4     
DEFINE LCD_LINES    2

ADCON1=7

TRISA=%11111111
TRISB=%00000000
TRISC=%00000000
TRISD=%11111111

PORTA=0
PORTB=0
PORTC=1
PORTD=0
ANIMASYON VAR BYTE
RP VAR BYTE
FREKANS VAR WORD
OKUNAN VAR WORD
SYMBOL TRANSISTOR=PORTC.0
SYMBOL DALGA=PORTD.5
SYMBOL LED=PORTC.7
SYMBOL BUTON=PORTD.7
TRANSISTOR=1
LED=1
TRANSISTOR=0
PAUSE 200
LED=0
PAUSE 200
LED=1
PAUSE 200
LED=0
TRANSISTOR=1
LCDOUT $FE,1,"PROGRAM"
LCDOUT $FE,$C0,"BASLATILIYOR"
PAUSE 200
;_____________________________________________________
FOR RP=1 TO 20
PAUSE 20
PORTC=%00000001
LED=0
TRANSISTOR=0
PORTC.2=1
PAUSE 20
PORTC.3=1
PAUSE 20
PORTC.4=1
PAUSE 20
PORTC.5=1
PAUSE 20
NEXT RP 
TRANSISTOR=1
PAUSE 50
     
;______________________________________________________


BASLA:
TRANSISTOR=1
LED=1
count DALGA,50,okunan
OKUNAN=OKUNAN*20
LCDOUT $FE,1,"OKUNAN "
LCDOUT $FE,$C0,#OKUNAN,"___fre"

KONTROL:
IF PORTA.5=1 THEN PORTC.1=1
IF PORTA.4=1 THEN PORTC.2=1
IF PORTA.3=1 THEN PORTC.3=1
IF PORTA.2=1 THEN PORTC.4=1
IF PORTA.1=1 THEN PORTC.5=1
IF PORTA.5=0 THEN PORTC.1=0
IF PORTA.4=0 THEN PORTC.2=0
IF PORTA.3=0 THEN PORTC.3=0
IF PORTA.2=0 THEN PORTC.4=0
IF PORTA.1=0 THEN PORTC.5=0
TRANSISTOR=1
LED=1
IF PORTA.5=1 AND OKUNAN>=6400 THEN KESME
IF PORTA.4=1 AND OKUNAN>=6000 THEN KESME
IF PORTA.3=1 AND OKUNAN>=5000 THEN KESME
IF PORTA.2=1 AND OKUNAN>=4000 THEN KESME
IF PORTA.1=1 AND OKUNAN>=3000 THEN KESME
IF BUTON=0 AND OKUNAN>=4000 THEN KESME

GOTO basla

KESME:
IF PORTD.0=0 THEN basla     
TRANSISTOR=0
LED=0
PAUSE 50
IF PORTD.1=0 THEN basla
PAUSE 100
IF PORTD.2=0 THEN basla
pause 250

GOTO BASLA

END


Ve bu site ve sizler sayesinde ben bukadar yazılım yapabilir bir durumdayım herkese can gonulden teşekkür ederim özelliklede bu guzel insanları buraya toplamaya vesile olan ve bizden hiçbir bilgisini esirgemeyen ETE hocamıza.

ete

Frekans denilen şey bir sinyalin 1000 ms içindeki puls adedidir. 100 hz denildiği zaman 1000 ms içinde sayılacak puls adedi 100 anlamına gelmektedir.
Count komutu verilen süre parametresi ile birlikte gelen pulsleri sayabilir.
Senin verdiğin parametreye bakılırsa 50 ms lik bir süre içinde gelen pulsleri saydırıyorsun. Count komutu ile 4Mhz kristal kullanılırsa en fazla 25Khz lik frekans okunabilir. 20Mhz lik kristal ile 125Khz okunabilir.
Sen HS osc kullanmışsın ama programın kaç Mhz ile çalıştığı belli değil. Programın başına ;
Define OSC 20 gibi bir komut yazarak kristal frekansını belirtmen gerekiyor. Buna bağlı olarak işlemcide count komutunu nasıl kullanacağını bilecektir.
okuma süren 50 ms olarak bana çok düşük geldi. Bu sürede yeterince hassas bşir frekans okuman zor gibi geliyor bana
bence en az 200 ms okuma yap sonra okunan değeri 5 ile çarp.

Ete

yusufrov

Hocam söylediklerinizi ekledim yazılıma portd.5 e bagladıgımda frekans okumuyor porta.0  a yani pic in 2. bacagına aldıgımda frekans ucunu okudu. portd.5 e aldıgımda gene okumuyor yazılımsal bir eksik mi var aceba.
Şu an devre calışır durumda portA.0 dan frekans okuyor.

ete

#3
Okuma pinini giriş yapmış isen okuması gerekirdi. Bir eksiklik vardır mutlaka.
Dosyaları buraya koy bakalım.

Ete

yusufrov

Kod yazılımı yukarda var hocam dosyaları da yuklemiştim.

~ENES~

CMCON=7 komutunu programın başına ekleyerek deneyebilir misin..
ALLAH'a teslim olmuş bir insan ! Ne sultan tanir , ne sadrazam !

onurinci

şema'yı görebilseydik iyi olurdu,ileriki versiyon isis açamıyoruz jpeg bmp grafik export olmuyormu ?

ete

#7
Yusufov,

Yukarıda verdiğin program eksikleri olan program. Dediklerinizi ekledim dediğin program ile yukarıdaki değiştirirsen onu alır bakarım. Yoksa ne yaptığını nereden bileceğim. Belki hala eksik nbir şeyler var?. Bu nednele yukarıda var diyerek olayı geçiştirme.

İkincisi verdiğim şema ve sim dosyalarını ben açamıyorum. Çünki o versiyonu kullanmıyorum. En azından şemayı jpg olarak buraya koyarsan yeniden yapma şansımız olur. Bu şekilde sana yardımcı olmak bana eziyet oluyor. Eziyet diyorum çünki ne programın son halini alabiliyorum ne şemanı görebiliyorum. Ne yapmalıyım sence?.
Oturup yukarıdaki programa eksikleri ben eklemeliyim. Belki ben doğru eklerim ama sen yanlış ekledin ise?
Programı denemek için kafadan atma bir devre çizmem gerekiyor. Kim nereye bağlı belli değil?
İşimi kolaylaştır biraz.

Ete

Edit: Senden cevap gelinceye kadar ben basit bir devre kurdum ve PORTD.5 pininden ;
count DALGA,250,okunan
OKUNAN=OKUNAN*4
komutları ile okuma yaptırdım. Sorunsuz okuyor. Elbette bu pinlerin bir frekansı okuması için gelen frekansın lojik seviyesi 3-5V arasında olması gerekir. AKsi taktirde işlemci, gelen sinyal HIGH mı değilmi anlayamaz. Senin kusurun bu olsa gerek.
Zira sorunsuz okuyor. 3V seviyeye sahip 12Khz lik bir sinyal girdim okuyor. Senin okutmak istediğin frekans hangi aralıkta acaba?


Powered by EzPortal