Witam Panow, chcialem dodac do mojego urzadzenia modul CAN, aby moglo sie komunikowac z moim sterownikiem silnika i wysylac do niego potrzebne mu informacje. Napotkalem kilka problemow, ktore w miedzy czasie rozwiazalem. Miedzy innymi musialem wymienic kwarc na plytce MCP, bo chyba byl uszkodzony i przez to nie moglem nawiazac komunikacji z MCP. Napisalem na bazie pdfa z interenetu o SPI wlasna funckcje programowego SPI na porcie C wykorzystujac biblioteki do MCP, ktore opublikowal uzytkownik SunRiver (bardzo za nie dziekuje). Poprawilem w funckji inicjacji mcp w pliku mcp2515.c ustawianie rejetrow CNF1, CNF2, CNF3. A kolega Gembcior pomogl mi stworzyc funkcje wysylajaca i odbierajaca 29 bitowe ID. Do rzeczy:
MCP sie inicjuje, odpowiada poprawnie na zapytanie o rejestr CNF3, na monitorku pokazuje mi sie MCP aktywny. Moj sterownik wysyla po CANIE reqeusty z ID, w ktorym jest zawarte co chce dostac, gdzie, do jakiego id i od jakiego id.... (bylem w stanie komunikaty zarejestrowac analizatorem stanow logicznych i rozkodowac). I tu zonk. bo po pierwsze komunikaty roznia sie od zalozonych i wyliczonych przeze mnie. pola danych tez wygladaja inaczej. Napisalem watek na forum od stewonika silnika i koledzy napisali mi, ze id wysylane sa poprawne i zgadzaja sie z moimi zalozeniami teoretycznymi.
Komunikaty odebrane: ID 0x00088438, Data: 0x07, 0x0D, 0x08; ID: 00288438, Data: 0x07, 0x0E, 0x08.
Wyliczenia teoretyczne: ID: 0x00094038, data: 0x07, 0x00, 0x48 (bit 4 nie uzywany); ID: 0x00294038, data: 0x07, 0x01, 0x44.
Przypuszczam, ze zle zrozumialem ramke z 29bitowym ID.... czy ktos moglby mi to wyjasnic?
Dodatkowo meczylem chlopakow o ustawienia CAN-a i bit timings, bo moj MCP nie odbiera nic z sieci CAN. jedyne co uzyskalem, to predkosc przesylu 500 kbps. Nic innego nie sa mi w stanie powiedziec.
Programowe SPI dziala poprawnie, komunikaty przeslane do MCP pokrywaja sie z tym co jest w kodzie w funkcji inicjujacej MCP.
Ponizej zrzuty ekrany z analizera stanow logicznych dla programowego SPI i dla szyny CAN


W kodzie ponizej zmienilem zakomentowane linijki na moje z write register. Z tego co rozumiem, to mam wlaczone przerwania i jak cos sie pojawi w buforze RX0 czy RX1 to na pinie INT pojawi sie stan niski, a maski akceptacji sa wylaczone i powinien odbierac wszystko, a wyglada ze bufor jest pusty :/, bo pin INT nigdy nie przyjmuje stanu niskiego. Dodam, ze na odpowiednim PINIe w atmedze mam wlaczony pull up.
Czy ktos moglby cos pomoc? jesli potrzebujecie cos wiecej, to piszcie smialo, bo nie wiem co potrzeba

Jeszcze jesli chodzi o extended ID przyjelismy z kolega Gembciorem, ze rejestry zapelniam w MCP od najstarszych bitow 29 bitowego ID.
I z gory przepraszam za brak polskich znakow, lecz laptop jest z niemiecka klawiatura.
pozdrawiam i dziekuje za jakakolwiek pomoc

język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
P.S. nie wiem czemu syntax nie rozpoznaje skladni, wpisalem w miejsce jezyk_programowania C.