<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=18069&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-04-04T20:35:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18069&amp;mode</id>
<entry>
<author><name><![CDATA[kubeq_sq]]></name></author>
<updated>2017-04-04T20:35:32+01:00</updated>
<published>2017-04-04T20:35:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186360#p186360</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186360#p186360"/>
<title type="html"><![CDATA[Re: CAN dla Atmega32a na MCP2515 problemy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186360#p186360"><![CDATA[
Harry, funkcja dziala poprawnie:) i to nie moj twor, tylko zaporzyczony od jakis amerykancow <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Panie Mirku juz poprawione, przepraszam.<br />wkleje jeszcze funkcje odbierajaca ID, bo cos chyba poknocilismy z kolega, bo najstarsze 16 bitow wyrzuca mi same jedynki nie wiedzac czemu, a MCP wnioskujac po wykresie analizera odbiera poprawne ID.<br />:[syntax=c]uint8_t mcp2515_get_message(tCAN *message)<br />{<br />// read status<br />uint8_t status = mcp2515_read_status(SPI_RX_STATUS);<br />uint8_t addr;<br /><br />if (bit_is_set(status,6)) {<br />// message in buffer 0<br />addr = SPI_READ_RX;<br />}<br />else if (bit_is_set(status,7)) {<br />// message in buffer 1<br />addr = SPI_READ_RX | 0x04;<br />}<br />else {<br />// Error: no message available<br />return 0;<br />}<br /><br />RESET(MCP2515_CS);<br />spi_putc(addr);<br /><br />// read id<br />uint8_t temp=0;<br />message-&gt;id  = (uint32_t) spi_putc(0xff) &lt;&lt; 21;<br />temp=spi_putc(0xff);<br />message-&gt;id |= (uint32_t) (temp&gt;&gt;5) &lt;&lt; 18;<br />message-&gt;id |= (uint32_t) (temp &amp; 3) &lt;&lt; 16;<br />message-&gt;id |= (uint32_t) (spi_putc(0xff) &lt;&lt; 8);<br />message-&gt;id |= spi_putc(0xff);<br /><br /><br /><br />// read DLC<br />uint8_t length = spi_putc(0xff) &amp; 0x0f;<br /><br />message-&gt;header.length = length;<br />message-&gt;header.rtr = (bit_is_set(status, 3)) ? 1 : 0;<br /><br />// read data<br />for (uint8_t i=0;i&lt;length;i++) {<br />message-&gt;data&#91;i&#93; = spi_putc(0xff);<br />}<br />SET(MCP2515_CS);<br /><br />// clear interrupt flag<br />if (bit_is_set(status, 6)) {<br />mcp2515_bit_modify(CANINTF, (1&lt;&lt;RX0IF), 0);<br />}<br />else {<br />mcp2515_bit_modify(CANINTF, (1&lt;&lt;RX1IF), 0);<br />}<br /><br />return (status &amp; 0x07) + 1;<br />}[/syntax]<br /><br />czy ktos ma jakies pomysly czemu taksie dzieje? funkcja wyglada na pierwszy rzut oka na poprawna <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2371">kubeq_sq</a> — 4 kwi 2017, o 20:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-04-04T15:23:47+01:00</updated>
<published>2017-04-04T15:23:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186337#p186337</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186337#p186337"/>
<title type="html"><![CDATA[Re: CAN dla Atmega32a na MCP2515 problemy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186337#p186337"><![CDATA[
<div class="quotetitle">kubeq_sq napisał(a):</div><div class="quotecontent"><br />P.S. nie wiem czemu syntax nie rozpoznaje skladni, wpisalem w miejsce jezyk_programowania C.<br /></div><br /><br /><span style="color: #FF0000">Bo kolega nie chce się zastosować do instrukcji która jest na forum już czerwca 2014 roku - proszę poprawić formatowanie w pierwszym poście zgodnie z instrukcją<br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7402.html" >topic7402.html</a><!-- l --></span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 kwi 2017, o 15:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Harry]]></name></author>
<updated>2017-04-04T14:45:33+01:00</updated>
<published>2017-04-04T14:45:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186336#p186336</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186336#p186336"/>
<title type="html"><![CDATA[Re: CAN dla Atmega32a na MCP2515 problemy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186336#p186336"><![CDATA[
Wklej jeszcze raz kod, ale tym razem z małym &quot;c&quot;, bo coś ci chyba ucięło pół kodu.<br />A to co za twór?<br />[syntax=c]for(counter = 8; counter; counter--) <br />{[/syntax]<br />Na moje oko początkującego, to to się nigdy nie wykona, albo ugrzęźnie na tym.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14685">Harry</a> — 4 kwi 2017, o 14:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kubeq_sq]]></name></author>
<updated>2017-04-04T15:27:20+01:00</updated>
<published>2017-04-04T13:36:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186335#p186335</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186335#p186335"/>
<title type="html"><![CDATA[CAN dla Atmega32a na MCP2515 problemy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18069&amp;p=186335#p186335"><![CDATA[
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: <br />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. <br />Komunikaty odebrane: ID 0x00088438, Data: 0x07, 0x0D, 0x08; ID: 00288438, Data: 0x07, 0x0E, 0x08. <br />Wyliczenia teoretyczne:  ID: 0x00094038, data: 0x07, 0x00, 0x48 (bit 4 nie uzywany); ID: 0x00294038, data: 0x07, 0x01, 0x44. <br />Przypuszczam, ze zle zrozumialem ramke z 29bitowym ID.... czy ktos moglby mi to wyjasnic? <br />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. <br />Programowe SPI dziala poprawnie, komunikaty przeslane do MCP pokrywaja sie z tym co jest w kodzie w funkcji inicjujacej MCP.<br /><br />Ponizej zrzuty ekrany z analizera stanow logicznych dla programowego SPI i dla szyny CAN<br /><a href="https://obrazkiforum.atnel.pl/2371/8f817eaa4ffa2a241a732801018ce530.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/2371/8f817eaa4ffa2a241a732801018ce530.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/2371/d1898a23c985162a6be7a5c1ea49fbc6.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/2371/d1898a23c985162a6be7a5c1ea49fbc6.png" alt="Obrazek" /></a><br /><br /><br />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. <br /><br />Czy ktos moglby cos pomoc? jesli potrzebujecie cos wiecej, to piszcie smialo, bo nie wiem co potrzeba <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Jeszcze jesli chodzi o extended ID przyjelismy z kolega Gembciorem, ze rejestry zapelniam w MCP od najstarszych bitow 29 bitowego ID.<br /><br />I z gory przepraszam za brak polskich znakow, lecz laptop jest z niemiecka klawiatura. <br /><br />pozdrawiam i dziekuje za jakakolwiek pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />[syntax=c]uint8_t spi_putc( uint8_t data )<br />{<br /><br />// a byte transfer in (0,0) mode <br />uint8_t counter;<br />for(counter = 8; counter; counter--)<br />{<br />if (data &amp; 0x80)<br />SET(P_MOSI);<br />else<br />RESET(P_MOSI);<br />data &lt;&lt;= 1;<br />SET(P_SCK);     // a slave latches input data bit <br />if (IS_SET(P_MISO))<br />data |= 0x01;<br />RESET(P_SCK);     // a slave shifts out next output data bit <br /><br />}<br />return data;<br /><br />bool mcp2515_init(void)<br />{<br />SET(MCP2515_CS);<br />SET_OUTPUT(MCP2515_CS);<br /><br />RESET(P_SCK);<br />RESET(P_MOSI);<br />RESET(P_MISO);<br /><br />SET_OUTPUT(P_SCK);<br />SET_OUTPUT(P_MOSI);<br />SET_INPUT(P_MISO);<br /><br />SET_INPUT(MCP2515_INT);<br />SET(MCP2515_INT);<br /><br />// active SPI master interface<br />SPCR = (1&lt;&lt;SPE)|(1&lt;&lt;MSTR) | (0&lt;&lt;SPR1)|(1&lt;&lt;SPR0);<br />SPSR = 0;<br /><br />// reset MCP2515 by software reset.<br />// After this he is in configuration mode.<br />RESET(MCP2515_CS);<br />spi_putc(SPI_RESET);<br />SET(MCP2515_CS);<br /><br />// wait a little bit until the MCP2515 has restarted<br />_delay_us(10);<br /><br />// load CNF1..3 Register<br />RESET(MCP2515_CS);<br />/*spi_putc(SPI_WRITE);<br />spi_putc(CNF3);<br /><br />spi_putc((1&lt;&lt;PHSEG21));// Bitrate 500 kbps at 16 MHz<br />spi_putc((1&lt;&lt;BTLMODE)|(1&lt;&lt;PHSEG11));<br />spi_putc((1&lt;&lt;BRP2)|(1&lt;&lt;BRP1)|(1&lt;&lt;BRP0));*/<br /><br />// tutaj moja funkcja write register zamiast tej powyzej<br /><br />mcp2515_write_register( CNF1, (1&lt;&lt;BRP0));<br />// regulacja fazy dla SEG1<br />mcp2515_write_register( CNF2, (1&lt;&lt;BTLMODE)|(1&lt;&lt;PHSEG11) );<br /><br />// Wake-up wy??czony , dopasowanie fazy SEG2<br />mcp2515_write_register( CNF3, (1&lt;&lt;PHSEG21) );<br /><br /><br />// activate interrupts<br />mcp2515_write_register ( CANINTE, ( 1 &lt;&lt; RX1IE ) | ( 1 &lt;&lt; RX0IE ) ) ;<br />SET(MCP2515_CS);<br /><br />// test if we could read back the value =&gt; is the chip accessible?<br />if (mcp2515_read_register(CNF1) != (1&lt;&lt;BRP0)) {<br />return false;<br />}<br /><br />// deaktivate the RXnBF Pins (High Impedance State)<br />mcp2515_write_register(BFPCTRL, 0);<br /><br />// set TXnRTS as inputs<br />mcp2515_write_register(TXRTSCTRL, 0);<br /><br />// turn off filters =&gt; receive any message<br />mcp2515_write_register(RXB0CTRL, (1&lt;&lt;RXM1)|(1&lt;&lt;RXM0));<br />mcp2515_write_register(RXB1CTRL, (1&lt;&lt;RXM1)|(1&lt;&lt;RXM0));<br /><br />// reset device to normal mode<br />mcp2515_write_register(CANCTRL, 0);<br /><br />return true;<br />}<br /><br />}[/syntax]<br /><br />P.S. nie wiem czemu syntax nie rozpoznaje skladni, wpisalem w miejsce jezyk_programowania C.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2371">kubeq_sq</a> — 4 kwi 2017, o 13:36</p><hr />
]]></content>
</entry>
</feed>