ÖNCELİKLE HERKESE HUZURLU GÜNLER DİLERİM.
BU FREKANSMETRE (http://www.antrak.org.tr/gazete/102004/bekir-sutcu.html (http://www.antrak.org.tr/gazete/102004/bekir-sutcu.html)) DEN ALINTIDIR.
BENİM SORUNUM BU PROJEJİ UYGULAYAN ARKADAŞLAR NORMAL ÇALIŞTIĞINI SÖYLÜYOR LAKİN BEN NE HİKMETSE FREKANSLARI GİRİŞE VERDİĞİMİN 3 KATI YÜKSEK OKUMAKTAYIM ACABA ATLADIĞIM NOKTA NERESİDİR PROGRAMDA OYNAMA YAPARAK DÜZELTEBİLİYORUM AMA BUNU YAPMAKTAN ZİYADE NEDEN BENDE FARKLI ÇIKIYOR? PİC OSİLATÖR FREKANSIM 4MHZ OLARAK HEM İSİSTEN HEM DIŞ XTAL DEN AYARLADIM.PROJEDEDE AKSİ BELİRTİLMEMİŞ ZATEN.
PROJEDE BÖLÜCÜ(MC12013) 65 KHZ DEN SONRA DEVREYE GİRİYOR O YÜZDEN BEN ŞİMDİLİK SADECE 65KHZ YE KADAR OLAN KISMI ELE ALDIM BÜTÜN HERSEYİ BURAYA YAZDIM YARDIMLARINIZ İÇİN ŞİMDİDEN TEŞEKKÜR EDERİM...
(http://b1212.hizliresim.com/14/1/gfxrb.png)
' PicBasicPro FREKANSMETRE SINYAL JENERATÖRÜ
' LCD 4-bit mode
' 16F877
' LCD bağlantı şekli:
' LCD PIC
' DB4 PortD.4
' DB5 PortD.5
' DB6 PortD.6
' DB7 PortD.7
' RS PortD.2
' E PortD.3
' RW Ground
' Vdd 5 volts
' Vss Ground
' Vo 20K potansiyometre (ground)
' DB0-3 boşta
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
fout var word
foutL var fout.byte0
foutH var fout.byte1
ADCON1=2
loop: Pause 200
Lcdout $FE,1,"Merhaba"
Pause 1000
Lcdout $FE,1,"Yazan:"
Lcdout $FE,$C0,"isim"
Pause 1000
frek: Lcdout $FE,1,"Frekans"
Lcdout $FE,$C0,"Metre "
pause 1000
' **** FREKANSMETRE***************
MeasFrek: Lcdout $FE,1,"Skala ?"
Pause 100
if PortE.0 then skale1 ' 0-65 kHz
if PortE.1 then skale4 ' 65MHz-550 Mhz
goto MeasFrek
skale1: Lcdout $FE,1,"0-65 kHz"
Pause 160
if PortE.0 then skale2
if PortE.1 then skale4
if PortE.2 then Olcum1 ' Ölcüme basla
goto skale1
skale2: Lcdout $FE,1,"65-650 "
Lcdout $FE,$C0
Lcdout "kHz"
Pause 160
if PortE.0 then skale3
if PortE.1 then skale1
if PortE.2 then Olcum2 ' Ölcüme basla
goto skale2
skale3: Lcdout $FE,1,"0.65 - 6"
Lcdout $FE,$C0
Lcdout "5 MHz"
Pause 160
if PortE.0 then skale4
if PortE.1 then skale2
if PortE.2 then Olcum3 ' Ölcüme basla
goto skale3
skale4: Lcdout $FE,1,"65 MHz-5"
Lcdout $FE,$C0
Lcdout "50 MHz"
Pause 160
if PortE.0 then skale1
if PortE.1 then skale3
if PortE.2 then Olcum4 ' Ölcüme basla
goto skale4
Olcum1: Lcdout $FE,1,"Bolge 1"
Pause 500
goto fre1
Olcum2: Lcdout $FE,1,"Bolge 2"
Pause 500
goto fre2
Olcum3: Lcdout $FE,1,"Bolge 3"
Pause 500
goto fre3
Olcum4: Lcdout $FE,1,"Bolge 4"
Pause 500
goto fre4
fre1:
' ------------------ 1 s gecikme ---------------- ASSEMBLER MODA GEÇİŞ
asm
bcf STATUS,RP0
bcf STATUS,RP1
clrf TMR1L
clrf TMR1H
movlw D'7'
movwf T1CON
endasm
pause 1000
asm movlw D'6'
movwf T1CON
movf TMR1L,0
movwf _foutL
movf TMR1H,0
movwf _foutH
endasm
'----------------------------------------------ASSEMBLER MODDAN ÇIKIŞ
Lcdout $FE,1
Lcdout #fout," Hz"
Pause 300
if PortE.2=1 then MeasFrek
goto fre1
fre2:
' ------------------ 1 s gecikme ----------------
asm
bcf STATUS,RP0
bcf STATUS,RP1
clrf TMR1L
clrf TMR1H
movlw D'7'
movwf T1CON
endasm
pauseus 35
pause 1000
asm movlw D'6'
movwf T1CON
movf TMR1L,0
movwf _foutL
movf TMR1H,0
movwf _foutH
endasm
Lcdout $FE,1
Lcdout #fout,"0"
Lcdout $FE,$C0," Hz"
Pause 300
if PortE.2=1 then MeasFrek
goto fre2
fre3:
' ------------------ 10 ms gecikme ----------------
asm
bcf STATUS,RP0
bcf STATUS,RP1
clrf TMR1L
clrf TMR1H
movlw D'7'
movwf T1CON
endasm
pauseus 9993 ; 10 ms gecikme
asm movlw D'6'
movwf T1CON
movf TMR1L,0
movwf _foutL
movf TMR1H,0
movwf _foutH
endasm
Lcdout $FE,1
Lcdout #fout
Lcdout $FE,$C0," kHz"
Pause 300
if PortE.2=1 then MeasFrek
goto fre3
fre4:
' ------------------ 1 ms gecikme ----------------
asm
bcf STATUS,RP0
bcf STATUS,RP1
clrf TMR1L
clrf TMR1H
movlw D'7'
movwf T1CON
endasm
; 1 ms gecikme
asm movlw D'6'
movwf T1CON
movf TMR1L,0
movwf _foutL
movf TMR1H,0
movwf _foutH
endasm
Lcdout $FE,1
Lcdout #fout,"0"
Lcdout $FE,$C0," kHz"
Pause 300
if PortE.2=1 then MeasFrek
goto fre4
END
(http://www.antrak.org.tr/gazete/102004/cizimler/bekir-sutcu/Frekansmetre-k.gif)
ORİJİNAL PROJE RESMİ BU^
HEX KODU VE İSİS SİMÜLASYONU
http://www.dosya.tc/server24/1aECmH/FREK.rar.html (http://www.dosya.tc/server24/1aECmH/FREK.rar.html)
YANİ BENİM KORKUM DEVREYİ PCB YE BASIP SONUÇ ALAMAMAK O YÜZDEN SİMÜLASYONDA EN AZINDAN GÖRMEK İSTİYORUM. TEŞEKKÜRLER İYİ ÇALIŞMALAR..
Programda hata yok. Hata İsis Sİnyal Jeneratöründe. Bu jeneratör yerine başka bir CLK kaynağı bağlarsan doğru çalıştığını görebilirsin.
Her ne hikmetse bu jeneratör bir türlü doğru çalışmıyor. Yada çalışıyorda benim yada senin bilmediğin bir ayarı daha var.
Zira skop ile bakınca sinyalin peryodu 200us gözüküyor bu 5Khz demektir. Ancak sayaç sayarken bunu 15000 sayıyor. Başka bir CLK kaynağı bağlayınca mesela solda yer alan Generator Mode (S işaretli olan) seçilip açılan pencereden Sin seçip yine açılan pencereden CLK işaretlenip frekans olarak da 5K seçilirse senin devre bunu 5K olarak okuyor. Skop ile bakarsan sinyal aynı sinyal ama birini program 15K okuyor diğerini normal 5K okuyor.
Ete
Alıntı YapProgramda hata yok. Hata İsis Sİnyal Jeneratöründe. Bu jeneratör yerine başka bir CLK kaynağı bağlarsan doğru çalıştığını görebilirsin.
Her ne hikmetse bu jeneratör bir türlü doğru çalışmıyor. Yada çalışıyorda benim yada senin bilmediğin bir ayarı daha var.
Zira skop ile bakınca sinyalin peryodu 200us gözüküyor bu 5Khz demektir. Ancak sayaç sayarken bunu 15000 sayıyor. Başka bir CLK kaynağı bağlayınca mesela solda yer alan Generator Mode (S işaretli olan) seçilip açılan pencereden Sin seçip yine açılan pencereden CLK işaretlenip frekans olarak da 5K seçilirse senin devre bunu 5K olarak okuyor. Skop ile bakarsan sinyal aynı sinyal ama birini program 15K okuyor diğerini normal 5K okuyor.
Sayın @ETE öncelikle ilginize teşekkür ederim, önerilerinizi yanlış mı anladım bilmiyorum ama diğer generatörü de kullandım eğer sinis kullanırsam mutlaka 3 katı ölçüyor hocam ( daha önce 18f452 ile c18 dilinde frekansmetre yazmıştım ve uyguladımda onda bu problemi yaşamamıştım)
Şimdi dikkat ediyorumda negatif alternansı olan tüm sinyallerde bunu yaşıyorum lakin sinyalin biçimine bakmaksızın bir d tipi flip flopla frekansını 2 ye böldüğümde çıkan değer normal olması geren bir değer oluyor.
Durumun sinyalin negatif alternanstan (çift altenanslı sinyaller için) pozitif alternansa geçişi anında ki gecikme zamanına bağlı olduğunu düşünüyorun çünkü clock sinyalindede geçiş süresi uzun olursa yine hatalı ölçüm alıyorum....
Şimdi bir kaç resim yükledim.
KAYNAK YARLARI ŞEKİLDEKİ GİBİ YAPILDI AMA SİNÜS SİNYALİ İÇİN
(http://b1212.hizliresim.com/14/1/gg8f2.jpg)
ÜST RESİMDEKİ KAYNAK AYARI İÇİN SİMÜLASYON
(http://b1212.hizliresim.com/14/1/gg8bd.png)
GEÇİKMELİ BİR PULSE SİNYALİ KURULDU
(http://b1212.hizliresim.com/14/1/gg8h3.jpg)
GEÇİKME 0 YAPILDI VE SONUÇ DOĞRU OLDU
(http://g1212.hizliresim.com/14/1/gg8hv.jpg)
(http://g1212.hizliresim.com/14/1/gg8jj.jpg)
Şimdi bilmiyorum karışık mı oldu.
Sorun bende mi proteusta mı yoksa 16f877 de mi yoksa ne :?
Ben bu noktada nasıl bir yol izlemeliyim ki bu devre frekans metre olarak kullanılacak bir devre olsun ve emeğim boşa gitmesin ?
Ayrıca çok karmaşık bi hal aldı proteus şimdiye kadar beni yanıltmadı ama bilemiyorum... :o
Tekrar teşekkürler..
Bu tür sorunları aşmanın en kolay yolu sinüs sinyalini kare dalgaya çevirmektir bence.
BC547 transistörün Beys ucuna sinüs sinyali 1K direnç üzerinden gir. Emitteri GND ye bağla ve Collector'u 4k7 ile Pullup yap. Collectordan aldığın sinyal ters çevrilmiş ancak kare dalga şeklinde olacak ve sayaç da bunu kolaylıkla doğru sayacaktır.
Ete
Bu gün bende onu yapmıştım lakin sadece transistör yine yeterli olmadı son bulduğum çözüm resimdeki gibi :s
Umarım başka dalga şekilleri ve yüksek frekanslarda sıkıntı yaşatmaz bu şekilde yapmayı düşünüyorum.
Yardımların için tekrar teşekkür ediyorum fikir gelirse aklınıza yine takipte olacağım bildirirseniz sevinirim.
(http://e1212.hizliresim.com/14/1/ggq20.png)