PICMAN
Üye
- Katılım
- 13 Ocak 2009
- Mesajlar
- 23
- Puanları
- 1
Merhabalar;
Sizlere kesme ile yapmış olduğum basit bir frekansmetre uygulamasını paylaşıyorum.
Genelde basit frekansmetre uygualmarında Counter komutu kullanılır.
Bu komut ile frkans öçlmek için 1sn deki palsleri saymak gerekir, bu işlemde döngüde 1sn kayba yol açar. Yani aynı anda USART, I2C, SPI, 1-wire,.... gibi protokollerle diğer entegreler ile haberleşmemizde gecikmeler yada aksaklıklar yaşanabilir.
Bu sorunu az da olsa ortadan kaldırmak için frekansı kesme ile okumak en mantıklısıdır.
Bunun için PIC in RB0 ve TMR1 kesmelerini kullandım. Bu şekilde 1sn deki darbeleri değilde, 2 darbe arasındaki süreyi ölçüp F=1/T formülünden frekansı hesaplamak daha mantıklıdır. Bu süreyi en uzun ölçebilmek için 16 bitlik saycı olan Timer1 i kullandım.
PIC in dış kesmesi olan RB0(INT) ve TMR1 taşma kesmeleri aktif hale getirilir. Her düşen kenarda (INT) dış kesme oluşur. Timer1 in içeriği okunur ve sıfırlanır. Okunan Timer1 değeri bize 2 pals arasındaki süreyi verir. Bu süreyide F=1/T ile hesaplarsak frekansı ölçmüş oluruz.
Eğer timer1 in max sayma süresince düşen kenar gelmez ise bu sefer, TMR1 taşma kemesi olşur ve Frekans değeri sıfırlanır.
Timer1 Hesaplamaları (PIC osc:4mhz):
Tmr1 Bölme Oranı = 1:4
Fkomut = Fosc / 4 = 4 / 4 = 1Mhz
Tkomut= 1/Fkomut = 1 / 1MHz = 1us
TMR1 SaymaAralığıSüresi = Tkomut * Tmr1oranı = 1 * 4 = 4us
Bu değerlere göre;
Min Frekans (TMR1 ın max saymasıdır)
4us * 65536 = 262,1 ms dir. (F = 3,8 Hz)
Max Frekans (TMR1 ın min saymasıdır)
4us * 2 = 8 us dir. (F = 125 KHz)
Min ve Max frekanslara göre PIC osc değiştirilebilir.
Bu yöntem ile frekans değiştiğinde, LCD ekranda değerin hızlı değiştiğini göreceksiniz.
Not: ISIS de 20khz den sonrasında işlemciyi zorladığı için ölçüm yavaşlıyor....
Sizlere kesme ile yapmış olduğum basit bir frekansmetre uygulamasını paylaşıyorum.
Genelde basit frekansmetre uygualmarında Counter komutu kullanılır.
Bu komut ile frkans öçlmek için 1sn deki palsleri saymak gerekir, bu işlemde döngüde 1sn kayba yol açar. Yani aynı anda USART, I2C, SPI, 1-wire,.... gibi protokollerle diğer entegreler ile haberleşmemizde gecikmeler yada aksaklıklar yaşanabilir.
Bu sorunu az da olsa ortadan kaldırmak için frekansı kesme ile okumak en mantıklısıdır.
Bunun için PIC in RB0 ve TMR1 kesmelerini kullandım. Bu şekilde 1sn deki darbeleri değilde, 2 darbe arasındaki süreyi ölçüp F=1/T formülünden frekansı hesaplamak daha mantıklıdır. Bu süreyi en uzun ölçebilmek için 16 bitlik saycı olan Timer1 i kullandım.
PIC in dış kesmesi olan RB0(INT) ve TMR1 taşma kesmeleri aktif hale getirilir. Her düşen kenarda (INT) dış kesme oluşur. Timer1 in içeriği okunur ve sıfırlanır. Okunan Timer1 değeri bize 2 pals arasındaki süreyi verir. Bu süreyide F=1/T ile hesaplarsak frekansı ölçmüş oluruz.
Eğer timer1 in max sayma süresince düşen kenar gelmez ise bu sefer, TMR1 taşma kemesi olşur ve Frekans değeri sıfırlanır.
Timer1 Hesaplamaları (PIC osc:4mhz):
Tmr1 Bölme Oranı = 1:4
Fkomut = Fosc / 4 = 4 / 4 = 1Mhz
Tkomut= 1/Fkomut = 1 / 1MHz = 1us
TMR1 SaymaAralığıSüresi = Tkomut * Tmr1oranı = 1 * 4 = 4us
Bu değerlere göre;
Min Frekans (TMR1 ın max saymasıdır)
4us * 65536 = 262,1 ms dir. (F = 3,8 Hz)
Max Frekans (TMR1 ın min saymasıdır)
4us * 2 = 8 us dir. (F = 125 KHz)
Min ve Max frekanslara göre PIC osc değiştirilebilir.
Bu yöntem ile frekans değiştiğinde, LCD ekranda değerin hızlı değiştiğini göreceksiniz.
Not: ISIS de 20khz den sonrasında işlemciyi zorladığı için ölçüm yavaşlıyor....