avatar_bilsisco

20Mhz kristal kullanamıyorum??

Başlatan bilsisco, 22 Temmuz 2014, 05:34:33

bilsisco

SA. HC-SR04 Ultrasonik sensör ile mesafe ölçmeye çalışıyorum
pic16f628A ve pbp kullanıyorum.
Şimdiye kadar hep dahili osilatörü kullandım
elimde 2 tane kristal var(SJK 20.000) ve 4 tane 22pf kondansatör ve birkaç tane 16F628a var.
ne denediysem olmadı. bırakın alttaki kodu bir led bile yakıp söndüremedim

Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_OFF
@ DEVICE pic16F628A, HS_OSC 
DEFINE OSC 20

TRISA=%00000010
TRISB=%00000000 
PORTA=0
PORTB=0
'-------------------------- LCD Tanımlama --------------------
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
'DEFINE LCD_COMMANDUS 2000   ' Set command delay time in us
'DEFINE LCD_DATAUS 50        ' Set data delay time in us


CMCON=7    '16F628A de komparatör pinleri iptal, hepsi I/O (dijital)
'--------------------------- Değişkenler ---------------------   
W       VAR   word  ' ölçüm
R       var   word  ' uzaklık
w=0

Trig    var PORTA.0
Echo    var PORTA.1
     
'=============================================================                   
'********************** ANA PROGRAM **************************                   
'=============================================================                   
BASLA:   
    high    Trig
    pauseus 10         
    low     Trig   

    pulsin  Echo,1,w   
    R = w/58            ' r=(W*10)/58
    lcdout  $FE,1,"UZ=",dec R
    pause   100         

    goto    BASLA             
END       

ete

Kristal kullanma meselesi yalnızca program le bağlantılı bir konu değildir. Aynı zamanda donanım beceriside gerektirir.
Programla ilişkisi OSC seçimi ki bunu doğru yapmışsın. Aşağıdaki kod satırı bunu gösteriyor
@ DEVICE pic16F628A, HS_OSC 
Diğer bir komut ise OSC frekansıdır ki onuda yapmışsın;

DEFINE OSC 20

Bu durumda geriye donanıma bakmak kalıyor.
Şema koymadığın için neyi eksik yada yanlış yaptığını anlamamız zor. Olması gerekeni tarif edeceğim yalnızca
20 Mhz lik kristal işlemcinin OSC bacaklarına direk bağlanacaktır. Kristali 2 bacaklıdır. Bir bacağı 15 Nolu pin olan RA6 pinine, diğer bacağı ise 16 nolu pin olan RA7 pinine bağlanacaktır.
Her iki bacağa birer 22pF kondansatör bağlayıp kondansatörün diğer uçlarını GND ye bağlaman gerekecektir.
Hepsi bu kadar şayet işlemciye de programı doğru atıyorsan çalışması gerekir.
Öncelikle çalıştığından emin olmak için belirli bir pine LED bağla araya seri 220 Ohm direnç bağlamayı unutma.
Programın başınada
FOR I=0 to 5
HIGH LED:PAUSE 200
LOW LED :PAUSE 200
Next
komut satırlarını ilave et. İlk çalışmada LED 6 defa flash yapması gerekecektir. Yapmıyorsa yine donanım sorunun var demektirki ya işlemcin bozuk , ya kristal bozuk yada değeri farklı, yada 22pf kondansatörlerin bozuk demektir.
Ete


bilsisco

Hocam dediklerinizi dikkatlice uyguladım
birkaç tane pic var elimde onlara dahili osilatör kullanarak program atıp çalıştırabiliyorum.
Dediğim gibi elimde 2 tane 20mhz kristal var ve 4 tane 22pf kondansatör.
Geriye bunlarda problem olduğu çıkıyor.
Projemden vazgeçtim :(
Tek derdim osilatör kullanabilmek
yeni kristal ve kondansatör alacam

Yardımlarınız için teşekkürler

Maxim

seneler önce başıma gelmişti
aldığım bir sürü 20mhz kristal osc bozuk çıktı

bilsisco

#4
yeni 4Mhz kristal aldım ve bir sürü 22pf kondansatör
Defalarca denedim olmadı.
Çalışmayan bir parça olduğunu sanmıyorum artık.
Sorun ne olabilir?


Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_ON
'@ DEVICE pic16F628A, HS_OSC
@ DEVICE pic16F628A, XT_OSC
'@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT   
DEFINE OSC 4
TRISA=%00000000
TRISB=%00000000 
PORTA=0
PORTB=0


CMCON=7    '16F628A de komparatör pinleri iptal, hepsi I/O (dijital)

     
'=============================================================                   
'********************** ANA PROGRAM **************************                   
'=============================================================                   
BASLA:       
    high    PORTB.0
    pause   500         
    low     PORTB.0   
    pause   500


    goto    BASLA             
END     

elektromanyaq

Alıntı yapılan: bilsisco - 24 Temmuz 2014, 19:40:41
yeni 4Mhz kristal aldım ve bir sürü 22nf kondansatör
Defalarca denedim olmadı.
Çalışmayan bir parça olduğunu sanmıyorum artık.
Sorun ne olabilir?


Include "modedefs.bas"         
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16f628A, BOD_OFF
@ DEVICE pic16f628A, LVP_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16f628A, MCLR_ON
'@ DEVICE pic16F628A, HS_OSC
@ DEVICE pic16F628A, XT_OSC
'@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT   
DEFINE OSC 4
TRISA=%00000000
TRISB=%00000000 
PORTA=0
PORTB=0


CMCON=7    '16F628A de komparatör pinleri iptal, hepsi I/O (dijital)

     
'=============================================================                   
'********************** ANA PROGRAM **************************                   
'=============================================================                   
BASLA:       
    high    PORTB.0
    pause   500         
    low     PORTB.0   
    pause   500


    goto    BASLA             
END     

kardeşim sen krıstal bacaklarını yanlıs baglamıssın 12-13 yapmıssın onu 15- 16 cı bacak olarak degıstır :)

ete

Kondansatörde 22nF değil 22pF olmalı.

Ete

bilsisco

#7
yapma yav, vay be
duvarda duran pdfsinden aldığım resme bakıyordum sürekli 628a nın.
rb.6 ve 7 de os yazıyor aklım ona gitmiş  :-[
Allah razı olsun hepinizden, denedim çalışıyor, ama çok şey öğrendim araştırarak.
Umudum bitmişti 3-4 gündür uğraşıyom video bile hazırlamıştım :)
pf yazacaktım düzelttim ete hocam

elektromanyaq

olabılır böyle şeyler önemli olan sorunun neden kaynaklandıgını bulabılmek  yardımcı olabılıyorsak ne mutlu bıze :)

ete

Mesajlarımı dikkatlice okumadığın belli oldu böylece. Bir önceki mesajımda hem pin ismi hemde pin numarası vererek kristalin nereye nasıl bağlanacağını anlattım. Çünki böyle bir hata yapabileceğin aklıma gelmiş idi. Ama sen cevabında söyeldiklerinizi dikkatlice uyguladım deyince benim için takip sona ermiş idi ama yapmamışsın belliki. Har zaman söylerim data sheet sizin için rehberdir. Bu gibi durumlarda en azından şekil olarak kristal nereye nasıl bağlanıyor baksaydın sende kusurunu görebileceksin. Bu yazdıklarımı sana değil bu konuda yeni olanlara yazıyorum ufak hataların insanı nasıl çileden çıkarabileceğini görsünler diye. Araştırıcı olmak her zaman iyidir. Çok iyi öğrenimceye kadar kendinizden ve hata yapabileceğinizden sürekli şüphelenin ve doğrusunu bulmaya çalışın.

Ete

bilsisco

Başka bir sorum var, sizi yormak istemiyorum. Varsa bir kaynak yollarsanız iyi olur internette bulamadım
Bu mesafe ölçme işini yaptım sorunsuz çalışıyor
------
1) Mesela 20Mhz kristal kullanıyorum ama programda "define osc 8" deyince 8 mhz de çalışması gerekmiyor mu?
2) Bir de "pause 1" ve "pauseus 1" ne kadar zaman alır? Bu komutların aldığı zamanların kristal ile alakası var mı?
3) fkomut=fosc/4
Tkomut=1/fkomut
4Mhz lik kristal için: fkom=4/4=1 Mhz ve Tkom=1/1Mhz=1us (1mikro saniye) =1 komut için geçen süre
şimdi "pause 1" komutu 1ms ve "pauseus 1" ise 1 us  zaman mı alacak?
4) Peki 8Mhz kullanırsam hesaba göre 0,5us mi alacak?
5) elimde 4 ve 20mhz kristaller var ve 8 mhz de çalışan bir devre nasıl yaparım?

ete

Define Osc x komutu işlemcinin çalıştığı frekansı belirlemek için kullanılır. İşlemciye 4 Mhz kristal bağlanırsa X yerine 4 , 20 mhz kristal bağlanırsa x yerine 20 yazılır.
Bu komut program içinde yer alan gecikme komutları olan Pause ve Pauseuskomutlarının doğru çalışması için gereklidir. Bir pause komutu ms cinsinden gecikmeyi belirler. Pause 10 komutu 10 ms lik bir gecikme yaratır. Bu işlemci frekansından bağımsızdır. Ama define Osc komutunu kullanmak şartı ile bağımsızdır . Kullanmazsanız default değerler alınır ki buda 4 Mhz diye biliyorum. Yani işlemciye 20 Mhz kristal bağlayıp define osc 20 komutunu kullanmazsanız işlemci 4 Mhz deki komut çevrim sürelerini esas alarak hesap yapar ve yanlış bekleme yapar.
Toparlarsak puse ms cinsinden gecikmeyi sağlar kristale ve işlemci frekansına  bağlı olarak süreyi tutturmak için işlemci geri planda hesabını yapar ve gerekli gecikmeyi sağlar.

Pauseus ise us cinsinden gecikmeyi sağlar ve oda işlemci frekansından ve kristalden bağımsız olarak komut önüne yazılan miktar kadar us gecikme sağlar ama hepsinde ortak şart define komutu ile çalışma frekansı belirtilmiş olması gerekir.

Ete

bilsisco

Eğer harici osilatör kullanılacaksa bunu işlemciye "define osc x" diyerek tanımlamamız şart.
20mhz kristal kullanıp "define osc 8" deyince işlemci çalışmıyor
Bir de kristale göre define tanımlaması yaptıktan sonra (kaç mhz olursa olsun)
pause ve pauseus komutları hep aynı süre gecikme sağlıyor

Powered by EzPortal