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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-12-09T12:24:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21508&amp;mode</id>
<entry>
<author><name><![CDATA[luki791]]></name></author>
<updated>2018-11-14T18:46:49+01:00</updated>
<published>2018-11-14T18:46:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213741#p213741</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213741#p213741"/>
<title type="html"><![CDATA[Re: Bufor cykliczny UART, problem z odbiorem danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213741#p213741"><![CDATA[
Problem rozwiązany, co prawda nad buforem jeszcze nie do końca panuje, ale można powiedzieć, że działa.<br /><br />Problemem nie był kod, tylko konwerter USB-UART, zakupiłem drugi tym razem oparty na FTDI232 i krzaki się skończyły.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1978">luki791</a> — 14 lis 2018, o 18:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[luki791]]></name></author>
<updated>2018-11-03T10:40:43+01:00</updated>
<published>2018-11-03T10:40:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213312#p213312</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213312#p213312"/>
<title type="html"><![CDATA[Re: Bufor cykliczny UART, problem z odbiorem danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213312#p213312"><![CDATA[
Dobra symulacja, dzięki.<br /><br />Wszystko już chyba sprawdziłem i program w jakiejś części działa dobrze, tylko zamiast ASCII w terminalu dostaje krzaki.<br />Linię Rx konwertera USB-UART mam podłączoną bezpośrednio do Tx uC, a linia Rx uC jest podłączona przez konwerter poziomów logicznych do linii Tx modułu GSM.<br /><br />P.S.<br />Poprawiłem bit przerwania UDRE na UDRIE.<br /><br />Tak wyglądają rejestry UCSRB i UCSRA po inicjalizacji UART:<br /><a href="https://obrazkiforum.atnel.pl/1978/4348c486debb26bc216fae55d3f2589b.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/1978/4348c486debb26bc216fae55d3f2589b.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1978">luki791</a> — 3 lis 2018, o 10:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mg101]]></name></author>
<updated>2018-12-09T12:24:23+01:00</updated>
<published>2018-11-02T16:38:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213292#p213292</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213292#p213292"/>
<title type="html"><![CDATA[Re: Bufor cykliczny UART, problem z odbiorem danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213292#p213292"><![CDATA[
<!-- m --><a class="postlink" href="http://jaktodziala.eu/" >http://jaktodziala.eu/</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=683">mg101</a> — 2 lis 2018, o 16:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[luki791]]></name></author>
<updated>2018-11-01T20:47:07+01:00</updated>
<published>2018-11-01T20:47:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213260#p213260</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213260#p213260"/>
<title type="html"><![CDATA[Bufor cykliczny UART, problem z odbiorem danych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21508&amp;p=213260#p213260"><![CDATA[
witam,<br /><br />Jestem początkującym, robię projekcik związany z komunikacją uC Atmega i modułu GSM i przetwarzaniem danych otrzymanych z modułu GSM i z tym największy problem.<br />Wiem jak przesyłać i odbierać pojedyncze ramki, ale nie wiem jak zorganizować w programie tą komunikację, docelowo chciałbym odczytywać SMS zapisane na karcie SIM w module GSM a następnie je z czymś porównywać, na razie mam coś takiego i nie mam pomysłu jak odbierać długie stringi z modułu i przechowywać je w programie do momentu porównania.<br /><br />Widziałem wiele przykładów implementacji bufora cyklicznego ale żadnego nie udało mi się z sukcesem zaimplementować...<br />Może ktoś zaproponować jakiś najprostszy sposób odbiór danych po UART i przechowanie go w programie, tak aby był nieblokujący. <br /><br />Nie mam niestety bluebook'a.<br /><br />Próba implementacji bufora cyklicznego, efekt jest taki, że po podłączeniu modułu GSM, uC powinien odebrać &quot;MODEM STARTUP&quot; a następnie go wysłać na terminal putty, a tak się nie dzieje.<br />[syntax=c]/*<br /> * RS232.c<br /> *<br /> * Created: 29.09.2018 15:16:13<br /> * Author : Łukasz<br />*/<br />#define F_CPU 18432000L<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/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br />#define BAUD 115200<br />#define __UBRR ((F_CPU+BAUD*8UL) / (16UL*BAUD)-1) <br />#define ROZMIAR 16<br /> <br />typedef struct{<br />    char tablica&#91;ROZMIAR&#93;;<br />    char poczatek;<br />    char koniec;<br />    }bufor_cykliczny;<br /> <br />volatile bufor_cykliczny bufor = {.poczatek = 0, .koniec = 0};<br />//volatile char znak = 0;<br /> <br />void USART_Init( uint16_t ubrr );<br />void USART_Transmit( char data );<br />char USART_Receive( void );<br />void GSM_Init( void );<br />void USART_Write_Word( char *dana );<br />void USART_Read_Word( void );<br />void bufor_dopisz(char data);<br />void bufor_wyslij(void);<br /> <br />int main(void){<br />    //Ustawienie portów<br />    DDRD |= (1&lt;&lt;PD5);<br />    DDRD |= (1&lt;&lt;PD7);<br />    PORTD = (0&lt;&lt;PD7); //gsm on<br /> <br />    //Deklaracja zmiennych lokalnych<br /> <br />    //Wywołanie funkcji inicjaizujących<br />    USART_Init(__UBRR);<br />    sei();<br /> <br />    while (1){      <br /> <br />        }<br />}<br />/*DEFINICJE FUNKCJI*/<br />ISR(USART_RXC_vect){        //przerwanie od odbioru danej<br />    bufor_dopisz(UDR);<br />    if(bufor.poczatek + 1 == bufor.koniec){<br />        bufor_wyslij();<br />    }   <br />}<br />ISR(USART_UDRE_vect){<br />    bufor_wyslij();<br />}<br />void USART_Init( uint16_t ubrr){<br />    /*Set baud rate */<br />    UBRRH = (uint8_t)(ubrr&gt;&gt;8);<br />    UBRRL = (uint8_t)ubrr;<br />    /*Enable receiver and transmitter and receiver interrupt */<br />    UCSRB = (1&lt;&lt;RXEN)|(1&lt;&lt;TXEN)|(1&lt;&lt;RXCIE)|(1&lt;&lt;UDRE);<br />    /* Set frame format: 8data, 1stop bit, none parity */<br />    UCSRC = (1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ0);<br />}<br />void USART_Transmit( char data ){<br />    /* Wait for empty transmit buffer */<br />    while ( !( UCSRA &amp; (1&lt;&lt;UDRE)) );<br />    /* Put data into buffer, sends the data */<br />    UDR = data;<br />}<br />char USART_Receive( void ){<br />    /* Wait for data to be received */<br />    while ( !(UCSRA &amp; (1&lt;&lt;RXC)) );<br />    /* Get and return received data from buffer */<br />    return UDR;<br />}<br />void GSM_Init( void ){<br /> <br />}   <br />void USART_Write_Word( char *dana){<br />    int length; //długość stringa<br />    int k=0; //zmienna licznikowa<br /> <br />    length=strlen(dana);<br /> <br />    for(k=0; k&lt;length; k++){<br />        USART_Transmit(dana&#91;k&#93;);<br />    }<br /> <br />}<br />void USART_Read_Word(void){<br />}<br />void bufor_dopisz(char data){<br />    if(bufor.koniec+1 &lt; ROZMIAR) //standardowy przypadek<br />    {<br />        if(bufor.koniec+1 != bufor.poczatek){<br />            bufor.tablica&#91;bufor.koniec++&#93; = data;<br />            } //jeżeli jest miejsce w buforze to zapisz, aktualizuj koniec, jeżeli nie ma miejsca to nic nie rób<br />    }<br />    else //przypadek gdy trzeba wrócić do 0<br />    {<br />        if(bufor.poczatek != 0){<br />            bufor.tablica&#91;ROZMIAR-1&#93; = data; <br />            bufor.koniec=0;<br />            }<br />    }<br />}<br />void bufor_wyslij(void){<br />    if(bufor.poczatek != bufor.koniec) //jeżeli bufor nie jest pusty<br />    {<br />        UDR = bufor.tablica&#91;bufor.poczatek++&#93;; //wyślij daną z początku i zwiększ wskaźnik<br />    }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1978">luki791</a> — 1 lis 2018, o 20:47</p><hr />
]]></content>
</entry>
</feed>