PİC 16F877 ile kare dalga sayma

Başlatan emrahother, 26 Aralık 2011, 02:47:33

emrahother

arkadaşlar pic 16f877A nın girişine kare dalga verip bunun dakikada kaç kare dalga ürettiğini bulan bir devre lazım bana.tabiki ccs c kodu da ama çok çabaladım yapamadım yardımcı olabilir misiniz?nabız ölçen bir devre yapmaya çalışıyorum pic 16F877 ile ..3 digit display kullanacağım

mir_as82

Timer lar ile ilgili işlem yapman gerekecek. Bence 16f877 nin pdf ine bakarak bile çözebilirsin. Timer0 ı kullanman gerek. Sana yardım olsun diye aşağıya yapıştırdım. Kodları kendin yaz.

•Timer0 8 bit'lik zamanlayıcı/sayıcı'dır  0-255 arasında sayar
•Değeri kod içerisinden okunabilir ve yine kod içerisinden değer ataması yapılabilir.
•Yazılımla ayarlanabilen 3 Bit'lik prescalar değeri ile fosc/4 sinyali 2,4,8,16,32,64,128,256 olmak üzere 8 değere bölünebildiği için farklı süreler elde edilebilir.  Timer0 ile WDT (Watch Dog Timer) aynı prescaları kullanır, yazılım ile prescalar wdt'ye veya timer0′a atanabilir. Prescalar WDT'ye atandığında fosc/4 sinyali bölünmeden kullanılır.
•Clock sinyali external veya internal olarak ayarlanabilir.
•Harici clock seçildiğinde sinyalin hangi kenarında (yükselen yada düşen) sayma işleminin yapılacağı ayarlanabilir.
•Timer0 sayma esnasında 0xff ( 255) değerinden 0×00 (Sıfır) değerine geçerken interrupt (kesme) oluşturabilir.

systran

aşağıdaki tubitak kendimiz yapalım projesinin PDF açıklamasını okursan kare dalga nasıl ölçülür ayrıntılı anlatıyor.

http://www.biltek.tubitak.gov.tr/gelisim/elektronik/38.htm
http://www.biltek.tubitak.gov.tr/gelisim/elektronik/dosyalar/38/frekans_olcer.pdf

Kabil ATICI

Nabız ölçeceğim diyorsan sayacağın darbe (kare dalge için tanım) sayısı  en fazla dakika 200 civarında hadi taş çatlasın dakikada 300 olurki bu işlemcinin herhangi bir bacağı ile bile sayabileceğin bir rakam. Eğer donanım olarak kullanmayıp yazılım ile halledeceksen sadece şunu belirle sayıcın ne zaman harekete geçsin,  inen kenar mı, çıkan kenar mı?
(lojik devreleri ve yapıları bildiğin varsayımı ile)
İnen kenarda ise programından bacağı okut, 1 ise beklet, bir değişkene (mesala butonbak=1 yap ) şimdi bacak 0 ise bu durumda ve sayıcını 1 artır sayma işleminden sonra  (butonbak=0 yap) .  bacak üzerindeki değişime göre sıra ile buton bacağını izle.

buton(bacak)     butonbak(değişken)       program işlemi
1                               1                                  bekle
0                               1                               sayıcını 1 artır ve butonbak=0 yap
0                                0                                 bekle
1                               0                                 butonbak=1 yap ve bekle
1                               1                                 bekle
bu işlemi sürekli döngüye sok.
ikinci işlem olarak timer'lardan birini kullanarak 1 dakika'lık sinyal üret. Yani timer ile birlikte sayıcını çalıştır. 1 dakika boyuncu timer ile birlikte sayıcını çalıştırır ver 1 dakikanın sonunda sayıcın durdur ve sonucu ekranda göster. Timer sayması hariç hepsini ana program döngüsünde yapabilirsin.  (ekran gösterimi dahil)
ambar7

10f200.h

arkadaşlar merhaba
bende benzer bir proje üzerinde çalışıyorum.pulse ları timer1 ile sayıyorum ve 10 saniyede 1 rs232 ile gönderiyorum. ama pulse sayısı beklediğimden bazen fazla çıkıyor. pulse sayısını ne eksik ne fazla saymak için ne yapmalıyım ?