Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

PIC18F4550 ADC problemi

Başlatan CeMiL_mktrnk, 03 Mart 2014, 15:49:44

CeMiL_mktrnk

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?
Mekatronik Mühendisi/Mechatronic Engineer

hasankara

sensör ney? ortamda gürültü var mı? peşinen söyleyebileceğim şey ise alçak geçiren filtreyle adc ucuna giriş yapman. yani bağladığın direncin değeri 1k - 10k arası ise, ek olarak dirençle mcu pini arasına 100nf kondansatörün bir ucunu bağlarsın, cap diğer ucunu da gnd bağlarsın. bu dar sayılabilecek bir sürede integral alıp sonuca ekler böylece çok daha kısa sürede oluşan atlamaları basitce etkisini ortadan kaldırmış olursun.

selimkoc

GND'ler ortak olmalı. Yani PIC besleme GND'si ile ADC girişindeki GND ortak olmalı. Söylediğinize göre böyle bir problem görünüyor.

CeMiL_mktrnk

GND'ler ortak ve 100 nflık kamasitör attım değişen yok, kafasına göre takılmaya devam...
Mekatronik Mühendisi/Mechatronic Engineer

tekosis

adc ile ilgili olan kod parçasını paylaşmanızda fayda var. şemayı da yollarsanız iyi olur.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

CeMiL_mktrnk

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.
Mekatronik Mühendisi/Mechatronic Engineer

CeMiL_mktrnk

Arkadaşlar yardımcı olabilecek yok mudur? ???
Mekatronik Mühendisi/Mechatronic Engineer

hasankara

pinler başka amaçlar için kullanılıyor olabilir ve o amaçlar default olarak set edilmiş olabiliyor. iki pinin ortak olarak başka hangi amaçlarda kullanıldığını araştırabilirsiniz.

tekosis

ben paylaşıtğınız kodlarda bir anormallik göremedim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

CeMiL_mktrnk

Diğer bütün görevleri kontrol ettim, kapattım. Ama en son geldiğim durumda e0, e1 pinleri digital giriş olarak düzgün çalışmıyor. Logic 0 da olması gerekirken 1-2,5 V arasında geziniyor
Mekatronik Mühendisi/Mechatronic Engineer

hasankara

pinler giriş set edilmiş ve boşta iken mi geziniyor? böyle ise normal. pull down, pull up veya bir sensör, led mi bağlı uçlara ki buna rağmen gerilim değişimleri oluşuyor? bir de diğer hangi görevleri kapattınız? ilk probleminiz çözüldü mü?

CeMiL_mktrnk

İlk problemim çözüldü. Bu bacaklara güç katına bobin takılıysa 24 Volt oluşan bir yerden gerilim bölücü ile 5 volt geliyor. Bobin takılı değil iken 0 volt geliyor. Ama bobin takılı iken dalgalanma görüyorum. Ve bugün bobin takılı iken ise bir süre sonra dalgalanmalar gördüm, halbuki o pinlere 5 volt veriliyor.
Mekatronik Mühendisi/Mechatronic Engineer

freeggCC94

Hocam merhaba, sorunu çözebildiniz mi acaba?