C

PIC18F4550 adc problemi

Başlatan Cemil_mekatronik, 03 Mart 2014, 15:47:46

Cemil_mekatronik

Merhabalar,

Yapmış olduğum projede PIC18F4550 kullanıyorum. Analog kanallardan 0-3 arasını yani  4 kanalı kullanıyorum. Gözlemlediğim sorun şu: analog pine sensör çıkışımı araya seri direnç atarak bağlıyorum. direncin sensör tarafı olması gereken değerlerde, yani yeri geldiğinde 0.1V civarlarında, olması gerektiğinde ise 0.5-0.6 V civarlarında. Fakat direncin pic tarafına baktığımda kafasına göre değişen 0-5 V arasında bir gerilim görüyorum. Sürekli olarak anlamsız olarak bu değerler arasında sallanıyor. Anlayacağınız kafasına göre davranıyor.Bu söylediğim iki kanal için geçerli, diğer iki kanala başka bir şey takılmış ve onlar düzgün çalışıyor. Fakat sorunlu analog pinleri boşa çıkarttığımda da aynı sorun devam ediyor. Analog tanımlamasını yaptım, giriş olarak da atadım. Gözümden kaçan bişey mi var anlamadım. Neden böyle yapar tahmini olan var mıdır?

ete

#1
Gözünden kaçan bir şey var!!!
diyeceğim sende bana nedir acaba diye soracaksın. Bende sana ne bileyim diyeceğim çünki bilmek için elimde programın olması gerekmezmi sence. !!!!

Bu tür mesajlara artık gittikçe daha az cevap vereceğim ve günün birinde artık hiç cevaplamayacağım.
Çünki soru sanal ortamda soruluyor (ortada şema yok program yok) ama cevap gerçek anlamda isteniyor.
Bu bana göre haksızlık. Ben neye göre yorum yapacağım neyi neyle karşılaştırıp da varlığı kesin olan sorunu bulacağım. ?

Programlarınızdan fazla emin olmayınız. Herkes hata yapıyor bende dahil bir çok hata yapıyorum. Bir üçüncü göz senden daha iyi hatayı görebiliyor. Bazen saatlerce bakarsın göremezsin birisi gelir bunu niye böyle yaptın der sende vay anasını nasılda görmemişim dersin.

Yinede ip ucu olabilecek bilgiler vereyim. Bahsini ettiğin sorun bir kaç sebebe dayanabilir.
1. İşlemcinin Komparatör özelliği iptal edilmemiştir analog pinler komparatör olarak çalışıyordur.
2. Analog girişler giriş pini olarak seçilmemiştir çıkıştır ve buda voltaj üretiyordur.
3. Analog pin seçimi düzgün yapılmamıştır.
4. İlgili pine dışarıdan başka bir şey bağlıdır oda belirtilen voltajı üretiyordur.


Ete

Cemil_mekatronik

#2
Ete Bey,
Kodların bir kısmını paylaşıyorum


#include <18f4550.h>
#DEVICE ADC=10
#include <stdlib.h>
#include <math.h>
#include <string.h>
#fuses INTRC,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=8000000)
//#use fast_io(c)
//#use fast_io(d)
//#use standard_io(c)
//#use standard_io(d)
#use rs232 (baud=57600, xmit=pin_c6, rcv=pin_c7, stop=1, parity=N)
#include <LCD_flex.C>
#byte UCON    =  0xF6D
#byte UCFG    =  0xF6F
#priority  rda, timer0, timer1, timer2

.
.
.
.
.
.
.
.
.
.
.
void main()
{         
  setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256 | RTCC_8_BIT);
  setup_timer_1( T1_INTERNAL | T1_DIV_BY_8);
  //setup_adc_ports(NO_ANALOGS);
  setup_adc_ports(AN0_TO_AN3_ANALOG | VSS_VDD);
  setup_adc(ADC_CLOCK_DIV_16);         
  setup_ccp1(CCP_PWM);
  setup_ccp2(CCP_PWM);
  setup_comparator(NC_NC_NC_NC);
  setup_timer_2(T2_DIV_BY_4,249,1);
// setup_timer_3 (T3_INTERNAL | T3_DIV_BY_8);
  setup_timer_3(T3_DISABLED);
  //setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_PLL_OFF);
  enable_interrupts(INT_timer0);
  disable_interrupts(INT_timer1);
  disable_interrupts(INT_timer2);
// disable_interrupts(INT_timer3);
  enable_interrupts(int_rda);
  disable_interrupts(GLOBAL);
  UCON=0;
  UCFG=0;
  bit_set(UCFG,3);
  set_pwm1_duty(0);
  set_pwm2_duty(0);
  set_tris_a(0x3F);                       
  set_tris_b(0xF4);
  set_tris_c(0xB4);
  set_tris_d(0x00);
  set_tris_e(0x0F);
  delay_ms(1000);
  output_high(pin_a4);          //rs232 haberleşme saçiliyor
  output_low(pin_d7);           //röleyi kes, readera eneri gitmesin
  output_high(pin_b3);          //led yakılıyor
  lcd_init();
  lcd_gotoxy(1, 1);
  printf(lcd_putc,"\f  CONN  ");
  lcd_gotoxy(1, 2);
  printf(lcd_putc,"CONTROL ");
.
.
.
.
.
.
.
diye devam ediyor. Kodun hepsini paylaşamıyorum çünkü ticari ürün ve imzalanmış sözleşmemiz var bu konuda :D Ben de vicdanım rahat olsun diye ilgili yerleri paylaşıyorum. Bu kodun dışında adc ile ilgili sadece set_adc_channel(), read_adc(), ve adc_done() komutlarını kullanıyorum.

ete

C dilinde olduğunu söylese idin zaten istemezdim kodları. Yinede baktım bu gördüğüm kısmında bir sorun göremedim.

Simulasyonda denedinmi aynı şeyimi yapıyor orada bazen olay daha açık görülebiliyor.

Elimden başka bir şey gelmiyor maalesef.

Ete



Cemil_mekatronik

Simülasyonda denemedim fakat zaman zaman iki bobin besliyorum ve bu beslemede dalgalanmalara neden oluyor ve 7 voltlara varan peak değerleri görüyorum. Bu gerilimin picin analog bacaklarını bozma durumu aklıma geliyor

ete

Devrende bobin beslenmesi varsa kesin sorun oradandır. Devre beslemesini kesin switching yapmak lazım bu mutlaka gerekli.
Pic besleme uçlarında mutlaka 100nf olmalı. Analog sinyal değişimi hızlı değil ise o girişede bir 100nf atabilirsin (GND ile Analog giriş arasına) böylece arada bir gelen peak ları elimine eder.

Ete

blueboard

Ete Hocam,son yazdığınız mesaj üzerine bir şey sormak istiyorum. Bildiğim sizin de belirttiğinizz gibi parazit olmaması için picin bacaklarına 100 nf kondansatör bağlamak. Yabancı bir sitede beslemede pice elektrolitik kondansatör bağlandığını gördüm. Resmini ekliyorum.
http://i.hizliresim.com/eavD34.jpg
Bu uygulama ne kadar doğrudur?

ete

Beslemede 5v tarafında zaten bir elektrolitik olur yada olmalıdır. Aynı yerde ama pic besleme pinlerine en yakın yerde ise ayrıca 100 nf kondansatör olmalıdır. Bu kondansatörün çok özel bir görevi vardır. Pic pinlerinin Mosfet olan çıkış transistörlerinin düzgün çalışmasını sağlar. Bu nedenle ihmal edilmemelidir.
Ete

blueboard

Teşekkür ederim. Fotoğrafta sadece elektrolitik 2 adet kondansatör görünce bana ilginç gelmişti.

Cemil_mekatronik

#9
Ete Bey,

Switch den kastınız nedir? Benim analog kanallarda gördüğüm ani yükselmeler değil, yani peak değil, kafasına göre geniş geniş rastgele voltaj değişimleri desem biraz daha iyi anlatmış olurum :D Ve analog kanalın olduğu yolu sensörden ayırdığımda da yani o bacaklara hiç birşey bağlı değilken de  aynı salınımı yapıyor. Hiç bir şekilde anlam veremiyorum. Picin iki besleme bacağına olabildiğince yakın yerde 1er tane 100 nflık kondansatör var. Bobinleri süren mosfetli güçlendirici kısım ile bu kısmı besleyen pic pwm çıkışları arasında opto-coupler da var. Acaba diyorum devrenin bobinleri beslediği anlardaki yukarı yönlü olan pic gerilimleri pice zarar vermiş olabilir mi? Çünkü o anlarda pic beslemesi 7 voltlarda peak değerler görebiliyor.

İlyas KAYA

Cemil bey;
Başka bir PIC ile deneyerek PIC'in portunun bozulup bozulmadığını anlamanız kolay olur.

Bobinden geri dönüş gerilimi çok yüksek olabiliyor. Bazen 12voltluk role insanı çarpabiliyor bile.
Tıpkı rolede olduğu gibi bobine hızlı ters diyot bağlarsanız bu sorunu aşmış olursunuz.

Devrede bobin ne iş görüyor bilmiyorum. Ne devresi olduğu bile belli değil.
Ne konuşursak konuşalım havai olacak...

Eğer bobine ters diyot eklemeniz bobinin çalışma şekline uygun değil ise bobini sürmek için PIC portunu tamamen izole etmelisiniz. Opto olabilir ve bobini ayrı bir kaynaktan beslemeniz gerekebilir.


Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Switch den kastım lm2575 veya lm2576 gibi bir elemanla 5v elde edip pic ve diğer 5v gerektiren yerleri beslemenizi kast ettim. İşlemcilerin analog girişleri referans voltajı ile çalışır. Bu genelde besleme uçları ref alınarak yapılır. Besleme kaynağınızda parazit veya inme çıkmalar var ise analog kanalda aynı şekilde davranır bir iner bir çıkar bu nedenle kritik devrelerde ya harici sabit ref kaynağı verilir yada besleme sabit hale getirilir.
Ete

Cemil_mekatronik

Ete Bey, İlyas Bey,

Power ve bobin besleme katının açık şemasını ekledim. Dalgalanma ufak dalgalanmalar değil, 0-5 volt arası rastgele gezdiğini düşünün. Ve bu dalgalanmaları bobin beslenirken de beslenmezken de yapıyor. Yani kaynakta bozulmalar varken de, yokken de. Bu katlar için önerebileceğiniz bir iyileştirme var ise hemen denerim çünkü 3 haftadır bi çok şey okuyup denedim. Artık en son bugün pici değiştirip harici kaynaktan 5 volt ile beslemeyi düşünüyorum bakalım analog kanallar yine aynı şekilde dalgalanacak mı...

ete

Bu şekil bir gezinme ilk defa duyuyorum. Anlaşılan konu göründüğü kadar basit bir şey değil.
Mutlaka gezinmenin sebebi bulunması gerekir. Harici besleme çözüm olabilir.

Sisteme bağlı ünitelerin geçici olarak devre dışı bırakılması ile sorunu yaratan eleman yada gurup bulunabilir.
Bence çözümü sorunu yaratan eleman yada gurubu bulmakta arayın. Sonrasında sorunu çözmek kolay olur.
Şu anda samanlıkta iğne arayışı gibi bir şey bu. Ben olsam hemen 34063 den şüphelenirdim.

Ete

Cemil_mekatronik

Ben de şu an onla ilgili bir çalışma yapıyorum. Pici değiştirdim, regülatör devresini devre dışı bırakıyorum, 5 voltu dışardan güç kaynağıyle vereceğim, bobinler için olan 24 voltu ayrı yerden vereceğim, bakalım yeni pic düzgün 5 voltla ne yapacak...

Powered by EzPortal