CCS C ile RS232 kesmesi ve getch() kullanımı sorunu

Başlatan fatihba, 26 Nisan 2015, 21:03:40

fatihba

Ö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');
}


}

Emre MERMİ

 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/

RaMu

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?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fatihba

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

esensoy

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,
En tehlikeli an "zafer" anıdır.

fatihba


fatihba

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 ? :/

esensoy

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,
En tehlikeli an "zafer" anıdır.

RaMu

İki devreninde gnd leri birbirine bağlı mı?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fatihba

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.

RaMu

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

esensoy

En tehlikeli an "zafer" anıdır.

fatihba

yani aynı zamanda iki devrenin gnd lerini birbirine bağlayacağım öylemi yanlış anlamadım hemen deniyorum sağolun

RaMu

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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

fatihba

Herşey için çok teşekkür ederim oldu yardımlarınız sayesinde sağolun var olun :)