adc sorunu

the_maniac

Üye
Katılım
25 Nis 2009
Mesajlar
48
Puanları
1
Arkadaşlar ben pic 16F877A kullanıyorum ve 4Mhz'de çalışıyorum. AN0'a bir potum bağlı (10kohmluk). Pottan okuduğum adc değerine göre PWM'in duty cycle'ını değiştiriyorum (0 ile 256 arasında değer vererek) ve bununla da led sürüyorum. Bu kodu da microcde yazıyorum. 10bitlik ADCnin 8 bitini kullanıyorum.

Sorunum ledim sürekli blink ediyor yani değişik aydınlık seviyelerinde sürekli yanıp sönüyor veya aydınlık seviyesini sürekli değiştiriyor. Kodumda PWM_duty_cycle fonksiyonunu (duty i değiştiriyorum bu fonksiyonda) çağırdıktan sonra 100ms delay ekledim. Ledi sürdüğüm pinde düzenli olarak giden bir spike tarzında bir şey gördüm. Bu spike benim pwm karelerimin üzerinde geziyor ve benim frekansımdan daha hızlı. Sorunun bundan kaynaklandığını düşünüp pinin bir bacağına 47nFlık bir seramik (yönsüz) kapasitans koydum diğer bacağı ise GNDde. Sorun çözülmedi.

Osiloskopta dikkatli olarak inceledim. Pulseım normal doluluk oranının nerdeyse 2 katından fazla şekilde görünüyor ama kendi pulseımı da görebiliyorum. Sanki anlık olarak pulseımı büyütüp geri çekiyor. Fakat osiloskopta iki pulseı da görüyorum. Pulse sürelerinden hesapla bir şey gördüm. Sorun sanki adcden okuduğum 5. bitten kaynaklanıyor. Zaten daha önce adcden okuduğum değeri porta atadığım zamanda 5.bite denk gelen ledde kafasına göre 1-0 olma durumu görmüştüm ama potun adiliğindendir diye umursamamıştım.

Arkadaşlar bu sıkıntının adcden kaynaklı olduğunu düşünüyorum. Her türlü fikrinize açığım. Yardımcı olabilirseniz sevinirim. Bu sorunu çözmek ve projeyi tamamlamak için az zamanım kaldı.
 
Frekansım 500'dü. 4500 yaptım. Gene de arada blink ediyor. Belki göz anlamaz diye düşündüm ama olmadı. Ledin aydınlık seviyesi yüksekken çok farkedilmiyor ama düşükken baya net anlaşılıyor.

Bir de çalıştığım yerin kurallarından dolayı kodumu ve şemamı paylaşamıyorum.
 
500Hz'de osiloskopta gördüğüm sinyalin fotoğrafını çektim. Sinyalin kaymasını burada görebilirsiniz.

Bu resim yüksek frekansta(4500Hz'deyken) pulseların görünüşü.

Bu ikisi de pulseların kayarkenki görüntüleri.

Bu resimde potu tam çevirmiş olmama rağmen aldığım PWM sinyali. Bildiğim kadarıyla sürekli bir sinyal olmalıydı. Buradaki problemi de anlamadım.


Yönetici Notu: Paylaşılan fotoğraf, fotoğraf paylaşım sitesinden silindiği için kaldırılmıştır.
 
Bu arada isiste de aynı sorunu gözlemliyorum. Sağ taraftaki pulseler önce sağa çekilip geri geliyor, sonra da soldakiler sola çekilip geri geliyor. Genlikte de ufak bir oynama görüyorum.

Tabi proteus gerçek zamanda simulasyon yapamıyor CPU fazla yüklendiği için ve ideal varsayımları olan bir program. Bunu da unutmamak gerek.
 
Arkadaşlar elinizde sadece adc ve pwm ile ilgli bir kod var mı ? ADC'den okuduğunu sağdan 8biti kullanarak PWM'de üretecek. Derleyicilerdeki hazır fonksiyonları kullanmadan C dilinde kod yazmak istiyorum. Doğruluğundan emin olduğunuz çalışan bir kodunuz var mı?

Pic 16F877A veya 16F877'ye göre ve 4Mhz kristalle çalışacak şekilde yazılmış varsa sevinirim.
 
arkadaşım aslında yardımı olurmu bilmem ama senin sorununun bence çözümü serdar çiçeğin kitabında orda tam ornek var ben denedim adc den alıp hem lcd de hemde ledlerde okuyabildim dediğim yede sadece bir adc uygulaması yok 8 adc ye kadar destekleyen 16f877 ile tum portları aktıf yapabılmıs ama delaylerle dengelemıs yanı 20ms kullanarak sensorden yada alacagın yerden almasını beklıyor orda tam aradıgının cevabı var
elımde bırsuru dokuman vardı fakat mezun olduktan sonra cdye cekıp bı kenera attım bulmam zman alır ondna dolayı kıtap tavsiyesinde bulundum sorun devam ederse ben kodları isis çizimini yollayabilirim bulursam eger
 
Çok teşekkür ederim yardımlarınız için. Henüz kitabı bulmaya fırsatım olmadı ama çözümü buldum :D

Microc kullanıyordum. Sorunumu onlara mail attım. PWM_stop(); fonksiyonunda bug olduğunu söylediler. Timer 2'yi kapatıyormuş fonksiyon. Bu nedenle kaymalar ve pwmin durması gerçekleşiyormuş.

İlle pwm_stop kullanması gereken arkadaşlar için çözüm önerisi olarak da pwm_stop fonksiyonunun ardından timer 2'yi başlatmalarını öneriyorum.

Sorun microc v8.1'de. Bir sonraki microc versiyonunda bu sorun düzeltilmiş olacak.

Hepinize zaman ayırdığınız ve ilgilendiğiniz için teşekkür ederim :)
 

Forum istatistikleri

Konular
128,133
Mesajlar
915,308
Kullanıcılar
449,850
Son üye
umutbaysal9

Yeni konular

Çevrimiçi üyeler

Geri
Üst