FREKANSMETRE İSİS SİMÜLASYONUM 3 KAT FAZLA GÖSTERİYOR (YARDIM TALEBİ)

Başlatan abstruse, 01 Aralık 2012, 00:35:21

abstruse

   ÖNCELİKLE HERKESE HUZURLU GÜNLER DİLERİM.
   BU FREKANSMETRE (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...



' 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


ORİJİNAL PROJE RESMİ BU^

HEX KODU VE İSİS SİMÜLASYONU
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..

ete

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
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

abstruse

   
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

ÜST RESİMDEKİ KAYNAK AYARI İÇİN SİMÜLASYON



GEÇİKMELİ BİR PULSE SİNYALİ KURULDU


GEÇİKME 0 YAPILDI VE SONUÇ DOĞRU OLDU





   Ş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..

ete

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
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

abstruse

   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.