Отговори на тема  [ 11 мнения ] 
Ехо при RS232 комуникация 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Ехо при RS232 комуникация
Здравейте,
Постановката е следната:
Pic 18F6722 , на 32Mhz( 8Mhz кварц и PLL4) , си "приказва" със външно устройство чрез серийна комуникация .
Външното устройство има една линия за комуникация ( двупосочна)
, интерфейса м/у пик-а и у-вото е МC33290( ISO K Line Serial Link Interface)

Протокола е : Пик-а запитва ( чрез 1 байт ) - у-вото отговаря с един байт , и така до безкрай :)

Проблема ми е : Получава се ехо . Пик-а праща един байт ( примерно 0xFE ) и преминава в към други задачи , като при постъпване на отговор влиза в прекъсване и го прочита. Първия прочетен байт от Пик-а е пак 0xFE и чак след него пристига това което е пратено от външното у-во ( применро 0xЕ5)


Предишната версия на платката беше със 18F458 и със същия итерфейс за връзка , но такова ехо не съм имал. Пращах един байт и прочитах един байт.
Но там не ползвах прекъсване за четенето на отговора и процедирах така : пращам запитването и започва изчакване определено време за отговор.

Проблема за сега съм го изолирал с двойно четене на отговора от у-вото : първия път чета ехото и после това което ми трябва.

Но не ми се вижда добро решение, за това ако някой има идея защо се получава така ще бъда Благодарен за помоща :)

Използвам PIC CCS компилатор , ако е нужно ще пусна и код !


Съб Сеп 03, 2011 9:00 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: Ехо при RS232 комуникация
amdatlon написа:
Но не ми се вижда добро решение, за това ако някой има идея защо се получава така ще бъда Благодарен за помоща :)


Дай ми платката и ще я свържа към моя компютър, за да видя дали външното устройство връща ехо. Ако е така, значи проблема е във външното устройство, а ако не е така, значи проблема е във вътрешното устройство.

_________________
Warriors of the Night, ASSEMBLER!!!


Съб Сеп 03, 2011 11:18 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Ехо при RS232 комуникация
Забравих да спомена че също съм направил симулатор на външното у-во , на компа си . От там със един USB -> RS232 , който е на база FT232RL , отива към ПИК-а .
Наблюдавам трансфера на данни с PortMonNT .
Проблема със сигурност не във външното у-во , то комп на кола :)
ECU .

Най вероятно ехото е от Пик-а и програмата ( и по точно използването на прекъсване за четене на данните ) , тъй като с другия Пик и същите останали компоненти няма ехо !?!


Нед Сеп 04, 2011 12:49 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение Re: Ехо при RS232 комуникация
Според мен ще има ехо. Не ми е ясно само защо на предишната платка с PIC18F458 не си имал. Явно там нещо си объркал ...


Нед Сеп 04, 2011 10:36 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Ехо при RS232 комуникация
bateAz написа:
Според мен ще има ехо. Не ми е ясно само защо на предишната платка с PIC18F458 не си имал. Явно там нещо си объркал ...

Значи да не си блъскам главата повече , явно е нормално :)

Ами и аз се чудя защо на предишната платка нямаше ехо?
То буквално платката и сега е същата , новия пик съм го присадил на мястото на стария ( за тестовете) , и даже сорс кода 99 % е същия . Разликата е само наличието на прекъсване за четене на RS232 канала .

Преди с PIC18F458 си бачкаше нормално, но ми отесня от към програмна памет :P


Нед Сеп 04, 2011 11:31 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Нед Окт 19, 2008 7:26 pm
Мнения: 672
Мнение Re: Ехо при RS232 комуникация
Тва май не е никакво ехо. Най намирисва на объркан софт. Тва че четеш последния изпратен байт и след това четеш върнатия ... виж си буферите ... дали в памета изпрашашия и приемащия буфер не са един след друг и първия да не е терминиран ... Ехо-то е друго , но още не съм срещал хардуерно ехо 8O . Срещал съм устройсва на които ехото може да се изключва, но се прави в програмата.

_________________
Вниманиене съмвишист....ИЙ.


Нед Сеп 04, 2011 12:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 2:21 am
Мнения: 12764
Местоположение: София
Мнение Re: Ехо при RS232 комуникация
Проблемът е "хардуерен" ако може така да се изразя. K-line интерфейсът, обединява RX и TX в обща шина. Каквото изпратиш по TX се получава директно на RX.


Нед Сеп 04, 2011 1:03 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Ехо при RS232 комуникация
E то най вероятно е софта ама какво бъркам , не мога да разбера.
Ползвам стандартен начин за обработка на данните ( CCS ) , не пипам директно паметта.
Последно опростих сорса само за комуникация но проблема остава:

Пълни се буфер при всяко прекъсване и после се чете от него .
Буфера изглежда така

[FE] [E5] [FF] [0C]...........[ ]

Ето кода , тук работи защото чета първо ехото и после нужното.
T.e. мога да чета буфера през една клетка като пропускам ехото , но проблема че го има остава .
Код:
#include <18F6722.h>
#device PASS_STRINGS=IN_RAM   

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or 
#FUSES NOPUT
#FUSES H4
#FUSES NOXINST                  //Extended set extension and Indexed

#use delay(clock=32M )
#use rs232(baud=15625,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8  ,Errors)

#include "ks0108.c"
#include "graphics.c"


//***********************  DEFINE ***********************************/
//*******************************************************************/
#byte pA   =0xF80   //port a   //
#byte pB   =0xF81   //b         //
#byte pC   =0xF82   //c         //
#byte pD   =0xF83   //d         //
#byte pE   =0xF84   //port e   //
#byte pF   =0xF85   //port e   //
#byte pG   =0xF86   //port e   //
// *********************************


#Define  SetConfigPortA     9//100011  //33  100001
#Define  SetConfigPortB     240//255  11110010
#Define  SetConfigPortC    196//1000100 196//196//bx 11000100
#Define  SetConfigPortD     0
#Define  SetConfigPortE     0
#Define  SetConfigPortF     0
#Define  SetConfigPortG     0
//**************************************************


#bit IngSwitch=             pB.4
#bit UPButton=              pB.5
#bit DOWNButton=            pB.6
#bit MENUButton=            pB.7

#bit Led=                   pE.6
#bit LCD_Power=             pF.7     



  #define BUFFER_SIZE 32

BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;       

#define bkbhit (next_in!=next_out)   
     
       
//***********************************
#int_rda
void serial_isr() {
   int8 t;

   buffer[next_in]=getc();
   t=next_in;
  if (++next_in ==BUFFER_SIZE){ next_in=0; }

  if(next_in==next_out)
     next_in=t;           // Buffer full !!
     
}
//************************************

//***********************************
int WaitComGetc( ) {
   BYTE c;
   int16 count=10000;

   while((!bkbhit  )  ) ;
   
   
   c=buffer[next_out];

   if (++next_out ==BUFFER_SIZE)
       {
          next_out=0;
       }
   return(c);
}
//***********************************


//***********************************
void send_break(int16 time_ms)
{
// Disable the UART and send a Break
// for the specified time.
setup_uart(FALSE);
output_low(PIN_C6);
delay_ms(time_ms);

// Re-enable the UART.
setup_uart(TRUE);
set_uart_speed(15625);
}
//***********************************


//*********************************************************************
//Start initialization
void StartInit(void)
{
    int    tempBuff;
  Delay_ms(70);
     // Инициализациа със Break signal
  send_break(1800);
  Delay_ms(200);
  delay_ms(1000);


  putc (0xFE );    // Запитване
   
  //  Тук tempBuff =0xFE -Това е първия прочетен байт (ехо )         
   tempBuff=WaitComGetc( );

  // Тук tempBuff =0xE5  -Това е Вярния отговор
     tempBuff=WaitComGetc( );

  if (tempBuff==0xE5)
           
      {
        delay_ms(5 );
         putc (0xFF );  // Второ запитване
                 
        WaitComGetc( );   // tempBuff =0xFF  -Тук пак ехо
                 
               // tempBuff =0x0C - Тук пак верния байт от  PC       
        if (WaitComGetc( )==0x0C) 
                 
                   {
                   
                  ShowMessage("Connecton OK",1,1,1000,1);
                 
                 
                   }
                 else
                {
                     ShowMessage("Wrong Reply",1,1,1000,1);
                }
                   
                   While((UPButton!=0) && (DOWNButton!=0) && (MENUButton!=0))
                  {  Delay_ms(10);  }
   
                   
                   
                   
                   
              }
}//**********************************************************



Void MAIN (){
         char Message[21];
     
     set_tris_b(SetConfigPortB);
     set_tris_a(SetConfigPortA);
     set_tris_d(SetConfigPortD);
     set_tris_e(SetConfigPortE);
     set_tris_f(SetConfigPortF);
     set_tris_g(SetConfigPortG);

//LCD Init
     
      delay_ms(20 );
      Glcd_init(on);   
      delay_ms(20 );

      glcd_fillScreen(off);
  //LCD Init       

       delay_ms(500 );

       enable_interrupts(INT_RDA);  // turn on interrupts
       enable_interrupts(GLOBAL);
       

While(true)
{
     
             StartInit();
     
   }
   
} //End******   





Нед Сеп 04, 2011 1:07 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Ехо при RS232 комуникация
itso.t написа:
Проблемът е "хардуерен" ако може така да се изразя. K-line интерфейсът, обединява RX и TX в обща шина. Каквото изпратиш по TX се получава директно на RX.

Това го забелязах от страна на PC-то като писах симулатора, там си има ехо и до колкото разбрах е нормално за този интерфейс , но не мислех че и от към ПИК-а е така :?


Нед Сеп 04, 2011 1:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Ехо при RS232 комуникация
Ами то няма как да нямаш ехо ако RX и TX са обединени. И понеже приемника работи независимо от предавателя, така квото пратиш дирекшън ти влиза в RX-а и на стоп бита си генерира прекъсване :). И тъй като преди не си ползвал прекъсването (а то се генерира точно когато свърши предаването) просто си "изтървал" ехото.


Нед Сеп 04, 2011 6:18 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: Ехо при RS232 комуникация
Благодаря на всички за разясненията :)
явно така ще да е работата .
Явно съм останал с убеждението че ISO k-line драйвера разделя Rx и Tx ( да са независими ) от ПИК-а до него .
Но май бъркам :oops:


Нед Сеп 04, 2011 8:15 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни