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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-24T21:44:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6130&amp;mode</id>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-24T21:44:32+01:00</updated>
<published>2014-02-24T21:44:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71891#p71891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71891#p71891"/>
<title type="html"><![CDATA[Re: Atmega48 - konfiguracja USART jakiś problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71891#p71891"><![CDATA[
No i wywalczyłem  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br />Testowałem różne sposoby przechwytu bufora i wymyśliłem sobie taki, który najmniej blokuje pętle główną. Przechwycić z &quot;węża&quot; i tak zdąży, bo to docelowo pojedyncze komendy będą z wysyłką potwierdzenia przed przyjściem następnej wiadomości  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />W międzyczasie okazało się, że mój terminal nie wysyłał odpowiednich znaków na końcu stąd pierwsze testy były stosunkowo trudne i chaotyczne, ale kiedy mnie pokusiło wysłać ręcznie kilka znaków przez odpowiednie makro z kompa wtedy wszystko się wyjaśniło.<br />Może ktoś skorzysta, poniżej kod z ustawieniami dla migadełka - zawsze lubię testowo popatrzyć czy nic się nie gryzie i nie wstrzymuje pętli <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /> <br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> * UART<br /> * ATMEGA48 8Mhz<br /> * SylwekK<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;MKUART/mkuart.h&quot;<br /><br />volatile uint8_t tim;<br /><br /><br />int main(void) {<br /><br />USART_Init( __UBRR );// inicjalizacja UART<br /><br />sei();// globalne odblokowanie przerwań<br /><br />uint8_t l=0, i=0;<br />char tablica&#91;20&#93;;<br /><br />DDRB=0b00000010; // dla migadełka na PB1<br /><br />//taktowanie 8Mhz ATMEGA48/88/168<br />//------------------------------------------<br />//ustawienie TIMER1 w tryb CTC<br />TCCR1B |= (1&lt;&lt;WGM12);//tryb CTC<br />TCCR1B |= (1&lt;&lt;CS11);//preskaler = 8<br />OCR1A = 9999;//99=100us (10kHz); 9999=100Hz 10ms (8000000/8/100=100Hz)<br />TIMSK1 |= (1&lt;&lt;OCIE1A);//zezwolenie na przerwanie CompareMatch<br />//------------------------------------------<br /><br /><br /><br /><br />// pętla głowna<br />//--------------------------------<br />//--------------------------------<br />sei();<br />while(1) {<br /><br />if((l=uart_getc())){<br />tablica&#91;i++&#93; = l;<br />tablica&#91;i&#93;='\0';<br />}<br /><br />if (l==10){<br />uart_puts(&quot;Przesłanych znaków:&quot;);<br />uart_putint(i, 10);<br />uart_puts(&quot;\r\n&quot;);<br />uart_puts(tablica);<br />i=0;<br />}<br />//--------------------------------<br />if (!tim){<br />tim=10; //100ms<br />PORTB ^=(1&lt;&lt;PB1);<br />}<br /><br /><br /><br />//--------------------------------<br /><br />} //END while(1)<br />} //END main<br />//--------------------------------<br />//--------------------------------<br /><br />ISR(TIMER1_COMPA_vect){<br />if(tim) tim--;<br /><br /><br />}//END ISR(TIMER1_COMPA_vect)[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 24 lut 2014, o 21:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-24T15:56:11+01:00</updated>
<published>2014-02-24T15:56:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71820#p71820</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71820#p71820"/>
<title type="html"><![CDATA[Re: Atmega48 - konfiguracja USART jakiś problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71820#p71820"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Dlatego najlepiej gdy się zaczyna takie przejście to próbować sobie odpalić to na oryginale czyli na ATmega32<br /></div><br />Chyba kiedyś zainwestuje w ten procek do testów:) przeważnie działam na rodzinie A48/88/168 i tiny13 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Po prostu nie było mi na razie potrzeba więcej pinów czy pamięci.<br /><br />@Rychu - co prawda teraz nie zatrzymuje się już wysyłka (jak to wcześniej było), ale na terminalu mam cały czas drukowane  takie coś &lt;00&gt;&lt;00&gt;&lt;00&gt;&lt;00&gt;&lt;00&gt;&lt;00&gt;&lt;00&gt;...<br /><br />Aaaa, i jedno wyjaśnienie (rutyna zżera) to przerwanie RX, o którym pisałem, że pułapka nie reaguje to jednak działa. Podpiąłem diodę pod PB0 przez pomyłkę... W każdym razie coś jest nie tak.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 59 minutach ]</span></strong><br /><br />Uff, coś drgnęło. Taki zapis wreszcie wyświetla mi echo:<br /><br />[syntax=c]l=uart_getc();<br />if (l){<br />uart_putc(l);[/syntax]}<br /><br />Teraz powalczę z tablicą <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=1922">SylwekK</a> — 24 lut 2014, o 15:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rychu]]></name></author>
<updated>2014-02-24T14:42:12+01:00</updated>
<published>2014-02-24T14:42:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71816#p71816</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71816#p71816"/>
<title type="html"><![CDATA[Re: Atmega48 - konfiguracja USART jakiś problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71816#p71816"><![CDATA[
A spróbuj zrobić tak, w pętli głównej wpisz tylko:<br />[syntax=c]while(1){<br />   l=uart_getc(); // l zadeklaruj jako char<br />   uart_putc(l);<br />}[/syntax]<br /><br />Na terminalu powinno pojawić się echo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3113">Rychu</a> — 24 lut 2014, o 14:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-02-24T14:33:39+01:00</updated>
<published>2014-02-24T14:33:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71815#p71815</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71815#p71815"/>
<title type="html"><![CDATA[Re: Atmega48 - konfiguracja USART jakiś problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71815#p71815"><![CDATA[
Dlatego najlepiej gdy się zaczyna takie przejście to próbować sobie odpalić to na oryginale czyli na ATmega32 - wtedy gdy będzie widać że działa - to i łatwiej będzie szukać swojego błędu w przportowaniu kodu na inny procek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 24 lut 2014, o 14:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-24T15:28:52+01:00</updated>
<published>2014-02-24T13:46:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71809#p71809</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71809#p71809"/>
<title type="html"><![CDATA[Atmega48 - konfiguracja USART jakiś problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6130&amp;p=71809#p71809"><![CDATA[
Walczę już, któryś dzień z kolei (oczywiście z przerwami) przegrzebałem forum, noty PDF a ta cholera i tak nie działa w pełni.<br />Może od początku. Póki co po bascomie mam nieskażony umysł uartem, bo nie był mi nigdy potrzebny <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />, ale teraz postanowiłem drążyć temat i wreszcie go ogarnąć. Na warsztat poszły biblioteki Mirka i po zaktualizowaniu rejestrów dla potrzeb A48 ruszyło nadawanie z AVR...i na tym koniec. Gdy z terminala podczas nadawania wpisałem cokolwiek próbowałem nadać (pierwszy raz przez przypadek to zauważyłem) to od razu nadawanie z AVR zostało przerwane dosłownie... w pół słowa. Dopisałem więc odbiór (na podstawie jakiegoś przykładu tu z forum) i nadal nic. Dorobiłem pułapkę w pliku Mirka żeby zobaczyć czy wchodzi w przerwanie... nadal nic. Już oczopląsu od rejestrów dostaje i nie wiem co jeszcze powinienem ustawić. Może coś jeszcze powinno być włączone, albo zmieniony jakiś bit... poddaję się. Poniżej wszystkie zmodyfikowane pliki. Wysyłanie w pliku main.c zakomentowane (działa) i skupiłem się tylko na odbiorze przez AVR. W teorii program powinien odebrać dane i podać jakąś liczbę bajtów jako echo. Korzystam z tradycyjnej prostej przejściówki USB-UART (na FT232RL) i ona działa prawidłowo (zwarłem RX z TX i miałem echo na terminalu. Nie wiem, może źle korzystam z funkcji. Jak to się popularnie mówi POMOCY! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><br />[syntax=c]/*<br /> <br />void USART_Init( uint16_t baud ) {<br />/* Ustawienie prędkości */<br />UBRR0H = (uint8_t)(baud&gt;&gt;8);<br />UBRR0L = (uint8_t)baud;<br />/* Załączenie nadajnika I odbiornika */<br />UCSR0B = (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0);<br />/* Ustawienie format ramki: 8bitów danych, 1 bit stopu */<br />//UCSR0C = (1&lt;&lt;URSEL)|(3&lt;&lt;UCSZ00);<br />UCSR0C = (1&lt;&lt;USBS0)|(3&lt;&lt;UCSZ00);<br /><br />UCSR0B |= (1&lt;&lt;RXEN0)|(1&lt;&lt;TXEN0)|(1&lt;&lt;RXCIE0);<br /><br />...<br /><br /><br /><br />// definiujemy procedurę obsługi przerwania nadawczego, pobierającą dane z bufora cyklicznego<br />ISR( USART_UDRE_vect)  {<br />...<br />}<br /><br /><br />// definiujemy procedurę obsługi przerwania odbiorczego, zapisującą dane do bufora cyklicznego<br />ISR( USART_RX_vect ) {<br /> ...<br /><br />    DDRB=0b00000010;<br />    PORTB |= (1&lt;&lt;PB1);<br /><br />...<br />}[/syntax]<br /><br /><br />i plik głowny:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-03<br /> *       Autor: Mirosław Kardaś<br /> *<br /> *       ATmega32 - taktowana wewn. oscylatorem 8MHz<br /> *<br /> * Kalibracja OSCCAL<br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;MKUART/mkuart.h&quot;<br /><br />// ATMEGA48 8Mhz<br /><br />int main(void) {<br /><br />USART_Init( __UBRR );// inicjalizacja UART<br /><br />sei();// globalne odblokowanie przerwań<br /><br />uint8_t licznik, l=0, i=0, pm = licznik = OSCCAL-40;// zmienne pomocnicze do wizualizacji OSCCAL<br />char tablica&#91;50&#93;;<br />// pętla nieskończona<br />while(1) {<br /><br />//uart_puts(&quot;Test UART, wartosc OSCCAL = &quot;);// wyślij tekst<br />//uart_putint(licznik, 10);// wyślij liczbę<br />//uart_putc('\r');// wyślij znak CR (enter)<br />//uart_putc('\n');// wyślij znak LF (nowa linia)<br />//_delay_ms(100);// odczekaj 0,1 sekundy<br />//OSCCAL = licznik++;// zwiększ wartość bajtu kalibracyjnego o 1<br />//licznik++;<br /><br /><br />while( (l=uart_getc()) != 0x0d)<br />{<br />          tablica&#91;i&#93; = l;<br />          i++;<br />}<br />        tablica&#91;i&#93;='\0';<br /><br />//if (tablica&#91;0&#93;){<br />//while (tablica&#91;i&#93;){<br />uart_puts(&quot;Wpisana iloć znaków:&quot;);<br />uart_putint(i, 10);<br />uart_puts(&quot;\r\n&quot;);<br />//i++;<br />//}<br />//}<br /><br /><br />// badamy kalibrację tylko w granicach +- 20 w stosunku do<br />// tej jaka była ustawiona fabrycznie<br />//if(licznik &gt; pm+80) licznik=pm;<br /><br />}<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 24 lut 2014, o 13:46</p><hr />
]]></content>
</entry>
</feed>