| Автор |
Съобщение |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 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 |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: Ехо при RS232 комуникация
Дай ми платката и ще я свържа към моя компютър, за да видя дали външното устройство връща ехо. Ако е така, значи проблема е във външното устройство, а ако не е така, значи проблема е във вътрешното устройство.
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Съб Сеп 03, 2011 11:18 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Ехо при RS232 комуникация
Забравих да спомена че също съм направил симулатор на външното у-во , на компа си . От там със един USB -> RS232 , който е на база FT232RL , отива към ПИК-а . Наблюдавам трансфера на данни с PortMonNT . Проблема със сигурност не във външното у-во , то комп на кола  ECU . Най вероятно ехото е от Пик-а и програмата ( и по точно използването на прекъсване за четене на данните ) , тъй като с другия Пик и същите останали компоненти няма ехо !?!
|
| Нед Сеп 04, 2011 12:49 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: Ехо при RS232 комуникация
Според мен ще има ехо. Не ми е ясно само защо на предишната платка с PIC18F458 не си имал. Явно там нещо си объркал ...
|
| Нед Сеп 04, 2011 10:36 am |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Ехо при RS232 комуникация
Значи да не си блъскам главата повече , явно е нормално  Ами и аз се чудя защо на предишната платка нямаше ехо? То буквално платката и сега е същата , новия пик съм го присадил на мястото на стария ( за тестовете) , и даже сорс кода 99 % е същия . Разликата е само наличието на прекъсване за четене на RS232 канала . Преди с PIC18F458 си бачкаше нормално, но ми отесня от към програмна памет 
|
| Нед Сеп 04, 2011 11:31 am |
|
 |
|
RM
Ранг: Почетен член
Регистриран на: Нед Окт 19, 2008 7:26 pm Мнения: 672
|
 Re: Ехо при RS232 комуникация
Тва май не е никакво ехо. Най намирисва на объркан софт. Тва че четеш последния изпратен байт и след това четеш върнатия ... виж си буферите ... дали в памета изпрашашия и приемащия буфер не са един след друг и първия да не е терминиран ... Ехо-то е друго , но още не съм срещал хардуерно ехо  . Срещал съм устройсва на които ехото може да се изключва, но се прави в програмата.
_________________ Вниманиене съмвишист....ИЙ.
|
| Нед Сеп 04, 2011 12:44 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12764 Местоположение: София
|
 Re: Ехо при RS232 комуникация
Проблемът е "хардуерен" ако може така да се изразя. K-line интерфейсът, обединява RX и TX в обща шина. Каквото изпратиш по TX се получава директно на RX.
|
| Нед Сеп 04, 2011 1:03 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 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 |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Ехо при RS232 комуникация
Това го забелязах от страна на PC-то като писах симулатора, там си има ехо и до колкото разбрах е нормално за този интерфейс , но не мислех че и от към ПИК-а е така 
|
| Нед Сеп 04, 2011 1:20 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Ехо при RS232 комуникация
Ами то няма как да нямаш ехо ако RX и TX са обединени. И понеже приемника работи независимо от предавателя, така квото пратиш дирекшън ти влиза в RX-а и на стоп бита си генерира прекъсване  . И тъй като преди не си ползвал прекъсването (а то се генерира точно когато свърши предаването) просто си "изтървал" ехото.
|
| Нед Сеп 04, 2011 6:18 pm |
|
 |
|
amdatlon
Ранг: Почетен член
Регистриран на: Чет Мар 19, 2009 8:33 pm Мнения: 804
|
 Re: Ехо при RS232 комуникация
Благодаря на всички за разясненията  явно така ще да е работата . Явно съм останал с убеждението че ISO k-line драйвера разделя Rx и Tx ( да са независими ) от ПИК-а до него . Но май бъркам 
|
| Нед Сеп 04, 2011 8:15 pm |
|
|