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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-09-25T18:23:51+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=48&amp;t=8631&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2014-09-25T18:23:51+01:00</updated>
<published>2014-09-25T18:23:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96696#p96696</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96696#p96696"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96696#p96696"><![CDATA[
A ja ze swojej strony powiem fajnie , tylko tym razem przeniosę , następnym razem radzę czytać<br />takie coś jak zasady działu w którym się pisze post.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 25 wrz 2014, o 18:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-09-25T17:55:34+01:00</updated>
<published>2014-09-25T17:55:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96694#p96694</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96694#p96694"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96694#p96694"><![CDATA[
To super ze Ci sie udalo to zrobic!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 25 wrz 2014, o 17:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Martinas1324]]></name></author>
<updated>2014-09-25T17:31:20+01:00</updated>
<published>2014-09-25T17:31:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96689#p96689</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96689#p96689"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96689#p96689"><![CDATA[
RafPe-&gt; Dzięki wielkie, mniej więcej rozumie o co chodzi. Do dogłębnego zrozumienia to jeszcze daleko ale nie wszystko na raz. Już zastosowałem u siebie i ładnie cyka <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=1455">Martinas1324</a> — 25 wrz 2014, o 17:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-09-25T17:14:38+01:00</updated>
<published>2014-09-25T17:14:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96685#p96685</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96685#p96685"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96685#p96685"><![CDATA[
Widzisz <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ze mnie taki nauczyciel jak &quot;projektant elektronicznych komponentow&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Ogolnie jest to jeden ze sposobow w jakie mowisz w C# co ma sie stac gdy zostanie wywolany event i przekazujesz wtedy dalej obiekt oraz argumenty<br /><br />Mozna tak <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> z uzyciem lambda<br />[syntax=csharp]mySerialPort.DataReceived += (o, args) =&gt; label1.Invoke((new Action(() =&gt; label1.Text = mySerialPort.ReadExisting())));[/syntax]<br /><br />Mozna tez tak <br /><br />[syntax=csharp]mySerialPort.DataReceived += MySerialPortOnDataReceived;<br /><br />        }<br /><br />        private void MySerialPortOnDataReceived(object sender, SerialDataReceivedEventArgs serialDataReceivedEventArgs)<br />        {<br />            throw new NotImplementedException();<br />        }[/syntax]<br /><br />W obu przypadkach masz obiekt i argumenty do eventa ktory nastapil. Chcialbym Ci to bardziej dokladnie opisac ale pewnie zrobilbym magiczne spagetti z tego postu zamiast w jasny sposob cos podpowiedziec.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 25 wrz 2014, o 17:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Martinas1324]]></name></author>
<updated>2014-09-25T17:21:42+01:00</updated>
<published>2014-09-25T16:46:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96677#p96677</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96677#p96677"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96677#p96677"><![CDATA[
Możesz mi trochę objaśnić te linijki kodu:<br />[syntax=csharp]mySerialPort.DataReceived += delegate(object o, SerialDataReceivedEventArgs args)<br />            {<br /> <br />                label1.Invoke((new Action(() =&gt; label1.Text = mySerialPort.ReadExisting() )));<br />            };[/syntax]<br />C# to potrafię ale takie podstawowe rzeczy i trochę się w nim gubię  <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 24 minutach ]</span></strong><br /><br />Ja wysyłam z uC tak:<br /> uart_putint(23,16);<br />To wysyłam w kodzie ASCII 0x32(2) i 0x33(3)<br />Ale znowu w C# odbieram data = port.ReadByte(); data musi być typu int(32bity) bo inaczej się typy nie zgadzają. Odczytując z Debugera to w data mam 49 i 55. Dlaczego tak jest? O czym ja zapomniałem?<br /><br />Wysyłanie temperatury to można prosto zrobić bo tak jak kolega RafPe słusznie zauważył wyśle z uC zmienną wynik(czyli przed podziałem na część dziesiętną i ułamkową) za pomocą uart_putint(wynik,16); Tylko dlaczego nie mogę otrzymać ten wartości w C#?  <img src="https://forum.atnel.pl/images/smilies/icon_mad.gif" alt=":x" title="Wściekły" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1455">Martinas1324</a> — 25 wrz 2014, o 16:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-09-25T16:08:50+01:00</updated>
<published>2014-09-25T16:08:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96669#p96669</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96669#p96669"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96669#p96669"><![CDATA[
<div class="quotetitle">Martinas1324 napisał(a):</div><div class="quotecontent"><br />Czym się różni ReadByte od ReadChar<br /></div><br /><br />No bo albo odbierasz dane binarne albo nie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Mirek pisze o tym w BB w rozdziale o UART. <br /><br /><div class="quotetitle">Martinas1324 napisał(a):</div><div class="quotecontent"><br />to muszę zapewne użyć void uart_putint(dane do wysłania, 16)?<br /></div><br /><br />Dokladnie! i w  ten oto sposob wysles swoje dane. <br /><br /><div class="quotetitle">Martinas1324 napisał(a):</div><div class="quotecontent"><br />Tylko mam dwie zmienne...bo część dziesiętną i ułamkową napięcia<br /></div><br />No ale przeciez to nie problem ... wysylasz to Mirko sposobem gdzie kiedy masz np 7,5 to mnozysz przez 10 -&gt; czyli masz powiedzmy 75 a w Twoim docelowym programie odbierasz sobie i odpowiednio dzielisz przez 10 i sprawdzasz reszte z dzielenia ? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><div class="quotetitle">Martinas1324 napisał(a):</div><div class="quotecontent"><br />jak zrobić żeby te dane były cały czas aktualne a labelku<br /></div><br />No kurcze  tutaj musisz pewnie troszeczke poczytac o.Net np pod tym linkiem jest ciekawy sposob <a href="http://stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c"  class="postlink">http://stackoverflow.com/questions/661561/how-to-update-the-gui-from-another-thread-in-c</a><br /><br />No i sprawdzony u mnie na szybko na zestawie ATB + VS 2013 + win 8 dziala superniascie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />[syntax=csharp]private void Form1_Load(object sender, EventArgs e)<br />        {<br />            <br /><br />            mySerialPort.BaudRate = 115200;<br />            mySerialPort.Parity = Parity.None;<br />            mySerialPort.StopBits = StopBits.One;<br />            mySerialPort.DataBits = 8;<br />            mySerialPort.Handshake = Handshake.None;<br /><br />            mySerialPort.Open();<br /><br />            mySerialPort.DataReceived += delegate(object o, SerialDataReceivedEventArgs args)<br />            {<br /><br />                label1.Invoke((new Action(() =&gt; label1.Text = mySerialPort.ReadExisting() )));<br />            };<br /><br />        }<br /><br />        private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br />        {<br />            mySerialPort.Close();<br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4344">RafPe</a> — 25 wrz 2014, o 16:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sz4t4n]]></name></author>
<updated>2014-09-25T16:12:30+01:00</updated>
<published>2014-09-25T16:05:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96665#p96665</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96665#p96665"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96665#p96665"><![CDATA[
Ja bym zrobił podobnie jak radzi kolega RafPe. Ze zmiennych które chcesz wysłać zrobiłbym prostą ramkę np &quot;123,456\r\n&quot; a w C# .ReadTo('\n'). Zaraz napisze przykłady jak ja to widzę.<br /><br /><br />edit: w sumie kolega niżej już wszystko napisał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=377">sz4t4n</a> — 25 wrz 2014, o 16:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Martinas1324]]></name></author>
<updated>2014-09-25T15:30:25+01:00</updated>
<published>2014-09-25T15:30:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96662#p96662</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96662#p96662"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96662#p96662"><![CDATA[
Korzystam z Mirkowych bibliotek. Jeśli miałbym wysyłać w kodzie ASCII to muszę zapewne użyć void uart_putint(dane do wysłania, 16)? Tylko mam dwie zmienne...bo część dziesiętną i ułamkową napięcia.<br />Korzystam z tych stron co mi podałeś(tyle że w wersji językowej polskiej bo jestem cienias i ciężko jest mi zrozumieć po angielsku <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> ) i już próbowałem różnych ReadByte, ReadChar, ReadTo i udaje mi się odebrać jedną wartość ale mam problem z odebraniem  dwóch zmiennych od razu. Z tym to coś pokombinuje i coś wymyśle. Powiedz mi, bo z tym mam największy problem jak zrobić żeby te dane były cały czas aktualne a labelku?<br />Jeszcze jedno pytanie: Czym się różni ReadByte od ReadChar? Przecież ReadByte odczytuje jeden bajt czyli 8 bitów a ReadChar odczytuje jeden znak a char też jest 8-mio bitowy...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1455">Martinas1324</a> — 25 wrz 2014, o 15:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RafPe]]></name></author>
<updated>2014-09-25T14:34:01+01:00</updated>
<published>2014-09-25T14:34:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96656#p96656</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96656#p96656"/>
<title type="html"><![CDATA[Re: C# Odebranie danych z uC po UART i wyświetlanie w progra]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96656#p96656"><![CDATA[
Hey ,<br /><br />Wiec ja pewnie wyslalbym wartosc pomiaru bez &quot;obrabiania&quot; na serial port zamieniajac to na ascii z uzyciem funkcji itoa() <br /><br />Co do wysylania nie wiem czy korzystasz z bibliotek Mirka do obslugi UART ? <br /><br />W programie C# pozniej moglbys opracowac wynik i na biezaco mozesz wyswietlac. <br /><br />Jesli natomiast chodzi o otrzymywanie danych to popatrz tutaj <a href="http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v=vs.110).aspx"  class="postlink">http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived(v=vs.110).aspx</a> - masz tam przyklad z odczytaniem danych , a metody masz  opisane tu <a href="http://msdn.microsoft.com/en-us/library/system.io.ports.serialport_methods(v=vs.110).aspx"  class="postlink">http://msdn.microsoft.com/en-us/library/system.io.ports.serialport_methods(v=vs.110).aspx</a><br /><br />To powinno dac Ci cos do wyprobowania <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />PS -&gt; Co do watkow (bo teraz doczytalem ze zrozumieniem) to nie wiem z jakiej wersji .Net korzystasz ale musialbys albo skorzystac z np async i zrobic to w tle ... albo np zainetersowac sie delegatami <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=4344">RafPe</a> — 25 wrz 2014, o 14:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Martinas1324]]></name></author>
<updated>2014-09-25T13:56:03+01:00</updated>
<published>2014-09-25T13:56:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96649#p96649</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96649#p96649"/>
<title type="html"><![CDATA[C# Odebranie danych z uC po UART i wyświetlanie w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8631&amp;p=96649#p96649"><![CDATA[
Witam!<br /><br />Buduje samochód zdalnie sterowany na pracę inżynierską i już jeździ, sterowanie przez IR oraz Bluetooth. Program napisany w C# do sterowania też mi działa natomiast chciałem jeszcze mierzyć napięcie zasilania i wyświetlać je na bieżąco w programie.<br />Pomiar napięcia już mam zaprogramowany w uC i działa pozostaje pytanie jak przesyłać te wartości do C# żeby to mogło sobie przemielić i wyświetlić w labelku albo w textBoxie.<br /><br />Program w uC wygląda tak:<br />main.c<br />[syntax=c]int main(void){<br /><br />lcd_init();// inicjalizacja LCD         <br />ir_init();// inicjalizacja dekodowania IR<br />USART_Init(__UBRR);<br />sei();// włączamy globalne przerwania<br />lcd_cls();<br /><br />//OSCCAL=160;<br />//------------------Wyjcie PWM 0 na PB4-jazda pród-tył---------------------------<br />DDRB|=(1&lt;&lt;PB3);<br />TCCR0|=(1&lt;&lt;WGM01)|(1&lt;&lt;WGM00)|(1&lt;&lt;COM01);<br />TCCR0|=(1&lt;&lt;CS00)|(1&lt;&lt;CS02);<br />OCR0=135;<br />//------------------------------Ustawienia ADC-----------------------------------<br />ADMUX|=(1&lt;&lt;REFS0)|(1&lt;&lt;REFS1);//wewnętrzne źródło odniesienia 2,56V<br />ADCSRA|=(1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1);//prescaler na 64<br />ADMUX|=(1&lt;&lt;MUX0)|(1&lt;&lt;MUX1)|(1&lt;&lt;MUX2);//Wybór ADC7<br />//--------------------------------------------------------------------------------<br />DDRB|=(1&lt;&lt;PB0);<br />DDRB|=(1&lt;&lt;PB1);<br />DDRB|=(1&lt;&lt;PB4);<br /><br />measure();<br />while(1){<br />IR_EVENT();<br />UART_EVENT();<br />Measure_EVENT();<br />}//while(1)<br />}//main[/syntax]<br /><br />Ustawienia ADC i PWM nie są dla nas teraz istotne.<br /><br />Zdarzenie Measure_EVENT();<br />[syntax=c]void Measure_EVENT(void){<br />static uint32_t i=0;<br />static uint32_t u=0;<br />if (i&gt;200000) {<br />if (u&gt;200000) {<br />lcd_cls();<br />lcd_locate(0,0);<br />measure();<br />u=0;<br />i=0;<br />uart_putc(cz_d);//??? Tutaj chciałem wysyłać dane ale nie wiem jak<br />}<br />u++;<br />}<br />i++;<br />}[/syntax]<br /><br />[syntax=c]void measure(){<br />measure_nap();<br /><br />}[/syntax]<br /><br />[syntax=c]void measure_nap(void){<br />ADCSRA|=(1&lt;&lt;ADEN);//włączenie ADC<br />ADCSRA|=(1&lt;&lt;ADSC);//Start pomiaru<br />_delay_ms(100);<br />pm=ADCW;<br />wynik=pm*10;<br />cz_d=wynik/1000;//czesc dziesietna wyniku<br />cz_u=(wynik/10)%100;[/syntax]<br /><br />Tyle z uC a teraz program napisany w C#<br />Widok programu:<br /><a href="http://forum.atnel.pl/_obrazki/o/1455/572570763224191b796942a060f454f3.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1455/572570763224191b796942a060f454f3.jpg" alt="Obrazek" /></a><br /><br />Mam takie zdarzenie odbioru danych z portu szeregowego:<br />[syntax=csharp]int data = 0;<br />            private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)<br />            {<br />                data = port.ReadChar() ;<br />                <br />            }[/syntax]<br />Potrafię odebrać jeden znak i po naciśnięciu labelka wyświetlić go ale jak zrobić żeby program C# który otrzymuje co jakiś czas dwie wartości(cz_d i cz_u) wyświetlał je automatycznie aktualizując aktualne napięcie zasilania?<br />Problem też z tym że nie mogę aktualizować tego bezpośrednio w tym zdarzeniu bo jest wtedy konflikt wątków.<br /><br />Staram się coś samemu nauczyć tego programowania a ta praca miała mnie przymusić żebym posiedział przy tym <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Proszę o pomoc w rozwiązaniu tego problemu, ewentualnie naprowadzenie mnie na właściwy tor myślenia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1455">Martinas1324</a> — 25 wrz 2014, o 13:56</p><hr />
]]></content>
</entry>
</feed>