Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: fatihba - 26 Nisan 2015, 21:03:40

Başlık: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 26 Nisan 2015, 21:03:40
Öncelikle merhaba, Ben uzun zamandır burayı takip ediyorum ve bir şeyler öğreniyorum yada öyle olduğunu düşünüyorum :) Pic le bir devre yapmak istedim 2 pic i rs232 ile kablolu bir şekilde haberleştiriyorum çok basit olduğunu düşünmüştüm ama pek bir şey beceremedim başta parazit oluyordur dedim fakat lcd ile bilgisayarın rs232 sinden lcd ye bir şeyler yazdırdım devre şemam bulunmuyor ama ben anlatayım sadece 18f4620 kullanıyorum bir led ve rs232 haberleşmesi var diğer devre ise verici olan sadece rs232 ve pic var kodları veriyorum isis te çalışıyor ama normalde çalışmıyor yardım edin lütfen Yardımlarınızı bekliyorum değerli arkadaşlar :( ve diğer konulara bak derseniz baktım fakat pek anlayamadım kusura bakmayın :(
Alıcı:

#include <18F4620.h>
#device ADC=16

#FUSES HS
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(crystal=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stop=1)

#include <string.h>
#include <stdio.h>
char i;
#INT_RDA
void  RDA_isr(void) {
disable_interrupts(INT_RDA);
disable_interrupts(GLOBAL);
i=getchar();
if(i=='q'){ output_toggle(PIN_B7);}
}

void main() {
output_low(PIN_A0);
output_low(PIN_E3);
output_low(PIN_A1);
output_low(PIN_A2);
output_low(PIN_A3);
output_low(PIN_A4);
output_low(PIN_A5);
output_low(PIN_E0);
output_low(PIN_E1);
output_low(PIN_E2);
output_low(PIN_C0);
output_low(PIN_C1);
output_low(PIN_C2);
output_low(PIN_C3);
output_low(PIN_C4);
output_low(PIN_C5);
output_low(PIN_D0);
output_low(PIN_D1);
output_low(PIN_D2);
output_low(PIN_D3);
output_low(PIN_D4);
output_low(PIN_D5);
output_low(PIN_D6);
output_low(PIN_D7);
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
   

   while(TRUE){
     enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL); //TODO: User Code
}

}

Verici:

#include <16f688.h>
#fuses HS,NOMCLR,NOBROWNOUT,NOCPD,NOWDT,NOPUT
#use delay(clock=10000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C4,rcv=PIN_C5,bits=8,stop=1)

//===========================
void main(){
output_low(PIN_A3);
output_low(PIN_C3);
output_low(PIN_A0);
output_low(PIN_A1);
output_low(PIN_A2);
output_low(PIN_C0);
output_low(PIN_C1);
output_low(PIN_C2);
while(1){
delay_ms(100);
putchar('q');
}


}
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: Emre MERMİ - 26 Nisan 2015, 23:26:20
 Telefondan girdiğim için kodlara bakamadım ama yardımcı olması açaıdından Serdar ÇİÇEK hocamızın kitabındaki kodlara bi gözgezdirebilirsin. Örnek uygulama var.

https://320volt.com/ccs-c-ornek-uygulama-kod-arsivi-c-ve-hex/
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: RaMu - 26 Nisan 2015, 23:32:36
Devrede kullandığın kristallerin değerleri ne?
Şema foto vs. paylaşmalısın,
her zaman diyorum sen devre başında çözemiyorsan
biz hiçbir şey görmeden nasıl çözeceğiz?
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 27 Nisan 2015, 00:24:04
kristaller alıcıda 20mhz vericide 10mhz bir de alıcıda ve vericide kristalleri pice yakın yerleştirdim gövdelerini şaseye çektim devrenin altı tamamen şase kaplı 7805 ile regüle ettim piclerin girişlerinde 100nF var kusura bakmayın açıklamadığım için
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: esensoy - 27 Nisan 2015, 09:04:42
fuse kısmında üstte nowdt altta da wdt128 yazmışsın ya
ccs eskiden yapmıyordu ama yeni versiyonlarda wdt128 ile watchdog u açıyor,
o satırı kaldırarak çözüme başlamalısın,
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 27 Nisan 2015, 11:51:20
sağolun deneyeceğim şimdi
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 27 Nisan 2015, 12:02:51
maalesef yine olmadı ccs c nin 5.015 versiyonunu kullanıyorum acaba sorun bunla alakalı olabilir mi bilmiyorum çok basit bir devre sadece led,kondansatörler,7805 ve pic var lütfen yardım edin ya :( bir de pic in rx i ile tx i ni direk bağlıyoruz değil mi pull-up yada pull-down falan olmayacak ? :/
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: esensoy - 27 Nisan 2015, 13:18:14
Evet
rx--tx
tx-- rx şeklinde bağlanacak, pull up vs gerekmiyor ama mesafe ne kadar?

kodunla ilgili problem noktası göremedim, adc= 16 satırı hatalı ,8 ya da 10 olmalı ama çalışmaması için bir sebep değildir,

isiste devreni kur, hexleri falan yükle bir yere indirip bakayım,
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: RaMu - 27 Nisan 2015, 13:29:41
İki devreninde gnd leri birbirine bağlı mı?
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 27 Nisan 2015, 13:48:14
Peki esensoy bey belediyede bir işim var gelince ilk işim o olacak. Hayır RaMu bey iki devre bir birinden bağımsız.
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: RaMu - 27 Nisan 2015, 15:58:10
gnd leri birleştirin.
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: esensoy - 27 Nisan 2015, 16:38:55
rs232 de gnd ayrı olursa olmaz,
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 27 Nisan 2015, 18:01:32
yani aynı zamanda iki devrenin gnd lerini birbirine bağlayacağım öylemi yanlış anlamadım hemen deniyorum sağolun
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: RaMu - 27 Nisan 2015, 18:24:40
Evet düşündüğün gibi.

Misal A devresinden B devresine rs232 bağladın
ve A ve B devrelerinin Gnd lerini birleştirmedin,
A devresinin Tx ucu B devresinin Rx ucuna bağlı,
A devresinin Tx ucu logic 1, high, +5V gönderdiği anı ele alalım,
A devresinin Tx ucu voltmetrenin artı probunda
B devresinin gnd si  voltmetrenin eksi probunda
olacak şekilde ölçüm yaparsan
anlamlı birşey göremezsin
zaten doğal olarak göreceğin değer
B devresinin Rx ucu ile gnd si arasındaki değer olur
(çünkü A tx ile B Rx birbirine bağlı).

Ancak Gnd leri birleştirirsen
A Tx pini, B Rx pininde 0 ve 1 bilgisi oluşturabilir,
tabi terside geçerli.

Birde diferansiyel Rx Tx var
oda bildiğim kadarıyla Rs485 de var,
Rx in durumu Tx e göre
Tx in durumu Rx e göre değerlendiriliyor,
Rs485 konusundaki bilgim net değil belirteyim.
Başlık: Ynt: CCS C ile RS232 kesmesi ve getch() kullanımı sorunu
Gönderen: fatihba - 27 Nisan 2015, 18:39:35
Herşey için çok teşekkür ederim oldu yardımlarınız sayesinde sağolun var olun :)