16f877 ile frekans okumak yardım

semihduyar

Üye
Katılım
19 Şub 2010
Mesajlar
22
Puanları
1
sevgili arkadaşlar şebekemiz olan 220v ac voltaj 50hz frekansını pic ile okuyup lcd de yazdırmak istiyorum bu konuyla ilgili bir çok araştırma yaptım, mesela lm331,lm2907,lm2917,4151,9.400 gibi elemanlar ile bu işlem oluyor f/v çeviriyorlar bizde çıkışında ki dc gerilim ile pic in adc modunu kullanarak capture ile yakalayıp yapabiliyoruz yalnız bu elemanların datasheet lerine bakıyorum pek bir şey anlamıyorum, bana giriş ve çıkışları ile ilgili sorularıma yanıt verebilcekler varmı?

ikinci olarak da bu işlemi yani frekans okutmayı direk pic e de yaptırabiliyoruz fakat tam olarak yazılım bilgim olmadığı için onda da sıkıntı yaşıyorum, yazılımı çözebilirim ama bu 220v ac voltajı pice nasıl giriş sağlayacağım?
 
sevgili arkadaşlar şebekemiz olan 220v ac voltaj 50hz frekansını pic ile okuyup lcd de yazdırmak istiyorum bu konuyla ilgili bir çok araştırma yaptım, mesela lm331,lm2907,lm2917,4151,9.400 gibi elemanlar ile bu işlem oluyor f/v çeviriyorlar bizde çıkışında ki dc gerilim ile pic in adc modunu kullanarak capture ile yakalayıp yapabiliyoruz yalnız bu elemanların datasheet lerine bakıyorum pek bir şey anlamıyorum, bana giriş ve çıkışları ile ilgili sorularıma yanıt verebilcekler varmı?

ikinci olarak da bu işlemi yani frekans okutmayı direk pic e de yaptırabiliyoruz fakat tam olarak yazılım bilgim olmadığı için onda da sıkıntı yaşıyorum, yazılımı çözebilirim ama bu 220v ac voltajı pice nasıl giriş sağlayacağım?

Öncelikle Frekans-voltaj çevirmek için uğraşmaya değecek bir durum yok. Yapacağınız iş basit.

Eğer pic devresinin gnd'ı ile 230 vac hattın nötrünü birleştirmeyi göze alıyorsanız, faz'ı picin giriş pinine 5 MOhm değerinde bir dirençle girebilirsiniz. direncin önüne diyot da eklenebilir. Bu durumda devre çalışırken dokunmamak gerekir.

Pic devresi izole olsun derseniz, basit bir optocoupler'ın led tarafına faz ve nötr'ü yine bir diyot ve sonrasında led akımına göre hesaplayacağınız bir direnç ile girin. opto çıkışını da pic giriş pinine ... Pull-up direnci kullanmayı unutmayın tabi.


Ek olarak, 230 voltta tek direnç kullanmayın, mesela 1 adet 5 MOhm yerine 5 adet 1 MOhm kullanın. Bilmeyenler olabilir ama dirençlerin sadece omaj ve watt değerleri yanısıra uygulanabilecek maksimum gerilim değerleri de vardır.

İşin yazılım kısmı da kolay, 50 hertz çok düşük bir değer. Capture kullanabilirsiniz, timer kullanabilirsiniz ya da 1 sn sürede iki işaret arasını bir döngü içinde sayabilirsiniz.
 
bilgiler için teşekkürler bunların ışığında biraz uğraşayım ben:)
 
program source code proton3:
Device =16F877A
XTAL 10

ADCON1=7
ALL_DIGITAL
TRUE
WATCHDOG FALSE
Declare LCD_DTPORT =PORTB
Declare LCD_DTPIN =PORTB.0
Declare LCD_RSPIN
=PORTB.4
Declare LCD_ENPIN
=PORTB.5
Declare LCD_LINES 2
Declare LCD_TYPE
= alpha

Include "modedefs.bas"
Dim i As Byte
Dim
freq As Word
Symbol
fin =PORTA.0
Clear

DelayMS 100
GoTo
oversub


readfreq:
freq=Counter fin,1000
Return
 

showfreq:
Print $fe,$80,"SEMiH DUYAR"
Print $FE,$C0,"F= ",Dec freq," Hz "
Return
 
 

oversub:
 
While 1=1
GoSub
readfreq 'frekansı oku
GoSub showfreq 'ekrana yaz
Wend

tyıldızak ın bahsettiği devre opto ile olanı
 
verdiğiniz örnek için teşekkürler fakat yazdığınız dili bilmiyorum ben ccs c dili ile yazıyorum onu da daha tam olarak profesyonel kullanamıyorum, size bir soru sorayım opto mu kullanarak yapmak mantıklı yoksa 3-4 tane dirençle mi düşürüp yapayım? birde https://www.kontrolkalemi.com/forum/pic-programlama/20650-frekansmetre-kesme-kullanarak.html bu konu da da bir açıklama yazmışsınız pek anlamadım oradaki kelimeleri biraz daha yardımcı olursanız bilgilendirirseniz sevinirim dediğim gibi tam olarak bilmiyorum öğrenmeye çalışıyorum?
 
opto kullanırsan 220v ile devrenin bir elektriksel bağlantısı olmaz ki buda senin için program geliştirirken pici söküp takarken çarpılmmanı sğlar.
programlama dili hangisi olursa olsun yeni başlıyorsan kesme işi şimdilik sana ağır gelebilir. devrede sadece tek bir iş yaptırıcaksan
kesme kullanmana gerek yok.kesme işleri genelde birçok işin bir arada yaptırıldığı durumlarda kullanılır.ama illa hemen öğrenmek istersen tmr0,tmr1,intcon,pir1,pie1 gibi yazmaçları incele.

yukarıda linkte hex kodu var direk yükeyerek çalıştırabilirsin.
 
Son düzenleme:
elimde serdar çiçeğin ccs c ile pic programlama kitabı var oradan inceliyorum fakat tam olarak çözemedim tim0 tim1 falan, daha doğrusu frekansla birleştiremedim mantığı, ccs c kullanmamın sebebi de okulda onu öğrettiler o yüzden onun üzerinden devam ediyorum, yazmaya çalıştığım programda başka işlevler de var mesela adc modunu da kullanıyorum ve buton girişleri falan da var gibi gibi bana frekans ile timer mantığını biraz açıklarmısın?
 
tmr0,tmr1 bunlar genel amaçlı timer modullerdir. bunları mesela tmr1 yazmacında external clock modunda kurabiliyorsun.
yani tmr yi bir sayıcı moduna sokup dışarıdan gelen saat darbeleri ile saydırıyorsun. buradaki saat darbemiz Şebeke frekansı optodan geliyor. sen bu tmr sayıcısını 1 saniyede bir içeriğini okur isen atıyorum tmr1h ve tmr1l sonuç yazmaçları toplam değeri 1200 çıktı 1 saniyede yani frekansın 1200hz 1.2khz oluyor. saniyede bir okuma işinide tmr0 için yaparsın işte sana tmr için iki farklı kullanım örneği.
tmr0 da internal instruction cycle modunda kendi kendine sayar.bunu 1 saniye için kurarsın ve her 1 saniyede sana kesme gelir.ana programda ne işle uğraşırsan uğraş kesme seni çağırınca tmr1 içindeki frekans bilgisini başka bir değişkene alırsın ve bunu tekrar sıfırlarsın. aldığın frekans bilgisinide ister ekranda gösterirsin istersen seri porttan gönderirisin sana kalmış.
 
ilginize ve açıklamanıza teşekkür ederim yazmaya çalışcağım!
 
tekrardan ben, önce anlamış mıyım onu yazayım timer0 kesmesini örneğin her 0,05sn de bir; zamanlayıcı olarak kullanarak, timer1i de harici sayıcı olarak ayarlayıp 877 için RC0 pin girişinden frekansı girip timer0 kesmesinde timer1 okuyup sıfırlayarak timer1den okuduğum değeri frekansa çevirmem gerekiyor demi? bu şekilde uğraştım kafam beynim patladı hala uğraşıyorum bir türlü hesap damı hata yapıyorum yazılımda mı bulamadım?
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,850
Kullanıcılar
449,596
Son üye
anilhikmet

Yeni konular

Geri
Üst