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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-06-24T19:57:07+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18116&amp;mode</id>
<entry>
<author><name><![CDATA[marcgend]]></name></author>
<updated>2017-06-24T19:57:07+01:00</updated>
<published>2017-06-24T19:57:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18116&amp;p=191189#p191189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18116&amp;p=191189#p191189"/>
<title type="html"><![CDATA[Re: RS485 parsowanie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18116&amp;p=191189#p191189"><![CDATA[
Pozwolę sam sobie odpowiedzieć <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Trochę to trwało ale problem rozwiązałem, okazało się że trochę zbyt dużo wymagałem od procka, i po dołożeniu przerwań od uarta zaczynały się dziać cuda.<br />Posiedziałem pomyślałem i przerobiłem główną pętlę programu tak aby wszystko miało swoje miejsce w czasie i nie kolidowało z innymi działaniami. Działa <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=6774">marcgend</a> — 24 cze 2017, o 19:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[marcgend]]></name></author>
<updated>2017-04-09T19:47:13+01:00</updated>
<published>2017-04-09T19:47:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18116&amp;p=186750#p186750</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18116&amp;p=186750#p186750"/>
<title type="html"><![CDATA[RS485 parsowanie danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18116&amp;p=186750#p186750"><![CDATA[
Witam, stworzyłem poniższą funkcję, w sumie działa, ale sprawia pewne problemy, proszę o zwrócenie uwagi na babole. <br />Ogółem wygląda to tak mam układ mastera (M1284 odczyt LCD, itp.) i dwa slave'y (M8,DS18B20,DHT22) i slave (M644, LCD) ; master odpytuje slave'y i to działa, dane wyświetlam na LCD i wszystko pasuje. Jednak gdy wyłączę nadawanie w masterze i wszystkie układy nasłuchują i chcę w tym czasie zaprogramować za pomocą bootloadera M644 to programowanie się udaje, ale w co drugim przypadku powoduje reset M1284. <br /><br />Dodanie tej funkcji spowodowało też inny efekt; mam kilkanaście &quot;ekranów&quot; na których wyświetlam na LCD różne dane (czas, temperatury, wilgotność) do wyświetlania danych używam funkcji  lcd_locate(y,x) i po uruchomieniu RS485 na LCD mam to co ma być i dodatkowo zdublowane niektóre dane (tak jakby y,x się zmieniały losowo) i losowe resety całości. Wcześniej układ pracował trzy miesiące bez przerwy i resetu.<br /><br />Jeszcze jedno pytanie co do wysyłania danych z tego układu, zrobiłem to szeregiem instrukcji uart_putint itp. domyślam się że to niezbyt eleganckie rozwiązanie, lepiej najpierw posklejać stringa i później go wysłać na raz?<br /><br /> <br /><br />Kod na M1284 w reszcie podobne<br />[syntax=c]void parse_rs485(char*abuf){<br /><br />    char*wsk;<br />    uint8_t len;<br />    uint16_t buff;<br /><br />    if ( strpbrk(abuf, &quot;:&quot;)){<br />wsk= strtok(abuf,&quot;:&quot;);<br /><br /><br /><br />       ////komendy sterujące termometrem///////////////////////////////////////////////////////<br />if(!strncmp(wsk,config.addr,8)){//adres<br />    wsk = strtok(NULL,&quot;,&quot;);<br />    len=strlen(wsk);<br /><br />    if(!strncmp_P(wsk,PSTR(&quot;TX_DISABLE&quot;),len)){<br />config.tx_en=0;<br />    }<br /><br />    if(!strncmp_P(wsk,PSTR(&quot;TX_ENABLE&quot;),len)){<br />config.tx_en=1;<br />    }<br /><br />    if(!strncmp_P(wsk,PSTR(&quot;SEND_DATA&quot;),len)){//komenda<br />//funkcje wysyłające dane<br />        <br />        uart0_puts(config.addr);<br /><br />        uart0_putc('=');<br /><br />        uart0_putint(pomiar.Twewaktual.subzero,10);<br />        uart0_putc(',');<br />        uart0_putint(pomiar.Twewaktual.cel,10);<br />        uart0_putc(',');<br />        uart0_putint(pomiar.Twewaktual.cel_fract_bits,10);<br />        uart0_putc(',');<br />        uart0_putint(pomiar.Wilgwewaktual.cel,10);<br />        uart0_putc(',');<br />        uart0_putint(pomiar.Wilgwewaktual.cel_fract_bits,10);<br />        uart0_putc(',');<br />        uart0_putlong(pomiar.Cisnienieaktual,10);<br />        uart0_putc(',');<br />        uart0_putint(pomiar.Temp_CO.cel,10);<br />        uart0_putc(',');<br />        uart0_putint(pomiar.Temp_CO.cel_fract_bits,10);<br />        uart0_puts(&quot;\r\n&quot;);<br />    }<br /><br /><br /><br /><br />    else if(!strncmp_P(wsk,PSTR(&quot;CONFIG&quot;),len)){<br />wsk = strtok(NULL,&quot;,&quot;);<br />//1 adres<br />len=strlen(wsk);<br />if((len&gt;0)&amp;&amp;(len&lt;9))strcpy(config.addr,wsk);<br /><br />wsk = strtok(NULL,&quot;,&quot;);<br />buff=atoi(wsk);<br />if((buff&gt;=1)||(buff&lt;30)) config.czas_podswietlania=buff;<br /><br />wsk = strtok(NULL,&quot;,&quot;);<br />buff=atoi(wsk);<br />if((buff&gt;=1)||(buff&lt;10)) config.jasnosc_lcd=buff;<br /><br />wsk = strtok(NULL,&quot;,&quot;);<br />buff=atoi(wsk);<br />if((buff&gt;=1)||(buff&lt;10)) config.jasnosc_ramka=buff;<br /><br />wsk = strtok(NULL,&quot;,&quot;);<br />buff=atoi(wsk);<br />if((buff&gt;=1)||(buff&lt;10)) config.jasnosc_szafka=buff;<br />//<br />//6;<br />//3;<br />//=3;<br />//config.efekt_ramka=2;<br />//config.efekt_szafka=3;<br />//config.nasycenie_ramka=255;<br />//config.nasycenie_szafka=255;<br />//config.kolor1_ramka=0;<br />//config.kolor2_ramka=100;<br />//config.kolor1_szafka=150;<br />//config.kolor2_szafka=220;<br /><br /><br />    }<br /><br />    else if(!strncmp_P(wsk,PSTR(&quot;SET_TIME&quot;),len)){<br /><br />t_czas temp_czas;<br />wsk = strtok(NULL,&quot;,&quot;);<br />temp_czas.godz=atoi(wsk);<br /><br />wsk = strtok(NULL,&quot;,&quot;);<br />temp_czas.min=atoi(wsk);<br /><br />wsk = strtok(NULL,&quot;,&quot;);<br />temp_czas.sek=atoi(wsk);<br /><br /><br />if(temp_czas.godz&lt;24&amp;&amp;temp_czas.min&lt;60&amp;&amp;temp_czas.sek){<br />    czas=temp_czas;<br />    zapisz_czas();<br />}<br /><br /><br />    }<br /><br />    else if(!strncmp_P(wsk,PSTR(&quot;RESET&quot;),len)){<br />_delay_ms(1500);<br /><br />//****** RESET UKŁADU NA POTRZEBY BOOTLOADERA (MkBootloader) ***********<br />cli();// wyłącz przerwania<br />wdt_enable(0);  // ustaw watch-dog<br />while(1);// czekaj na RESET<br />    }<br />}<br />    }<br />    /////dane odebrane z czujników////////////////////////////////////////////////////////////////////////<br />    if ( strpbrk(abuf, &quot;=&quot;)){<br />wsk= strtok(abuf,&quot;=&quot;);<br /><br />if(!strncmp(wsk,config.czujnik&#91;0&#93;,8)){//adres czujnika1<br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atol(wsk);<br />    if(buff&lt;1024) czujnik1.output=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if((buff==0)||(buff==1)) czujnik1.temp.subzero=buff;<br />    czujnik1.temp.subzero=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;126) czujnik1.temp.cel=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;10) czujnik1.temp.cel_fract_bits=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;100) czujnik1.wilg.cel=buff;<br /><br /><br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;10) czujnik1.wilg.cel_fract_bits=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atol(wsk);<br />    if(buff&lt;1024) czujnik1.foto=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atol(wsk);<br />    if((buff&gt;800)&amp;&amp;(buff&lt;1100)) czujnik1.press=buff;<br />}<br /><br />if(!strncmp(wsk,config.czujnik&#91;1&#93;,8)){//adres czujnika2<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atol(wsk);<br />    if(buff&lt;1024) czujnik2.output=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if((buff==0)||(buff==1)) czujnik2.temp.subzero=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;126) czujnik2.temp.cel=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;10) czujnik2.temp.cel_fract_bits=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;100) czujnik2.wilg.cel=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atoi(wsk);<br />    if(buff&lt;10) czujnik2.wilg.cel_fract_bits=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atol(wsk);<br />    if(buff&lt;1024) czujnik2.foto=buff;<br /><br />    wsk = strtok(NULL,&quot;,&quot;);<br />    buff=atol(wsk);<br />    if((buff&gt;800)&amp;&amp;(buff&lt;1100)) czujnik2.press=buff;<br />}<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6774">marcgend</a> — 9 kwi 2017, o 19:47</p><hr />
]]></content>
</entry>
</feed>