Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

moduł CAN w 18f2580 - dziwne zachowanie

Marico 18 Wrz 2011 12:39 2590 3
  • #1 18 Wrz 2011 12:39
    Marico
    Poziom 19  

    Witam,
    zbudowałem testową magistralę CAN składającą się z dwóch nodów:
    Node1 18f2520 + "zewnętrzny" CAN mcp2515 + PCA82C250 jako transceiver
    Node2 18f2580 (wbudowany CAN) + mcp2551 jako transceiver

    Oba nody skonfigurowane na 500kbs, wymiana danych działa (bez błędów) w obie strony. Node1 używa opensource'oswą bibliotekę znalezioną w sieci. Node2 używa bibliotekę microchipa (AN738).

    Node1 wcześniej używałem jako snifera do samochodu, dobrze przetestowany, działa poprawnie. Postanowiłem układ uprościć (skoro jest pic z wbudowanym CAN'em), stąd postanowiłem przetestować układ 18f2580. No i właśnie ów układ
    zachowuje się dziwnie. Pracuje w prostej pętli używając funkcje z AN738 (pseudo kod):

    1. sprawdź czy jest komunikat CAN, jeśli jest wyświetl payload via usart
    2. wyślij predefiniowany komunikat CAN (ten sam za każdym razem)
    3. goto 1


    Node1 pracuje wyłącznie jako odbiornik (w trybie normal), sprawdza w pętli czy pojawiają się komunikaty.
    Gdy Node 2 wyśle komunikat (pkt 2), Node1 odbiera go. Natomiast Node2 gdy "wraca" w pętli do pkt 1 (po wysłaniu pierwszej ramki) "widzi" własną, wysłaną wcześniej ramkę. Dlaczego tak się dzieje?
    MCP2515 pracując w takim samym "trybie" nigdy nie odbierał wysłanych przez siebie ramek (oczywiście w trybie normal). Przejrzałem kod biblioteki AN738 i nie ma tam niczego podejrzanego na pierwszy rzut oka, prosta implementacja, która wydaje się prawidłowa.

    0 3
  • #2 18 Wrz 2011 14:10
    63404
    Użytkownik usunął konto  
  • #3 18 Wrz 2011 16:22
    94075
    Użytkownik usunął konto  
  • #4 18 Wrz 2011 18:42
    Marico
    Poziom 19  

    Biblioteka do 2515, którą używam po inicie ustawia filtry w tryb "akceptuj" wszystko. Tak samo jak gotowiec (domyslam się, że masz na myśli AN738). Właśnie problem w tym dlaczego mcp2515 przy wyłączonych filtrach nie odbiera swoich ramek a 2580 w tej samej konfiguracji filtrów odbiera?
    Szczerze mówiąc zasiałeś we mnie zwątpienie czy faktycznie konfiguracja jest prawidłowa, gdzieś tam w domyśle zakładałem (ale teraz już nie jestem tego pewiem), że w CAN node nie może odebrać swoich ramek (z wyjątkiem trybu loopback). AN738 był pisany za czasów 18f258, być może jest jakaś niekompatybilność. Dziwne jest dla mnie to, że microchip przy datasheetach pic18f2580 podaje przykład bilioteki w asamblerze (AN853) zamiast wspomnieć o ostniejącej bibliotece w C (łatwiejszej do portowania)....

    Dodano po 1 [godziny] 14 [minuty]:

    Problem rozwiązany, okazało się, że ustawienie bitów RXM1 na wartość 11 w rejestrach RXB*CON powoduje odbiór wszystkich komunikatów, nie tylko błędnych ale i własnych (o czym datasheet nie wspomina wprost). Ustawienie tych bitów na 00 w moim przypadku rozwiązuje problem.
    Dzięki za sugestie, zmobilizowały mnie do dokładnego sprawdzenia zgodności kodu z datasheetem.

    0