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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-02T22:52:31+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=18&amp;t=2168&amp;mode</id>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2014-01-02T22:52:31+01:00</updated>
<published>2014-01-02T22:52:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=63508#p63508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=63508#p63508"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=63508#p63508"><![CDATA[
Witam.<br />Linię DE masz podpiętą pod PD4?<br />Pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 2 sty 2014, o 22:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[developer85]]></name></author>
<updated>2013-12-19T13:25:51+01:00</updated>
<published>2013-12-19T13:25:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=61781#p61781</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=61781#p61781"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=61781#p61781"><![CDATA[
Znowu odgrzewamy kotleta:).<br />Kombinuje z bootloaderem również po rs485 1:1. Zmodyfikowałem funkcje UART_Rx_Byte. Bootloader sie ładnie wgrywa, procek daje znać o sobie. Lecz problem z wgraniem wsadu. BLS się nie zawiesza w głównej pętli, sprawdziłem diodą led.<br />Aha procek to atmega324pa<br /><br />[syntax=c]/* biblioteki avr-libc */<br />#include &lt;stdbool.h&gt;<br />#include &lt;stdint.h&gt;<br />#include &lt;avr/boot.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />////////////////////////////////////////////////////////////////////////////////<br />/* Definicje stałych programowych i makr */<br />////////////////////////////////////////////////////////////////////////////////<br /><br />// BAUD zdefiniowane w makefile<br />#define __UBRR ((F_CPU+BAUD*8UL)/(16UL*BAUD)-1)  // obliczamy UBRR dla U2X=0<br /><br />/* wersja bootloadera */<br />#define BOOTLOADER_VERSION 1<br /><br />/* ustawienia UART */<br />#define UART_DATA_BITS 8<br />#define UART_PARITY 'n'<br />#define UART_STOP_BITS 1<br /><br /><br /><br />// definicje na potrzeby RS485<br />#define UART_DE_PORT PORTD<br />#define UART_DE_DIR DDRD<br />#define UART_DE_BIT (1&lt;&lt;PD4)<br /><br />#define UART_DE_NADAWANIE  UART_DE_PORT |= UART_DE_BIT<br />#define UART_DE_ODBIERANIE  UART_DE_PORT &amp;=~ UART_DE_BIT<br /><br /><br />/* czas przesyłania jednego znaku przez UART &#91;us&#93; */<br />#if UART_PARITY == 'n'<br />    #define UART_BYTE_TIME \<br />        ( 1000000UL / ( BAUD / ( 1 + UART_DATA_BITS + UART_STOP_BITS ) ) )<br />#elif ( UART_PARITY == 'e' ) || ( UART_PARITY == 'o' )<br />    #define UART_BYTE_TIME \<br />        ( 1000000UL / ( BAUD / ( 1 + UART_DATA_BITS + 1 + UART_STOP_BITS ) ) )<br />#endif<br /><br />/* podstawienie nazwa rejestrów UART */<br />#ifndef UCSRA<br />    #define UCSRA UCSR0A<br />#endif<br />#ifndef UCSRB<br />    #define UCSRB UCSR0B<br />#endif<br />#ifndef UCSRC<br />    #define UCSRC UCSR0C<br />#endif<br />#ifndef UBRRL<br />    #define UBRRL UBRR0L<br />#endif<br />#ifndef UBRRH<br />    #define UBRRH UBRR0H<br />#endif<br />#ifndef UDR<br />    #define UDR UDR0<br />#endif<br /><br />/* podstawienie nazw bitów w rejestrze UCSRA */<br />#ifndef RXC<br />    #define RXC RXC0<br />#endif<br />#ifndef TXC<br />    #define TXC TXC0<br />#endif<br />#ifndef UDRE<br />    #define UDRE UDRE0<br />#endif<br />#ifndef FE<br />    #define FE FE0<br />#endif<br />#ifndef DOR<br />    #define DOR DOR0<br />#endif<br />#ifndef UPE<br />    #define UPE UPE0<br />#endif<br />#ifndef U2X<br />    #define U2X U2X0<br />#endif<br />#ifndef MPCM<br />    #define MPCM MPCM0<br />#endif<br /><br />/* podstawienie nazw bitów w rejestrze UCSRB */<br />#ifndef RXCIE<br />    #define RXCIE RXCIE0<br />#endif<br />#ifndef TXCIE<br />    #define TXCIE TXCIE0<br />#endif<br />#ifndef UDRIE<br />    #define UDRIE UDRIE0<br />#endif<br />#ifndef RXEN<br />    #define RXEN RXEN0<br />#endif<br />#ifndef TXEN<br />    #define TXEN TXEN0<br />#endif<br />#ifndef UCSZ2<br />    #define UCSZ2 UCSZ02<br />#endif<br />#ifndef RXB8<br />    #define RXB8 RXB80<br />#endif<br />#ifndef TXB8<br />    #define TXB8 TXB80<br />#endif<br /><br />/* podstawienie nazw bitów w rejestrze UCSRC */<br />#ifndef UMSEL<br />    #ifdef UMSEL0<br />        #define UMSEL UMSEL0<br />    #else<br />        #define UMSEL UMSEL00<br />        #define UMSEL0 UMSEL00<br />        #define UMSEL1 UMSEL01<br />    #endif<br />#endif<br />#ifndef UPM1<br />    #define UPM1 UPM01<br />#endif<br />#ifndef UPM0<br />    #define UPM0 UPM00<br />#endif<br />#ifndef USBS<br />    #define USBS USBS0<br />#endif<br />#ifndef UCSZ1<br />    #define UCSZ1 UCSZ01<br />#endif<br />#ifndef UCSZ0<br />    #define UCSZ0 UCSZ00<br />#endif<br />#ifndef UCPOL<br />    #define UCPOL UCPOL0<br />#endif<br /><br />/* ustawienia bitów konfiguracyjnych UART */<br />#if UART_DATA_BITS == 5<br />    #define UCSRB_DATA_BITS ( 0 &lt;&lt; UCSZ2 )<br />    #define UCSRC_DATA_BITS ( 0 &lt;&lt; UCSZ1 | 0 &lt;&lt; UCSZ0 )<br />#elif UART_DATA_BITS == 6<br />    #define UCSRB_DATA_BITS ( 0 &lt;&lt; UCSZ2 )<br />    #define UCSRC_DATA_BITS ( 0 &lt;&lt; UCSZ1 | 1 &lt;&lt; UCSZ0 )<br />#elif UART_DATA_BITS == 7<br />    #define UCSRB_DATA_BITS ( 0 &lt;&lt; UCSZ2 )<br />    #define UCSRC_DATA_BITS ( 1 &lt;&lt; UCSZ1 | 0 &lt;&lt; UCSZ0 )<br />#elif UART_DATA_BITS == 8<br />    #define UCSRB_DATA_BITS ( 0 &lt;&lt; UCSZ2 )<br />    #define UCSRC_DATA_BITS ( 1 &lt;&lt; UCSZ1 | 1 &lt;&lt; UCSZ0 )<br />#elif UART_DATA_BITS == 9<br />    #define UCSRB_DATA_BITS ( 1 &lt;&lt; UCSZ2 )<br />    #define UCSRC_DATA_BITS ( 1 &lt;&lt; UCSZ1 | 1 &lt;&lt; UCSZ0 )<br />#endif<br /><br />#if UART_PARITY == 'n'<br />    #define UCSRC_PARITY ( 0 &lt;&lt; UPM1 | 0 &lt;&lt; UPM0 )<br />#elif UART_PARITY == 'e'<br />    #define UCSRC_PARITY ( 1 &lt;&lt; UPM1 | 0 &lt;&lt; UPM0 )<br />#elif UART_PARITY == 'o'<br />    #define UCSRC_PARITY ( 1 &lt;&lt; UPM1 | 1 &lt;&lt; UPM0 )<br />#endif<br /><br />#if UART_STOP_BITS == 1<br />    #define UCSRC_STOP_BITS ( 0 &lt;&lt; USBS )<br />#elif UART_STOP_BITS == 2<br />    #define UCSRC_STOP_BITS ( 1 &lt;&lt; USBS )<br />#endif<br /><br />/* makro zamieniające podany argument na łańcuch znaków */<br />#define TOSTRING( x ) STRINGIFY( x )<br />#define STRINGIFY( x ) #x<br /><br />////////////////////////////////////////////////////////////////////////////////<br />/* Deklaracje funkcji statycznych */<br />////////////////////////////////////////////////////////////////////////////////<br /><br />static void UART_TX_Byte(<br />    const uint8_t Data );<br /><br />static void UART_TX_String_P(<br />    const char *String_Ptr );<br /><br />static uint16_t _UART_RX_Wait(<br />    uint16_t Timeout );<br /><br />/* Makro przeliczające argument w milisekundach na przyjmowaną przez funkcję<br /> * _UART_RX_Wait wielokrotność czasu przesyłania jednego znaku. */<br />//#define UART_RX_Wait( x ) _UART_RX_Wait( ( ( x ) &gt; UART_BYTE_TIME ) ? \<br />//    ( ( ( x ) * 1000UL ) / UART_BYTE_TIME ) : 1 )<br /><br />#define UART_RX_Wait( x ) _UART_RX_Wait( ( x * 1000UL ) / UART_BYTE_TIME )<br /><br />////////////////////////////////////////////////////////////////////////////////<br />/* Definicje funkcji */<br />////////////////////////////////////////////////////////////////////////////////<br /><br />static void __vectors( void )<br />    __attribute__ (( section( &quot;.vectors&quot; ), naked, used ));<br />static void __vectors( void )<br />{<br />    /* skok do sekcji .init2 (konieczny ze względu na umieszczanie stałych z<br />     * pamięci programu pomiędzy sekcjami .vectors a .init0, a więc na samym<br />     * początku programu w przypadku wykorzystania opcji -nostartfiles */<br />    asm (<br />        &quot;rjmp __init2&quot; &quot;\n\t&quot;<br />        : : );<br />}<br /><br />static void __init2( void )<br />    __attribute__ (( section( &quot;.init2&quot; ), naked, used ));<br />static void __init2( void )<br />{<br />    /* inicjalizacja wskaźnika stosu, rejestru z zerem i rejestru flag */<br />asm volatile (<br />&quot;out __SP_L__, %A0&quot; &quot;\n\t&quot;<br />&quot;out __SP_H__, %B0&quot; &quot;\n\t&quot;<br />&quot;clr __zero_reg__&quot; &quot;\n\t&quot;<br />&quot;out __SREG__, __zero_reg__&quot; &quot;\n\t&quot;<br />        : : &quot;r&quot;( ( uint16_t )( RAMEND ) ) );<br />}<br /><br />//#define WDIF<br /><br />//#ifdef WDIF<br />    static void __init3( void )<br />        __attribute__ (( section( &quot;.init3&quot; ), naked, used ));<br />    static void __init3( void )<br />    {<br />        /* wyłączenie watchdoga (w tych mikrokontrolerach, w których watchdog<br />         * ma możliwość generowania przerwania pozostaje on też aktywny po<br />         * resecie) */<br />        MCUSR = 0;<br />        _WD_CONTROL_REG = 1 &lt;&lt; _WD_CHANGE_BIT | 1 &lt;&lt; WDE;<br />        _WD_CONTROL_REG = 0;<br />    }<br />//#endif<br /><br />static void __init9( void )<br />    __attribute__ (( section( &quot;.init9&quot; ), naked, used ));<br />static void __init9( void )<br />{<br />    /* skok do funkcji main */<br />asm ( &quot;rjmp main&quot; &quot;\n\t&quot;   : : );<br />}<br /><br />int main( void )<br />    __attribute__ (( noreturn ));<br />int main( void )<br />{<br />DDRC |= (1&lt;&lt;PC3);<br />PORTC |=(1&lt;&lt;PC3);<br />    /* konfiguracja i włączenie interfejsu UART */<br />    UBRRH = __UBRR&gt;&gt;8;//UBRRH_VALUE;<br />    UBRRL = __UBRR;//UBRRL_VALUE;<br /><br /><br /><br />UART_DE_DIR |= UART_DE_BIT;<br />UART_DE_ODBIERANIE;<br />UCSR0B |= (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0)|(1&lt;&lt;RXCIE0)|(1&lt;&lt;TXCIE0);<br /><br />    #ifdef URSEL<br />        UCSRC = 1 &lt;&lt; URSEL | UCSRC_DATA_BITS | UCSRC_PARITY | UCSRC_STOP_BITS;<br />    #else<br />        UCSRC = UCSRC_DATA_BITS | UCSRC_PARITY | UCSRC_STOP_BITS;<br />    #endif<br />    UCSRB = 1 &lt;&lt; RXEN | 1 &lt;&lt; TXEN | UCSRB_DATA_BITS;<br /><br />    /* deklaracja zmiennych */<br />    uint16_t Received_Char;<br /><br />    /* wysyłanie znaku '?' do odebrania znaku 'u' lub upłynięcia czasu<br />     * oczekiwania */<br />for ( uint8_t Retries_Left = BOOT_WAIT * 100; Retries_Left; --Retries_Left )<br />    {<br />UART_TX_Byte( '?' );<br />_delay_ms(100);<br /><br />        if ( ( uint8_t )UART_RX_Wait( 1000 ) == 'u' )<br />        {<br />            /* definicja zmiennych */<br />            bool Is_Comm_Lost = false;<br /><br />            while ( 1 )<br />            {<br />            PORTC ^=(1&lt;&lt;PC3);<br />                /* odebranie znaku */<br />                uint16_t Received_Char = UART_RX_Wait( 1000 );<br /><br />                if ( ( uint8_t )Received_Char == 'i' )<br />                {<br />                    /* jeśli odebrano znak 'i', to wysłanie ciągu znaków<br />                     * identyfikujących mikrokontroler i bootloader */<br />                    UART_TX_String_P( PSTR( &quot;\r\n&quot; &quot;&amp;&quot;<br />                        TOSTRING( SPM_PAGESIZE ) &quot;,&quot;<br />                        TOSTRING( BLS_START ) &quot;,&quot;<br />                        TOSTRING( MCU ) &quot;,&quot;<br />                        TOSTRING( XTAL ) &quot;,&quot;<br />                        TOSTRING( BOOTLOADER_VERSION )<br />                        &quot;*&quot; &quot;\r\n&quot; ) );<br />                }<br />                else if ( ( uint8_t )Received_Char == 'w' )<br />                {<br />                PORTC ^=(1&lt;&lt;PC3);<br />                    /* odczekanie do zakończenia operacji na pamięci EEPROM<br />                     * i Flash */<br />                    eeprom_busy_wait();<br />                    boot_spm_busy_wait();<br /><br />                    /* kasowanie całej pamięci programu */<br />                    for ( uint32_t Page_Address = 0; Page_Address &lt; BLS_START;<br />                        Page_Address += SPM_PAGESIZE )<br />                    {<br />                        /* skasowanie strony pamięci */<br />                        boot_page_erase( Page_Address );<br />                        boot_spm_busy_wait();<br />                    }<br /><br />                    /* programowanie pamięci programu */<br />                    for ( uint32_t Page_Address = 0; Page_Address &lt; BLS_START;<br />                        Page_Address += SPM_PAGESIZE )<br />                    {<br />                    <br />                        /* wysłanie znaku '@' */<br />                        UART_TX_Byte( '@' );<br /><br />                        /* jeśli odebrano zero lub upłynął czas oczekiwania na<br />                         * odpowiedź, to zakończenie pracy bootloadera */<br />                        Received_Char = UART_RX_Wait( 1000 );<br />                        if ( !Received_Char || Received_Char &gt; 0xff )<br />                            break;<br /><br />                        /* zapełnienie bufora strony */<br />                        for ( uint16_t Byte_Address = 0;<br />                            Byte_Address &lt; SPM_PAGESIZE; Byte_Address += 2 )<br />                        {<br />                        PORTC &amp;=~(1&lt;&lt;PC3);<br />                            /* próba odebrania młodszego bajtu słowa z pamięci<br />                             * programu */<br />                            if ( ( Received_Char = UART_RX_Wait( 1000 ) )<br />                                &gt; 0xff )<br />                            {<br />                                Is_Comm_Lost = true;<br />                                break;<br />                            }<br /><br />                            uint16_t Instruction = Received_Char;<br /><br />                            /* próba odebrania starszego bajtu słowa z pamięci<br />                             * programu */<br />                            if ( ( Received_Char = UART_RX_Wait( 1000 ) )<br />                                &gt; 0xff )<br />                            {<br />                                Is_Comm_Lost = true;<br />                                break;<br />                            }<br /><br />                            Instruction += Received_Char &lt;&lt; 8;<br /><br />                            /* zapisanie instrukcji do bufora */<br />                            boot_page_fill( Byte_Address, Instruction );<br />                        }<br /><br />                        if ( Is_Comm_Lost )<br />                            break;<br />                        PORTC &amp;=~(1&lt;&lt;PC3);<br />                        /* zapisanie strony pamięci */<br />                        boot_page_write( Page_Address );<br />                        boot_spm_busy_wait();<br />                    }<br /><br />                    /* odblokowanie sekcji Read-While-Write */<br />                    boot_rww_enable();<br /><br />                    /* zakończenie pracy bootloadera */<br />                    break;<br />                }<br />                else<br />                {<br />                    /* jeśli odebrano inny znak lub upłynął czas oczekiwania na<br />                     * odpowiedź, to zakończenie pracy bootloadera */<br />                    break;<br />                }<br />            }<br /><br />            /* jeśli komunikacja z komputerem urwała się podczas przesyłania<br />             * strony, to bootloader jest uruchamiany ponownie, w przeciwnym<br />             * przypadku zakończenie pracy bootloadera */<br />            if ( Is_Comm_Lost )<br />                Retries_Left = BOOT_WAIT * 10;<br />            else<br />                break;<br />        }<br />}<br /><br />    /* wyłączenie interfejsu UART (dzieje się to dopiero po zakończeniu<br />     * wysyłania) i odczekanie do końca ewentualnej transmisji */<br />UCSRB = 0;<br />    //_delay_us( UART_BYTE_TIME );<br /><br />    /* skok do właściwego programu */<br />    #if defined( __AVR_HAVE_JMP_CALL__ )<br />        asm volatile (<br />            &quot;jmp 0&quot; &quot;\n\t&quot;<br />            : : );<br />    #elif defined( EIND )<br />        EIND = 0;<br />        asm volatile (<br />            &quot;eijmp&quot; &quot;\n\t&quot;<br />            : : &quot;z&quot; ( 0 ) );<br />    #else<br />        asm volatile (<br />            &quot;ijmp&quot; &quot;\n\t&quot;<br />            : : &quot;z&quot; ( 0 ) );<br />    #endif<br /><br />    /* nieskończona pętla (konieczna, by kompilator nie wygenerował<br />     * niepotrzebnego kodu) */<br />    while ( 1 )<br />        {}<br />}<br /><br />static void UART_TX_Byte(<br />    const uint8_t Data )<br />{<br />while ( !( UCSRA &amp; 1 &lt;&lt; UDRE ) ) wdt_reset();<br />UART_DE_NADAWANIE;<br />    UDR = Data;<br />    while(!(UCSRA &amp; 1&lt;&lt;TXC)) wdt_reset();    // wait for UDR to be empty<br />      UCSRA |= 1&lt;&lt;TXC;<br />    UART_DE_ODBIERANIE;<br />}<br /><br />static void UART_TX_String_P(<br />    const char *String_Ptr )<br />{<br />uint8_t Single_Char;<br /><br />    #ifdef __AVR_HAVE_ELPM__<br />        while ( ( Single_Char = pgm_read_byte_far( String_Ptr++ ) ) )<br /><br />    #else<br />        while ( ( Single_Char = pgm_read_byte_near( String_Ptr++ ) ) )<br />    #endif<br />            UART_TX_Byte( Single_Char );<br /><br />}<br /><br />static uint16_t _UART_RX_Wait(<br />    uint16_t Timeout )<br />{<br />do<br />    {<br />if ( UCSRA &amp; 1 &lt;&lt; RXC )<br />            return ( uint16_t )UDR;<br /><br />        _delay_us( UART_BYTE_TIME );<br />} while ( --Timeout );<br /><br />return 0xffff;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=390">developer85</a> — 19 gru 2013, o 13:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-05-06T13:18:22+01:00</updated>
<published>2013-05-06T13:18:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36262#p36262</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36262#p36262"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36262#p36262"><![CDATA[
<div class="quotetitle">bss34 napisał(a):</div><div class="quotecontent"><br />U siebie zrobiłem podobnie! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /> Z tym, że działa to z 31 modułami, również rozrzuconymi po domu i ogrodzie, u mnie przykładowy format komendy do soft resetu to &quot;!99r&quot; Gdzie ! początek rozkazu, 99 adres modułu, a r to restart i wejście w tryb bootloadera na 5 sekund.<br /></div><br /><br />No i piękna sprawa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> gotowy przepis<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 maja 2013, o 13:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-05-06T12:28:03+01:00</updated>
<published>2013-05-06T12:28:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36259#p36259</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36259#p36259"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36259#p36259"><![CDATA[
<div class="quotetitle">jark napisał(a):</div><div class="quotecontent"><br />Witam.<br />Odgrzeję starego kotleta ale wątek mi pomógł więc napiszę.<br />Dzięki za poprawki do bootloadera - świetnie działa z rs485.<br />Oczywiście też czekam na update mkbootloadera do pełnej obsługi rs485 ale chciałbym napisać że również z tą wersją można sobie trochę ułatwić programowanie wielu układów połączonych w sieć. Wprawdzie nie wszystkie na raz ale pojedynczo (ale bez odłączania od sieci) działa całkiem sprawnie. Mam 3 moduły rozrzucone po domu (to nie problem bo dom nie duży) ale mocno zabudowane tzn. do każdego żeby się dostać to trochę się trzeba nademontować <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wszystkie komunikowały się ze sobą (a raczej z masterem będącym w dogodnym miejscu) po rs485. Protokół prosty jakiś tam sobie wymysliłem czyli np $1X oznacza:<br />$ - (oznaczenie początku rozkazu)<br />1 - adres modułu.<br />X - komenda np odczyt to R, zapis to W+FF (wartość w hex) jest też reset - S<br />I teraz jak chcę zaktualizować we wszystkich modułach programy z jednego miejsca to się wpinam kompem w sieć rs485, wyłączam mastera  (transmisja więc ustaje bo protokół jest tak zbudowany że slave-y siedzą cicho do momentu aż konkretnego master nie zapyta), odpalam mkbootloader, otwieram plik ze wsadem dla odpowiedniego slave-a i ustawiam [software reset] np $1S (jeśli chcę zaktualizować slave-a nr 1), wciskam wstrzyknij i po chwili mam wsad zaktualizowany. I tak z każdym po kolei zmieniając ciąg znaków w opcji [software reset].<br />Wiem że ameryki nie odkryłem ale może się komuś ta uproszczona wersja przyda bo mi baaaaardzo ułatwiła życie.<br />Pozdrawiam<br />Jarek<br /></div><br /><br /><br />U siebie zrobiłem podobnie! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /> Z tym, że działa to z 31 modułami, również rozrzuconymi po domu i ogrodzie, u mnie przykładowy format komendy do soft resetu to &quot;!99r&quot; Gdzie ! początek rozkazu, 99 adres modułu, a r to restart i wejście w tryb bootloadera na 5 sekund.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=519">bss34</a> — 6 maja 2013, o 12:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-05-04T07:08:32+01:00</updated>
<published>2013-05-04T07:08:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36044#p36044</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36044#p36044"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36044#p36044"><![CDATA[
jark no i bardzo fajny sposób <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=54">mirekk36</a> — 4 maja 2013, o 07:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jark]]></name></author>
<updated>2013-05-04T01:00:52+01:00</updated>
<published>2013-05-04T01:00:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36039#p36039</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36039#p36039"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=36039#p36039"><![CDATA[
Witam.<br />Odgrzeję starego kotleta ale wątek mi pomógł więc napiszę.<br />Dzięki za poprawki do bootloadera - świetnie działa z rs485.<br />Oczywiście też czekam na update mkbootloadera do pełnej obsługi rs485 ale chciałbym napisać że również z tą wersją można sobie trochę ułatwić programowanie wielu układów połączonych w sieć. Wprawdzie nie wszystkie na raz ale pojedynczo (ale bez odłączania od sieci) działa całkiem sprawnie. Mam 3 moduły rozrzucone po domu (to nie problem bo dom nie duży) ale mocno zabudowane tzn. do każdego żeby się dostać to trochę się trzeba nademontować <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wszystkie komunikowały się ze sobą (a raczej z masterem będącym w dogodnym miejscu) po rs485. Protokół prosty jakiś tam sobie wymysliłem czyli np $1X oznacza:<br />$ - (oznaczenie początku rozkazu)<br />1 - adres modułu.<br />X - komenda np odczyt to R, zapis to W+FF (wartość w hex) jest też reset - S<br />I teraz jak chcę zaktualizować we wszystkich modułach programy z jednego miejsca to się wpinam kompem w sieć rs485, wyłączam mastera  (transmisja więc ustaje bo protokół jest tak zbudowany że slave-y siedzą cicho do momentu aż konkretnego master nie zapyta), odpalam mkbootloader, otwieram plik ze wsadem dla odpowiedniego slave-a i ustawiam [software reset] np $1S (jeśli chcę zaktualizować slave-a nr 1), wciskam wstrzyknij i po chwili mam wsad zaktualizowany. I tak z każdym po kolei zmieniając ciąg znaków w opcji [software reset].<br />Wiem że ameryki nie odkryłem ale może się komuś ta uproszczona wersja przyda bo mi baaaaardzo ułatwiła życie.<br />Pozdrawiam<br />Jarek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=582">jark</a> — 4 maja 2013, o 01:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rayden]]></name></author>
<updated>2013-02-17T20:44:32+01:00</updated>
<published>2013-02-17T20:44:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28446#p28446</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28446#p28446"/>
<title type="html"><![CDATA[Re: Odp: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28446#p28446"><![CDATA[
Sprawdz czy pin i port od kierunku transmisjii wysterowujesz<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=682">rayden</a> — 17 lut 2013, o 20:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-17T18:40:33+01:00</updated>
<published>2013-02-17T18:40:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28435#p28435</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28435#p28435"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28435#p28435"><![CDATA[
Dwie linijki wyżej niż:<br />[syntax=c]UART_TX_Byte( '?' );[/syntax]<br />jest <br />[syntax=c]UART_RX_Wait(100)[/syntax]<br />możliwe, że czas oczekiwania jest za krótki dla RS485.<br /><br />Zalecam też sprawdzenie komunikacji w obie strony na prostszym przykładzie, aby upewnić się, że nie ma kłopotów z komunikacją.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 17 lut 2013, o 18:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-02-17T15:27:09+01:00</updated>
<published>2013-02-17T15:27:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28424#p28424</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28424#p28424"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28424#p28424"><![CDATA[
tak tylko problem w tym, że po połączeniu  z terminalem działają mi tylko znaki zachęty &quot;??????????&quot;, bootloader via rs485 nie zgłasza się na komendy &quot;U&quot; i &quot;I&quot;. Przejściówka  usb-rs485 sprawna:-) Myślałem, że gdzieś tu jest wina.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=519">bss34</a> — 17 lut 2013, o 15:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-02-17T14:21:06+01:00</updated>
<published>2013-02-17T14:21:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28420#p28420</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28420#p28420"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28420#p28420"><![CDATA[
W nagłówku <strong>avr/wdt.h</strong> masz zdefiniowane makro <strong>wdt_reset()</strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 17 lut 2013, o 14:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-02-17T13:38:46+01:00</updated>
<published>2013-02-17T13:38:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28413#p28413</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28413#p28413"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=28413#p28413"><![CDATA[
<div class="quotetitle">rayden napisał(a):</div><div class="quotecontent"><br />drobna pomylka w kodzie poprzednim ponizej poprawny:<br />[syntax=c]static void UART_TX_Byte(unsigned char ch)<br />{<br />  while(!(UCSRA &amp; 1&lt;&lt;UDRE)) WDR();      // wait for empty transmit buffer<br /><br />  RS485PORT |= RS485TXE;            // switch to TX mode<br />  UDR = ch;                        // write char<br />  while(!(UCSRA &amp; 1&lt;&lt;TXC)) WDR();    // wait for UDR to be empty<br />  UCSRA |= 1&lt;&lt;TXC;                   // clear flag<br />  RS485PORT &amp;= ~RS485TXE;           // switch to RX mode<br />}[/syntax]<br /></div><br /><br />Mam jeszcze drobny problem z WDR();    jak powinien być zdefiniowany?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=519">bss34</a> — 17 lut 2013, o 13:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rayden]]></name></author>
<updated>2013-01-30T11:32:58+01:00</updated>
<published>2013-01-30T11:32:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26282#p26282</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26282#p26282"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26282#p26282"><![CDATA[
drobna pomylka w kodzie poprzednim ponizej poprawny:<br />[syntax=c]static void UART_TX_Byte(unsigned char ch)<br />{<br />  while(!(UCSRA &amp; 1&lt;&lt;UDRE)) WDR();      // wait for empty transmit buffer<br /><br />  RS485PORT |= RS485TXE;            // switch to TX mode<br />  UDR = ch;                        // write char<br />  while(!(UCSRA &amp; 1&lt;&lt;TXC)) WDR();    // wait for UDR to be empty<br />  UCSRA |= 1&lt;&lt;TXC;                   // clear flag<br />  RS485PORT &amp;= ~RS485TXE;           // switch to RX mode<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=682">rayden</a> — 30 sty 2013, o 11:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rayden]]></name></author>
<updated>2013-01-30T08:09:02+01:00</updated>
<published>2013-01-30T08:09:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26272#p26272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26272#p26272"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26272#p26272"><![CDATA[
Proszę bardzo:<br />[syntax=c]static void UART_TX_Byte(unsigned char ch)<br />{<br />  while(!(UCSRA &amp; UDRE)) WDR();      // wait for empty transmit buffer<br /><br />  RS485PORT |= RS485TXE;            // switch to TX mode<br />  UDR = ch;                        // write char<br />  while(!(UCSRA &amp; 1&lt;&lt;TXC)) WDR();    // wait for UDR to be empty<br />  UCSRA |= 1&lt;&lt;TXC;                   // clear flag<br />  RS485PORT &amp;= ~RS485TXE;           // switch to RX mode<br />}[/syntax]<br /><br />No i gdzieś na początku funkcji main trzeba ustawić:<br />[syntax=c]RS485DDR |= RS485TXE;             // RS485 pin as output<br />RS485PORT &amp;= ~RS485TXE;          // set RS485 in Rx mode[/syntax]<br /><br />Natomiast jeszcze przed funkcją main zdefiniować sobie makra do rejestru DDR i rejestru PORT (już pomijam).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=682">rayden</a> — 30 sty 2013, o 08:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-01-29T23:10:18+01:00</updated>
<published>2013-01-29T23:10:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26263#p26263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26263#p26263"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26263#p26263"><![CDATA[
Jeżeli można to poprosiłbym o zaktualizowany kod <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=519">bss34</a> — 29 sty 2013, o 23:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rayden]]></name></author>
<updated>2013-01-29T22:47:49+01:00</updated>
<published>2013-01-29T22:47:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26261#p26261</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26261#p26261"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=26261#p26261"><![CDATA[
Zgadzam się z kolegą może priorytet w przyszłości nieco wzrośnie? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Póki co bez problemów da się przerobić MkBootloader w ten sposób, żeby programował jeden układ przez 485. Wystarczy w kodzie bootloadera na avr sterować kierunkiem przepływu przed i po wysłaniu znaku. Kilka linijek kodu w sumie. Jak ktoś potrzebuje to zamieszczę zmianę. Szkoda, że nie da się eepromu programować i lockbitów programować od bootloadera (chociaż to 2 da się przeżyć). Ogólnie program rozwojowy jest. Swego czasu przybierałem się do aktualizacji oprogramowania w układach pracujących w sieci wyposażonej w RFM ciekawe do zabawy, polecam <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=682">rayden</a> — 29 sty 2013, o 22:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-01-22T13:43:48+01:00</updated>
<published>2013-01-22T13:43:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25565#p25565</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25565#p25565"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25565#p25565"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />1:1 powinno spokojnie działać - sterowanie linią kierunku dla MAX485 masz przecież w przykładach w książce niebieskiej.<br /><br />A jeśli chodzi o sieć z wieloma układami Slave to trzeba byłoby przerabiać już aplikację na PC. Mam to w planach i jest na liście rozwojowej programu ale niestety ma niski priorytet <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Za to pomyśl sobie o innym sposobie aktualizacji wsadów w trudno dostępnych sterownikach. Bluetooth, tylko nie pisz mi zaraz że to za drogie - bo odpowiem ci że można to wręcz za DARMO zrobić <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie trzeba przecież wkładać BT do każdego sterownika SLAVE, tylko wyprowadzić na wierzch obudowy gniazdko na moduł BT, z którym chodzisz i masz go w walizce serwisowej. Potrzebujesz podmienić wsad? to wyjmujesz moduł BT z walizki, wpinasz w obudowę i bez żadnych kabli pięknie tym samym bootloaderem lecisz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... może troszkę wolniejsza transmisja ale za to JAKA WYGODA <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />obejrzyj sobie to:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/12/btm-222-poradnik-video-od-do-z.html" >http://mirekk36.blogspot.com/2012/12/bt ... -do-z.html</a><!-- m --><br /></div><br /><br />Dziekuję za pomoc, jak wrócę do domu sprawdzę przykłady z książki, z przenośnym BT jest to świetny pomysł, ale wolałbym nie wyprowadzać więcej przewodów niż to potrzebne. Obudowa będzie typu 'zalewajka żywicą poliuretanową&quot; więc ciężko mi będzie dodatkowe kable lub złącze odpowiednio ułożyć.  Szkoda, ża aplikacja na PC obsługująca wiele modułów slave ma na razie niski priorytet <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":-(" title="Smutny" />( Ale wydaje mi się, że warto będzie poczekać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" />)<br /><br />   <a href="http://forum.atnel.pl/_obrazki/o/519_07a28a581a700e990591cfa2a3b161c5.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/519_07a28a581a700e990591cfa2a3b161c5.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=519">bss34</a> — 22 sty 2013, o 13:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-22T13:17:19+01:00</updated>
<published>2013-01-22T13:17:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25558#p25558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25558#p25558"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25558#p25558"><![CDATA[
1:1 powinno spokojnie działać - sterowanie linią kierunku dla MAX485 masz przecież w przykładach w książce niebieskiej.<br /><br />A jeśli chodzi o sieć z wieloma układami Slave to trzeba byłoby przerabiać już aplikację na PC. Mam to w planach i jest na liście rozwojowej programu ale niestety ma niski priorytet <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Za to pomyśl sobie o innym sposobie aktualizacji wsadów w trudno dostępnych sterownikach. Bluetooth, tylko nie pisz mi zaraz że to za drogie - bo odpowiem ci że można to wręcz za DARMO zrobić <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie trzeba przecież wkładać BT do każdego sterownika SLAVE, tylko wyprowadzić na wierzch obudowy gniazdko na moduł BT, z którym chodzisz i masz go w walizce serwisowej. Potrzebujesz podmienić wsad? to wyjmujesz moduł BT z walizki, wpinasz w obudowę i bez żadnych kabli pięknie tym samym bootloaderem lecisz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... może troszkę wolniejsza transmisja ale za to JAKA WYGODA <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />obejrzyj sobie to:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/12/btm-222-poradnik-video-od-do-z.html" >http://mirekk36.blogspot.com/2012/12/bt ... -do-z.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 sty 2013, o 13:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-01-22T12:33:53+01:00</updated>
<published>2013-01-22T12:33:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25554#p25554</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25554#p25554"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25554#p25554"><![CDATA[
W sieci RS485 byłoby przeidealnie, ale na razie wystarczy również 1:1. Mam 32 moduły w których musiałem się dolutowywać kynarkiem przed SN75176 aby móc wrzucić wsad (nie projektowałem złącza ISP w płytce). Docelowo będą one schowane w puszkach podtynkowych więc będzie utrudniony dostęp aby zrobić aktualizację firmware.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=519">bss34</a> — 22 sty 2013, o 12:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-01-22T12:11:22+01:00</updated>
<published>2013-01-22T12:11:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25552#p25552</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25552#p25552"/>
<title type="html"><![CDATA[Re: RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25552#p25552"><![CDATA[
Ale tobie chodzi o połączenie RS485 tak 1:1 , czy żeby działał w sieci gdzie jest wiele układów SLAVE ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 22 sty 2013, o 12:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bss34]]></name></author>
<updated>2013-01-22T11:30:47+01:00</updated>
<published>2013-01-22T11:30:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25548#p25548</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25548#p25548"/>
<title type="html"><![CDATA[RS485 + MKBOOTLOADER]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2168&amp;p=25548#p25548"><![CDATA[
Witam!<br /><br />Mam malutkie pytanie, jak przerobić mkbootloader aby był w stanie współpracować z RS485 w half-duplex. Po RS232 wszystko działa bez zarzutu, po rs485 widać znaki zapytania w terminalu natomiast nie reaguje na &quot;U&quot; i &quot;I&quot;. Pin do zmiany kierunku transmisji do PD2 (INT0) w Atmega8. Chodzi mi o kawałek kodu, który wysłałby zachętę np:&quot;???&quot; a potem przełączył się na odbiór. Jeżeli chodzi o język C to dopiero zaczynam się uczyć....<br /><br />pozdrawiam<br />BS<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=519">bss34</a> — 22 sty 2013, o 11:30</p><hr />
]]></content>
</entry>
</feed>