witam, mamy powazny problem z ktorym nie mozemy ruszyc(jestesmy z cana zieloni, a musimy to zrobic).
otoz:
mam 2 pudelka (niestety nie znam ich nazwy, prawdopodobnie skonstruowane na potrzeby uczelni), posiadają po dwa gniazda obslugujace CAN-a, i teraz musimy pokazac jakakolwiek transmisje pomiedzy pudelkami z wykorzystaniem CAN-a,
pudelka posiadaja 2 - linijkowy wyswietlacz, oraz 8 diod wraz z przelacznikiem do kazdej z nich.
zaczelismy od przygotowania kabelka i tu 1 problem,
polaczylismy kabelki jak na zalaczonym obrazku,
jak sie okazalo do 1 z pudelek nie trzeba zasilania bo widocznie poprzez zyle zasilania zasila go 2 pudelko, czy jest ok czy tej zyly lepiej nie podlaczac a uzyc zwyklego zasilania kazdego z pudelek?
a wiec zaladowalismy przykladowy program i nic nie dzialalo,
wiec sprobowalismy skrosowac kabelki CAN0-H i CAN0-L aby bylo cos w rodzaju skretki skrosowanej jak sie np 2 PC lacza poprzez karty sieciowe, rowniez nie dzialalo.
a wiec odlutowalismy wszystkie kabelki poza zylami z danymi, i probowalismy je podlaczyc normalnie i w sposob skrosowany, rowniez komunikacja nie zadzialala.
i tu wazne, ze byc moze program, ktory mial testowac komunikacje moze byc nie poprawny.
i w zwiazku ztym duza prosba o pomoc:
w jaki poprawny sposob nalezy podlaczyc poszczegolne zyly do DB-9 aby istniala wzajemna komunikacja pomiedzy dwoma pudelkami?
czy moze jednak ktorys z sposobow, ktore probowalismy, byl poprawny a jest to kwestia poprawnosci pliku.
prosilbym rowniez moze o jakies przykladowe programy pisane w C testujace komunikacje, ktorych , po rozwiazniu probelmu z kabelkiem, moglibysmy uzyc do testowania i jako podstawe do rozbudowy.
zamieszczam rowniez tresc pliku, ktory otrzymalismy od prowadzacego(przy czym zaznaczyl, ze on sam nie wie czy to dziala):
bylbym bardzo zobowiazany jesli ktos moglby pomoc oraz zamiescic lub podeslac link do przykladowych programow testujacych komunikacje,
nie mamy do kogo zwrocic sie z tym problemem.
otoz:
mam 2 pudelka (niestety nie znam ich nazwy, prawdopodobnie skonstruowane na potrzeby uczelni), posiadają po dwa gniazda obslugujace CAN-a, i teraz musimy pokazac jakakolwiek transmisje pomiedzy pudelkami z wykorzystaniem CAN-a,
pudelka posiadaja 2 - linijkowy wyswietlacz, oraz 8 diod wraz z przelacznikiem do kazdej z nich.
zaczelismy od przygotowania kabelka i tu 1 problem,
polaczylismy kabelki jak na zalaczonym obrazku,
jak sie okazalo do 1 z pudelek nie trzeba zasilania bo widocznie poprzez zyle zasilania zasila go 2 pudelko, czy jest ok czy tej zyly lepiej nie podlaczac a uzyc zwyklego zasilania kazdego z pudelek?
a wiec zaladowalismy przykladowy program i nic nie dzialalo,
wiec sprobowalismy skrosowac kabelki CAN0-H i CAN0-L aby bylo cos w rodzaju skretki skrosowanej jak sie np 2 PC lacza poprzez karty sieciowe, rowniez nie dzialalo.
a wiec odlutowalismy wszystkie kabelki poza zylami z danymi, i probowalismy je podlaczyc normalnie i w sposob skrosowany, rowniez komunikacja nie zadzialala.
i tu wazne, ze byc moze program, ktory mial testowac komunikacje moze byc nie poprawny.
i w zwiazku ztym duza prosba o pomoc:
w jaki poprawny sposob nalezy podlaczyc poszczegolne zyly do DB-9 aby istniala wzajemna komunikacja pomiedzy dwoma pudelkami?
czy moze jednak ktorys z sposobow, ktore probowalismy, byl poprawny a jest to kwestia poprawnosci pliku.
prosilbym rowniez moze o jakies przykladowe programy pisane w C testujace komunikacje, ktorych , po rozwiazniu probelmu z kabelkiem, moglibysmy uzyc do testowania i jako podstawe do rozbudowy.
zamieszczam rowniez tresc pliku, ktory otrzymalismy od prowadzacego(przy czym zaznaczyl, ze on sam nie wie czy to dziala):
/**********************************************
* | Przyklad obslugi magistrali CAN
* | z bibloteki BG.lib
* |===========================================
* | Firma : (c)BigTronic
* | Autor : R.Szylinski (rszylinski@poczta.onet.pl)
* | Data : 06-03-26
* | Wersja : 0.00
* | Zbiór : EX_CAN.c
* | uP : 80C390
* | Model : LARGE
*----------------------------
* Zalozenia :
* - Program wysyla co jakis czas domyslne ramki
* na oba interfejsy
* - odbiera ramki CAN 2.0B
* - robi za mostek gdy obierze ramke z interfejsu 0
* wysyla na interfejs 1
* - robi za mostek gdy obierze ramke z interfejsu 1
* wysyla na interfejs 0
*/
#include "HardWare.h"
#include "BIOSi.h"
#include "CAN0.h"
#include "CAN1.h"
void putHex2B(char Pos, char Data ) {
putchar( aRS ); putchar( Pos );
}
void putHexMem( char Pos, void *Buf, char Size ) {
putchar( aRS ); putchar( Pos );
}
void DispMsg( TCANmsg xdata *Msg) {
putHex2B( dLine1+3, Msg->ID0 );
putHex2B( dLine1+5, Msg->ID1 );
putHex2B( dLine1+7, Msg->ID2 );
putHex2B( dLine1+9, Msg->ID3 );
if( Msg->Size ) putHexMem( dLine2, Msg->Data, Msg->Size );
}
void XRAMclear(void) {
byte xdata *Mem =0;
do { *Mem =0; } while( (word)(++Mem) & 0x8000 == 0 );
}
void main(void) {
xdata TCANmsg Msg;
TBT BT;
bit bOk;
dword Cnt =0;
/* Enable access to P4CNT */
TimedAccessProtected();
P4CNT =0; /* P4.0-7 as IO */
Serwis_Blik();
XRAMclear();
CAN0_Init();
/* z ponizszych ustawien */
/* przy zastosowaniu kwarcu 18,432MHz */
/* wychodzi predkosc na CAN Bauderate =102406bps */
BT.SJW = 1;
BT.BPR = 10;
BT.SMP = 1;
BT.TSEG2 = 3;
BT.TSEG1 = 5;
CAN0_Setup( &BT, 1 );
CAN0_Filter( 1, 0xFFFF, 0xFFFF );
CAN1_Init();
CAN1_Setup( &BT, 1 );
CAN1_Filter( 1, 0xFFFF, 0xFFFF );
enable();
while(1) {
if( Cnt ) Cnt--;
else {
Cnt =10000;
/* wyslanie domyslnej ramki na oba interfejsy */
/* ramka w formacie CAN2.0B */
Msg.ID0 =0x12; Msg.ID1 =0x34; Msg.ID2 =0x56; Msg.ID3 =0x78;
Msg.EX_ST =1;
Msg.Data[0] ='C';
Msg.Data[1] ='A';
Msg.Data[2] ='N';
Msg.Data[3] ='0';
Msg.Size =4;
CAN0_MsgOut(&Msg);
Msg.Data[3] ='1';
CAN1_MsgOut(&Msg);
}
if( (bOk =CAN1_MsgIn(&Msg)) ) {
CAN0_MsgOut(&Msg);
Serwis_Blik();
DispMsg( &Msg);
Cnt =10000;
}
if( (bOk =CAN0_MsgIn(&Msg)) ) {
CAN1_MsgOut(&Msg);
DispMsg( &Msg);
Serwis_Blik();
Cnt =10000;
}
}
}
bylbym bardzo zobowiazany jesli ktos moglby pomoc oraz zamiescic lub podeslac link do przykladowych programow testujacych komunikacje,
nie mamy do kogo zwrocic sie z tym problemem.
