PIC ile gönderdiğim adc sonucunu rs232 ile göndermek

Başlatan gokhangok865, 14 Temmuz 2009, 22:23:42

gokhangok865

arkadaslar merhabalar yine ayni projede karsilastigim bir sorun var.seri port kablosunu devreye takmadan once lcd de gorunmesini istedigm degerleri duzgun bir sekilde goruyorum fakat seri portla devreyi bilgisayara bagladigim zaman lcd de 0 olmasi gereken bir durumda bir anda 3.7 1.00 4.86 gibi anlik degisimler goruyorum bunun nedeni ne olabilir?

ayrica seri porta bilgi gondermem lazim visual ile yazdim basit birsey sadece aldigim degeri textte gosterecem ama olmadi o zamanda.picin gondermesini istedigim sey adc sonucu yani 0 dan 255e kadar olan sayisal degerler bu iki konuda bana yardimci olabilir misiniz?proteusta adc sonucunu long diye tanimladim gonderirken de printf(\"%ld\",bilgi)
diye gonderdim proteusta vitural terminalde istedigim sekilde goruyorum yani 127 255 18 filan ama seri portla atamiyorum bilgisaya neden acaba?

justice_for_all

      set_adc_channel(0);//analog olcumun 0. pinden olacagi ayarlandi.
      delay_us(20);
      value=read_adc();
      printf(lcd_putc,\"\\f%u\",value);//isaretsiz olarak lcd ye yazar.
      putc(value); //seri porttan bilgi gonderir.
      delay_ms(1000);


kontrol et bakalim.
buarada 0 dan 255e kadar gosterceksen long die tanimlamana gerek yok int8 olarak tanimlarsan yeter ben ccs derleyicisi icin konusuyorum.kodlarim ona gore
iyi calismalar.

gokhangok865

olmuyor olmuyor olmuyor herseyi denedim ama yine olmadi kafayi yemek uzereyim.

http://rapidshare.com/files/256285163/SERI_HABERLESME_VE_ADC_KONTROL_DEVRESI.rar.html

kardes buraya upload ettim ccs ile yazdigim program yaptigim devre ve bunun baski devressi burda sorun ne olabilir bir yardim edersen sevinirim tesekkur ederimm

justice_for_all

kardes devrende tam olarak sorun ne onu anlamadim.yazilimin dogru gibi bu devreyi fiziksel olarak yaptin mi proteus yapabilir oyle bazen hatali similasyon yapabiliyo.

kolay gelsin...

gokhangok865

yok hem teorik hem de pratikte gerceklestirdim proteusta calisiyor canavar gibi ama baski devresini cikarttiktan sonra calismiyor nedenini hala bilmiyorum senin aklina gelen birsey var mi acaba

justice_for_all

hatanin ne oldugunu soylermisin devre hic mi calismiyo mesela pic programin calisiyomu yoksa hatali degermi gosteriyo tam anlatabilirsen belki yardimci olabirim kardes...

gokhangok865

hemen soyleyeyım.sımdı basınc sensorunden kucukmıktarda bır gerılım alıyorum bunu ad620 ıle yukseltıyorum ve yukseltılen degerımı pıc16f877 nını 2.bacagından analog dıgıtal cevrım ıcın verıyorum.pıcle cevrılen adc sonucunu cesıtlı matematıksel ıslemlerı yaptırp lcd de gostetıyorum.ayrıca adc sonucunu rs232 ıle bılgısayara gondermem gerekıyor.proteusta cızımı yaptım hersey cok guzel calısıyor.adc sonucunu vıtural termınalde gorebılıyorum.fakat ne zaman rs232 kablosunu devreye taksam yanı devreyle bılgısayarı bırbırıne baglasam lcd degısık degerlerı gosermeye baslıyor.3.6V 4.85V 0.00V gıbı anlık degısımler gosterıyor.kabloyu cıkartınca hersey cok normale donuyor.olctugum basınc degerını aynen gorebılıyorum.ıste tam anlamıyıyla sorunum bu.ha ayrıca devreyı bılgısayara bagladıgım zaman da hyper termınalden de bırsey goremıyorum.

justice_for_all

kardes daha once hic seri portla ilgili bi devre yaptin mi printf(\"%u\",bilgi); bu kodu ilk defa gordum ben ccs de putc fonksiyonu var ben hep onla yapiyorum bu fonksiyonla daha once seri porta bilgi gonderdin mi

gokhangok865

evet putc(bılgı);
bununla da yaptım olmadı yanı bunu da denedım olmadı daha sonra bı yerde okudum putc genellıkle karakter gondermek ıcın kullanılıyormus prıntf ıse hem karakter hem de sayı gondermek ıcın daha uygunmus pekı sen hıc benım karsılastıgım gıbı bırseyle karsılastınmı ve ılk okudugun zaman aklına ne gıbı bır sorun geldı?

justice_for_all

putc ile 8bitlik herhangi bir datayi gonderbilirsin kardes benim aklima printf yazinca lcd algiliyo olabilir gibi geliyo.ben suana kadar bitek sorun yasadim proteusta seri porttan gonderdigim bilgi ile picin aldigi bilgi farkli oluyodu bu da proteusun bi acigi ama devreye cizip fiziksel olarak yaptigimda hic bi hata olmadigini gordum seriporttan gonderdigim bilgiyi pic aynen aliyodu yani ben biraz daha bakim devrene fikrim olursa tekrar donerim sana kardes

gokhangok865

benım aklıma gelen tek sey acaba dıyorum serı port kablosunu soktugum zaman ters bır gerılım pıce gıden analog sınyale gurultu mu yapıyor serı portla devrenın dıger kısmının tek baglantı noktası GND

justice_for_all

baktim bi sen kodda printf(\"%u\",bilgi); boyle demissin ya seri port normalde her dongude 8 bit gonderir ama proteus bilgi den oncekileride karakter olarak algiliyo her dongude 24 bit gonderiyo  :)
 seri portta kullanilmiyo zaten lcd  formatlari var ya % isaretli olanlar..



gokhangok865


justice_for_all

bide sana bi tuyo daha verim potansiyometrenin bi ucunu asla gndye verme ucuna kucun bi direnc baglaki sifir olmasin degeri yoksa hatali olcumler yapiyo direnc degeri sifir olunca dedigin gibi olcagini sanmiyorum kondansator var ya max232 de izalosyon saglar onlar..

justice_for_all

#16

#include <16F877.h>

#device ADC=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#byte portb=6
#use delay(clock=4000000)
#use rs232 (baud=9600,  xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

#define use fast_io(a)
unsigned int bilgi;
float gerilim,basinc;

#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_TYPE 1
#include <lcd.c>
#int_timer0
void timer0_isr(void)
{
   set_timer0(150);
   read_adc(ADC_START_ONLY);  
  
}
#int_AD
void ad_isr(void)
{
   set_adc_channel(0);
   delay_us(20);
   bilgi=read_adc(6);
  
   gerilim=bilgi*0.018823529411764705882352941176471;
  
   basinc=gerilim*1.4886686048548110266559249010473;
   printf(lcd_putc,\" BASINC=\");
  
   lcd_gotoxy(9,1);
  
   printf(lcd_putc,\"%f psi \",basinc);
   //delay_ms(1000);
   putc(bilgi);

}
void main()
{
   lcd_init();
   set_tris_a(0xFF);
   setup_adc(ADC_CLOCK_DIV_8);
   setup_adc_ports(ALL_ANALOG);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   enable_interrupts(int_timer0);
   enable_interrupts(int_ad);
   enable_interrupts(global);
   lcd_init();
   set_timer0(150);

   while(true)
   {

   }  
  
}
  

sunu bi dene bakalim kardes

gokhangok865

tamadır kardes yarın ılk ısım olarak bunu deneyecem ve senı haberdar edecem cok tesekkur ederım saolasın

justice_for_all

rica ederim ne demek yardim edebildiysem ne mutlu bana iyi geceler kardes sorun olursa veya kodda aklina takilan bise cikarsa ben buralardayim kolay gelsin...

gokhangok865

tamadır kardes kodda sorunum olursa muhakkak haber ederım tekrar tesekkur ederım


gokhangok865

kardesim denedim calistiramadim bana daha cok parazit varmis gibi geliyor ama bilemiyorum eylule kadar yapmam lazim yoksa cikisimi alamyacagim ne yapacagimi bilmiyorum

gevv

Benim picli devreler hakkında pek bilgim yoktur ama verdiğiniz şemada rs232 pin13 boşta aşağıdaki devre ile karşılaştırdım sizde kontrol edin belki işinize yarar

http://a.imagehost.org/download/0358/RS232_Seri_leti_im_Uygulamas

gokhangok865

saol grevv de herhangi bir devre goremedim ve rs232 nin 13. pin dedigin sey picle ilgili olan kisim mi

gevv


gokhangok865

ben bilgisayardan veri almak istemiyorum sadece bilgisayara veri gondermek istiyorum bundan dolayi max232 nin 13. pinini kullanmadim

MESUT

arkadaşlar,proteus programım tam olarak çalıştıramıyorum .. yardım ederseniz sevinirim :)

gokhangok865

evet cook guzel proteusu calistiramiyorsunuz.peki nasil birsey oluyor da calistiramiyorsunuz onu da yazsaydiniz sorun olarak ona gore bir cevap bulunmasi kolaylasabilirdi.

piskopatisa

arkadaşım verdiğin devreyi denedim yazılımın çalışıyor yalnız proteus taki max232 de sorun var galiba şuana kadar bir çok uygulama yaptım ama proteus ta max232 hiç kullanmamıştım simulatör olduğu için virtual terminal i direk bağladığında çalışıyor. Bence sende bu şekilde devreni çalıştırdıktan sonra devreni gerçekten kurup çalıştır. Yüzde 99 çalışacaktır. Yalnız pc nin 232 portu usb den rs232 ye çeviriciyle bağlıyosan oda saçmalar. Birde hyper terminalden değilde CCS C nin kendi test programı var tools menüsünün altında serial test monitor die onunla test et sonra visual basic e geç.
Birde visual basic te text de görüntülemek isterden okuduğun değeri ASCII ye çevirmen gerek sanırım. İyi çalışmalar kolay gelsin..

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın