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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-04-28T10:43:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=24&amp;t=1523&amp;mode</id>
<entry>
<author><name><![CDATA[marcin w]]></name></author>
<updated>2019-04-28T10:43:50+01:00</updated>
<published>2019-04-28T10:43:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=218503#p218503</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=218503#p218503"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=218503#p218503"><![CDATA[
Cześć wszystkim.<br /><br />Zainteresowała mnie transmisja danych z użyciem protokołu modbus. Próbuję zaimplementować bibliotekę freemodbus do swojego projektu. W teorii odbieram dane po uart, jeśli na uart panuje cisza dłuższa niż 1,5 znaku można uznać że transmitter zakończył nadawanie, można przejść do sprawdzenia CRC odebranej ramki i dalej wykonać funkcję zgodnie z odebranym kodem funkcji.<br /><br />Analizuję kod z powyższego załącznika, tu widzę że w pętli wykonywana jest funkcja eMBPoll() nie mogę natomiast znaleźć implementacji odczytu danych przychodzących po interfejsie modbus.<br />Ktoś może wypowiedzieć się na ten temat ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3936">marcin w</a> — 28 kwi 2019, o 10:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2018-01-14T11:42:12+01:00</updated>
<published>2018-01-14T11:42:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=201990#p201990</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=201990#p201990"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=201990#p201990"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Witam szanownych forumowiczów. Przepraszam, że odkopuje stary temat, ale od kilku dni walczę z kompilacją biblioteki freemodbus.org i bezskutecznie. Powoli już tracę chęci do dalszej pracy. Nie potrafię skompilować biblioteki freemodbus-v1.5.0 dla avr ATmega32. Próbowałem pod MKclipse oraz AVR Studio. Czy ktoś mógłby napisać dokładnie co trzeba zmienić lub udostępnić poprawioną bibliotekę?<br />Z góry dziękuje za pomoc i pozdrawiam.<br /></div><br /><br />Tutaj masz mój stary projekt który na pewno działał. Może ci to coś pomoże.<br />Wyciąłem jedynie zawartość bibliotek LCD i 1Wire z książki Mirka. jeżeli ją posiadasz to podegraj zawartość jeżeli nie to musisz za komentować miejsca w kodzie gdzie są użyte.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 14 sty 2018, o 11:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Lokasz]]></name></author>
<updated>2018-01-12T00:34:22+01:00</updated>
<published>2018-01-12T00:34:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=201859#p201859</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=201859#p201859"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=201859#p201859"><![CDATA[
Witam szanownych forumowiczów. Przepraszam, że odkopuje stary temat, ale od kilku dni walczę z kompilacją biblioteki freemodbus.org i bezskutecznie. Powoli już tracę chęci do dalszej pracy. Nie potrafię skompilować biblioteki freemodbus-v1.5.0 dla avr ATmega32. Próbowałem pod MKclipse oraz AVR Studio. Czy ktoś mógłby napisać dokładnie co trzeba zmienić lub udostępnić poprawioną bibliotekę?<br />Z góry dziękuje za pomoc i pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17303">Lokasz</a> — 12 sty 2018, o 00:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[aaadamw]]></name></author>
<updated>2016-08-08T08:26:00+01:00</updated>
<published>2016-08-08T08:26:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165649#p165649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165649#p165649"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165649#p165649"><![CDATA[
cześć,<br />poniżej efekt ćwiczeń z freemodbus:<br />* S7-1200 + CB1241 jako master. Do niego podłączony jest wentylator<br />* Sterownik mojej konstrukcji jako slave. Zbiera dane z cyfrowego czujnika temperatury DS18b20 gadającego po 1Wire oraz dwóch potencjometrów (jeden do nastawiania setpoint, drugi do histerezy)<br />* Sterownik mojej konstrukcji jako drugi slave. Wyświetla dane zebrane przez poprzedni sterownik.<br /><br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=1yAbmi7NLRA" >https://www.youtube.com/watch?v=1yAbmi7NLRA</a><!-- m --><br /><br /><a href="https://obrazkiforum.atnel.pl/360/e44583c5a8d5413e4330b2fcc8e684bd.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/360/e44583c5a8d5413e4330b2fcc8e684bd.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=360">aaadamw</a> — 8 sie 2016, o 08:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2016-07-29T11:26:57+01:00</updated>
<published>2016-07-29T11:26:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165004#p165004</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165004#p165004"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165004#p165004"><![CDATA[
<div class="quotetitle">MichalXY napisał(a):</div><div class="quotecontent"><br />Moim zdaniem problem może leżeć w tym że próbujesz przekazać zmienną o niepasującym typie do funckji lcd_int(). Może spróbuj zrobić rzutowanie do typu jaki w argumencie przyjmuje funkcja lcd_int().<br /></div><br /><br />Ok wypróbuje ten sposób wieczorem.<br />Zastanawiam się czy użyłem odpowiednie funkcji usRegHoldingBuf[0] do odebrania danych i jak powinna wyglądać prawidłowa ramka wysyłana z mastera.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 29 lip 2016, o 11:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2016-07-29T10:52:03+01:00</updated>
<published>2016-07-29T10:52:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165000#p165000</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165000#p165000"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=165000#p165000"><![CDATA[
Moim zdaniem problem może leżeć w tym że próbujesz przekazać zmienną o niepasującym typie do funckji lcd_int(). Może spróbuj zrobić rzutowanie do typu jaki w argumencie przyjmuje funkcja lcd_int().<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 29 lip 2016, o 10:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2016-07-29T09:05:08+01:00</updated>
<published>2016-07-29T09:05:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164991#p164991</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164991#p164991"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164991#p164991"><![CDATA[
Witam kolegów,<br />mam takie pytanie jak odebrać i wyświetlić dane przekazane do slave z mastera jako zapis bitu czy rejestru za pomocą funkcji np 5 lun 6.<br /><br />Próbowałem odczytania za pomocą Lcd_int(usRegHoldingBuf[0]); ale bez sukcesu, wysyłanie działa bez zastrzeżeń na pytanie z mastera.<br /><br />Poniżej kod z main-a  <br />[syntax=c]/*<br /> * FreeModbus Libary: AVR Demo Application<br /> * Copyright (C) 2006 Christian Walter &lt;wolti@sil.at&gt;<br /> *<br /> * This program is free software; you can redistribute it and/or modify<br /> * it under the terms of the GNU General Public License as published by<br /> * the Free Software Foundation; either version 2 of the License, or<br /> * (at your option) any later version.<br /> *<br /> * This program is distributed in the hope that it will be useful,<br /> * but WITHOUT ANY WARRANTY; without even the implied warranty of<br /> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<br /> * GNU General Public License for more details.<br /> *<br /> * You should have received a copy of the GNU General Public License<br /> * along with this program; if not, write to the Free Software<br /> * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA<br /> *<br /> * File: $Id: demo.c,v 1.7 2006/06/15 15:38:02 wolti Exp $<br /> */<br /><br />/* ----------------------- AVR includes -------------------------------------*/<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />/* ----------------------- Modbus includes ----------------------------------*/<br />#include &quot;modbus/include/mb.h&quot;<br />#include &quot;modbus/include/mbport.h&quot;<br /><br />/* ----------------------- Defines ------------------------------------------*/<br /><br />#define REG_HOLDING_START           1000<br />#define REG_HOLDING_NREGS           4<br />#define REG_INPUT_START             1000<br />#define REG_INPUT_NREGS             4<br /><br /><br />/* ----------------------- Static variables ---------------------------------*/<br /><br />static USHORT   usRegHoldingStart = REG_HOLDING_START;<br />static USHORT   usRegHoldingBuf&#91;REG_HOLDING_NREGS&#93;;<br />static USHORT   usRegInputStart = REG_INPUT_START;<br />static USHORT   usRegInputBuf&#91;REG_INPUT_NREGS&#93;;<br /><br /><br />#define LED (1&lt;&lt;PC7)//;<br />#define LED_ON PORTC |= LED<br />#define LED_OFF PORTC &amp;= ~LED<br />#define LED_TOG PORTC ^= LED<br /><br />volatile uint16_t Timer0, Timer1;/* timery programowe 100Hz */<br /><br />/* ----------------------- Start implementation -----------------------------*/<br />int<br />main( void )<br />{<br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7);<br /><br />DDRC |= LED;<br /><br />/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 108;// przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br />lcd_init();<br />lcd_str(&quot;Start...&quot;);<br />_delay_ms(500);<br /><br /><br />const UCHAR     ucSlaveID&#91;&#93; = { 0xAA, 0xBB, 0xCC };<br />    eMBErrorCode    eStatus;<br /><br />    eStatus = eMBInit( MB_RTU, 0x0A, 0, 9600, MB_PAR_NONE );<br /><br />    eStatus = eMBSetSlaveID( 0x34, TRUE, ucSlaveID, 3 );<br />    sei(  );<br /><br />    /* Enable the Modbus Protocol Stack. */<br />    eStatus = eMBEnable(  );<br /><br /><br />    for( ;; )<br />    {<br />        ( void )eMBPoll(  );<br /><br />        usRegInputBuf&#91;0&#93; = 123;<br />        usRegInputBuf&#91;1&#93; = 234;<br />        usRegInputBuf&#91;2&#93; = 345;<br />        usRegInputBuf&#91;3&#93; = 456;<br /><br /><br />    // obsługa funkcji z Timer 0, Led kontrolny<br />    if(!Timer0){<br />    Timer0 = 50;<br />    LED_TOG;<br />    }<br /><br />    // obsługa funkcji z Timer 1<br />    if(!Timer1){<br />    Timer1 = 100;<br />    lcd_cls();<br /><br />    //Wyświetlenie danych wejściowych<br />    lcd_locate(0,0);<br />lcd_int(usRegHoldingBuf&#91;0&#93;);<br />lcd_int(usRegHoldingBuf&#91;1&#93;);<br />lcd_int(usRegHoldingBuf&#91;2&#93;);<br />lcd_int(usRegHoldingBuf&#91;3&#93;);<br /><br />//Wyświetlenie danych wyjściowych<br />lcd_locate(1,0);<br />lcd_int(usRegInputBuf&#91;0&#93;);<br />lcd_int(usRegInputBuf&#91;1&#93;);<br />lcd_int(usRegInputBuf&#91;2&#93;);<br />lcd_int(usRegInputBuf&#91;3&#93;);<br />    }<br />    }<br />}<br /><br />eMBErrorCode<br />eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )<br />{<br />    eMBErrorCode    eStatus = MB_ENOERR;<br />    int             iRegIndex;<br /><br />    if( ( usAddress &gt;= REG_INPUT_START )<br />        &amp;&amp; ( usAddress + usNRegs &lt;= REG_INPUT_START + REG_INPUT_NREGS ) )<br />    {<br />        iRegIndex = ( int )( usAddress - usRegInputStart );<br />        while( usNRegs &gt; 0 )<br />        {<br />            *pucRegBuffer++ =<br />                ( unsigned char )( usRegInputBuf&#91;iRegIndex&#93; &gt;&gt; 8 );<br />            *pucRegBuffer++ =<br />                ( unsigned char )( usRegInputBuf&#91;iRegIndex&#93; &amp; 0xFF );<br />            iRegIndex++;<br />            usNRegs--;<br />        }<br />    }<br />    else<br />    {<br />        eStatus = MB_ENOREG;<br />    }<br /><br />    return eStatus;<br />}<br /><br />eMBErrorCode<br />eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs,<br />                 eMBRegisterMode eMode )<br />{<br />    return MB_ENOREG;<br />}<br /><br /><br />eMBErrorCode<br />eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils,<br />               eMBRegisterMode eMode )<br />{<br />    return MB_ENOREG;<br />}<br /><br />eMBErrorCode<br />eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )<br />{<br />    return MB_ENOREG;<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br /><br />n = Timer0;/* 100Hz Timer1 */<br />if (n) Timer0 = --n;<br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 29 lip 2016, o 09:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2016-07-21T08:56:53+01:00</updated>
<published>2016-07-21T08:56:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164406#p164406</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164406#p164406"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164406#p164406"><![CDATA[
<div class="quotetitle">jaca_76 napisał(a):</div><div class="quotecontent"><br />tak ale jako old - powinieneś użyć USART_TXC_vect<br /></div><br /><br />no właśnie ale minie zaćmiło.<br />Dziękuję Kolego.<br />Już śmiga.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 21 lip 2016, o 08:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jaca_76]]></name></author>
<updated>2016-07-21T08:50:37+01:00</updated>
<published>2016-07-21T08:50:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164405#p164405</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164405#p164405"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164405#p164405"><![CDATA[
tak ale jako old  - powinieneś użyć USART_TXC_vect<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2479">jaca_76</a> — 21 lip 2016, o 08:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2016-07-21T08:42:44+01:00</updated>
<published>2016-07-21T08:42:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164404#p164404</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164404#p164404"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164404#p164404"><![CDATA[
<div class="quotetitle">jaca_76 napisał(a):</div><div class="quotecontent"><br />&quot;This header file is obsolete. Use &lt;avr/interrupt.h&gt;.&quot; - signal.h jest już nie używane. Użyj &lt;avr/interrupt.h&gt;<br /></div><br /><br />rzeczywiście zostało po przeróbkach ale #include &lt;avr/interrupt.h&gt; też miałem.<br /><br />co do 'SIG_UART_TRANS' appears to be a misspelled signal handler w AVR Device Explorer dla atmegi32 widnieje w Interrupts<br /><br /><a href="https://obrazkiforum.atnel.pl/930/fa173e4fcebdf27f6830ceabce82ec3e.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/930/fa173e4fcebdf27f6830ceabce82ec3e.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 21 lip 2016, o 08:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jaca_76]]></name></author>
<updated>2016-07-21T08:32:23+01:00</updated>
<published>2016-07-21T08:32:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164402#p164402</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164402#p164402"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164402#p164402"><![CDATA[
...<br />&quot;This header file is obsolete.  Use &lt;avr/interrupt.h&gt;.&quot; - signal.h jest już nie używane. Użyj &lt;avr/interrupt.h&gt;<br />'SIG_UART_TRANS' appears to be a misspelled signal handler - nie ma takiego wektora przerwania , sprawdź datasheet lub device explorer w Eclipse .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2479">jaca_76</a> — 21 lip 2016, o 08:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2016-07-21T08:13:12+01:00</updated>
<published>2016-07-21T08:13:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164401#p164401</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164401#p164401"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=164401#p164401"><![CDATA[
Cześć,<br />co może być powodem błędu w pliku portserial.c po załączeniu RTS_ENABLE dla obsługi przerwania ISR(SIG_UART_TRANS)<br /><br />[syntax=c]09:15:17 **** Incremental Build of configuration Release for project mb_01 ****<br />make all <br />'Building file: ../port/mbcrc.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=20000000UL -MMD -MP -MF&quot;port/mbcrc.d&quot; -MT&quot;port/mbcrc.o&quot; -c -o &quot;port/mbcrc.o&quot; &quot;../port/mbcrc.c&quot;<br />'Finished building: ../port/mbcrc.c'<br />' '<br />'Building file: ../port/portevent.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=20000000UL -MMD -MP -MF&quot;port/portevent.d&quot; -MT&quot;port/portevent.o&quot; -c -o &quot;port/portevent.o&quot; &quot;../port/portevent.c&quot;<br />'Finished building: ../port/portevent.c'<br />' '<br />'Building file: ../port/portserial.c'<br />'Invoking: AVR Compiler'<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=20000000UL -MMD -MP -MF&quot;port/portserial.d&quot; -MT&quot;port/portserial.o&quot; -c -o &quot;port/portserial.o&quot; &quot;../port/portserial.c&quot;<br />In file included from ../port/portserial.c:28:0:<br />c:\program files (x86)\atmel\avr tools\avr toolchain\avr\include\avr\signal.h:36:2: warning: #warning &quot;This header file is obsolete.  Use &lt;avr/interrupt.h&gt;.&quot; &#91;-Wcpp&#93;<br /> #warning &quot;This header file is obsolete.  Use &lt;avr/interrupt.h&gt;.&quot;<br />  ^<br />../port/portserial.c:154:5: error: attempt to use poisoned &quot;SIG_UART_TRANS&quot;<br /> ISR(SIG_UART_TRANS)<br />     ^<br />In file included from ../port/portserial.c:27:0:<br />../port/portserial.c: In function 'SIG_UART_TRANS':<br />../port/portserial.c:154:5: warning: 'SIG_UART_TRANS' appears to be a misspelled signal handler &#91;enabled by default&#93;<br /> ISR(SIG_UART_TRANS)<br />     ^<br />make: *** &#91;port/portserial.o&#93; Błąd 1[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 21 lip 2016, o 08:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kurnachatka]]></name></author>
<updated>2016-07-14T11:12:26+01:00</updated>
<published>2016-07-14T11:12:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163976#p163976</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163976#p163976"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163976#p163976"><![CDATA[
<div class="quotetitle">kyp89 napisał(a):</div><div class="quotecontent"><br />Ok rozwiązałem problem.<br /></div><br />Kolego mógłbyś zamieścić spakowany działający projekt.<br />Też już kilkakrotnie podchodziłem do tematu ale poległem na samym początku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=930">kurnachatka</a> — 14 lip 2016, o 11:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kyp89]]></name></author>
<updated>2016-07-13T20:44:08+01:00</updated>
<published>2016-07-13T20:44:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163959#p163959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163959#p163959"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163959#p163959"><![CDATA[
Ok rozwiązałem problem. <br />Miałem dwa pliki mbcrc i występował błąd kompilacji, ale nie wyświetlał o tym info. <br />T.z jak przejrzałem konsolę co wyświetlała w czasie kompilowania to była tam o tym informacja <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=14373">kyp89</a> — 13 lip 2016, o 20:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2016-07-13T20:05:11+01:00</updated>
<published>2016-07-13T20:05:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163957#p163957</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163957#p163957"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163957#p163957"><![CDATA[
Spakuj do zipa i wstaw jako załącznik bo zaraz zniknie ten twój post a ci co na czerwono pisać mogą źli będą. ..<br /><br />A puki co do projektu nie zaglądam bo nie pobieram z nieznanych źródeł<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />Spakuj do zipa i wstaw jako załącznik bo zaraz zniknie ten twój post a ci co na czerwono pisać mogą źli będą. ..<br /><br />A puki co do projektu nie zaglądam bo nie pobieram z nieznanych źródeł<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 13 lip 2016, o 20:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kyp89]]></name></author>
<updated>2016-07-13T20:16:51+01:00</updated>
<published>2016-07-13T19:35:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163955#p163955</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163955#p163955"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=163955#p163955"><![CDATA[
Witam<br />Tak jak kolega walczę z implementacją modbus'a w AVR.<br />Utknąłem bardzo szybko bo w momencie dostosowywania dema projektu z freemodbus do atmega 32 i Ecplice.<br />Dzieje się taka głupia rzecz: Eclipce kompiluje i nie informuje o błędach ale nie tworzy mi pliku hex. Tak się dzieje tylko z tym projektem.<br />Wrzucam spakowany projekt.<br /><br />Z góry dziękuję za pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14373">kyp89</a> — 13 lip 2016, o 19:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wswbezwis]]></name></author>
<updated>2016-05-27T14:39:28+01:00</updated>
<published>2016-05-27T14:39:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=161185#p161185</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=161185#p161185"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=161185#p161185"><![CDATA[
Zaimplementowałem freemodbusa na atxmegę 128a3u w wersji RTU oraz w TCPIP. Wersja TCPIP w połączeniu z ENC28J60. Wszystko śmiga.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6822">wswbezwis</a> — 27 maja 2016, o 14:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2015-12-29T22:32:39+01:00</updated>
<published>2015-12-29T22:32:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=149112#p149112</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=149112#p149112"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=149112#p149112"><![CDATA[
Witam.<br /><div class="quotetitle">MichalXY napisał(a):</div><div class="quotecontent"><br />No to kamień spadł z serca, bo gdzieś czytałem że tylko komercyjna wersja biblioteki freemodbus obsługuje takie rzeczy. - no chyba że źle zrozumiałem przekaz  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><br /></div><br />Kilka slave'ów (z zaimplementowanym freemodbusem) na jednej magistrali będzie działać bez problemu.<br />W implementacji multi-slave  w wersji komercyjnej chodzi o możliwość zaimplementowania kilku instancji slave na jednym urządzeniu bo należy pamiętać, że biblioteka jest przeznaczona na wiele platform (również np. PC).<br />Choć może ktoś by chciał się pokusić na zrobienie multislave'a na jakieś atmedze np. z 2 rs-ami no to wtedy już byłby problem.<br />Pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 29 gru 2015, o 22:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2015-12-13T20:14:54+01:00</updated>
<published>2015-12-13T20:14:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147879#p147879</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147879#p147879"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147879#p147879"><![CDATA[
W takim razie niech jeszcze ktoś potwierdzi jak z tym jest.  Ja mam Na magistrali kilka slave'ów ale wszystkie fabryczne moduły plus jeden mój na freemodbus i wszystko działa.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 13 gru 2015, o 20:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2015-12-13T20:04:22+01:00</updated>
<published>2015-12-13T20:04:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147877#p147877</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147877#p147877"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147877#p147877"><![CDATA[
No to kamień spadł z serca, bo gdzieś czytałem że tylko komercyjna wersja biblioteki freemodbus obsługuje takie rzeczy. - no chyba że źle zrozumiałem przekaz  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 13 gru 2015, o 20:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2015-12-13T20:09:57+01:00</updated>
<published>2015-12-13T19:40:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147874#p147874</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147874#p147874"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147874#p147874"><![CDATA[
To bez problemu pójdzie  i to nie dwa slavy a dużo więcej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 13 gru 2015, o 19:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2015-12-13T19:38:46+01:00</updated>
<published>2015-12-13T19:38:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147873#p147873</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147873#p147873"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147873#p147873"><![CDATA[
OK, może źle się wyraziłem  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> , mi chodzi o slavy oparte o freemodbusa a master to komputer - nie chcę na freemodbusie robić mastera  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 13 gru 2015, o 19:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[skalarro]]></name></author>
<updated>2015-12-13T19:34:20+01:00</updated>
<published>2015-12-13T19:34:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147872#p147872</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147872#p147872"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147872#p147872"><![CDATA[
Freemodbus to biblioteka tylko dla slave'a.<br />U mnie w połączeniu ze sterownikiem PLC jako master działa wyśmienicie. Ale Mastera na tym nie postawisz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4850">skalarro</a> — 13 gru 2015, o 19:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2015-12-13T19:29:49+01:00</updated>
<published>2015-12-13T19:29:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147871#p147871</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147871#p147871"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=147871#p147871"><![CDATA[
Cześć wszystkim,<br /><br />Mam do was takie pytanie, chcę stworzyć niewielką sieć urządzeń (2 urządzenia slave i 1 master po RS485 wykorzystując protokół MODBUS RTU) i moje pytanie brzmi czy biblioteka freemodbus obsłuży taką sieć, być może ktoś z was tworzył takie rozwiązanie właśnie z wykorzystaniem biblioteki freemodbus. <br /><br />Pozdrawiam!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 13 gru 2015, o 19:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xlr8]]></name></author>
<updated>2015-04-27T11:17:24+01:00</updated>
<published>2015-04-27T11:17:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=127583#p127583</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=127583#p127583"/>
<title type="html"><![CDATA[Re: Implementacja Modbus w AVR]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1523&amp;p=127583#p127583"><![CDATA[
Może komuś się przyda, przeportowałem na Atmega644 i śmiga, jako test oczywiście.<br />Poniżej źródło. <br /><br />[syntax=cpp]#define dXTAL 11059200 <br /><br />#include &lt;stdio.h&gt; <br />#include &lt;ina90.h&gt; <br />#include &lt;avr/interrupt.h&gt; // для обработки пррерывания <br />#include &quot;stdbool.h&quot; <br /><br />//размер буфера принимаемых по UART данных <br />#define MaxLenghtRecBuf 25 <br />//размер буфера передаваемых по UART данных <br />#define MaxLenghtTrBuf 25 <br /><br /><br />#define SetBit(Port,bit) Port|=(1&lt;&lt;bit) <br />#define ClrBit(Port,bit) Port&amp;=~(1&lt;&lt;bit) <br />#define InvBit(Port,bit) Port^=(1&lt;&lt;bit) <br />#define Hi(Int) (char) (Int&gt;&gt;8) <br />#define Low(Int) (char) (Int) <br /><br />//ModBus <br />char ModBus(char NumByte); <br />bool bModBus; //флаг обработки посылки <br />unsigned char cNumRcByte0; //передает в обработчик кол-во принятых байт <br />unsigned char cNumTrByte0; //кол-во передаваемых данных <br /><br />//UART <br />void StartUART0(void); <br />void StartTrans0(void); <br />unsigned char cmRcBuf0&#91;MaxLenghtRecBuf&#93; ; //буфер принимаемых данных <br />unsigned char cmTrBuf0&#91;MaxLenghtTrBuf&#93; ; //буфер передаваемых данных <br /><br />//начальные настройки <br />void Setup(void){ <br />DDRB=0xFF; //порт на выход <br />PORTB=0xFF; //на выходе 1 <br />DDRA=0x1; <br /><br /><br />// SetBit(DDRD, 4); //настройка управления мультиплесором <br />// ClrBit(PORTD,4); //COM-порт <br />// SetBit(DDRD, 5); //разрешение работы мультиплексора <br />// ClrBit(PORTD,5); // <br />}//end Setup() <br /><br />int main( void ){ <br />Setup(); //настройка регистров МК <br />_SEI(); //разрешение прерываний <br />StartUART0(); <br /><br />while(1){ <br /><br />if (bModBus){ <br /><br />cNumTrByte0=ModBus(cNumRcByte0); //обработка принятого соообщения ModBus <br />if (cNumTrByte0!=0) StartTrans0(); <br />bModBus=false; <br />}//end if (bModBus) <br />}//end while(1) <br />}//end main() <br /><br />//массивы для быстрого расчета кода CRC-16 <br />unsigned char srCRCHi&#91;256&#93;={ <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, <br />0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, <br />0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, <br />0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, <br />0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, <br />0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, <br />0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, <br />0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, <br />0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, <br />0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, <br />0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, <br />0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, <br />0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, <br />0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, <br />0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 <br />}; <br />unsigned char srCRCLo&#91;256&#93;={ <br />0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, <br />0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, <br />0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, <br />0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, <br />0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, <br />0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, <br />0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, <br />0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, <br />0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, <br />0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, <br />0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, <br />0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, <br />0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, <br />0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, <br />0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, <br />0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, <br />0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, <br />0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, <br />0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, <br />0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, <br />0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, <br />0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, <br />0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, <br />0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, <br />0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, <br />0x43, 0x83, 0x41, 0x81, 0x80, 0x40 <br />}; <br /><br />//функция вычисляет код CRC-16 <br />//на входе указатель на начало буфера <br />//и количество байт сообщения (без принятого кода CRC-16) <br />int GetCRC16(unsigned char *buf, char bufsize) <br />{ <br />char CRC_Low = 0xFF; <br />char CRC_High = 0xFF; <br />char k; <br />char carry; <br />for (k=0; k&lt;bufsize; k++) <br />{ <br />carry = CRC_Low ^ buf&#91;k&#93;; <br />CRC_Low = CRC_High ^ srCRCHi&#91;carry&#93;; <br />CRC_High = srCRCLo&#91;carry&#93;; <br />}; <br />//return (CRC_High); <br />return((CRC_High&lt;&lt;8)|CRC_Low); <br />}//end GetCRC16() <br /><br />//формирование ответа об ошибке <br />char ErrorMessage(char Error){ <br />char TempI; <br />cmTrBuf0&#91;1&#93;=cmRcBuf0&#91;1&#93;+0x80;;//команда с ошибкой <br />cmTrBuf0&#91;2&#93;=Error; <br />TempI=GetCRC16(cmTrBuf0,3);//подсчет КС посылки <br />cmTrBuf0&#91;3&#93;=Low(TempI); <br />cmTrBuf0&#91;4&#93;=Hi(TempI); <br />return 5; <br />}//end ErrorMessage() <br /><br />int CRC16; <br />char ModBus(char NumByte){ <br />int TempI; <br /><br />//вывод посылки на экран <br />cmRcBuf0&#91;NumByte&#93;=0x00; <br /><br />//обработка посылки <br />if (cmRcBuf0&#91;0&#93;!=0x01) return 0x00; //адрес устройства //ответ не нужен <br />CRC16=GetCRC16(cmRcBuf0,NumByte-2);//подсчет CRC в принятой посылке <br />TempI=(int) (cmRcBuf0&#91;NumByte-1&#93;&lt;&lt;8) + cmRcBuf0&#91;NumByte-2&#93;; <br />if (CRC16!=TempI) return 0x00; //контрольная сумма //ответ не нужен <br />cmTrBuf0&#91;0&#93;=0x01;//адрес устройства <br />//код команды <br />switch(cmRcBuf0&#91;1&#93;){ <br />case 0x03:{//чтение регистров <br /><br />TempI=(int) (cmRcBuf0&#91;2&#93;&lt;&lt;8) + cmRcBuf0&#91;3&#93;; <br />if (TempI!=1){ //првоерка номера регистра, есть только 1 регистр <br />return ErrorMessage(0x02); //данный адрес не может быть обработан <br />} <br />TempI=(int) (cmRcBuf0&#91;4&#93;&lt;&lt;8) + cmRcBuf0&#91;5&#93;; <br />if (TempI!=1){//проверка кол-ва запрашиваемых регистров, есть только 1 регистр <br />return ErrorMessage(0x02); //данный адрес не может быть обработан <br />} <br />cmTrBuf0&#91;1&#93;=0x03;//команда <br />cmTrBuf0&#91;2&#93;=0x02;//кол-во байт данных <br />cmTrBuf0&#91;3&#93;=0x00;//старший байт <br />TempI=PINB; <br />cmTrBuf0&#91;4&#93;=Low(TempI);//уровни порта F <br />TempI=GetCRC16(cmTrBuf0,5);//подсчет КС посылки <br />cmTrBuf0&#91;5&#93;=Low(TempI); <br />cmTrBuf0&#91;6&#93;=Hi(TempI); <br /><br />return 7; <br />} <br />case 0x06:{//запись в единичный регистр <br />TempI=(int) (cmRcBuf0&#91;2&#93;&lt;&lt;8) + cmRcBuf0&#91;3&#93;; <br />if (TempI!=1){ //првоерка номера регистра, есть только 1 регистр <br />return ErrorMessage(0x02); //данный адрес не может быть обработан <br />} <br />TempI=(int) (cmRcBuf0&#91;4&#93;&lt;&lt;8) + cmRcBuf0&#91;5&#93;; <br />if (TempI&gt;0xFF){ //проверка числа, которое надо записать в порт <br />return ErrorMessage(0x03); //недопустимые данные в запросе <br />} <br />PORTB=Low(TempI); <br />cmTrBuf0&#91;1&#93;=cmRcBuf0&#91;1&#93;;//команда <br />cmTrBuf0&#91;2&#93;=cmRcBuf0&#91;2&#93;;//адрес <br />cmTrBuf0&#91;3&#93;=cmRcBuf0&#91;3&#93;;// <br />cmTrBuf0&#91;4&#93;=cmRcBuf0&#91;4&#93;;//данные <br />cmTrBuf0&#91;5&#93;=cmRcBuf0&#91;5&#93;;// <br />cmTrBuf0&#91;6&#93;=cmRcBuf0&#91;6&#93;;//КС <br />cmTrBuf0&#91;7&#93;=cmRcBuf0&#91;7&#93;;// <br />return 8; <br />} <br />default:{ <br />return ErrorMessage(0x01); //недопустимая команда <br />} <br />} <br />}//end ModBus() <br /><br />//запретить прерывание приема <br />#define DisableReceive0 ClrBit(UCSRB,RXEN); ClrBit(UCSRB,RXCIE) <br />//разрешить прерывание приема <br />#define EnableReceive0 SetBit(UCSRB,RXEN); SetBit(UCSRB,RXCIE) <br />//проверка на разрешение прерывания приема <br />#define TestReceive0 TestBit(UCSRB,RXCIE) <br />//разрешить прерывание по освобождению буфера передачи, начать передачу <br />#define GoTrans0 SetBit(UCSRB,TXEN); SetBit(UCSRB,UDRIE) <br />//запретить прерывание по освобождению буфера передачи, остановка передачи <br />#define StopTrans0 ClrBit(UCSRB,TXEN); ClrBit(UCSRB,UDRIE) <br />//проверка на разрешение прерывания передачи <br />#define TestTrans0 TestBit(UCSRB,UDRIE) <br /><br /><br />#define StartTimer0 TCNT0=dTCNT0;TCCR0=0x03; //запуск таймера 0 <br />#define InitTimer0 TIFR&amp;=0xFD;TIMSK|=(1&lt;&lt;TOIE0); //инициализация таймера0 <br /><br />//MaxPause = 1.5*(8+1+2)/bod = 0.85мс -&gt; TCNT0~40 <br />#define dTCNT0 108; <br /><br />unsigned char RcCount, TrCount; //счетчик принятых/переданных данных дданных <br />bool StartRec=false;// false/true начало/прием посылки <br />unsigned char DataPause; //пауза между байтами <br /><br />extern bool bModBus; //флаг обработки посылки <br />extern unsigned char cNumRcByte0; //передает в обработчик кол-во принятых байт <br />extern unsigned char cNumTrByte0; <br /><br />//настройка UART <br />void StartUART0(void){ <br /><br />UBRRH=Hi(((dXTAL/16)/19200)-1); <br />UBRRL=Low(((dXTAL/16)/19200)-1);; <br /><br />UCSRA=0x00; <br />UCSRB=0xD8; <br />UCSRC=0x86; <br /><br />UBRRH=Hi(((dXTAL/16)/19200)-1); <br />UBRRL=Low(((dXTAL/16)/19200)-1); <br /><br />EnableReceive0; <br />InitTimer0; <br />StartTimer0; <br />}//end void StartUART0() <br /><br />char cTempUART; <br />ISR(USART_RXC_vect) //адрес прерывания приема UART <br />{ <br />cTempUART=UDR; <br /><br />if (UCSRA&amp;(1&lt;&lt;FE)) return; //FE-ошибка кадра, OVR - переполнение данных (флаги) <br /><br />if (!StartRec){ //если это первый байт, то начинаем прием <br />StartRec=true;\ <br />RcCount=0; <br />DataPause=0; <br />cmRcBuf0&#91;RcCount++&#93;=cTempUART; <br />StartTimer0; <br />}else{// end if (StartRec==0) //продолжаем прием <br />if (RcCount&lt;MaxLenghtRecBuf){//если еще не конец буфера <br />cmRcBuf0&#91;RcCount++&#93;=cTempUART; <br />PORTA=0x01; <br />}else{//буфер переполнен <br />cmRcBuf0&#91;MaxLenghtRecBuf-1&#93;=cTempUART; <br /><br />} <br />DataPause=0; <br />TCNT0=dTCNT0;//перезапуск таймера <br /><br />}//end else if (StartRec==0) <br />}//end __interrupt UART0_RX_interrupt() <br /><br /><br /><br />ISR(SIG_OVERFLOW0) //адрес прерывания таймера/счетчика 0 по переполнению <br />{ <br />if (StartRec){ <br />PORTA=0; <br />StartRec=false; //посылка принята <br />cNumRcByte0=RcCount; //кол-во принятых байт <br /><br />bModBus=true;// <br />TCCR0=0;//остановим таймер <br />} <br />}//end __interrupt void Timer0_overflowed_interrupt() <br /><br /><br />ISR(USART_TXC_vect) //адрес прерывания передачи в буфер UART <br />{ <br />if (TrCount&lt;cNumTrByte0){ <br /><br />UDR=cmTrBuf0&#91;TrCount&#93;; <br />TrCount++; <br /><br />}else{ <br />StopTrans0; <br />TrCount=0; <br />} <br />}//end __interrupt UART0_UDRE_interrupt() <br /><br />//разрешение передачи по UART, с указанием ко-ва передаваемых байтов <br />void StartTrans0(void){ <br />TrCount=0; <br />GoTrans0; <br />}//end void StartTrans1()[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8939">xlr8</a> — 27 kwi 2015, o 11:17</p><hr />
]]></content>
</entry>
</feed>