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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-06-28T15:21:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=20926&amp;mode</id>
<entry>
<author><name><![CDATA[mateusz19955]]></name></author>
<updated>2018-06-28T15:21:58+01:00</updated>
<published>2018-06-28T15:21:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209375#p209375</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209375#p209375"/>
<title type="html"><![CDATA[Re: RS485 problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209375#p209375"><![CDATA[
No właśnie, bo teraz mi niedziała przerwanie od rxc_vect.<br />Kurde, już niewiem co źle robię.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 21 minutach ]</span></strong><br /><br />Dobra, teraz to już na pewno wszystko działa.<br />Trzeba po prostu ustawiać po kolei bity w rejestrze UCSRB.<br />Przynajmniej u mnie to pomogło.<br />A i gdy przyjdzie coś po usarcie i zadziała przerwanie od rxc_vect to trzeba to odczytać bo jak nie odczytamy to txc_vect niechce działąć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3621">mateusz19955</a> — 28 cze 2018, o 15:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2018-06-28T15:19:54+01:00</updated>
<published>2018-06-28T15:19:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209374#p209374</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209374#p209374"/>
<title type="html"><![CDATA[Re: RS485 problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209374#p209374"><![CDATA[
Druga linijka nadpisuje wartość z pierwszej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 28 cze 2018, o 15:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mateusz19955]]></name></author>
<updated>2018-06-28T14:57:08+01:00</updated>
<published>2018-06-28T14:57:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209373#p209373</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209373#p209373"/>
<title type="html"><![CDATA[Re: RS485 problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209373#p209373"><![CDATA[
Dobra problem rozwiązany.<br />Pomogło niewielka zmiana w funkcji init_usart.<br /><br />Wcześniej było tak i nie działało:<br />[syntax=c]UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;RXCIE)|(1&lt;&lt;TXEN)|(1&lt;&lt;TXCIE);[/syntax]<br /><br />A teraz jest tak i działa:<br />[syntax=c]UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;RXCIE);<br />UCSRB = (1&lt;&lt;TXEN)|(1&lt;&lt;TXCIE);[/syntax]<br /><br />Tylko zastanawiam się dlaczego to robi taką różnicę?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3621">mateusz19955</a> — 28 cze 2018, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mateusz19955]]></name></author>
<updated>2018-06-28T13:36:31+01:00</updated>
<published>2018-06-28T13:36:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209370#p209370</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209370#p209370"/>
<title type="html"><![CDATA[RS485 problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20926&amp;p=209370#p209370"><![CDATA[
Witam, próbuję uruchomić transmisję po RS485 ale mam mały problem.<br />Gdy nacisnę przycisk PB4 lub PB5 to max485 poprzez pin DE przełącz mi się w stan wysoki i następuje wysłanie znaku 1 lub 2 przez funkcję usart_transmit.<br />A gdy zakończy wysyłanie to musi nastąpić przełączenie pinu DE w stan niski i do tego celu wykorzystuję przerwanie ISR( USART_TXC_vect ).<br />Tylko z tym jest właśnie problem, że to mi się nie przełącza tak jak by to przerwanie w ogóle się nie wykonywało.<br />Wszystko to zmierzyłem analizatorem stanów logicznych i dlatego wiem że ten pin mi nie przechodzi w stan niski po zakończeniu wysyłania.<br />Co robię źle?<br />Oto mój kod:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define Timer_ONTCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10)<br />#define Timer_OFFTCCR1B &amp;= ~((1&lt;&lt;CS12) | (1&lt;&lt;CS10))<br /><br />#define DE_PINPD2<br />#define DE_PORTPORTD<br /><br />#define DE_RXDE_PORT &amp;= ~(1&lt;&lt;DE_PIN)<br />#define DE_TXDE_PORT |= (1&lt;&lt;DE_PIN)<br /><br />#define BAUD9600<br />#define MYUBRRF_CPU/16/BAUD-1<br /><br />void TIMER_Init(void);<br />void USART_Init(uint8_t ubrr);<br />void USART_Transmit(uint8_t data);<br />uint8_t USART_Receive(void);<br /><br />volatile uint8_t dana;<br />volatile uint8_t flaga_przerwania;<br /><br />int main(void) {<br />DDRD |= (1&lt;&lt;DE_PIN);<br />DDRB = 0x0F;<br />PORTB = 0xFF;<br /><br />DDRC = 0xFF;<br />PORTC = 0xFF;<br /><br />DE_RX;// załącz odbiornik RS485<br /><br />TIMER_Init();<br />USART_Init(MYUBRR);<br />sei();<br /><br />    while (1) {<br />if (!(PINB &amp; (1&lt;&lt;PB4))) {<br />Timer_ON;<br />if ( flaga_przerwania == 1 ) {<br />flaga_przerwania = 0;<br /><br />DE_TX;// załącz nadajnik RS485<br />USART_Transmit(1);<br />}<br />}<br /><br />if (!(PINB &amp; (1&lt;&lt;PB5))) {<br />Timer_ON;<br />if ( flaga_przerwania == 1 ) {<br />flaga_przerwania = 0;<br /><br />DE_TX;// załącz nadajnik RS485<br />USART_Transmit(2);<br />}<br />}<br />    }<br />}<br /><br />void TIMER_Init(void) {<br />TCCR1B |= (1&lt;&lt;WGM12);<br />TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);<br />OCR1A = 2600;//przerwanie co 300ms<br />TIMSK |= (1&lt;&lt;OCIE1A);<br />}<br /><br />void USART_Init(uint8_t ubrr) {<br />UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN)|(1&lt;&lt;RXCIE)|(1&lt;&lt;TXCIE);<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br />void USART_Transmit(uint8_t data) {<br />while( !( UCSRA &amp; (1&lt;&lt;UDRE)) );<br />UDR = data;<br />}<br /><br />uint8_t USART_Receive(void) {<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) );<br />return UDR;<br />}<br /><br />ISR (USART_RXC_vect) {<br /><br />}<br /><br />ISR (USART_TXC_vect) {<br />DE_RX;// załącz odbiornik RS485<br />}<br /><br />ISR (TIMER1_COMPA_vect) {<br />Timer_OFF;<br />flaga_przerwania = 1;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3621">mateusz19955</a> — 28 cze 2018, o 13:36</p><hr />
]]></content>
</entry>
</feed>