<?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=10641&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-03-13T21:52:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=10641&amp;mode</id>
<entry>
<author><name><![CDATA[heniug]]></name></author>
<updated>2016-03-13T21:52:17+01:00</updated>
<published>2016-03-13T21:52:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=156110#p156110</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=156110#p156110"/>
<title type="html"><![CDATA[Re: Jak wysłać ramkę CAN Extended z MCP2515]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=156110#p156110"><![CDATA[
Może ktoś coś robił na tym układzie i bibliotekach SunRivera<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1890">heniug</a> — 13 mar 2016, o 21:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[heniug]]></name></author>
<updated>2015-02-26T22:37:55+01:00</updated>
<published>2015-02-26T22:37:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=121123#p121123</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=121123#p121123"/>
<title type="html"><![CDATA[Re: Jak wysłać ramkę CAN Extended z MCP2515]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=121123#p121123"><![CDATA[
Nikt się tego nie robił?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1890">heniug</a> — 26 lut 2015, o 22:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[heniug]]></name></author>
<updated>2015-02-22T20:29:15+01:00</updated>
<published>2015-02-22T20:29:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=120427#p120427</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=120427#p120427"/>
<title type="html"><![CDATA[Re: Jak wysłać ramkę CAN Extended z MCP2515]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=120427#p120427"><![CDATA[
Witam<br />Widzę że nikt chyba nie ma doświadczenia z tym układem.<br />Ale ucząc się dalej jego obsługi doszedłem do takiego wniosku:<br /><br />Jeżeli wysyłam ramkę standard jest ok<br /><br />[syntax=c]uint32_t id = 0x0123;<br /><br /><br /><br /> // ID Wiadomości<br /> mcp2515_write_register(TXB0SIDH,  (id&gt;&gt;3));<br /> mcp2515_write_register(TXB0SIDL,  (id&lt;&lt;5));<br /><br /><br /><br /><br /><br /> // Ustawienie długości komunikatu<br />mcp2515_write_register(TXB0DLC, (1&lt;&lt;RTR) | 0x03);<br /><br /><br /> // DANE<br /><br /> mcp2515_write_register(TXB0D0 , 0x10);<br /> mcp2515_write_register(TXB0D1 , 0x20);<br /> mcp2515_write_register(TXB0D2 , 0x30);<br /><br /> // Wszystko pasuje można wysyłać wiadomość<br /> PORT_CS &amp;= ~(1&lt;&lt;PIN_CS);<br /> spi_putc(SPI_RTS | 0x01);<br /> PORT_CS |= (1&lt;&lt;PIN_CS);[/syntax]<br /><br />Jeżeli wg noty jak zrozumiałem ustawiam bit EXIDE powinna zostać wysłana ramka Extended<br /><br />[syntax=c]// ID Wiadomości <br />mcp2515_write_register(TXB0SIDL, (1&lt;&lt;EXIDE)|0x03);<br />mcp2515_write_register(TXB0EID8, 0x00);<br />mcp2515_write_register(TXB0EID0, 0x00);<br /><br /><br /> // Ustawienie długości komunikatu<br />mcp2515_write_register(TXB0DLC, (1&lt;&lt;RTR) | 0x03);<br /><br /><br /> // DANE<br /><br /> mcp2515_write_register(TXB0D0 , 0x10);<br /> mcp2515_write_register(TXB0D1 , 0x20);<br /> mcp2515_write_register(TXB0D2 , 0x30);<br /><br /> // Wszystko pasuje można wysyłać wiadomość<br /> PORT_CS &amp;= ~(1&lt;&lt;PIN_CS);<br /> spi_putc(SPI_RTS | 0x01);<br /> PORT_CS |= (1&lt;&lt;PIN_CS);[/syntax]<br /><br />Proszę o pomoc SunRiver.<br />Jakiego bitu nie ustawiam, potrzebnego do wysyłania?<br />Czy muszę ustawić bity IDE i SRR w rejestrze RXB0SIDL?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1890">heniug</a> — 22 lut 2015, o 20:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[heniug]]></name></author>
<updated>2015-02-13T21:16:07+01:00</updated>
<published>2015-02-13T21:16:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=118850#p118850</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=118850#p118850"/>
<title type="html"><![CDATA[Jak wysłać ramkę CAN Extended z MCP2515]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10641&amp;p=118850#p118850"><![CDATA[
Witam<br />Mam problem z napisaniem obsługi wysyłania ramki Can extended.<br />Wysłanie standardowej na podstawie wątku SunRiver &quot;Magistrala CAN -- technologia&quot; opanowałem i dostosowałem do swoich potrzeb.<br />Jednak proszę o wskazówki jak wysłać ramkę ext. z pliku can_data_v.h w zapisie:<br />4 bajty - id 29bit<br />1 bajt - długość danych<br />8 bajtów - dane<br /><br />Obecnie mam coś takiego <br />main.c<br />[syntax=c]/*<br /> * <br /> * Atmega32 8MHz<br /> * MCP2515 16MHz<br /> * Created: 2013-12-01 12:47:34<br /> *  Author: Heniu<br /> */ <br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;mcp2515_defs.h&quot;<br />#include &quot;can_data_v.h&quot;<br /><br />#include &quot;can_obsluga.h&quot;<br /><br /><br /><br /><br />int main(void)<br />{<br />mcp2515_init();<br /><br /><br />while(1){<br /><br /><br />uint16_t i,j;<br />uint32_t m_id;<br />uint8_t  m_len, m_data0, m_data1, m_data2, m_data3, m_data4, m_data5, m_data6, m_data7, m_h_id ;<br /><br /><br /><br />i=0;<br />j=0;<br /><br />while (j &lt; 1)<br />{<br /><br />m_h_id = pgm_read_byte (&amp;V__36&#91;0+i&#93;);<br />m_id  = (m_h_id &lt;&lt; 8) + (pgm_read_byte (&amp;V__36&#91;1+i&#93;));<br /><br /><br />    m_len = pgm_read_byte (&amp;V__36&#91;2+i&#93;);<br />    m_data0 = pgm_read_byte (&amp;V__36&#91;3+i&#93;);<br />    m_data1 = pgm_read_byte (&amp;V__36&#91;4+i&#93;);<br />    m_data2 = pgm_read_byte (&amp;V__36&#91;5+i&#93;);<br />    m_data3 = pgm_read_byte (&amp;V__36&#91;6+i&#93;);<br />    m_data4 = pgm_read_byte (&amp;V__36&#91;7+i&#93;);<br />    m_data5 = pgm_read_byte (&amp;V__36&#91;8+i&#93;);<br />    m_data6 = pgm_read_byte (&amp;V__36&#91;9+i&#93;);<br />    m_data7 = pgm_read_byte (&amp;V__36&#91;10+i&#93;);<br /><br /><br /><br /><br />    CANMessage message;<br /><br />        // Dane<br />        message.id = m_id;<br />        message.rtr = 0;<br />        message.length = m_len;<br />        message.data&#91;0&#93; = m_data0;<br />        message.data&#91;1&#93; = m_data1;<br />        message.data&#91;2&#93; = m_data2;<br />        message.data&#91;3&#93; = m_data3;<br />        message.data&#91;4&#93; = m_data4;<br />        message.data&#91;5&#93; = m_data5;<br />        message.data&#91;6&#93; = m_data6;<br />        message.data&#91;7&#93; = m_data7;<br /><br />        // wysłanie wiadomości<br /><br />        can_send_message(&amp;message);<br />i=i+13;<br />j=j+1;<br /><br /><br />}<br />}<br />}[/syntax]<br /><br />can_data_v.h<br /><br />[syntax=c]// *********************************************************************************<br />//<br />// Author: HeniuG rok 2014<br />// testowe 7 ramek do wysłania<br />// *********************************************************************************<br /><br />const uint8_t  V__36&#91;&#93; PROGMEM = {<br />// ramka extended<br />//4bajty adres, 1bajt długość danych, 8bajtów danych<br />0x00,0x0d,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0xE0,0x04,0x42,0x08,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x00,<br />0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x04,0x20,0x00,0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,<br />0x04,0x40,0x00,0x02,0x08,0xC0,0x00,0x01,0x00,0xB4,0x00,0x00,0x50,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00<br />};[/syntax]<br /><br />obsluga_can.c<br /><br />[syntax=c]/*<br /> * can_obsluga.c<br /> *<br /> *     <br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;mcp2515_defs.h&quot;<br />#include &quot;can_obsluga.h&quot;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br /><br /><br /><br /><br /><br />void spi_init(void)<br />{<br /><br />// Aktywacja pinów<br />DDR_SPI |=(1&lt;&lt;PIN_SCK)|(1&lt;&lt;PIN_MOSI);<br />PORT_SPI &amp;=~((1&lt;&lt;PIN_SCK)|(1&lt;&lt;PIN_MOSI)|(1&lt;&lt;PIN_MISO));<br /><br />DDR_CS |=(1&lt;&lt;PIN_CS);<br />PORT_CS |=(1&lt;&lt;PORT_CS);<br /><br />// Aktywacja SPI w trybie Master<br /><br />SPCR = (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;SPR1)|(1&lt;&lt;SPR0);<br />SPSR = (1&lt;&lt;SPI2X);<br /><br />}<br /><br />uint8_t spi_putc (uint8_t data)<br />{<br /><br />// Wysyła bajt<br />// dla AtSCENa32<br />SPDR = data;<br />while ( !(SPSR &amp; (1&lt;&lt;SPIF)));<br />return SPDR;<br /><br />}<br /><br /><br />void mcp2515_write_register(uint8_t adress, uint8_t data)<br />{<br />// CS na niski<br />PORT_CS &amp;=~(1&lt;&lt;PIN_CS);<br />_delay_us(50);<br /><br />spi_putc(SPI_WRITE);<br />spi_putc(adress);<br />spi_putc(data);<br /><br />// CS wysoki<br />PORT_CS |= (1&lt;&lt;PIN_CS);<br /><br />}<br /><br />uint8_t mcp2515_read_register (uint8_t adress)<br />{<br />uint8_t data;<br /><br />// CS niski<br /><br />PORT_CS &amp;=~ (1&lt;&lt;PIN_CS);<br />_delay_us (50);<br /><br />spi_putc(SPI_READ);<br />spi_putc(adress);<br /><br />data = spi_putc(0xff);<br /><br />// CS wysoki<br /><br />PORT_CS |= (1&lt;&lt;PIN_CS);<br /><br />return (data);<br />}<br /><br />void mcp2515_bit_modify (uint8_t adress, uint8_t mask, uint8_t data)<br />{<br />// CS niskie<br />PORT_CS &amp;=~ (1&lt;&lt;PIN_CS);<br />_delay_us (50);<br />spi_putc(SPI_BIT_MODIFY);<br />spi_putc(adress);<br />spi_putc(mask);<br />spi_putc(data);<br /><br />// CS wysokie<br />PORT_CS |=(1&lt;&lt;PIN_CS);<br /><br /><br />}<br /><br />void mcp2515_init(void)<br />{<br />    // Inicjalizacja SPI<br />    spi_init();<br /><br />    // Wprowadzenie MCP w tryb konfiguracji<br />    PORT_CS &amp;= ~(1&lt;&lt;PIN_CS);<br />_delay_us(50);<br />    spi_putc( SPI_RESET );<br />    _delay_ms(1);<br />    PORT_CS |= (1&lt;&lt;PIN_CS);<br /><br />    // Trzeba dać chwilkę czasu by MCP mogło się ustawić<br />    _delay_ms(10);<br /><br />    /*<br />     *  Dostosowanie Bit Timings<br />     *<br />     *  Fosc       = 16MHz<br />     *  BRP        = 7<br />     *  TQ = 2 * (BRP + 1) / Fosc  (=&gt; 1 uS)<br />     *<br />     *  Sync Seg   = 1TQ<br />     *  Prop Seg   = (PRSEG + 1) * TQ  = 1 TQ<br />     *  Phase Seg1 = (PHSEG1 + 1) * TQ = 3 TQ<br />     *  Phase Seg2 = (PHSEG2 + 1) * TQ = 3 TQ<br />     *<br />     *  Bus speed  = 1 / (Total # of TQ) * TQ<br />     *             = 1 / 8 * TQ = 125 kHz<br />     */<br />   // prędkość ustawiona na 500kbps<br />    // BRP = 7<br />    mcp2515_write_register( CNF1, (1&lt;&lt;BRP0));//|(1&lt;&lt;BRP1)|(1&lt;&lt;BRP2) );<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 />    // Właczenie przerwania Rx Bufor<br />    mcp2515_write_register( CANINTE, (1&lt;&lt;RX1IE)|(1&lt;&lt;RX0IE) );<br /><br /><br /><br />    // Bufor 0 : Odbieranie wszystkich wiadomości<br />    mcp2515_write_register( RXB0CTRL, (1&lt;&lt;RXM1)|(1&lt;&lt;RXM0) );<br /><br />    // Bufor 1 : Odbieranie wszystkich wiadomości<br />    mcp2515_write_register( RXB1CTRL, (1&lt;&lt;RXM1)|(1&lt;&lt;RXM0) );<br /><br />    // Wszystkie bity MASKI ustawiamy na 0<br /><br />    mcp2515_write_register( RXM0SIDH, 0 );<br />    mcp2515_write_register( RXM0SIDL, 0 );<br />    mcp2515_write_register( RXM0EID8, 0 );<br />    mcp2515_write_register( RXM0EID0, 0 );<br /><br />    mcp2515_write_register( RXM1SIDH, 0 );<br />    mcp2515_write_register( RXM1SIDL, 0 );<br />    mcp2515_write_register( RXM1EID8, 0 );<br />    mcp2515_write_register( RXM1EID0, 0 );<br /><br />    // Ustawienia funkcji PINÓW IO<br /><br />    // wyłaczenie Pinów RXnBF --&gt; ustawienie na HIS  (High Impedance State)<br />    mcp2515_write_register( BFPCTRL, 0 );<br /><br />    // TXnRTS ustawiamy jako wejścia<br />    mcp2515_write_register( TXRTSCTRL, 0 );<br /><br />    // Przełączenie MCP w tryb offsetowy (normalny tryb pracy)<br />    mcp2515_bit_modify( CANCTRL, 0xE0, 0);<br />}<br /><br /><br /><br /><br /><br />void can_send_message(CANMessage *p_message)<br /> {<br /> uint8_t length = p_message-&gt;length;<br /><br /> // ID Wiadomości<br /> mcp2515_write_register(TXB0SIDH, (uint8_t) (p_message-&gt;id&gt;&gt;3));<br /> mcp2515_write_register(TXB0SIDL, (uint8_t) (p_message-&gt;id&lt;&lt;5));<br /><br />// mcp2515_bit_modify(TXB0SIDL, (1&lt;&lt;EXIDE), 0);<br /><br /><br /> // RTR &quot;Remote Transmit Request&quot;<br /> if (p_message-&gt;rtr)<br /> {<br /> // wiadomość RTR ma długość , ale nie zawiera danych<br /><br /> // Ustawienie długości + RTR<br /> mcp2515_write_register(TXB0DLC, (1&lt;&lt;RTR) | length);<br /><br /><br /> }<br /> else<br /> {<br /> // Ustawienie długości komunikatu<br /> mcp2515_write_register(TXB0DLC, length);<br /><br /> // Czas na DANE<br /> for (uint8_t i=0;i&lt;length;i++) {<br /> mcp2515_write_register(TXB0D0 + i, p_message-&gt;data&#91;i&#93;);<br /> }<br /> }<br />// lcd_hex(TXB0SIDH);<br /> //  _delay_ms(3000);<br /> //  lcd_cls();<br /> // lcd_hex(TXB0DLC);<br /> //  _delay_ms(3000);<br /> //  lcd_cls();<br /> // Wszystko pasuje można wysyłać wiadomość<br /> PORT_CS &amp;= ~(1&lt;&lt;PIN_CS);<br /> spi_putc(SPI_RTS | 0x01);<br /> PORT_CS |= (1&lt;&lt;PIN_CS);<br /> }<br />/*<br />void can_send_message_ex(CANMessage *p_message)<br /> {<br /><br /><br />uint8_t length = p_message-&gt;length;<br /><br /> // ID Wiadomości<br /> mcp2515_write_register(TXB1SIDH, (uint8_t) (p_message-&gt;id&gt;&gt;3));<br /> mcp2515_write_register(TXB1SIDL, (uint8_t) (p_message-&gt;id&lt;&lt;5));<br />// mcp2515_write_register(TXB1SIDL, (uint8_t) (p_message-&gt;id&lt;&lt;2));<br /> mcp2515_write_register(TXB1EID8, (uint8_t) (p_message-&gt;id&lt;&lt;8));<br /> mcp2515_write_register(TXB1EID0, (uint8_t) (p_message-&gt;id));<br /> spi_putc(1&lt;&lt;EXIDE);<br /><br /> // RTR &quot;Remote Transmit Request&quot;<br /> if (p_message-&gt;rtr)<br /> {<br /> // wiadomość RTR ma długość , ale nie zawiera danych<br /><br /> // Ustawienie długości + RTR<br /> mcp2515_write_register(TXB0DLC, (1&lt;&lt;RTR) | length);<br /> }<br /> else<br /> {<br /> // Ustawienie długości komunikatu<br /> mcp2515_write_register(TXB0DLC, length);<br /><br /> // Czas na DANE<br /> for (uint8_t i=0;i&lt;length;i++) {<br /> mcp2515_write_register(TXB0D0 + i, p_message-&gt;data&#91;i&#93;);<br /> }<br /> }<br /><br /> // Wszystko pasuje można wysyłać wiadomość<br /> PORT_CS &amp;= ~(1&lt;&lt;PIN_CS);<br /> spi_putc(SPI_RTS | 0x01);<br /> PORT_CS |= (1&lt;&lt;PIN_CS);<br /> }<br /><br />*/<br />uint8_t mcp2515_read_rx_status(void)<br /> {<br /> uint8_t data;<br /><br /> // /CS = LOW<br /> PORT_CS &amp;= ~(1&lt;&lt;PIN_CS);<br /><br /> spi_putc(SPI_RX_STATUS);<br /> data = spi_putc(0xff);<br /><br /> // Ponowne wysłanie danych<br /> // Musimy ocenić więc 1 z 2ch bajtów<br /> spi_putc(0xff);<br /><br /> PORT_CS |= (1&lt;&lt;PIN_CS);<br /> return data;<br /> }[/syntax]<br /><br />obsluga_can.h<br /><br />[syntax=c]/*<br /> * can_obsluga.h<br /> *<br /> *      <br /> */<br /><br />#ifndef CAN_OBSLUGA_H_<br />#define CAN_OBSLUGA_H_<br /><br /><br />// Definicja pinów<br />#define DDR_CS DDRB<br />#define PORT_CS PORTB<br />#define PIN_CS 4<br />#define DDR_SPI DDRB<br />#define PORT_SPI PORTB<br />#define PIN_MISO 6<br />#define PIN_MOSI 5<br />#define PIN_SCK  7<br /><br /><br />typedef struct<br />{<br />uint32_t id;<br />uint8_t rtr;<br />uint8_t length;<br />uint8_t data&#91;8&#93;;<br />} CANMessage;<br /><br /><br />void spi_init(void);<br />uint8_t spi_putc (uint8_t data);<br />void mcp2515_write_register(uint8_t adress, uint8_t data);<br />uint8_t mcp2515_read_register (uint8_t adress);<br />void mcp2515_bit_modify (uint8_t adress, uint8_t mask, uint8_t data);<br />void mcp2515_init(void);<br />void can_send_message(CANMessage *p_message);<br />void can_send_message_ex(CANMessage *p_message);<br />uint8_t mcp2515_read_rx_status(void);<br /><br /><br /><br />#endif[/syntax]<br />Dzięki za wszelką pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1890">heniug</a> — 13 lut 2015, o 21:16</p><hr />
]]></content>
</entry>
</feed>