Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATMEGA328P + CAN BUS (Arduino - pytanie laika)

Alberto_Eco 03 Mar 2017 13:08 8352 22
  • #1
    Alberto_Eco
    Level 10  
    Witajcie,

    Wybaczcie dziecinne pytanie, ale dopiero zaczynam przygodę z elektroniką (choć podobno szybko łapię :) ). Potrzebuję zbudować możliwie, maksymalnie prosty układ czytający komunikaty z sieci CAN BUS.

    Cały bajer polega na tym, że chcę podłączyć nieoryginalne radio w aucie, które ma tylko +12 stałe, GND i CAN. Postanowiłem więc zbudować konwerter, który byłby podłączony pomiędzy oryginalną instalację, a niefabryczne radio i czytał komunikaty z sieci CAN o włączeniu i wyłączeniu stacyjki (wzbudzenie i uśpienie radia). Mikrokontroler miałby sterować przekaźnikiem, który podawał by +12 po otrzymaniu sygnału wzbudzenia i odcinał by je po otrzymaniu sygnału uśpienia.



    Mam dwa klocki: moduł Arduino UNO R3 oparty o ATMEGĘ 328P na podstawce oraz CAN BUS Shield dla Arduino. Podłączyłem się tym do auta, przeczytałem, nauczyłem się chwytać to, co mi potrzebne i na płytce testowej działa.

    Kłopot jest taki, że chciałbym wytrawić sobie własną płytkę, na której poskładał bym wszystkie potrzebne elementy i żeby nie zajmowało to drugie tyle miejsca, co radio.

    Czytałem inne tematy na Forum odnośnie Atmegi i CAN i coś tam niby jest, ale żem laik - nie do końca ogarniam co mi w rzeczywistości jest potrzebne i jak to wszystko razem podłączyć. Jedyne, co ogarnąłem, to że potrzebuję taki zestaw: AT90CAN128 + PCA82C250. Czy dobrze rozumiem, że CAN auta podłączam bezpośrednio pod PCA82C250, a jego z kolei łączę przez TX/RX z AT90CAN128 i powinno działać?

    Z góry dziękuję za podpowiedzi i wyrozumiałość dla 'nooba' ;)

    Tomek
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Helpful post
    #2
    Mad Bekon
    Level 23  
    Dobrze, rozumujesz. Mając mikrokontroler z wbudowaną obsługą CAN potrzebujesz tylko transcievera CAN.
    Aczolwiek skoro mowisz o małym rozmiarze, może jakiś mniejszy procesor. Jeśli koniecznie AVR to może np coś ala ATMEGA16M1?
    Tańszy i mniejszy.

    A z ciekawości zapytam, jakie auto? Też coś podobnego rozkminiałem, ale skończyło się tylko na łapaniu sygnałów z przycisków kierownicy.
  • #3
    Alberto_Eco
    Level 10  
    Hej,

    Dziękuję za odpowiedź. Zanim napisałem tego posta - przejrzałem opisy i przykłady dla tego scalaka, o którym piszesz. Faktycznie - wygląda zdecydowanie lepiej (gabarytowo, no i jest przewlekany, a nie smd). Problem tylko jest taki, że wszystkie schematy komunikacji z siecią CAN oparte są o połączenie MCP2510 + MCP2551, a jeśli dobrze zrozumiałem - stosując PCA82C250 - mogę wyeliminować układ MCP2510. Nie wiem tylko jakbym miał go podłączyć bezpośrednio do ATMEGA16M1, gdyż PCA ma pinout taki jak MCP2551, a ATMEGA wymaga jakby hmm, bardziej skomplikowanego podłączenia?

    Jak już wspominałem - jestem w tym temacie kompletnie zielony ;)

    Co do auta to mam trzy do dyspozycji. Pacjentem zero jest Fiat Panda II (i III chyba też bo tam taka sama komunikacja jest). Dodatkowo mam Passata B6 i Peugetoa 307. Cały układ ma być zastosowany w Pandzie, jednak mając innych pacjentów - mógłbym opracować coś 'dla dobra publicznego' i po prostu udostępnić. Jednak najpierw muszę wiedzieć jak złożyć cokolwiek, co odczyta CAN w ogóle :D

    Mówisz, że rozkminiałeś - masz może jakieś notatki albo - najlepiej - schemat? :D Wiem, żem pazerny, ale jak się nie ma w głowie, to trzeba kombinować :D

    P.S. Już po napisaniu tego posta znalazłem jeszcze taki schemat:
    ATMEGA328P + CAN BUS (Arduino - pytanie laika)

    Znalazłem też biblioteki do MCP2515 pod Arduino uno, którym dysponuję. Może by w tą stronę pójść?
  • #4
    Mad Bekon
    Level 23  
    Jak uda Ci sie znalezc jakis maly shield z mcp2515 pod arduino nano to moze warto, jak nie to atmega plus transciever.
    Do atmega serii m1 podpinasz tylko transciever, bo logike taka jak mcp2515 ma juz w sobie. Nie wiem jak bardzo zaawansowana, mozliwosci filtracji pakietow danych itd, ale na twoje potrzeby wychwycenia konkretnych ramek raczej wystarczy. Wiecej moze sie wypowiedziec ktos kto CAN realizowal na tym procesorze.
  • #5
    Alberto_Eco
    Level 10  
    No właśnie pod atmegę znalazłem w zasadzie tylko jedno rozwiązanie - nadal wymagające trzech elementów układanki:
    ATMEGA328P + CAN BUS (Arduino - pytanie laika)

    Sam już nie wiem jak to ogarnąć... :( Nie znalazłem nic o Atmega M1.
  • Helpful post
    #6
    dasej
    Level 32  
    Witam.

    A szukałeś? Link do dokumentacji M1.

    Cena procesora M1 to około 25 zł.
  • #7
    Alberto_Eco
    Level 10  
    Dziękuję.

    Jak pisałem - dopiero zaczynam tą zabawę i... nie pomyślałem nawet, żeby poszukać dokumentacji.

    Jeśli dobrze zrozumiałem to wyjścia z PCA podłączam bezpośrednio do RXCAN i TXCAN w Atmedze i gotowe? Faktycznie - wygląda prosto :)

    Przy okazji - jak patrzyłem na tą dokumentację - czy na prawdę te procesory M1 występują tylko w wersji SMD (nie ma przewlekanych)?

    T.
  • #8
    dasej
    Level 32  
    W miarę wzrostu apetytu na nowsze technologie trzeba się dostosować.
  • #9
    Alberto_Eco
    Level 10  
    Może i tak jak mówisz - trzeba się będzie dostosować.

    Tymczasem poczytałem, pooglądałem, pomyślałem i wymyśliłem takie coś:
    ATMEGA328P + CAN BUS (Arduino - pytanie laika)

    Tak by wyglądała płytka od tego cuda:
    ATMEGA328P + CAN BUS (Arduino - pytanie laika)

    Moglibyście, szanowni koledzy, rzucić proszę okiem, czy takie coś ma sens i ma prawo działać? :)

    Tomek
  • #11
    Karaczan
    Level 41  
    A twoje radio nie czyta np dodatkowo nr VIN, wł. świateł i innych pierdół?
    Co to za radio? Może prościej zrobić w nim CAN OFF.
    Wtedy robi się z tego w miarę "analogowe" radio.
    Np Fiatowskie radia tak mają. Jedna z linii CAN B staje się wtedy "analogowym" ACC.

    Generalnie czeka cię od groma analizy komunikatów. Do tego nie musi być dostępna jakakolwiek dokumentacja (nawet hobbystyczna przez reverse engeneering), albo CAN nie musi trzymać żadnego standardu (np właśnie Fiat w CAN Comfort).

    Pomijając oczywiście już kwestie softwareowe mikrokontrolera. Żeby to chciało zawsze bezbłędnie czytać/nadawać...

    Nie jestem przekonany czy głupie radio jest warte tyle zachodu ;)

    EDIT:
    Nie doczytałem. Radio bez CAN, auto z CAN.
    Doprowadź sobie ACC np z zapalniczki. Ale jak lubisz się bawić droga wolna... Też lubię :D
    Życzę by ci auto głupawki na CANie nie dostało! ;)
  • #12
    Alberto_Eco
    Level 10  
    Co do miniaturyzacji - płytka przewiduje miejsce na jeszcze drugi przekaźnik, od podświetlenia, ale to zrobię w przypadku, gdy mój projekt w ogóle ruszy...

    Tak. Chodzi o podłączenie radia bez CAN do instalacji z CAN i nie - nie chcę ciągnąć przewodu z zapalniczki bo a) to zbyt proste, b) nie chcę w żaden sposób ingerować w instalację auta.

    W tej chwili, na biurku, mam instalację od VW Passata B6, na której eksperymentuję z CANem. Jak się próby powiodą - wezmę się za ogarnięcie tematu Fiata (mając już gotowy projekt i sprawdzony, że działa).

    Tymczasem - prośba do bardziej ogarniętych w temacie - czy mój schemat ma sens? Powinno to zadziałać jeśli poskładam wszystko jak narysowałem?

    T.
  • #13
    Karaczan
    Level 41  
    Zajmij się od razu CANem docelowego auta. Analiza ramek innego samochodu nie ma najmniejszego sensu jeśli interesuje cię jeden projekt.
    Tego jest dużo do nauki. Różne prędkości, 11/29bit, różne protokoły, ten chce by na końcach magistrali było 60/120ohm, inny będzie miał z tym problem...

    Tak się składa że mam Sniffera CAN zbudowanego na Arduino i MCP2551 opartego o LAWICEL CAN232. Co działa na stole nie koniecznie się sprawdza w aucie.
  • #14
    Alberto_Eco
    Level 10  
    Karaczan wrote:
    Zajmij się od razu CANem docelowego auta. Analiza ramek innego samochodu nie ma najmniejszego sensu jeśli interesuje cię jeden projekt.
    Tego jest dużo do nauki. Różne prędkości, 11/29bit, różne protokoły, ten chce by na końcach magistrali było 60/120ohm, inny będzie miał z tym problem...

    Tak się składa że mam Sniffera CAN zbudowanego na Arduino i MCP2551 opartego o LAWICEL CAN232. Co działa na stole nie koniecznie się sprawdza w aucie.


    ja mam CAN shielda standardowego (MCP2515+MCP2551) i nim chcę tylko zczytać CAN i go rozgryźć. Projekt hardware'u jest jakby prowadzony równolegle i na koniec będę chciał wziąć opracowany soft na shield'dzie, wrzucić go do hardware'u i stworzyć z tego jakąś logiczną całość :)

    Zrobię jak mówisz - pójdę do auta i porobię zrzuty sobie z tego, co CAN wypluwa, a potem postaram się jakoś do tego przystosować :)

    P.S. potrzebuję jednak potwierdzenia, czy dobrze wykminiłem, że driver CAN'a podpinam bezpośrednio pod TX/RX CAN w Atmedze i nic poza tym...
  • #15
    Karaczan
    Level 41  
    Nie bawiłem się nigdy AVR z wbudowanym CANem więc nie pomogę zbytnio.
    Na niektórych schematach z PICami linie RXD i TXD są podłączone przez oporniki 4.7k.
    Musisz przepatrzeć dokładnie datasheety jakie są poziomy sygnałów.

    BTW jakim softem łapiesz i analizujesz ramki?
  • #16
    Alberto_Eco
    Level 10  
    No właśnie - jedyne podłączenie jakie znalazłem to takie, jak na schemacie w trzecim poście w tym wątku. Dlatego nie wiem czy będzie dobre, czy nie...

    Co do softu: Putty i Notepad++ ;)
  • #18
    Alberto_Eco
    Level 10  
    Dzięki za podpowiedź.

    Udało mi się ogarnąć temat (choć jeszcze nie do końca) na bazie ATMEGI328 + MCP2515 + MCP2551. Posklejałem to do kupy i nawet działa choć mam jeszcze problemy:
    - zarówno ATMEGA328 jak i MCP2515 nie chcą działać z jeśli za zewnętrznymi rezonatorami dodaję kondensatory. Kolega mi podpowiedział, że 22u to zdecydowanie za dużo i żebym dał 22p, ale chwilowo nie mam takich pod ręką, więc nie sprawdzę. Co ciekawe - układ działa bez tych kondensatorów, więc na testy na razie zostawiam jak jest,
    - na płytce testowej - układ odbiera wiadomości CAN, ale ich nie wysyła (niby zapala się dioda podłączona pod TX, ale drugi CAN shield nie otrzymuje tych wiadomości w ogóle.

    Niestety mam tylko jedno arduino i zawsze drugi procek (na płytce stykowej) muszę mieć podłączony pod serial TX/RX przez oporniki. Może tu tkwi problem... Z drugiej zaś strony - nie chcę kupować drugiego arduino dla jednego projektu...

    Ostatnio cierpię na chroniczny brak czasu, więc prace przesuwają się bardzo powoli :( Na pewno się podzielę z Wami jak coś wykminię :)
  • #19
    Samuraj
    Level 35  
    Jeśli chodzi o soft to polecam CANHacker. Dostępne są wsady dla PIC'a oraz AVR'a
    Dodatkowo dostępny jest pełny protokół więc można sobie samemu napisać wsad.
    Program umożliwia odbiór oraz wrzucanie ramek na magistralę.
  • #20
    Alberto_Eco
    Level 10  
    Samuraj wrote:
    Jeśli chodzi o soft to polecam CANHacker. Dostępne są wsady dla PIC'a oraz AVR'a
    Dodatkowo dostępny jest pełny protokół więc można sobie samemu napisać wsad.
    Program umożliwia odbiór oraz wrzucanie ramek na magistralę.


    dziękuję - chętnie poczytam szczególnie, że piszesz, że działa też na avr :)
  • #21
    Samuraj
    Level 35  
    Działa na 100%, nawet wczoraj kończyłem projekt na ATmega168 + MCP2515 + JTA1050
    O wiele łatwiej jest na STM32 + JTA1040 ale każdy wybiera co komu pod ręką.
  • #22
    Karaczan
    Level 41  
    Jest jeszcze tinyCAN, też pracuje z tym wsadem.
    Ale CANHacker chyba najlepszy