50hz kare dalga tesbiti

Başlatan sezer1247, 24 Mart 2024, 21:15:30

sezer1247

Öncelikle herkese hayırlı günler
Orjinal bir cihazın üzerindeki pic için bir program yazmaya çalışıyorum. Öncelikle belirtmem gerekli ki devre üzerinde değişiklik yapmadan sadece pic için kod yazacağım. Kodun bütün kısımlarını i2c iletişim ve komut gönderimini hallettim. Son bir sıkıntım kaldı ve bunu bir türlü aşamadım. Şuan telefondan giriş yaptığım için şemanın ayrıntılarını patlaşamıyorummpc ye geçince paylaşırım.

220v ac hattına 47k direnç ve tek bir diyotla doğrultma yapılarak optokuplör e giriliyor optonun bir çıkışı gnd hattında  diğer çıkışı 10nf ile gnd 10k ile pullup 3.3v hattına bağlı. Scope ile ölçümde ac var ise optonun çıkışında kare dalga var.

Yapmak istediğim şey eğer pb5 pininde kare dalga var ise pb4 pini 2000ms delay ile low a çekilecek. Kare dalga gittiği anda pb4 pini high a çekilerek çıkışlar mute a alınacak. Bu fonksiyon abir amfi katının koruması için kullanılıyor. Bir kaç farklı kod ile deneme yaptım ama bir türlü verim alamadım. Bazı denediğim kodlarda enerji kesilmesinden 2 sn sonra işlevini yaptı.

Bu arada ac kesildiğinde pic in pininde 3.3v var ac var ile kare dalga olduğu için 1.8v civarında bir voltaj var hızlı olması için adc den voltaj ölçtürerek yapmayı da denedim başarılı olamadım.

True döngüsünün içinde sinyal ve peak ledlerini yakmayı yarayan kod döngüsü ile mute döngüsü var. Sinyal ve peak kısmı sorunsuz çalışırken mute kısmı çalışmadığı için enerji kesildiğinde ses gelmeye devam ediyor voltaj boşalırkende çatlama sesi geliyor.

Bana 30-60hz arasında kare dalga var ise fonksiyon çalışsın yoksa çalışmasın tarzında basit bir kod verebilir misiniz.

mustafa_cmbz

pulse in komutu gibi bir komut yokmu hocam ccsc de

sezer1247

Emin olmamakla birlikte ccs de puls in komutu yok sanırım.Pic ile çok fazla uğraşmıyorum avr Arduino ile daha çok uğraşıyorum aslında pic ile bilgim biraz kısıtlı

alikeskinkilic

#3
senin için frekans mı önemli elektrik kesilmesi mi önemli frekans önemli ise ve işlemcin yeni seriden bir pic ise değişiklik kesmesini yükselen kenara ayarla kesmeye gir timeri başlat değişklik kesmesini düşen kenara ayarla ve işlerin varsa kesmeden çık düşen kenar yakalanınca kesmeye girecek kesme içinde düşen mi yükselen kenarmı yakalanmış kontrolünü yap timer değerin istediğin aralıkta ise işlemini yap kesmeden çık.
elektrik kesintisini tespit etmek istiyorsan hangi frekansta çalışacaksa  değerini hesapla (timerin süresi çalıştığı frekansa bölme oranına göre değişir)timere ver yükselen kenarda timeri saydırmaya başla her düşen kenarda tekrar aynı değeri vererek timeri güncelle eğer verdiğin değerin üstüne çıkarsa high süresi o zaman timerde taşma sonucu kesmeye gider anlarsın ki ya frekansın istediğin değerden düşük yada elektrik kesilmiş orada da işlemini yaparsın.
Hep meraktan

sezer1247

benim için frekansın önemi yok kare dalga kesildiği anda başka bir pini low a yada high a çekmem gerekiyor. bir iki kod ile deneme yaptım ama gecikmeli çalışıyor. pic16f689 kullanılıyor devrede

alikeskinkilic

#5
aklıma gelen  iki kesme kullanmak biri pin değişiklik kesmesi yükselen kenarda kesme oluşturuyorsun kesme içinde hangi kesmenin oluştuğunu kontrol etmek için bayrakları kontrol ediyorsun değişiklik kesmesi oluştu ise 50 hz için puls gecikmesini tmr0 a 1/256 bölme oranı ile 100 değerini verince yakalıyorsun kesmeyi düşen kenara ayarlıyor ve timere değeri verip çıkıyorsun.artık timer kesmesini bekliyorsun eğer 50 hz sinyalden daha uzun bir süre geçti ise yada elektriğin kesildi ise değişiklik kesmesine giremez timer de taşma olacağından timer kesmesine girer anlarsın 50 hz sinyalin ya uzamış ya kesilmiş.o süre zarfında eğer tekrar değişiklik olmuşsa pinde bu sefer de kesme içerisinde hangi kesmenin olduğunu kontrol ettiğinden timeri en başta yazdığım şekli ile günceller gene beklemeden çıkarsın rutin işlere devam edersin.
Hep meraktan