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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-10-29T23:31:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9012&amp;mode</id>
<entry>
<author><name><![CDATA[doman89]]></name></author>
<updated>2014-10-29T23:31:36+01:00</updated>
<published>2014-10-29T23:31:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101473#p101473</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101473#p101473"/>
<title type="html"><![CDATA[Re: USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101473#p101473"><![CDATA[
<div class="quotetitle">MarcinPieta napisał(a):</div><div class="quotecontent"><br />kolego doman89a czy teraz kod sie bardziej podoba czy muszę jeszcze nad nim popracować.W razie jak się nie podoba proszę o przykłady jak już wspominałem jestem początkującym i sczytywanie wciśnięć klawiszy było zaczerpnięte z książki tak jak kod hex czy binarny, wszelkie błędy są niezamierzone i wynikają tylko z mojej niewiedzy.<br /></div><br /><br />Kolega proszę może nie z tak dużych liter ok? Ja nie miałem zamiaru się czepiać, tylko w dobrym zamiarze Ci napisałem, bo naprawdę sam zobacz, że już teraz jest o niebo lepiej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Tak by post wisiał nikt by nic nie napisał, daje sobie rękę uciąć (no dobra z tą ręką to przesadziłem <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />)<br /><br />Chcesz przykładu, ok tu masz Twój kod:<br />[syntax=c]/*<br /> * main.c  <br /> *<br /> *  Created on: 28 Oct 2014<br /> *      Author: Marcin Pieta<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define key_pin PINC<br />#define key1_pin PC0<br />#define key2_pin PC1<br />#define switch_port PORTD<br />#define switch_pin PIND<br />#define switchmaster_pin PD6<br />#define switchslave_pin PD7<br /><br />uint8_t number_LED&#91;10&#93; = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //Table for 7 segment display<br /><br />//USART INITIALIZATION 9600 baud<br />void USART_Init( unsigned int baud )<br />{<br /> UCSRC = (1&lt;&lt;URSEL) | (1&lt;&lt;UPM1)|(1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);<br /> UBRRH = (unsigned char)(baud &gt;&gt; 8);<br /> UBRRL = (unsigned char) baud;<br /> UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />}<br /><br />uint8_t sendchar( char data ) //sends single char over usart<br />{<br />while(!(UCSRA&amp;(1&lt;&lt;UDRE)));<br />UDR = data;<br />}<br /><br />uint8_t receivechar( void ) //receive single char over usart<br />{<br />while(!(UCSRA&amp;(1&lt;&lt;RXC)));<br />return UDR;<br />}<br /> <br />int main( void ) //Start of program<br />{<br />uint8_t data = 1;<br />DDRA = 0xFF; //porta output<br />DDRC = 0x00; //portd input<br />DDRD = 0x00; //portd input<br />PORTA = 0xFF; //all bits high (1)<br />PORTC = 0xFF; //portc all high (1)<br />PORTD |= (1&lt;&lt;switchmaster_pin) | (1&lt;&lt;switchslave_pin); //bit7,8 set as high (1)<br /><br />while(1)<br />{<br />if(!(switch_pin &amp; (1&lt;&lt;switchmaster_pin)))<br />{<br />PORTA = number_LED&#91;data&#93;;<br />if(!(key_pin &amp; (1&lt;&lt;key1_pin)))<br />  {<br /> _delay_ms(230);<br />  data++;<br />  if(data&gt;5)<br />data=1;<br />}<br /> else if(!(key_pin &amp; (1&lt;&lt;key2_pin)))<br />{<br />USART_Init(12);<br />sendchar(data);<br />}<br />}<br />if(!(switch_pin &amp; (1&lt;&lt;switchslave_pin)))<br />{<br />USART_Init(12);<br />PORTA = number_LED&#91;receivechar()&#93;;<br />}<br />}<br />}[/syntax]<br /><br />Porównaj to teraz z Twoim pierwszym który tu był i odpowiedz szczerze który jest przyjemniejszy w analizie?<br /><br />Co do liczb hexadecymalnych to w małym programie ogarniesz luz, ale wyobraź sobie, że masz program na 1000 linijek kodu, zmieniasz kolejność klawiszy bo tak projekt np. zakłada i teraz sieczka... każdą liczbę hex analizujesz i zmieniasz krok po kroku. Tak więc zobacz na starcie ile chce Ci nerwów zaoszczędzić  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  Teraz to jak wyżej zmienisz kilka makrodefinicji, a w kodzie automatycznie wszystko masz tak jak chcesz.<br /><br />Pamiętaj to z czym się pomęczysz na początku, to gwarantuję Ci, że zwróci się z naddatkiem.<br /><br /><span style="color: #0000FF">z Niebieskim pozdRowieniem,<br />Doman89</span><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br />Co do programu nie wiem, czy to jest zamierzony cel, ale w pętli while masz 2 ify.<br /><br />Strzelam, że masz tam podłączone jakieś przełączniki i na podstawie pozycji chcesz przełączać tryb. Więc ja bym dał if... else if. Inaczej jeżeli będziesz miał 2 włączone to program będzie skakał od jednego do drugiego. No chyba, że tak ma być to ok.<br /><br />Po drugie nie rozumiem czemu masz inicjalizację USART'u w programie. Przecież chyba wystarczy raz  w main? Tym bardziej, że obie się niczym raczej nie różnią. Tak jak koledzy wyżej napisali, przydały by się przerwania. Wtedy ładujesz do bufora dane do wysłania oraz ewentualnie z bufora odczytujesz dane odebrane. Czyli jak wspomnieli full duplex.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3271">doman89</a> — 29 paź 2014, o 23:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcinPieta]]></name></author>
<updated>2014-10-29T20:03:30+01:00</updated>
<published>2014-10-29T20:03:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101437#p101437</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101437#p101437"/>
<title type="html"><![CDATA[Re: USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101437#p101437"><![CDATA[
hmm przerwania jak na razie za wysokie progi na moja wiedzę.<br />Cel tego w sumie taki bajer światła drogowe ( ustawiasz czas na światłach  master i wysyła do drugich świateł, w zależności które pracują jako master drugie ustawiasz jako slave)<br />program działa prawidłowo przy czym pozostaje problem w momencie przełączenia ze slave na master oczekuje na ostatnia transmisje (gdy dane zostana wyslane )przestawia się na master.<br />Mam nadzieje ze ktoś to zrozumie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br /><span style="font-size: 150%; line-height: normal">kolego doman89</span><br />a czy teraz kod sie bardziej podoba czy muszę jeszcze nad nim popracować.<br />W razie jak się nie podoba proszę o przykłady jak już wspominałem jestem początkującym i sczytywanie wciśnięć klawiszy było zaczerpnięte z książki tak jak kod hex czy binarny, wszelkie błędy są niezamierzone i wynikają tylko z mojej niewiedzy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6189">MarcinPieta</a> — 29 paź 2014, o 20:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-10-29T19:01:59+01:00</updated>
<published>2014-10-29T19:01:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101430#p101430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101430#p101430"/>
<title type="html"><![CDATA[Re: USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101430#p101430"><![CDATA[
<div class="quotetitle">MirkoT napisał(a):</div><div class="quotecontent"><br />Wszak USART potrafi działać w trybie full duplex (jednoczesna łączność dwukierunkowa).<br /></div><br /><br />Sam zapomniałem. Głupoty w sumie wyszły. Grypa robi swoje...  Full duplex i przerwania - zero problemu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 29 paź 2014, o 19:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2014-10-29T18:59:00+01:00</updated>
<published>2014-10-29T18:59:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101429#p101429</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101429#p101429"/>
<title type="html"><![CDATA[Re: USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101429#p101429"><![CDATA[
A z ciekawości takie pytanko. Po co jakieś przełączanie na master czy slave?<br />Wszak USART potrafi działać w trybie full duplex (jednoczesna łączność dwukierunkowa).<br />W związku z tym przecież możesz zrobić tak żeby wysyłał kiedy chcesz<br />A odbierze wtedy gdy drugi procek mu coś wyśle <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Po co te całe zabawy? Czy jest w tym może jakiś głębszy sens?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 29 paź 2014, o 18:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-10-29T18:53:58+01:00</updated>
<published>2014-10-29T18:53:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101428#p101428</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101428#p101428"/>
<title type="html"><![CDATA[Re: USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101428#p101428"><![CDATA[
Więc tak - może nie zagłębiłem się w program wielce, ale inicjację masz poza while, więc odbędzie się tylko raz. Dodaj zmienną &quot;aktualny tryb pracy&quot; i dodatkową pętlę wewnątrz while, która sprawdzi, czy ustawiony tryb (na pinach o ile dobrze widzę) jest rożny od tej nowej zmiennej - jeśli tak, to init w nowym trybie i aktualizacja zmiennej. <br /><br />tak na szybko - nie gwarantuję że dobrze - nie zagłębiłem się w kod<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 29 paź 2014, o 18:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[doman89]]></name></author>
<updated>2014-10-29T11:44:03+01:00</updated>
<published>2014-10-29T11:44:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101393#p101393</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101393#p101393"/>
<title type="html"><![CDATA[Re: USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101393#p101393"><![CDATA[
Kolega bez obrazy ale ten kod to jakaś &quot;sieczka&quot; jest.<br /><br />Kod Enigmy szybciej bym rozszyfrował. Tabulację do poprawy, liczby heksadecymalne nawet przy sczytywaniu wciśnięcia klawisza. Parę takich kwiatków jest.<br /><br />Pamiętaj, że udostępniając kod na forum, musisz zachęcić kogoś, aby ten kod chciało mu się przeczytać. Tak więc im lepszej jakości kod wrzucisz tym szybciej znajdziesz chętnego.<br /><br /><span style="color: #0000FF">z Niebieskim pozdRowieniem,<br />Doman89</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3271">doman89</a> — 29 paź 2014, o 11:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MarcinPieta]]></name></author>
<updated>2014-10-29T20:32:46+01:00</updated>
<published>2014-10-29T11:35:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101390#p101390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101390#p101390"/>
<title type="html"><![CDATA[USART Master/Slave]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9012&amp;p=101390#p101390"><![CDATA[
Witam mam takie pytanie czy jest jakiś łatwy sposób na rozwiązanie przełączania pomiędzy trybem odbioru/transmisji<br />obecnie aby mój kod zadziałał muszę każdorazowo resetować obie atmegi32.<br />Zaznaczam ze jestem początkującym.<br />Dziękuje za wszelkie podpowiedzi.<br /><br />[syntax=c]/*<br /> * main.c  <br /> *<br /> *  Created on: 28 Oct 2014<br /> *      Author: Marcin Pieta<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#define key1 bit_is_clear(PINC,0)<br />#define key2 bit_is_clear(PINC,1)<br />#define switchmaster bit_is_clear(PIND,6)<br />#define switchslave bit_is_clear(PIND,7)<br /><br />uint8_t number_LED&#91;10&#93; = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //Table for 7 segment display<br />//USART INITIALIZATION 9600 baud<br />void USART_Init( unsigned int baud )<br />{<br /> UCSRC=(1&lt;&lt;URSEL) | (1&lt;&lt;UPM1)|(1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);<br /> UBRRH = (unsigned char)(baud&gt;&gt;8);<br /> UBRRL = (unsigned char)baud;<br /> UCSRB=(1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);<br />}<br />uint8_t  sendchar(char data)    //sends single char over usart<br />{<br />while(!(UCSRA&amp;(1&lt;&lt;UDRE)));<br />UDR=data;<br />}<br /><br />uint8_t receivechar(void)//receive single char over usart<br />{<br />while(!(UCSRA&amp;(1&lt;&lt;RXC)));<br />return UDR;<br />}<br /> int main(void)  //Start of program<br /> {<br /> uint8_t data=1;<br /> DDRA  = 0xff;   //porta output<br /> DDRC  = 0x00;//portd input<br />DDRD  = 0x00;//portd input<br />PORTA = 0xff;//all bits high (1)<br />  PORTC = 0xFF;//portc all high (1)<br /> PORTD = 0xc0;//bit7,8 set as high (1)<br /><br /><br />while(1)<br />{<br />if(switchmaster)<br />{<br />PORTA=number_LED&#91;data&#93;;<br />if    (key1)   //(!(PINC &amp; 0x01))<br />  {<br /> _delay_ms(230);<br />  data++;<br />  if(data&gt;5)data=1;<br />  }<br /> else if (key2)<br />       {<br /> USART_Init(12);<br /> sendchar(data);<br />       }<br />}<br />if  (switchslave)<br />{<br />USART_Init(12);<br />PORTA=number_LED&#91;receivechar()&#93;;<br />}<br /><br /><br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6189">MarcinPieta</a> — 29 paź 2014, o 11:35</p><hr />
]]></content>
</entry>
</feed>