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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-09-27T15:28:03+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8611&amp;mode</id>
<entry>
<author><name><![CDATA[Rafael86]]></name></author>
<updated>2014-09-27T15:28:03+01:00</updated>
<published>2014-09-27T15:28:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96832#p96832</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96832#p96832"/>
<title type="html"><![CDATA[Re: RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96832#p96832"><![CDATA[
Ok, dzięki za pomoc:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1392">Rafael86</a> — 27 wrz 2014, o 15:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[daro2020]]></name></author>
<updated>2014-09-27T15:16:03+01:00</updated>
<published>2014-09-27T15:16:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96830#p96830</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96830#p96830"/>
<title type="html"><![CDATA[Re: RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96830#p96830"><![CDATA[
Czyli Twój progs działa prawidłowo. Jeśli wywołasz przerwanie z UARTA, a nie odczytasz danej, to led z przykładu wyżej będzie migał.<br />Ustaw jeszcze w nicjalizacji RX jako wejscie z Pull-upem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1608">daro2020</a> — 27 wrz 2014, o 15:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafael86]]></name></author>
<updated>2014-09-27T15:05:33+01:00</updated>
<published>2014-09-27T15:05:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96829#p96829</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96829#p96829"/>
<title type="html"><![CDATA[Re: RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96829#p96829"><![CDATA[
Tak, to prawda , tylko w tej chwili nie mam co odbierać, bo nic nie jest wysyłane do uC , piny TXD i RXD nie są wogóle podłączone. Chciałem na razie dokonać samej inicjalizacji RS485. W dalszym ciągu nie wiem<br />gdzie jest problem :/<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Ale w sumie racja. Dodałem teraz w przerwaniu RXD:<br />char data;<br />data = UDR;<br />i teraz jest ok. Tylko nie rozumiem chyba mechanizmu tych przerwań. To znaczy, że niezależnie czy cokolwiek jest nadawane do uC to i tak trzeba cały czas odczytywać w przerwaniu dane z bufora odbiorczego?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1392">Rafael86</a> — 27 wrz 2014, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[daro2020]]></name></author>
<updated>2014-09-27T14:58:39+01:00</updated>
<published>2014-09-27T14:58:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96828#p96828</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96828#p96828"/>
<title type="html"><![CDATA[Re: RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96828#p96828"><![CDATA[
W obsłudze przerwania nie widzę, abyś odbierał cokolwiek z uarta, a odczyt danej jest warunkiem do skasowania flagi wywołującej przerwanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1608">daro2020</a> — 27 wrz 2014, o 14:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafael86]]></name></author>
<updated>2014-09-27T14:42:58+01:00</updated>
<published>2014-09-27T14:42:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96827#p96827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96827#p96827"/>
<title type="html"><![CDATA[Re: RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96827#p96827"><![CDATA[
Oto mój plik uart.h:<br />[syntax=c]#ifndef UART_H_<br />#define UART_H_<br /><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_ODBIERANIE UART_DE_PORT &amp;= ~UART_DE_BIT<br />#define UART_DE_NADAWANIE UART_DE_PORT |= UART_DE_BIT<br /><br />#define UART_BAUD 9600//definiujemy interesującą nas prędkość<br />#define __UBRR (F_CPU/16/UART_BAUD-1)//obliczamy UBRR dla U2X=0<br /><br />#define KEY_1 (1&lt;&lt;0)<br /><br />//deklaracje funkcji<br />char uart_getc(void);<br />void USART_Init( unsigned int baud );<br />void USART_Transmit(  char data );<br />void uart_putstr(char *str);<br />void uart_putint(int val);<br />uint8_t key_push(uint8_t klawisz);[/syntax]<br /><br />Mam książkę z 2011 roku i tam nie widzę nigdzie ustawionego bitu UDRIE. Na stronie atnela : &quot;uaktualnienia do programów do DVD&quot; jest uaktualniona wersja programu do uarta do rs485 i tam też nie jest ustawiane to przerwanie w funkcji inicjalizującej. <br />Natoamist odkryłem w czym jest problem, przynajmniej częściowo. zauważyłem, że jak wykasuje: UCSRB |= (1&lt;&lt;RXCIE); to zaczyna wszystko działać. Pomyślałem<br />, że w jakiś sposób to przerwanie recieve complete interrupt jest cały czas wywoływane i program &quot;grzęźnie&quot; w tym przerwaniu. Zrobiłem test nastęujący test:<br /><br />[syntax=c]ISR( USART_RXC_vect ) {<br />_delay_ms(50);<br />PORTC ^=(1&lt;&lt;5);<br />UART_DE_ODBIERANIE;//zablokuj nadajnik RS485<br />}[/syntax]<br /><br />i faktycznie diodka miga cały czas. Albo powiniennem kasować jakąś flagę z tego przerwania bo jest cały czas ustawiona, albo w jakiś sposób cały czas <br />wywołuje to przerwanie. Jak dojde co dokładnie się dzieje to napiszę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1392">Rafael86</a> — 27 wrz 2014, o 14:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-09-23T19:16:54+01:00</updated>
<published>2014-09-23T19:16:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96487#p96487</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96487#p96487"/>
<title type="html"><![CDATA[Re: RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96487#p96487"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Po tak napisanej funkcji zauważyłem, że nie działa prawidłowo pin sterujący sygnałem DI.<br /></div><br />Pokaż co masz w pliku h odnośnie tego pinu. Może inny jest DDRx, a inny PORTx<br /><div class="quotetitle">Rafael86 napisał(a):</div><div class="quotecontent"><br />Po kolejnych próbach zauważyłem, że jeżeli uaktywniam przerwania od transmisji i otrzymania danych przed ustawniem bitów RXEN i TXEN to wszystko działa:<br /></div><br />Bo są wyłączane w kolejnej instrukcji ponieważ nie ma tam operatora |=<br /><br />Dodatkowo na samym początku (przed USART_Init) wystaw sobie 3 mignięcia jakimś LEDem. Może masz reset.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 23 wrz 2014, o 19:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rafael86]]></name></author>
<updated>2014-09-22T21:22:03+01:00</updated>
<published>2014-09-22T21:22:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96418#p96418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96418#p96418"/>
<title type="html"><![CDATA[RS485 - problem z funkcją USART_Init]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8611&amp;p=96418#p96418"><![CDATA[
Witam serdecznie<br /><br />Mam pewną niejasność jeśli chodzi o działanie funkcji USART_Init przy inijcalizacji RS-485 z bluebooka. Program piszę na Atmedze8. <br />Na podstawie przykładu z bluebooka napisałem funkcję<br />[syntax=c]void USART_Init( unsigned int baud )<br />{<br />//set baud rate<br />UBRRH = (uint8_t)(baud&gt;&gt;8);<br />UBRRL = (uint8_t)baud;<br /><br />//enable reciver and transmitter<br />UCSRB = (1&lt;&lt;RXEN) | (1&lt;&lt;TXEN);<br /><br />//set frame format: 8data, 1 stop bit<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;UCSZ0)|(1&lt;&lt;UCSZ1);<br /><br />UART_DE_DIR |= UART_DE_BIT;  //inicjalizacja pinu sterująca sygnałem DI w układzie MAX485<br />UART_DE_ODBIERANIE;//ustawienie pinu DI konwertera na odbiór, aby nie blokować transmisji<br /><br />//załączamy dodatkowe przerwania<br />UCSRB |= (1&lt;&lt;RXCIE);//RXCIE bit is set - enable recieve complete interrupt<br />UCSRB |= (1&lt;&lt;TXCIE);<br />}[/syntax]<br /><br />Po tak napisanej funkcji zauważyłem, że nie działa prawidłowo pin sterujący sygnałem DI. <br />W celu sprawdzenia wstawiłem sobie diodkę LED pod całkowicie nie związany z naszą obsługą RS-485 pin PC5 i obsłużyłem wejście klawisza PB0 aby sprawidzć czy poprawnie działają porty I/O.<br />[syntax=c]int main(void)<br />{<br />//set input<br />DDRB &amp;= ~(1&lt;&lt;PB0);//PD2 i PD3 klawisze jako wejścia<br />//pull-up<br />PORTB |= (1&lt;&lt;PB0);<br /><br />DDRC |= (1&lt;&lt;5);<br /><br />//inicjalizacja UART<br />USART_Init( __UBRR );<br /><br />sei();<br /><br />while(1){<br /><br />if(key_push(KEY_1))<br />{<br />PORTC ^=(1&lt;&lt;5);<br />}<br />}<br />}[/syntax]<br />Ku mojemu zdzieniwu nie działały poprawnie. Kiedy wykasowałem funkcję USART_Init to wszystko zaczęło działać. <br />Po kolejnych próbach zauważyłem, że jeżeli uaktywniam przerwania od transmisji i otrzymania danych przed ustawniem bitów RXEN i TXEN to wszystko działa:<br />[syntax=c]void USART_Init( unsigned int baud )<br />{<br /><br />//set baud rate<br />UBRRH = (uint8_t)(baud&gt;&gt;8);<br />UBRRL = (uint8_t)baud;<br /><br />UCSRB |= (1&lt;&lt;RXCIE);//RXCIE bit is set - enable recieve complete interrupt<br />UCSRB |= (1&lt;&lt;TXCIE);//TXCIE bit is set - Transmitt complete interrupt<br /><br />//enable reciver and transmitter<br />UCSRB = (1&lt;&lt;RXEN) | (1&lt;&lt;TXEN);<br /><br />//set frame format: 8data, 1 stop bit<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;UCSZ0)|(1&lt;&lt;UCSZ1);<br /><br />UART_DE_DIR |= UART_DE_BIT;  //inicjalizacja pinu sterująca sygnałem DI w układzie MAX485<br />UART_DE_ODBIERANIE;//ustawienie pinu DI konwertera na odbiór, aby nie blokować transmisji<br /><br />//załączamy dodatkowe przerwania<br />UCSRB |= (1&lt;&lt;RXCIE);//RXCIE bit is set - enable recieve complete interrupt<br />UCSRB |= (1&lt;&lt;TXCIE);<br />}[/syntax]<br />Jeżli tylko przeniose aktywacje tych przerwań za [syntax=c]UCSRB = (1&lt;&lt;RXEN) | (1&lt;&lt;TXEN);[/syntax] to moje testowe szybkie miganie diodą przestaje działać.<br />Nie wiem dlaczego tak się dzieje. Bardzo proszę o wyjaśnienie jeżeli ktoś się z czymś takim spotkał.<br /><br />Z góry dzięki i pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1392">Rafael86</a> — 22 wrz 2014, o 21:22</p><hr />
]]></content>
</entry>
</feed>