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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-02-16T09:42:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23421&amp;mode</id>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2021-02-16T09:42:55+01:00</updated>
<published>2021-02-16T09:42:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231110#p231110</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231110#p231110"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231110#p231110"><![CDATA[
OK. zagalopowałem się.<br />Dzięki count==255 masz wykonywanie instrukcji w przerwaniu co około 4-5 sekund (256/44).<br />Może lepiej roboczo zrobić:<br />if (count==50) ... ;//instrukcje dla 81D<br /><br />if (count==100) ...; //instrukcje dla 81L<br /><br /> wówczas przykładowo wysyłasz co ok. 1 s kolejne komendy do wskaźników i czekasz na przepełnienie licznika count.<br />Jak już masz count jako volatile to może przy obecnej twojej koncepcji warto wykorzystać count jako flagę i zastosować w pętli głównej while (1) <br />do wykonania działań np. na vout i vout1 gdy nastąpi przepełnienie  licznika count czyli np.<br />if (!count){<br />...<br />vout ..;<br />vout1..;<br />...<br />}<br /><br />Docelowo jednak chyba lepiej kierować się radami Mirka z Bluebooka i jego poradnikami na youtube.<br />Jeśli chcesz wykonywać zapytanie co kilka minut to może warto podejrzeć na forum kody np. nakręcany minutnik.<br />Warto też przejrzeć kody z książek Mirka z timerami (wystarczy wpisać szukanie w plikach *.c ciągu znaków &quot;Timer1&quot; czy też &quot;OCR&quot;.<br /><br />Co do zmiennych long, long long czy float to może warto też zobaczyć czy nie trzeba coś poustawiać w Eclipse.<br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2013/04/eclipse-nie-dziaa-mi-printf-dla-float.html" >http://mirekk36.blogspot.com/2013/04/ec ... float.html</a><!-- m --><br /><br />PS. a przy okazji ile ten program zajmuje obecnie flash i RAM?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 16 lut 2021, o 09:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2021-02-15T22:46:06+01:00</updated>
<published>2021-02-15T22:46:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231103#p231103</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231103#p231103"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231103#p231103"><![CDATA[
1) Niby nie ma ograniczenia, jednakże zauważyłem, że przy odczycie co kilka milisekund wskaźnik się przywiesza. Widzę, że w moim przypadku zapytanie leci co kilka sekund, czyli tragedii nie ma.<br />2) Niczego takiego nie zauważyłem.<br />3) Czy ma to wpływ na działanie całości? Jak dla mnie bez różnicy, skoro działa - tym bardziej, że nie będę co sekundę odpytywał, tylko raz-dwa razy na minutę<br />4) Przyczepię się do czegoś: w wiadomościach prywatnych, które wymieniliśmy (w dniu 30 sty 2021, o 21:14) padło stwierdzenie &quot;Poza tym niewiele się dzieje w pętli while (a powinno)&quot; - to co? Jednak mniej ma się dziać?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 15 lut 2021, o 22:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2021-02-14T22:22:51+01:00</updated>
<published>2021-02-14T22:22:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231099#p231099</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231099#p231099"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231099#p231099"><![CDATA[
Jak często wg dokumentacji można odpytywać wskaźniki przepływu (liczniki)?<br />W tej chwili chyba masz ustawione wysyłanie zapytań 44 razy na sekundę.<br />Poza tym w pętli while (1) nie masz żadnego warunku ograniczającą ilość wykonywanych działań np. na long vOut. <br />Po co tysiące razy na sekundę obliczać np. long vOut ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 14 lut 2021, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2021-02-14T18:29:57+01:00</updated>
<published>2021-02-14T18:29:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231098#p231098</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231098#p231098"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=231098#p231098"><![CDATA[
Podjąłem jeszcze jedną próbę ogarnięcia tego, udało mi się całkowicie usunąć delaye, opierając się tylko na przerwaniach. W załączniku wrzucam kod. Mam jednak problem z jednoczesnym odpytaniem 81D i 81L, może to być związane z tym, że w przerwaniu może być tylko jedno polecenie realizowane? Czy tutaj musiałbym wykorzystać Timer 1? Drugi problem to odczyt wartości większej niż uint16_t. Wychodzi na to, że biblioteka więcej nie przepuści jak właśnie 65 535, chyba że się mylę, w takim razie prosiłbym o wskazówkę czy da się to gdzieś poprawić. Jak widać z kodu pozamieniałem wszystkie uint16_t na uint32_t, w nadziei, że to coś pomoże, ale niestety nie działa to tak, jak bym chciał....<br /><br />Pozdrawiam, Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 14 lut 2021, o 18:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2021-01-25T20:21:12+01:00</updated>
<published>2021-01-25T20:21:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230765#p230765</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230765#p230765"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230765#p230765"><![CDATA[
Szukając informacji w internecie znalazłem jeszcze takie coś, może ktoś coś wyłuska...<br />Pozdrawiam, Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 25 sty 2021, o 20:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2021-01-24T15:05:50+01:00</updated>
<published>2021-01-24T15:05:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230750#p230750</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230750#p230750"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230750#p230750"><![CDATA[
Okey, mam coś działającego. Wiem wiem - nie powinienem robić programu z wykorzystaniem delay-ów, ale jakoś nie potrafię tego zrobić na przerwaniach, dlatego jest jak jest. Teraz pozostało to wrzucić na rejestry modbusowe. Co do zmiany kwarca - myślałem nad tym, ale nie potrafię znaleźć takowego - już złożyłem zamówienie i czekam na dostawę.<br />Uruchomiłem dodatkowo bibliotekę pana Mirka, wyłączyłem obsługę UART0 i działa ona jedynie na UART1. Obecnie zapytania po ASCII wychodzą tak jak chciałem.<br />Pozdrawiam, Robert.<br /><br />[syntax=c]#define clientAddress 0x01<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;yaMBSiavr.h&quot;<br />#include &quot;MK_MULTI_UART_20/mk_multi_uart.h&quot;<br /><br /><br />volatile uint16_t inputRegisters&#91;4&#93;;<br />volatile uint16_t holdingRegisters&#91;4&#93;;<br /><br />char rx1buf&#91;10&#93;;<br />char tx1buf&#91;10&#93;;<br /><br />void parsuj_uart1( void * buf, uint8_t size );<br /><br /><br />void timer0100us_start(void) {<br />TCCR0B|=(1&lt;&lt;CS01); //prescaler 8<br />TIMSK0|=(1&lt;&lt;TOIE0);<br />}<br /><br /><br />ISR(TIMER0_OVF_vect) { //this ISR is called 9765.625 times per second<br />modbusTickTimer();<br />}<br /><br />void modbusGet(void) {<br />if (modbusGetBusState() &amp; (1&lt;&lt;ReceiveCompleted))<br />{<br />switch(rxbuffer&#91;1&#93;){<br /><br />case fcReadHoldingRegisters: {<br />modbusExchangeRegisters(holdingRegisters,0,4);<br />}<br />break;<br /><br />case fcReadInputRegisters: {<br />modbusExchangeRegisters(inputRegisters,0,4);<br />}<br />break;<br /><br /><br />case fcPresetSingleRegister: {<br />modbusExchangeRegisters(holdingRegisters,0,4);<br />}<br />break;<br /><br /><br />case fcPresetMultipleRegisters: {<br />modbusExchangeRegisters(holdingRegisters,0,4);<br />}<br />break;<br /><br />default: {<br />modbusSendException(ecIllegalFunction);<br />}<br />break;<br />}<br />}<br />}<br /><br />int main(void)<br />{<br /><br />uart_reg_callback( 1, rx1buf, parsuj_uart1 );<br />uart_reg_callback( 1, tx1buf, parsuj_uart1 );<br />sei();<br />modbusSetAddress(clientAddress);<br />modbusInit();<br />    wdt_enable(7);<br />timer0100us_start();<br />uart_init();<br /><br />    while(1)<br />    {<br /><br />    uart_puts( 1, &quot;\e81D\r&quot; );//wysyłam komendę &lt;ESC&gt;81D&lt;CR&gt; poprzez port uart1 - dotyczy przepływu<br />    _delay_ms( 500 );<br />    uart_puts( 1, &quot;\e81L\r&quot; );//wysyłam komendę &lt;ESC&gt;81L&lt;CR&gt; poprzez port uart1 - dotyczy sumatora<br />    _delay_ms( 500 );<br /><br />wdt_reset();<br />modbusGet();<br />    }<br />}<br /><br />void parsuj_uart1( void * buf, uint8_t size ) {<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 24 sty 2021, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2021-01-23T11:23:38+01:00</updated>
<published>2021-01-23T11:23:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230739#p230739</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230739#p230739"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230739#p230739"><![CDATA[
Po zmianie ustawień na PD3 ja bym wrócił do wykorzystania biblioteki Mirka MK2.<br />Jeśli nie, to nie wnikając zbytnio w twoich ustawieniach przyjrzałbym się czy poprawne jest UART_CONTROL (coś mi się zdawało że z dwóch UARTÓW wlatywało do jednego koszyka). No i do testów nadawania ASCII na próbę przed UDR1 = 0x38 ustawiłbym  PD7 na 1.<br />Wydaje się, że warto przejść na kwarc 18.452 MHz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 23 sty 2021, o 11:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2021-01-22T20:50:03+01:00</updated>
<published>2021-01-22T20:50:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230724#p230724</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230724#p230724"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230724#p230724"><![CDATA[
Po kolei odpowiem, też myślałem o tym, aby uporządkować to co jest w tym pliku main.c, lecz jedynie co to zmieniłem odniesienia z portu D na porty A, B i C, także piny na porcie D mam zarezerwowane tylko dla potrzeb komunikacji. Dlatego tak to zostawiłem, ponieważ mam też w głowie (o ile ten projekt wypali) kontrolę napięcia poprzez ADC, kontrola otwarcia szafy (coś a'la kontaktron), pomiar temperatury wnętrza itp. Oczywiście do samych testów mogę wywalić te niepotrzebne elementy. Co do aktualnej wersji bibliotek - nie ma znaczenia to chyba dla mnie na razie, bo i tak stoję w miejscu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Co do drugiej odpowiedzi - czy są to pomiary które mają wpływ na działanie całości? Spróbuję dzisiaj kopnąć do tego, gdyby coś się ruszyło to dam znać. Tak sobie jeszcze pomyślałem - może zmienić prędkość jednego z UARTów - może to oddziaływać na zachowanie tej ATMegi?<br />Dzięki za odpowiedzi <br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 22 sty 2021, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2021-01-20T20:07:02+01:00</updated>
<published>2021-01-20T20:07:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230689#p230689</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230689#p230689"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230689#p230689"><![CDATA[
Może być interesujące, że w bibliotece w pliku yaMBSiavr.h są zdefiniowanie:<br /><br />#define modbusInterFrameDelayReceiveStart 16<br />#define modbusInterFrameDelayReceiveEnd 18<br />#define modbusInterCharTimeout 7<br /><br />Wartości te są odpowiednie dla 20MHz/38400 Bps i timera jak w przykładzie: 20MHz/8/256 w wyniku (&quot;ISR is called 9765.625 times per second&quot;).<br />Autor przyjął tu zgodnie z dokumentacją modbus.org (Modbus_over_serial_line_V1.pdf str. 14) : &quot;For baud rates greater than 19200 Bps, fixed values for the 2 timers should be used: it is recommended to use a value of 750µs for the inter-character time-out (t1.5) and a value of 1.750ms for inter-frame delay (t3.5).&quot;<br /><br />Przykładowo dla kwarcu 16 MHz, oraz takiej samej wartości 38400 i timera 16MHz/8/256 powyższe ustawienia powinno się zmienić odpowiednio z (16,18,7) na (14,15,6)<br />Gdy jednak mamy niższe prędkości transmisji to przykładowo dla 9600 Bps wartości te powinny wynosić:<br />18.452 MHz/9600Bps i timera 18.452MHz/8/256   (32,37,14)<br />11.592MHz/9600Bps i timera 11.592/8/256          (20,23,8 )<br /><br />Powyższe wszystkie obliczenia dotyczą ramki UART 8-N-1 (tzn. długość 10 bitów).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 20 sty 2021, o 20:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2021-01-17T19:33:03+01:00</updated>
<published>2021-01-17T19:33:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230634#p230634</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230634#p230634"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230634#p230634"><![CDATA[
Jeśli niepotrzebne to proponowałbym wyciąć z main.c<br />volatile uint8_t instate = 0;<br />volatile uint8_t outstate = 0;<br /><br />i odpowiednio<br />SetOuts()<br />ReadIns()<br />io_conf()<br /><br />i wyciąć odpowiednio w modbusGet() wszystko co dotyczy &quot;coils&quot; i &quot;discrete inputs&quot;<br /><br />Może PD3 się haczy z Tx  a jest w &quot;Inputs: PC0, PC1, PC2, PC3, PC4, PC6, PD4, PD3&quot;<br />Może lepiej też pobrać wersje biblioteki modbus z 2017r. z github'a (w tej z 2016 były drobne poprawki np. było Baut 64).<br />I najlepiej zapomnieć o stosowaniu  _delay_ms w modbus_RTU gdyż ten może się przez to wysypać (na przerwaniu nieustannie szukana jest przerwa w transmisji 3,5 - 4 znaku)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 17 sty 2021, o 19:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2021-01-17T16:00:51+01:00</updated>
<published>2021-01-17T16:00:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230628#p230628</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230628#p230628"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230628#p230628"><![CDATA[
Witam, po kilku wiadomościach wymienionych z kolegą @JarekK zdecydowałem się pokazać moje dotychczasowe prace.<br />Po analizie i wielokrotnych próbach związanych z ogarnięciem bibliotek z różnych źródeł wykorzystałem bibliotekę &quot;yaMBIavr&quot;, ponieważ wydawała mi się w miarę przystępna i najlepiej pasująca do moich potrzeb. Po przeanalizowaniu całości i odkryciu jak uruchamiana jest obsługa UART0, spróbowałem w podobny sposób uruchomić UART1 ale tylko w trybie ASCII. W załączniku wrzucam moje wypociny. Wszystkie moje zmiany zostały skomentowane w odpowiedni sposób. W tym przypadku chciałem, aby co pół sekundy na UART1 była wyrzucana cyfra 8, niestety bez rezultatu, przy czym UART0 działa bez zająknięcia jako ModBus RTU.<br />Pozdrawiam, Robert<br /><br />_______<br />Jeszcze jedna sprawa mnie zastanawia - może spróbować wykorzystać innego AVR-a? Może ta ATMega 164A nie będzie się do tego nadawać?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 17 sty 2021, o 16:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2020-12-23T10:43:47+01:00</updated>
<published>2020-12-23T10:43:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230281#p230281</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230281#p230281"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230281#p230281"><![CDATA[
W międzyczasie bliżej przyjrzałem się opisowi na stronie Dalibora Vadovica.<br />Chcąc zmienić kwarc w jego implementacji modbusa powinno się trochę zmienić ustawienia dla timerów:<br /><em>&quot;Im using 12Mhz crystal then im settng prescaler of timer 2 to 256-&gt; 12 000 000/256=0.021ms for one tick<br />then for 1.5char is value =1.718/0.021=81 in dec or in hex 0x51 and for time 3.5 char =4.01/0.021=190 in dec or in hex 0xBE&quot;</em>.<br />Wtedy dla 11 059 200 odpowiednio dla 1,5 char będzie 74 (decimal), a dla 3,5 char będzie 173 (dec).<br /> Dorzucam próby przeportowania USART i timera na ATmega164 . Jest dużo dłubania bo przy okazji są błędy w datasheet do tego procka i trzeba sprawdzać niektóre opisy rejestrów w toolchainie w nagłówkach iom164.h oraz iomxx4.h<br />Nie mam ATmegi 164 wiec nie przetestowane.<br /><br />ATmega 164, main.c<br />[syntax=c]/*<br /> * main.c    ATmega16A    F_CPU = 12000000 Hz<br /> * <br /> * Created on: 21.12.2020<br /> *     Author: admin<br />*/<br />// dołączanie systemowych plików nagłówkowych<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;  <br />#include  &lt;avr/interrupt.h&gt;<br />//#include &quot;AVRmodbus.h&quot;<br /><br />// miejsce na dołączanie własnych plików<br />                                          <br />                                          <br />//void set_uart()                                    //JKA dla ATmega16 <br />//{<br />//    UCSRB=(1&lt;&lt;RXCIE)|(1&lt;&lt;RXEN)|(1&lt;&lt;TXEN);       //enable receiver and transmitter +received interrupt enable<br />//    UCSRC=(1&lt;&lt;USBS)|(1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);      //8data and 2 stop bits<br />//    UBRRH=0;<br />//    UBRRL=0x4D;                                 //9600Bps <br />//<br />//}  <br /> <br />// void set_uart()                                  //JKA dla ATmega164 <br />//{<br />//    UCSR0B=(1&lt;&lt;RXCIE0)|(1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);<br />//    UCSR0C=(1&lt;&lt;USBS0)|(1&lt;&lt;UCSZ01)|(1&lt;&lt;UCSZ00);<br />//    UBRR0H=0;                                     //9600Bps<br />//    UBRR0L=0x4D;                     <br />//}<br />        <br />//JKA Timer counter 2  dla ATmega16       <br />//void set_timer()<br />//{<br />//    TCCR2=0; // /1024<br />//    TCNT2=0;<br />//    OCR2=0x2E;<br />//    TIMSK=(1&lt;&lt;OCIE2);<br />//}     <br /><br />  //JKA Timer counter 2  dla ATmega164A<br />void set_timer()<br />{<br />    TCCR2A=0; //<br />    TCCR2B=0;<br />    <br />    TCNT2=0;                               <br />    OCR2A=0x2E;                          //JKA czy to wlasciwy rejestr??? -&gt;///compare match value-3.5 char<br />    TIMSK2=(1&lt;&lt;OCIE2A);                  //JKA Timer/Counter2, Output Compare A Match Interrupt Enable<br />}    <br />  <br />        <br />//// główna funkcja programu - main()<br />int main( void ) {<br /><br />// sekcja inicjalizacji peryferiów<br /><br />// główna pętla programu<br />    while(1) {<br /><br />    }<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 23 gru 2020, o 10:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2020-12-22T21:06:33+01:00</updated>
<published>2020-12-22T21:06:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230272#p230272</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230272#p230272"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230272#p230272"><![CDATA[
@JarekK - Dziękuję za odpowiedź oraz dziękuję za podanie linków i za podanie koncepcji, spróbuję coś sklecić z tego, już udało mi się uruchomić komunikację (po małych przeróbkach w pliku nagłówkowym) poprzez RS485 z wykorzystaniem bibliotek &quot;yaMBSiavr&quot; (w sumie kiedyś mi się one przewinęły przez palce, ale za Chiny Ludowe nie mogłem ich znaleźć ponownie), przy chwili czasu spróbuję zabrać się za ogarnięcie całości. Jeśli coś z tego sklecę to się tutaj pochwalę. Ja korzystam z kwarcu 11,059 MHz, kwarc 12 MHz został wykorzystany przez autora bibliotek, które podałem w moim poprzednim poście, czyli p. Vadovica ze strony developrog .com <br />Jeszcze raz wielkie dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 22 gru 2020, o 21:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2020-12-21T22:59:04+01:00</updated>
<published>2020-12-21T22:59:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230262#p230262</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230262#p230262"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230262#p230262"><![CDATA[
Jest też inny przykład, który powinien ładnie się kompilować pod ATMEGA164P:<br /><!-- m --><a class="postlink" href="https://community.atmel.com/projects/modbus-rtu-slave-library-avr" >https://community.atmel.com/projects/mo ... ibrary-avr</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 21 gru 2020, o 22:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekK]]></name></author>
<updated>2020-12-21T21:43:39+01:00</updated>
<published>2020-12-21T21:43:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230259#p230259</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230259#p230259"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230259#p230259"><![CDATA[
Tak na początek w AVRmodbus.c zmieniłem na:<br />[syntax=c]//JKA zmodyfikowana wersja putchar !!!<br />static void uart_putchar(char c)          <br />{                    <br /> // Oczekiwanie na zakonczenie nadawania<br />    //while (!(UCSRA &amp; (1 &lt;&lt; UDRE)));        //  dla ATmega16 <br />    while ( !( UCSR0A &amp; (1&lt;&lt;UDRE0)) );        //  dla ATmega164 <br />                  <br />    // Wyslanie danych                    <br />    //UDR = c;                                //  dla ATmega16 <br />    UDR0 = c;                                //  dla ATmega164 <br />                      <br />}[/syntax]<br /><br />Koncepcja:<br />1. utworzenie prostego kodu w MkClipce z dodaną biblioteką modbus<br />2. dodanie biblioteki  do obsługi UART/RS485 (np. Mirka) i wykonanie prostych testów <br />3. dodanie własnych funkcjonalności związanych z  konwersją danych<br /><br />12MHz dla USART to taki sobie pomysł (lepiej posłuchać porad Mirka ).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=224">JarekK</a> — 21 gru 2020, o 21:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2020-12-20T21:34:08+01:00</updated>
<published>2020-12-20T21:34:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230244#p230244</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230244#p230244"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230244#p230244"><![CDATA[
Czy próbował ktoś może uruchomić programik p. Vadovica ze strony developrog .com ?<br /><br />Ja niestety dalej próbuję ugryźć temat, ponieważ zaczynają nade mną wisieć coraz ciemniejsze chmurki, no i moja upartość powoduje, że chcę to zakończyć z powodzeniem.... W dodatku brak czasu na zabawy z AVR-ami dają mi się we znaki....<br />Wydaje mi się, że mógłbym wykorzystać ten kod do moich potrzeb, tylko nie udaje mi się tego uruchomić na moim uC. Prawdopodobnie błąd wisi na początku, tam gdzie wprowadzane są wektory przerwań, ale nie mogę dojść co w końcu robię źle.<br />[syntax=c]/*<br /><br /><br /><br /> * test_modbusAVR.c<br /> *<br /> * Created: 4. 12. 2015 21:05:15<br /> *  Author: www.developrog.com by Dalibor Vadovic<br /> */ <br /><br /><br />#include &lt;avr/io.h&gt;<br />#include  &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/eeprom.h&gt; <br />#include &quot;i2csoft.h&quot;<br />#include &quot;AVRmodbus.h&quot;<br /><br /><br />unsigned char device_addr=1;<br />unsigned char frame_error;<br /><br /><br />#define DIGIT_1_on          PORTB|=(1&lt;&lt;PB0)<br />#define DIGIT_2_on          PORTB|=(1&lt;&lt;PB1)<br />#define DIGIT_1_off         PORTB&amp;=~(1&lt;&lt;PB0)<br />#define DIGIT_2_off         PORTB&amp;=~(1&lt;&lt;PB1)<br /><br />#define tl1_push            !(PINB &amp; (1&lt;&lt;PB3) )<br />#define tl2_push            !(PINB &amp; (1&lt;&lt;PB2) )<br /><br />const unsigned char display&#91;17&#93;={0xfe,0x0a,0xb7,0x9f,0x4f,0xd9,0xf9,0x1a,0xff,0xdf,0x7f,0xe9,0xf0,0xaf,0xf1,0x71,0x21};<br /><br />volatile unsigned int my_register1;<br />volatile unsigned int my_register2;<br />volatile unsigned int my_register3;<br />volatile unsigned int my_register4; <br /><br /><br /><br />ISR(USART0_RX_vect)<br />{<br />char data;<br />TCCR2B=0; //stop  timer2<br />if(TCNT2&gt;24){frame_error=1;} //check timer2 1.5char time between bytes<br />TCNT2=0; //clear timer2<br />data=UDR0;<br />modbus_read(data); //read one byte<br />TCCR2B=(1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22); //start timer2<br />}<br /><br /><br />ISR(TIMER2_COMPA_vect)<br />{<br />TCCR2B=0;<br />TCNT2=0;<br />modbus_execution(frame_error);<br />frame_error=0;<br /><br />}<br /><br /><br />void set_uart()<br />{<br />UCSR0B=(1&lt;&lt;RXCIE0)|(1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);<br />UCSR0C=(1&lt;&lt;USBS0)|(1&lt;&lt;UCSZ01)|(1&lt;&lt;UCSZ00);<br />UBRR0H=0;<br />UBRR0L=71;<br /><br />}<br /><br />void set_timer()<br />{<br />TCCR2B=0;<br />TCNT2=0;<br />OCR2A=57;<br />TIMSK2=(1&lt;&lt;OCIE2A);<br />}<br />void  display_show()<br />{<br />DIGIT_1_on;//ENABLE FIRST DIGIT<br />PORTA=display&#91;device_addr&gt;&gt;4&#93; ;//SHOW DATA<br /><br />_delay_ms(10);<br />DIGIT_1_off;//DISABLE FIRST DIGIT<br /><br />DIGIT_2_on;//ENABLE SECOND DIGIT<br />PORTA= display&#91;device_addr &amp; 0x0F&#93;; //SHOW DATA<br /><br />_delay_ms(10) ;<br />DIGIT_2_off;//DISABLE SECOND DIGIT<br />}<br />void scan_buttons()<br />{<br />unsigned int i=0;<br />if(tl1_push)<br />{<br />device_addr++;<br /><br />if(device_addr&gt;247)<br />{<br />device_addr=0;<br />}<br />while(tl1_push)<br />{<br />if(i&lt;100){i++;}<br />else<br />{<br />device_addr++;<br /><br />if(device_addr&gt;247)<br />{<br />device_addr=0;<br />}<br />}<br />_delay_ms(5);<br />display_show();<br />}<br />}<br />if(tl2_push)<br />{<br />if(device_addr&gt;0)<br />{<br />device_addr--;<br />}<br />else<br />{<br />device_addr=247;<br />}<br />while(tl2_push)<br />{<br />if(i&lt;100){i++;}<br />else{<br />if(device_addr&gt;0)<br />{<br />device_addr--;<br />}<br />else<br />{<br />device_addr=247;<br />}<br /><br />}<br />_delay_ms(5);<br />display_show();<br />}<br /><br />}<br /><br />eeprom_write_byte(0,device_addr);<br />modbus_slave_address(device_addr);<br />}<br /><br />void init_modbus()<br />{<br /><br />modbus_slave_address(device_addr);<br /><br />modbus_add_coil(0,&amp;PORTC,PC6);<br />modbus_add_coil(1,&amp;PORTC,PC7);<br />modbus_add_coil(2,&amp;PORTD,PD4);<br />modbus_add_coil(3,&amp;PORTD,PD5);<br /><br />modbus_add_input(0,&amp;PINC,PC2);<br />modbus_add_input(1,&amp;PINC,PC3);<br /> <br /> modbus_add_register(0,&amp;my_register1);<br /> modbus_add_register(1,&amp;my_register2);<br /> modbus_add_register(2,&amp;my_register3);<br />     modbus_add_register(3,&amp;my_register4);<br /><br />}<br /><br />void OCR1A_write(unsigned int val)<br />{<br />unsigned char sreg=0;<br />sreg=SREG;<br />cli();<br />OCR1A=val;<br />SREG=sreg;<br />sei();<br />}<br />void OCR1B_write(unsigned int val)<br />{<br />unsigned char sreg=0;<br />sreg=SREG;<br />cli();<br />OCR1B=val;<br />SREG=sreg;<br />sei();<br /><br />}<br /><br /><br />void init_pwm()<br />{<br /><br />TCCR1A=(1&lt;&lt;WGM11); //mode 14<br />TCCR1B=(1&lt;&lt;WGM13)|(1&lt;&lt;WGM12)|(1&lt;&lt;CS11);// clk/8<br />ICR1=1023;<br /><br />}<br />void init_display()<br />{<br />DDRB|=(1&lt;&lt;PB0)|(1&lt;&lt;PB1);<br />DDRA=0xff;<br />}<br />void init_button()<br />{<br />PORTB|=(1&lt;&lt;2);//pull up<br />PORTB|=(1&lt;&lt;3);<br />}<br /><br />void update_pwm()<br />{  <br />if(my_register1 &amp; (1&lt;&lt;0)) <br />{<br />  TCCR1A|=(1&lt;&lt;COM1A1);//enable channel A-non-invert mode<br />}<br />else<br />{<br />  TCCR1A&amp;=~(1&lt;&lt;COM1A1); //disable channel A-normnal port operation<br />}<br /><br />if(my_register1 &amp; (1&lt;&lt;1))<br />{<br />  TCCR1A|=(1&lt;&lt;COM1B1); //enable channel B-non-invert mode<br />}<br />else<br />{<br />  TCCR1A&amp;=~(1&lt;&lt;COM1B1);//disable channel B-normal port operation<br />}<br /><br />  OCR1A_write(my_register2);//change 0 to 1023<br />  OCR1B_write(my_register3);//change 0 to 1023<br />}<br /><br />void read_temperature(unsigned int temp_register)<br />{<br /> unsigned char lm75_ADDRESS=(temp_register&gt;&gt;11)+0x91; <br />      unsigned int temp;<br />      <br />      SoftI2CStart();<br />      SoftI2CWriteByte(lm75_ADDRESS);<br />      _delay_ms(1);<br />      temp=SoftI2CReadByte(1);<br />      temp&lt;&lt;=8;<br />      temp|=SoftI2CReadByte(0);<br />      temp&gt;&gt;=5;<br />      SoftI2CStop();<br />     <br />    my_register4=temp;<br />}<br /><br />int main(void)<br />{<br />device_addr = eeprom_read_byte(0);<br />    set_timer();<br />set_uart();<br />init_modbus();<br />    init_pwm();<br />    SoftI2CInit();<br />init_button();<br />init_display();<br /><br />    sei();<br /><br />    while(1)<br />    {<br />          _delay_ms(5);<br />          update_pwm();<br />  read_temperature(my_register4);<br />  scan_buttons();<br />  display_show();<br />    }<br />}[/syntax]<br /><br />Po przestudiowaniu wszelakich źródeł wiedzy, a przede wszystkim BB i GB wydaje mi się, że poprawne wartości wprowadziłem, jedynie co, to w projekcie autor zastosował kwarc 12 MHz, ja zaś działam na 11 059 200. W załączniku podaję odnośnik do strony projektu p. Vadovica<br /><br />Jest tam też projekt dla arduino nano, ten również próbowałem dostosować do moich warunków, ale niestety poległem. <br />Widocznie nie nadaję się do tego, skoro dalej stoję w miejscu  <img src="https://forum.atnel.pl/images/smilies/icon_neutral.gif" alt=":|" title="Średnio zadowolony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 20 gru 2020, o 21:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2020-12-02T18:01:49+01:00</updated>
<published>2020-12-02T18:01:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230080#p230080</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230080#p230080"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=230080#p230080"><![CDATA[
No niestety po dwóch tygodniach walki z tym muszę poddać temat. Są to dla mnie zbyt wysokie progi.<br />Chyba, że ktoś chce w łatwy sposób - <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />o ironio<br /></div> - zarobić, to możemy pomyśleć o jakiejś formie współpracy, ja postaram się odwdzięczyć za poświęcony czas<br /><br />@tonygryps jedyne biblioteki, które znalazłem to te z freemodbus, ale one są ogólnie dostępne w necie.<br /><br />Dziękuję wasze odpowiedzi w tym temacie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 2 gru 2020, o 18:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2020-11-16T19:00:13+01:00</updated>
<published>2020-11-16T19:00:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229854#p229854</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229854#p229854"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229854#p229854"><![CDATA[
Poszukaj gdzieś na tym forum jest biblioteka ModBudRtu ona na pewno się przyda do tego zadania oprócz tego musisz te delaye zamienić na timer programowy bo inaczej nic z tego nie będzie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 16 lis 2020, o 19:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2020-11-16T16:59:12+01:00</updated>
<published>2020-11-16T16:59:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229853#p229853</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229853#p229853"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229853#p229853"><![CDATA[
Oczywiście zdaję sobie sprawę z tego, że nie jest ten kod napisany w sposób optymalny, jednakże jak wspominałem wcześniej  metodą prób i błędów udało mi się stworzyć tego potwora, który &quot;działa&quot;. Czyli po zapytaniu &quot;81D&quot; po trzech sekundach leci zapytanie &quot;81L&quot;, po czym po sześciu sekundach znów leci &quot;81D&quot; i tak w kółko. Rozumiem, co Pan miał na myśli pisząc <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />to jest mniej więcej tak jakbyś chciał jechać szybko autem z zaciągniętym na MAXA hamulcem ręcznym<br /></div><br />Da się, ale to męczenie silnika i hamulców.<br />Z czystej ciekawości zostawiłem na dobę uruchomiony ten program i odczytywałem na bieżąco to co się dzieje na obu uart'ach - ani razu się nic nie wysypało, cały czas mikrokontroler działał w porządku.<br /><br />Jest jedna sprawa, która mnie nurtuje, mianowicie czy uda się zrobić z tego ModBusa RTU? Wiem, wiem, ględzę o tym jak najęty, ale to jest bardzo ważna sprawa dla mnie....<br /><br />Oczywiście jestem w trakcie analizy książek, o których Pan wspomniał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 16 lis 2020, o 16:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-15T23:55:39+01:00</updated>
<published>2020-11-15T23:55:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229844#p229844</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229844#p229844"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229844#p229844"><![CDATA[
<div class="quotetitle">robek29 napisał(a):</div><div class="quotecontent"><br />        while(1) {<br /> <br />                UART_RX_EVENT();<br /> <br />                uart_puts( 0, &quot;\e81D\r&quot; );                                      //wysyłam komendę &lt;ESC&gt;81D&lt;CR&gt; poprzez port uart0 - dotyczy przepływu<br />                        <span style="color: #FF0000">_delay_ms(1000);</span><br />                        uart_get_str( 0, flow1 );                               //odbieram odpowiedź ze wskaźnika z portu uart0<br />                        strncpy(flow, flow1 + 26, 31);                  //wywalam niepotrzebny mi początek odpowiedzi<br />                        uart_puts( 1, flow );                                   //wysyłam to co zostało poprzez port uart1<br />                        send_cr( 1 );<br /> <br />                <span style="color: #FF0000">_delay_ms(2000);</span><br /> <br />                uart_puts( 0, &quot;\e81L\r&quot; );                                              //wysyłam komendę &lt;ESC&gt;81L&lt;CR&gt; poprzez port uart0 - dotyczy sumatora<br />                        <span style="color: #FF0000">_delay_ms(1000);</span><br />                        uart_get_str( 0, totaliser1 );                          //odbieram odpowiedź ze wskaźnika z portu uart0<br />                        strncpy(totaliser, totaliser1 + 31, 40);        //wywalam niepotrzebny mi początek odpowiedzi<br />                        uart_puts( 1, totaliser );                                      //wysyłam to co zostało poprzez port uart1<br />                        send_cr( 1 );<br /> <br />                <span style="color: #FF0000">_delay_ms(5000);</span><br /> <br />        }<br /></div><br /><br />Pomijam już fakt, że tak długie delaye jak 5000 nie zadziałają, 2000 pewnie też nie - to już sam fakt że w pętli głównej stosujesz: UART_RX_EVENT(); i do tego delaye, chociażby miały one mieć tylko 100ms ... to jest mniej więcej tak jakbyś chciał jechać szybko autem z zaciągniętym na MAXA hamulcem ręcznym.<br /><br />Zapamiętaj sobie, że jeśli już zabierasz się za programowanie z użyciem Zdarzeń (Events) to ZAPOMNIJ o delajach na amen. To oznacza wyraźnie, że na razie nie rozumiesz jeszcze kompletnie co to oznacza i co to z kolei znaczy pisanie programów w sposób nieblokujący.<br /><br />Na tym etapie zachęcam jednak do przestudiowania dokładnie końcówki Bluebooka ale też przede wszystkim całego GREENBOOKA ... tam znajdziesz wyjaśnienia w czym rzecz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 lis 2020, o 23:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2020-11-15T15:55:31+01:00</updated>
<published>2020-11-15T15:55:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229836#p229836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229836#p229836"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229836#p229836"><![CDATA[
@mirekk36<br />Panie Mirosławie, nie chodzi o to, że się obrażam na forum, po prostu czuję się jakby spalony już tutaj, oczywiścnie nie powinno mieć miejsca to co się wydarzyło. W pełni się zgadzam, że nie powinno udostępniać się płatnych bibliotek.<br /><br />@wonsz<br />Muszę wrócić, aby pokazać co narobiłem. <br /><br />main.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;MK_MULTI_UART_20/mk_multi_uart.h&quot;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br /><br />char rx0buf&#91;50&#93;;<br />char tx0buf&#91;50&#93;;<br /><br />char rx1buf&#91;10&#93;;<br />char tx1buf&#91;10&#93;;<br /><br />char flow&#91;10&#93;;<br />char flow1&#91;50&#93;;<br /><br />char totaliser&#91;15&#93;;<br />char totaliser1&#91;50&#93;;<br /><br />void parsuj_uart0( void * buf, uint8_t size );<br />void parsuj_uart1( void * buf, uint8_t size );<br /><br />int main ( void ) {<br /><br />uart_init();<br /><br />uart_reg_callback( 0, rx0buf, parsuj_uart0 );<br />uart_reg_callback( 0, tx0buf, parsuj_uart0 );<br />uart_reg_callback( 1, rx1buf, parsuj_uart1 );<br />uart_reg_callback( 1, tx1buf, parsuj_uart1 );<br /><br />uart_echo( 0, 0 );<br />uart_echo( 1, 0 );<br /><br />sei();<br /><br />while(1) {<br /><br />UART_RX_EVENT();<br /><br />uart_puts( 0, &quot;\e81D\r&quot; );//wysyłam komendę &lt;ESC&gt;81D&lt;CR&gt; poprzez port uart0 - dotyczy przepływu<br />_delay_ms(1000);<br />uart_get_str( 0, flow1 );//odbieram odpowiedź ze wskaźnika z portu uart0<br />strncpy(flow, flow1 + 26, 31);//wywalam niepotrzebny mi początek odpowiedzi<br />uart_puts( 1, flow );//wysyłam to co zostało poprzez port uart1<br />send_cr( 1 );<br /><br />_delay_ms(2000);<br /><br />uart_puts( 0, &quot;\e81L\r&quot; );//wysyłam komendę &lt;ESC&gt;81L&lt;CR&gt; poprzez port uart0 - dotyczy sumatora<br />_delay_ms(1000);<br />uart_get_str( 0, totaliser1 );//odbieram odpowiedź ze wskaźnika z portu uart0<br />strncpy(totaliser, totaliser1 + 31, 40);//wywalam niepotrzebny mi początek odpowiedzi<br />uart_puts( 1, totaliser );//wysyłam to co zostało poprzez port uart1<br />send_cr( 1 );<br /><br />_delay_ms(5000);<br /><br />}<br />}<br /><br />void parsuj_uart0( void * buf, uint8_t size ) {<br /><br />}<br /><br />void parsuj_uart1( void * buf, uint8_t size ) {<br /><br />}[/syntax]<br /><br />Wiem, że nie jest to kod najwyższych lotów, jego struktura i jako całość boli w oczy, ale jest tak, ponieważ dopiero raczkuję w świecie programowania w C, a muszę przyznać, że trochę mi się spieszy ze znalezieniem rozwiązania. Mam uzyskaną transmisję po ASCII, UART0 służy do komunikacji z tym nieszczęsnym wskaźnikiem, jednakże odpowiedzi wysyłam z mojego PC w zastępstwie - obecnie nie mam fizycznego dostępu do w/w wskaźnika. UART1 służy do wysyłania już obrobionych danych (pobranych z UART0) do PC. Teraz chciałbym w miarę możliwości te dane wysyłać w ModBusie RTU po 485. Jest to do zrobienia? Mogę liczyć na pomoc?<br />Jedynie co jeszcze zauważyłem, a co mi się teraz nie podoba to to, że wystarczy raz odpowiedzieć na zapytanie, a program ciągle wysyła to co raz odebrał. Nie jest to dobre rozwiązanie, próbowałem czyścić zawartość flow, albo totaliser po każdym wysłaniu znaku \r, ale nie uzyskałem zadowalającego efektu. Widać to na zrzucie w załączniku. W lewym okienku mam podgląd na ruch na UART0, czarną czcionką są znaki wysyłane przez mikrokontroler, różowy/fioletowy (jestem mężczyzną, rozpoznaję tylko RGB) to odpowiedź, którą wysyłam (symulacja wskaźnika). W prawym okienku widać ruch na UART1.<br />Oczywiście dociera do mnie, że to tylko prosta transmisja ASCII, teraz chciałbym odpowiedzi wysyłać na ModBusa RTU.<br /><br /><br /><br />Z góry dzięki za poświęcony czas.<br /><br /><a href="https://obrazkiforum.atnel.pl/21582/6070e989ae44d3b1d2cb0262f46f57fa.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/21582/6070e989ae44d3b1d2cb0262f46f57fa.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 15 lis 2020, o 15:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wonsz]]></name></author>
<updated>2020-11-10T06:38:01+01:00</updated>
<published>2020-11-10T06:38:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229752#p229752</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229752#p229752"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229752#p229752"><![CDATA[
<div class="quotetitle">robek29 napisał(a):</div><div class="quotecontent"><br />Przepraszam z całych sił Pana Mirosława, oczywiście wrzucenie tego projektu nie było celowe, może być Pan spokojny, nigdzie - podkreślam - NIGDZIE nie publikowałem tego projektu oraz Pana bibliotek. <br />Biorąc pod uwagę moją głupotę proszę o usunięcie tematu, postaram się samemu we własnym zakresie znaleźć rozwiązanie, ja tymczasem nie będę już publicznie udzielał na forum.<br /></div><br /><br /><br />Nie ma tak dobrze, wracaj tu!  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2311">wonsz</a> — 10 lis 2020, o 06:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-11-10T00:56:44+01:00</updated>
<published>2020-11-10T00:56:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229751#p229751</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229751#p229751"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229751#p229751"><![CDATA[
<div class="quotetitle">robek29 napisał(a):</div><div class="quotecontent"><br />Biorąc pod uwagę moją głupotę proszę o usunięcie tematu, postaram się samemu we własnym zakresie znaleźć rozwiązanie, ja tymczasem nie będę już publicznie udzielał na forum.<br /></div><br />No przecież jeśli kolega to rozumie - to po co się zaraz obrażać na forum i już z niego nie korzystać. Proszę tylko po prostu o nie udostępnianie publiczne bibliotek. To chyba nic złego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 lis 2020, o 00:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robek29]]></name></author>
<updated>2020-11-09T16:02:49+01:00</updated>
<published>2020-11-09T16:02:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229746#p229746</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229746#p229746"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229746#p229746"><![CDATA[
Przepraszam z całych sił Pana Mirosława, oczywiście wrzucenie tego projektu nie było celowe, może być Pan spokojny, nigdzie - podkreślam - NIGDZIE nie publikowałem tego projektu oraz Pana bibliotek. <br />Biorąc pod uwagę moją głupotę proszę o usunięcie tematu, postaram się samemu we własnym zakresie znaleźć rozwiązanie, ja tymczasem nie będę już publicznie udzielał na forum. <br /><br />@0livaw<br />Widziałem już tą stronę, kontaktowałem się z nimi, czekam na odpowiedź<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21582">robek29</a> — 9 lis 2020, o 16:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[0livaw]]></name></author>
<updated>2020-11-09T00:29:14+01:00</updated>
<published>2020-11-09T00:29:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229742#p229742</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229742#p229742"/>
<title type="html"><![CDATA[Re: Wykorzystanie ATmega 164a do konwersji danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23421&amp;p=229742#p229742"><![CDATA[
Taki konwerter możesz zrobić właśnie za pomocą takiej ATmegi.<br />Poniżej przykład właśnie takiego konwertera, który z kodu w ASCII zamienia na MODBUS RTU:<br /><!-- m --><a class="postlink" href="https://www.e-tronix.eu/8,konwerter-rs232-rs485-modbus.html" >https://www.e-tronix.eu/8,konwerter-rs2 ... odbus.html</a><!-- m --><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1304">0livaw</a> — 9 lis 2020, o 00:29</p><hr />
]]></content>
</entry>
</feed>