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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-27T16:38:12+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7572&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-06-27T16:38:12+01:00</updated>
<published>2014-06-27T16:38:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85908#p85908</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85908#p85908"/>
<title type="html"><![CDATA[Re: Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85908#p85908"><![CDATA[
Brakuje podciągania pinu przycisku do plusa wewnętrznym rezystorem. Robi się to tak, że dodajesz dodatkowe makro:<br />[syntax=c]#define KEY_PULLUP2 PORTD |= KEY_PIN2[/syntax]<br />i w funkcji main przykładowo przed <em>LCD_INIT;</em> dodajesz:<br />[syntax=c]KEY_PULLUP2;[/syntax]<br /><br />PS.<br />prototypów funkcji:<br />[syntax=c]unsigned char USART_Receive( void );<br />void LCD_Clear(void);[/syntax]<br />nie umieszcza się w innych funkcjach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 cze 2014, o 16:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maciej2014]]></name></author>
<updated>2014-06-27T08:02:45+01:00</updated>
<published>2014-06-27T08:02:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85868#p85868</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85868#p85868"/>
<title type="html"><![CDATA[Re: Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85868#p85868"><![CDATA[
Zastosowałem się do uwag Krausera i jest lepiej. Teraz coś jest przesyłane. Nie wiem dlaczego ale na wyświetlaczu wyświetlane są po kolei liczby od 0 do 255 (bez dotykania switch'a). Po dotknięciu switch'a liczba na wyświetlaczu zatrzymuje się. Co jest tym razem nie tak ? Wrzucam poprawiony kod:<br /><br />ODBIORNIK:<br />[syntax=c]/*<br /> * sas.c<br /> *<br /> *  Created on: 16-06-2014<br /> *      Author: Maciej<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br />#define LCD_INIT  LCD_Initalize();<br /><br /><br />#define FOSC 1843200// Clock Speed<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br /><br />void USART_Init( unsigned int ubrr)<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br />unsigned char USART_Receive( void )<br />{<br />/* Wait for data to be received */<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) )<br />;<br />/* Get and return received data from buffer */<br />return UDR;<br />}<br /><br />int main(void){<br />char x= '0';<br /><br />LCD_INIT;<br />USART_Init(MYUBRR);<br />USART_Receive();<br />short gg&#91;1&#93;;<br /><br />while(1){<br />x = USART_Receive();<br />unsigned char USART_Receive( void );<br />void LCD_Clear(void);<br /><br />itoa(x,gg,10);<br />LCD_GoTo(8, 0);<br />LCD_WriteText(gg);<br /><br />}<br />}[/syntax]<br /><br />NADAJNIK:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define FOSC 1843200// Clock Speed<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br />#define KEY_PIN2 (1&lt;&lt;PD6)<br />#define KEY_DOWN2 !(PIND &amp; KEY_PIN2)<br /><br /><br />void USART_Init( unsigned int baud )<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(baud&gt;&gt;8);<br />UBRRL = (unsigned char)baud;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br /><br />void USART_Transmit( unsigned char data )<br />{<br />/* Wait for empty transmit buffer */<br />while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) )<br />;<br />/* Put data into buffer, sends the data */<br />UDR = data;<br />}<br />char x= '0';<br /><br />int main(void){<br />USART_Init(MYUBRR);<br />while(1){<br /><br />USART_Transmit(x);<br /><br />if(KEY_DOWN2){<br />             x++;<br />while(KEY_DOWN2){<br />}<br />}<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2855">maciej2014</a> — 27 cze 2014, o 08:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-06-26T21:49:10+01:00</updated>
<published>2014-06-26T21:49:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85845#p85845</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85845#p85845"/>
<title type="html"><![CDATA[Re: Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85845#p85845"><![CDATA[
Masz niebieską książkę Mirka ?<br /><br />Teraz zainicjalizowałęś transmisję na 0 <br />Wiesz do czego jest funkcja USART_Init<br />w niej między innymi ustawiasz prędkość transmisji<br />przekazując obliczony wcześniej MYUBRR jako parametr.<br /><br />Poszukaj tu na forum jest parę przykładów jak zainicjować transmisję<br />z PC i od tego trzeba zacząć żeby potrenować.<br />Masz jeszcze na blogu Mirka super poradnik o ADC gdzie jest<br />wykorzystywana transmisja do PC .<br /><br />Tak samo ten poradnik z tego samego bloga<br /><a href="http://mirekk36.blogspot.com/2013/05/terminal-jako-kolorowy-wyswietlacz-lcd.html"  class="postlink">http://mirekk36.blogspot.com/2013/05/terminal-jako-kolorowy-wyswietlacz-lcd.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 26 cze 2014, o 21:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-06-26T21:43:07+01:00</updated>
<published>2014-06-26T21:43:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85844#p85844</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85844#p85844"/>
<title type="html"><![CDATA[Re: Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85844#p85844"><![CDATA[
W obu przypadkach powinno być:<br />[syntax=c]USART_Init(MYUBRR);[/syntax]<br />A znak możesz wysyłać w postaci '0' przykładowo:<br />[syntax=c]char x= '0';[/syntax]<br />a wtedy w odbiorniku wystarczy użyć funkcji LCD_WriteChar (o ile taką posiadasz). Oczywiście możesz zostawić tak jak masz teraz, ale łańcuch <em>gg</em> który pomieści jeden znak powinien mieć rozmiar 2, a nie 1. I powinien być to typ znakowy <em>char</em>.<br />Masz również błąd w odbieraniu wyniku z funkcji. Powinno być:<br />[syntax=c]x = USART_Receive();[/syntax]<br />Ogólnie mówiąc:<br />[syntax=c]void USART_Transmit( unsigned char data )[/syntax] nic nie zwraca i pobiera jeden argument i w kodzie używa się to: [syntax=c]USART_Transmit(x);[/syntax]<br />natomiast:<br />[syntax=c]unsigned char USART_Receive( void )[/syntax] zwraca wartość i nic nie pobiera i w kodzie używa się to:<br />[syntax=c]x =  USART_Receive();[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 26 cze 2014, o 21:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maciej2014]]></name></author>
<updated>2014-06-26T21:16:09+01:00</updated>
<published>2014-06-26T21:16:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85840#p85840</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85840#p85840"/>
<title type="html"><![CDATA[Re: Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85840#p85840"><![CDATA[
Nie wiem czy dobrze zrozumiałem uwagi, ale poprawiłem jak umiałem i nadal nie działa. Oto &quot;poprawiony&quot; kod:<br /><br />ODBIORNIK<br />[syntax=c]/*<br /> * sas.c<br /> *<br /> *  Created on: 16-06-2014<br /> *      Author: Maciej<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br />#define LCD_INIT  LCD_Initalize();<br /><br /><br />#define FOSC 1843200// Clock Speed<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br /><br />void USART_Init( unsigned int ubrr)<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br />unsigned char USART_Receive( void )<br />{<br />/* Wait for data to be received */<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) )<br />;<br />/* Get and return received data from buffer */<br />return UDR;<br />}<br /><br />int main(void){<br />char x=0;<br />LCD_INIT;<br />USART_Init(x);<br />USART_Receive();<br />short gg&#91;1&#93;;<br /><br />while(1){<br /><br />unsigned char USART_Receive(x);<br />void LCD_Clear(void);<br />itoa(x,gg,10);<br />LCD_GoTo(8, 0);<br />LCD_WriteText(gg);<br /><br />}<br />}[/syntax]<br /><br />NADAJNIK<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define FOSC 1843200// Clock Speed<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br />#define KEY_PIN2 (1&lt;&lt;PD6)<br />#define KEY_DOWN2 !(PIND &amp; KEY_PIN2)<br /><br /><br />void USART_Init( unsigned int baud )<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(baud&gt;&gt;8);<br />UBRRL = (unsigned char)baud;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br /><br />void USART_Transmit( unsigned char data )<br />{<br />/* Wait for empty transmit buffer */<br />while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) )<br />;<br />/* Put data into buffer, sends the data */<br />UDR = data;<br />}<br />char x=0;<br /><br />int main(void){<br />USART_Init(x);<br />while(1){<br /><br />USART_Transmit(x);<br />if(KEY_DOWN2){<br />x++;<br />while(KEY_DOWN2){<br />}<br />}<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2855">maciej2014</a> — 26 cze 2014, o 21:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-06-26T20:51:41+01:00</updated>
<published>2014-06-26T20:51:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85837#p85837</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85837#p85837"/>
<title type="html"><![CDATA[Re: Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85837#p85837"><![CDATA[
W nadajniku masz praktycznie jeden wielki błąd<br />i nie zrozum mnie źle bo na początku zrobiłem podobnie<br />zdefiniowałem funkcję ale jej nie wywołałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />(ale pamiętam to do dziś <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />)<br /><br />1. <br />Zdefiniowałeś funkcje w ciele funkcji main (zły styl programowania)<br />przenieś deklaracje tych funkcji (USART_Init , USART_Transmit)<br />przed main a definicje poniżej main<br /><br />2. <br />Brak nieskończonej pętli głównej (np. while(1) )<br /><br />3. <br />Brak wywołanie w.w. funkcji w programie a właściwie w <br />nieskończonej pętli głównej<br /><br />Chyba że źle wkleiłeś kod <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 26 cze 2014, o 20:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[maciej2014]]></name></author>
<updated>2014-06-26T20:33:13+01:00</updated>
<published>2014-06-26T20:33:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85832#p85832</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85832#p85832"/>
<title type="html"><![CDATA[Transmisja USART między atmega32 i atmega8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7572&amp;p=85832#p85832"><![CDATA[
Witam.<br />Chciałem przeprowadzić transmisję danych między dwoma uP atmega. Chciałem aby atmega32 wysyłał zmienną i atmega8 wyświetlał ją na lcd. Lcd mam zaprogramowane, problem tkwi w odbiorze/przesyle danych. Nie wyskakują niby żadne błędy ale kod nie działa. W nadajniku jest zmienna która po komendzie KEY_DOWN2 miała zwiększać się o 1. Co robię nie tak ? Z góry dziękuję za pomoc. <br /><br />Oto kod nadajnika i odbiornika:<br /><br />NADAJNIK<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define FOSC 1843200// Clock Speed<br />#define BAUD 9600<br />#define MYUBRR FOSC/16/BAUD-1<br />#define KEY_PIN2 (1&lt;&lt;PD6)<br />#define KEY_DOWN2 !(PIND &amp; KEY_PIN2)<br /><br />int main(void){<br />void USART_Init( unsigned int baud )<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(baud&gt;&gt;8);<br />UBRRL = (unsigned char)baud;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br /><br />void USART_Transmit( unsigned char data )<br />{<br />/* Wait for empty transmit buffer */<br />while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) )<br />;<br />/* Put data into buffer, sends the data */<br />UDR = data;<br />if(KEY_DOWN2){<br />UDR++;<br />while(KEY_DOWN2){<br />}<br />}<br />}<br />}[/syntax]<br /><br /><br />ODBIORNIK<br />[syntax=c]/*<br /> * sas.c<br /> *<br /> *  Created on: 16-06-2014<br /> *      Author: Maciej<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;HD44780.h&quot;<br />#define LCD_INIT  LCD_Initalize();<br /><br />void main(void)<br />{<br /><br />void USART_Init( unsigned int ubrr)<br />{<br />/* Set baud rate */<br />UBRRH = (unsigned char)(ubrr&gt;&gt;8);<br />UBRRL = (unsigned char)ubrr;<br />/* Enable receiver and transmitter */<br />UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />/* Set frame format: 8data, 2stop bit */<br />UCSRC = (1&lt;&lt;URSEL)|(1&lt;&lt;USBS)|(3&lt;&lt;UCSZ0);<br />}<br /><br />unsigned char USART_Receive( void )<br />{<br />/* Wait for data to be received */<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) )<br />;<br />/* Get and return received data from buffer */<br />return UDR;<br />}<br /><br /><br /><br />LCD_INIT;<br /><br /><br />short gg&#91;1&#93;;<br /><br />while(1){<br /><br />unsigned char USART_Receive( void )<br />{<br />/* Wait for data to be received */<br />while ( !(UCSRA &amp; (1&lt;&lt;RXC)) )<br />;<br />/* Get and return received data from buffer */<br />return UDR;<br />}<br /><br /><br />void LCD_Clear(void);<br />itoa(UDR,gg,10);<br />LCD_GoTo(8, 0);<br />LCD_WriteText(gg);<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2855">maciej2014</a> — 26 cze 2014, o 20:33</p><hr />
]]></content>
</entry>
</feed>