18f4550 ile 16f628a seri haberleşme

Başlatan yusuffyk, 20 Mart 2015, 22:30:05

yusuffyk

merhaba arkadaşlar,
ben 18f4550 ile 16f628a arasında seri haberleşme yapmak istiyorum.
ama her nedense çalıştıramadım.
pinlerin birden fazla görevde çalışmasından kaynaklanabileceğini düşünüyorum.
bu konuyla ilgili çalışması olan arkadaşlardan yardım bekliyorum.

#USE RS232 (baud=2400,bits=8,parity=N,xmit=PIN_A0) 


satırında yazılımsal olarak tanımladım.

if(input(pin_a1)==1 )  //Buton-1 basılımı?
         {
            bilgi='y';
            output_high(PIN_B1);
            putc(bilgi);
         }


en basitinden butona basıldığında y karakteri göndermesini istiyorum.
628a tarafında da

if(getc()=='y')
{
//....
}


komutuyla da eğer y karakteri gelirse işlem yapmasını istiyorum.
ama malesef çalıştıramıyorum.
18f4550 tarafında sıkıntı olduğunu düşünüyorum.
aynı kodu iki adet 628a arasında deniyorum, çalıştırabiliyorum ama 4550 de çalışmıyor.
4550 nin kristali 20mhz, 628a nın ki 4mhz.
sizce neden olabilir ?
daha önce böyle bir çalışması olan var mı ?
bir led yak - söndür uygulaması bile olabilir.
şimdiden teşekkürler



http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

yusuffyk

http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

RaMu

Tam kod ve varsa simulasyon dosyası?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

yusuffyk

#3
simülasyon dosyaları burada
https://yadi.sk/d/5m3ig4x1fRGgh




#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT // 8MHZ
#use delay(clock=48000000)
#use fast_io(b)
#USE RS232 (baud=2400,bits=8,parity=N,xmit=PIN_a0)  //Seri iletisim icin

int bilgi=0;

void gonder()
{
         putc('a');
         putc(bilgi);
         output_low(PIN_B1);
         bilgi=0;
}

void main()
{     
   set_tris_a(0xff);
   set_tris_b(0x00);
   output_b(0x00);
 
  
 while(TRUE)
      
   {
     
     if(input(pin_a1)==1 )  //Buton-1 basılımı?
         {
            bilgi='y';
            output_high(PIN_B1);
            putc(bilgi);
         }
     
     gonder();
     delay_ms(500);
     
            
   }
}




ve bu da 628a kısmı


#include <16f628a.h>
#FUSES XT 
#use delay (clock=4000000)
#use rs232 (baud=2400, xmit=pin_a0 ,rcv=pin_a1,stop=1,parity=N,ERRORS)

int bilgi=0;
int ver=0;
int say1=0;
int say2=0;

void gonder()
{
 
 //
 
}


void main()
   {
      set_tris_a(0xff);
      set_tris_b(0x00);
      
            
      while(TRUE)
      
      {
            
               if(getc()=='a'){
                  bilgi=getc();
              
                  if (bilgi == 'w') 
                  {
                     ver='w';
                     gonder();
                  }
                  
                  if (bilgi == 's') 
                  {
                     ver='s';
                     gonder();
                  }
         }
         
         delay_ms(500);
         ver='z';
         gonder();
         
          
      }
      
   }
            }
         }
         }
      }
      }
   }
   
     



simülasyon dosyasını nasıl yükleyebileceğimi bilmiyorum. ama koddan anlaşlılabilir diye düşünüyorum.
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

baran123

628A da bilgi alma işlemini seri iletişim kesmesi ile yapınız.

yusuffyk

hocam simülasyonda virtual terminale bağlıyorum ama gönderemiyor göndermek istediğim karakterleri.
yani kesme işini hallederiz de 4550 göndermiyor.
18f4550 de bir problem olduğunu düşünüyorum. onun ayarlarında, pinlerin ek görevlerinin kapatılmasında vs. vs.
Daha önce bu işlemciyi kullananlar dikkat etmem gereken ayarlamalarından bahsedebilir mi ?
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

kudretuzuner

Merhaba,
İki sistem arasında seri haberleşmede dikkat edilmesi gereken konulardan biri de baudrate hızıdır.628 de 4 mhz ,4550 de 20 mhz kristal kullanmışsınız.Acaba CONFIG ayarlarında bir uyumsuzluk var mı? CCS C dilini bilmediğim için yorum yapamıyorum.Hem 628'in hem de 4550 nin 2400 baudrate hızına ayarlı olması gerekir.
Amatör

yusuffyk

bende o tarz bir şey olabilecğeini düşünüyorum.
config ayarları veya işlemcinin özel fonksiyonları.
devredışı bırakmam gereken şeyler olabilir. ama emin olamıyorum işte.
dah önce kullanan birisi varsa belki sorunu direkt görebilir.
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

kudretuzuner

#8
Merhaba,
Mümkün ise 4 mhz kristal kullanın SPBRG ayarını decimal 2400 baudrate için(103)yapın 20 mhz için SPBRG (2082)
Bknz:data  sheet 20 sayfa
;Dt Kudret Uzuner  2015
LIST P=18F4550
INCLUDE "P18F4550.INC"
__CONFIG _CONFIG1L, 0x00 ;
__CONFIG _CONFIG1H, 0x00 ;
__CONFIG _CONFIG2L, 0x00 ;
__CONFIG _CONFIG2H, 0x00 ;
__CONFIG _CONFIG3H, 0x80 ;
__CONFIG _CONFIG4L, 0x80 ;RB6 VE RB7 NORMAL INPUT OUTPUT
__CONFIG _CONFIG5L, 0x00
__CONFIG _CONFIG5H, 0x00
__CONFIG _CONFIG6L, 0x00
__CONFIG _CONFIG6H, 0x00
__CONFIG _CONFIG7L, 0x00
__CONFIG _CONFIG7H, 0x00
-----------------------------------------
;         YAPILANDIRMA RUTİNİ
BSF STATUS,5;ÖNEMLİ KODD
MOVLW D'103'
MOVWF SPBRG
MOVLW B'00100100'
MOVWF TXSTA
Amatör

yusuffyk

#9
hocam bu aslında yapacağım bir çalışmanın bir parçası. 20mhz kullanmam gerekiyor.
onu değiştiremiyorum malesef. belki de bu yüzden oluyor ama. bilemiyorum.

mesaj birleştirme:: 21 Mart 2015, 21:00:17

hocam ccs c de bulailir miyiz yardımcı bir kod ?
http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

kudretuzuner

Alıntı yapılan: yktronik - 21 Mart 2015, 20:51:40
hocam bu aslında yapacağım bir çalışmanın bir parçası. 20mhz kullanmam gerekiyor.
onu değiştiremiyorum malesef. belki de bu yüzden oluyor ama. bilemiyorum.

mesaj birleştirme:: 22 Mart 2015, 22:00:17

hocam ccs c de bulailir miyiz yardımcı bir kod ?
CCS C dilinde asm'ye geçerek işlem yapılabilmeli,kendim yazdığım bir kod halen PIC PC arası haberleşme yapmaktayım.Hazır isis dosyasını 7.0 versiyon gönderebilseniz zamanın da olursa kodları asm olarak yazarım.yalnız bir konu daha var ki 628 tarafında da gelen datanın EXOR ile kontrol edilip  eşleşiyorsa işlem yaptırmak lazım.
Amatör

yusuffyk

http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

RaMu

Yine aynı hata;
https://www.picproje.org/index.php/topic,57620.msg444623.html#msg444623

Sonrada şu gelirse bunu yap kısımlarını düzenlemen gerekecek.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

yusuffyk

http://yusuffyk.com  ||  http://www.youtube.com/yusuffyk

DaRt

derleyiciye osc 48MHz olarak tanımlanmış ancak simülasyon programında 4MHz tanımlanmış. Ayrıca 628in data giriş pini a1 olarak tanımlanmasına rağmen simülasyon programında a0a bağlanmış. bu ikisini düzeltince hem led yanıyor hemde terminalde datalar görünüyor.