RS 232 Çok Ufacık Küçücük Minnacık bir problem var

Başlatan centeremr1, 26 Şubat 2014, 13:36:09

centeremr1

Arkadaşlar kolay gelsin

Ben 2 pic haberleştiriyorum burda bir problem yok ( 16f877-16f628 ) .

Elimde 2 adet pcb var 1. pcb'de  16f877 var 2. pcb de 16f628  bunları 2 kablo ile bağlayığ haberleştiriyorum Rx Tx.

16f877'den gelen komut ile 16f628 de'ki ledleri yaktım fakat butona bas çalış çek çalışma olayını yapamadım ( komik bir durum)

çok yol denedim Tahminimce ben bir yerde bir şeyi gözden kaçırıyorum, haberleştirmeyi ilk defa denediğimden dolayı sanırsam

Dosyaları yüklüyorum lazım olan arkadaşlar çekebilir, bilgisi olanı yarım etmeye davet edeyrum.

iyi çalışmalar...

/// EMRE DÖKMETAŞ ///
/// ALICI KISMI ///
#include <16f628a.H> 
#fuses INTRC_IO
#fuses PROTECT
#fuses CPD
#fuses NOWDT
#fuses NOMCLR
#fuses NOBROWNOUT
#fuses NOLVP
#fuses NOPUT
#use delay(clock=4M)

#use rs232 (baud=9600,rcv=pin_b1,parity=N,stop=1)
    
#define led2 pin_a1         // 'Y2            
#define led3 pin_a2          // 'Y3
#define led4 pin_a3           // 'Y4 
//#define led5 pin_a4        // 'Y5***
#define led1 pin_b0         // 'Y1 
#define led6 pin_b5         // 'Y6      
#define led5 pin_b4       // 'Y5
#define led8 pin_b7 
#define led7 pin_a0         // 'Y7  

int frek;
   
void main()
{
  // setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   //SETUP_TIMER_1(T1_DISABLED);               
   set_tris_b(0x00);
   set_tris_a(0x00); 
   //setup_timer_2(T2_DISABLED,25,1);
   
   

   
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   
   output_low(led1);
   output_low(led2);
   output_low(led3);
   output_low(led4);
   output_low(led5);
   output_low(led6);
   output_low(led7);
   output_low(led8); 

   while(true)
   {

  
delay_ms(10);
output_high(led7); 
output_high(led8);   
 
 frek = getc();
       
///////////////////////////////////////1///////////////////////////////////////      
       if (frek==10)
       output_high(led1);
        else 
         output_low(led1);
      
///////////////////////////////////////2///////////////////////////////////////      
       if (frek==20)
        output_high(led2);
         else
          output_low(led2);
///////////////////////////////////////3///////////////////////////////////////      
       if (frek==30)
        output_high(led3);
         else
          output_low(led3);
///////////////////////////////////////4///////////////////////////////////////
       if (frek==40)
        output_high(led4);
         else
          output_low(led4);
///////////////////////////////////////5///////////////////////////////////////      
       if (frek==50)
        output_high(led5);
         else
          output_low(led5);
///////////////////////////////////////6///////////////////////////////////////      
       if (frek==60)
        output_high(led6);
         else
          output_low(led6);
      
 
 
 
 
 
 
 
 
 
 
 
   }
}



















////////////////////////////////////////////////////////////////////////////////
//EMRE DÖKMETAŞ                                                //
//VERİCİ KISMI                                                     //
////////////////////////////////////////////////////////////////////////////////
#include <16f877a.h>
#device adc=8 
#device *=16
#FUSES XT
#FUSES NOWDT
#fuses PUT
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES CPD                      //Data EEPROM Code Protected
#FUSES NOWRT                    //Program Memory Write Protected
#FUSES PROTECT                  //Code protected from reads
#FUSES NODEBUG
#use delay(clock=4M)

#use rs232(baud=9600,xmit=pin_c6,parity=N,stop=1)

#define buton1 pin_b0    // 'X0              
#define buton2 pin_b1     // 'X1                
#define buton3 pin_b2        // 'X2         
#define buton4 pin_b3        // 'X3          
#define buton5 pin_b4     // 'X4   
#define buton6 pin_b5           // 'X5   
#define buton7 pin_d0      // 'X6      
#define buton8 pin_d1         // 'X7
   
      
#define led1 pin_c0            // 'Y0         
#define led2 pin_c1         // 'Y1            
#define led3 pin_c2          // 'Y2            
#define led4 pin_c3           // 'Y3 
#define led5 pin_c4         // 'Y4            
#define led6 pin_c5         // 'Y5                     
#define led7 pin_d2       // 'Y5
#define led8 pin_d3     // 'Y5      


void main (void)
{    
      setup_psp(PSP_DISABLED);       
      //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
      SETUP_TIMER_1(T1_DISABLED);               // Disable Timer 1
      SETUP_TIMER_2(T2_DISABLED, 127, 1);       // Disable Timer 2
      setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
      setup_adc_ports(ALL_ANALOG);   // Tüm AN girişleri analog 
      setup_CCP1(CCP_OFF);         
      setup_CCP2(CCP_OFF); 
      port_b_pullups(TRUE); // portb pull-up dirençleri devrede.

   output_low(led1);
   output_low(led2);
   output_low(led3);
   output_low(led4);
   output_low(led5);
   output_low(led6);
   output_low(led7);
   output_low(led8); 
  
while(TRUE)
{
/////////////////////////////////////1//////////////////////////////////////////
  
     if(input(buton1)== 0)  
     putc(10);
/////////////////////////////////////2//////////////////////////////////////////   
     if(input(buton2)== 0)
     putc(20);
/////////////////////////////////////3//////////////////////////////////////////
     if(input(buton3)== 0)
     putc(30);
/////////////////////////////////////4//////////////////////////////////////////  
     if(input(buton4)== 0)
     putc(40);
/////////////////////////////////////5////////////////////////////////////////// 
     if(input(buton5)== 0)
     putc(50);
//////////////////////////////////6//////////////////////////////////////////
     if(input(buton6)== 0)
     putc(60);
/////////////////////////////////////7////////////////////////////////////////// 






















}
}









PROBLEM ( LED BASINCA YANIP YANIP SONUYOR - ISTEDIGIM BUTONA BASINCA YANCAK CEKINCE SONUCEK )

xoom

if(input(buton1)== 0)  
     {
     delay_ms(200); // Buton arkları için ufak bir bekleme..
     k++;
     if(k==2){putc(11); k=0;continue;}
     putc(10);
     }


Birde böyle deneyin düzelecektir.

centeremr1

bende farklı şekilde denemiştim süre verip ama olmadı  butona basıyorum  cekmesemde yakıp söndürüyor periyodik bir şekilde....

sadogan

Alıcı tarafta.
Her led için bir flag tanımlayıp
int1 led1_flag;
       if (frek==10)led1_flag^=1;// ex or flagın complimentini alır
       if (led1_flag)
       output_high(led1);
        else
         output_low(led1);

centeremr1

çok sağol değiştirdim değişen birşey yok malesef
/*
if (frek==10)led1_flag^=1;
       if (led1_flag)
       output_high(led1);
        else
         output_low(led1); */

yazdım

sadogan

Alıntı yapılan: centeremr1 - 27 Şubat 2014, 12:06:41
çok sağol değiştirdim değişen birşey yok malesef
/*
if (frek==10)led1_flag^=1;
       if (led1_flag)
       output_high(led1);
        else
         output_low(led1); */

yazdım
Sanırım sorunu dikkatli okumamışım. Tusa basınca led yanacak tekrar aynı tuşa basınca sönecek alığlamışım.
Sorununuza gelince.
Butona basılınca ilgili kodu gönderip ledi yakıyorsunuz. Butonu bırakıncada ledi söndürmek için bir komut gönderip söndürmek seklinde
olmalı.

centeremr1

öylede denedim

şimdi  basınca putc 10 gonderdım  cekınce yanı 0 olunca 100 gonderdım
ama olmadı anlamadım

xoom

ALICI:
frek = getc();
     
  if (frek==10)   output_high(led1);
  else if(frek==11)   output_low(led1);


VERİCİ:
if(input(buton1)==0)
   {
   delay_ms(20);
   putc(10);
    while(input(buton1)!=1);
   putc(11);
   }

centeremr1

Kardeş Allah Razı olsun

bende denemiştim değilse farklı frek gonder dıye ama bır yanlıslık yapmısım demekki, Eline koluna sağlık kardeşim

centeremr1

bu sefer biri yanerken sonraki yanmıyor ( döngüden cıkmıyor ) söndurmem gerekıyor dıgerını yakmak ıcın  olmadı malesef
ben bir baska yollar deneyim