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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-08-01T13:52:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3724&amp;mode</id>
<entry>
<author><name><![CDATA[fullmoonguy]]></name></author>
<updated>2013-08-01T13:52:57+01:00</updated>
<published>2013-08-01T13:52:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44066#p44066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44066#p44066"/>
<title type="html"><![CDATA[Re: Problem z UART, może z Timerem, kto wie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44066#p44066"><![CDATA[
Twój kod daje identyczne rezultaty ;/ ... Terminal działa ok, bo jak nie opóźniam wszystkiego w przerwaniu tylko zakomentowanym delayem to wszystko działa jak trzeba ... ale zagadka wciąż nie rozwiązana <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .... to do ja robię (ten warunek w przerwaniu, którego nie rozumiesz) ... to po prostu wygenerowanie impulsiku o szerokości 5ms (flaga), który załącza warunek w pętli głównej. ,... pozostałe 995 ms flaga jest ustawiona na 0. (informuje mnie o tym dioda na porcie C).<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 50 minutach ]</span></strong><br /><br />Dobra, wygląda na to że jest to sztandarowy przykład do tego, aby dowiedzieć się czym grozi niedodanie specyfikatora <strong>volatile</strong> w linii 31. Problem rozwiązany <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... lecz nadal ciekawi mnie to dlaczego wywołanie funkcji uart_putint w linii 111 powoduje wyświetlanie tej godziny na terminalu, a zakomentowanie już nie..... przecież ta linia ma się nikjak do wyświetlania godziny ... czyżby to była jakaś sprzętowa sprawa ??<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1039">fullmoonguy</a> — 1 sie 2013, o 13:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2013-08-01T07:49:27+01:00</updated>
<published>2013-08-01T07:49:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44052#p44052</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44052#p44052"/>
<title type="html"><![CDATA[Re: Problem z UART, może z Timerem, kto wie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44052#p44052"><![CDATA[
Nie rozuemiem do końca sprawdzania tego warunku:(ja by,m go wyrzucił całkowicie)<br />[syntax=c]if(licznik == 5)<br />        {<br />                PORTC |= (1&lt;&lt;PC5);<br />                flagi.flag1 = 0;<br />        }[/syntax]<br /><br />i najpierw zamienił ten warunek :<br /><br />[syntax=c]if(licznik == 1000)<br />        {<br />                PORTC &amp;= ~(1&lt;&lt;PC5);<br />                licznik=0;<br />                flagi.flag1 = 1;<br />        }[/syntax]<br /><br />na<br />[syntax=c]if(licznik &gt;= 1000)<br />        {<br />                PORTC &amp;= ~(1&lt;&lt;PC5);<br />                licznik=0;<br />                flagi.flag1 = 1;<br />        }[/syntax]<br /><br />A potem w whilu w mainie<br /><br />[syntax=c]if(flagi.flag1)<br />                {<br />//wysylanie danych na terminal<br />flagi.flag1=0; //i tutaj bym skasowal flage, a nie w przerwaniu)<br />}[/syntax]<br /><br />Teraz powinno 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=74">xamrex</a> — 1 sie 2013, o 07:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fullmoonguy]]></name></author>
<updated>2013-08-01T01:06:01+01:00</updated>
<published>2013-08-01T01:06:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44041#p44041</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44041#p44041"/>
<title type="html"><![CDATA[Problem z UART, może z Timerem, kto wie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3724&amp;p=44041#p44041"><![CDATA[
Witam<br /><br />Ze względu na to, że po ciężkich przeżyciach doszedłem do rozdziału nt. I2C w niebieskiej książce, postanowiłem się pobawić zegarem PCF8563, który mam na swoim zestawie ewaluacyjnym. Mój problem nie polega na skomunikowaniu uC z układem RTC a raczej z programowym timerem dzięki któremu chce uzyskać odczyt co 1 s i wyświetlać godzinę na terminalu bez używania DELAYA. Chodzi mi bardziej o pewną linię w kodzie. Ale do rzeczy. Oto kod:<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 30-07-2013<br /> *        Time: 21:30:31<br /> *      Author: nikt<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;I2C_SOFT/i2c_soft.h&quot;<br />#include &quot;I2C_SOFT/i2c_soft_cfg.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br />#include &quot;UART_library/uart_lib.h&quot;<br /><br />//I2C_PCF8563<br /><br />//adres do odczytu - 163 (0xA3)<br />//adres do zapisu - 162 (0xA2)<br /><br />//funkcje<br />uint8_t dec_to_bcd(uint8_t dec);<br />uint8_t bcd_to_dec(uint8_t bcd);<br /><br />struct flags<br />{<br />unsigned flag1 : 1;<br />}flagi;<br /><br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{<br /><br />static uint16_t licznik = 0;<br />if(licznik == 5)<br />{<br />PORTC |= (1&lt;&lt;PC5);<br />flagi.flag1 = 0;<br />}<br />if(licznik == 1000)<br />{<br />PORTC &amp;= ~(1&lt;&lt;PC5);<br />licznik=0;<br />flagi.flag1 = 1;<br />}<br /><br />licznik++;<br />}<br />//ISR(INT0_vect )<br />//{<br /><br /><br /><br />//flagi.flag1 = 1;<br />//}<br />int main(void)<br />{<br /><br />//konfiguracja io<br />DDRC |= (1&lt;&lt;PC5);//test<br />DDRD &amp;= ~(1&lt;&lt;PD2);<br />PORTD |= (1&lt;&lt;PD2);<br /><br />////konfiguracja timera0 - przerwanie co 1ms<br />TCCR1B |= (1&lt;&lt;WGM12) | (1&lt;&lt;CS11) | (1&lt;&lt;CS10);<br />OCR1A = 250;<br />TIMSK |= (1&lt;&lt;OCIE1A);<br /><br />////konfiguracja external interrupt<br />//MCUCR |= (1&lt;&lt;ISC01) ;<br />//GICR |= (1&lt;&lt;INT0);<br /><br />//konfiguracja predkosci i2c<br />i2cSetBitrate(100);<br /><br />uart_Init(51);<br />sei();<br /><br />//test<br />//uint8_t liczba_dec = 51;<br />//uint8_t liczba_bcd = dec_to_bcd(15);<br />//uart_putint(liczba_bcd, 2);<br />//liczba_dec = bcd_to_dec(0b10101);<br />//uart_puts(&quot;\r\n&quot;);<br />//uart_putint(liczba_dec,10);<br /><br />flagi.flag1 = 0;<br /><br /><br />//ustawiamy godzine 20:55:00<br /><br />uint8_t bufor&#91;3&#93;;<br />bufor&#91;0&#93; = dec_to_bcd(0);<br />bufor&#91;1&#93; = dec_to_bcd(55);<br />bufor&#91;2&#93; = dec_to_bcd(20);<br /><br />TWI_write_buf(0xA2,0x02,3, bufor);<br /><br />//zmienne dla odbioru<br />uint8_t godziny, minuty, sekundy;<br /><br /><br />for(;;)<br />{<br /><br />uart_putint(flagi.flag1,10);//!!!! zagadka !!!<br />if(flagi.flag1)<br />{<br /><br />TWI_read_buf(0xA2, 0x02, 3, bufor);<br /><br />sekundy = bcd_to_dec(bufor&#91;0&#93;);<br />minuty = bcd_to_dec(bufor&#91;1&#93;);<br />godziny = bcd_to_dec(bufor&#91;2&#93;);<br /><br />if(sekundy &gt;=40) godziny -= 40;<br />if(godziny &lt; 10)uart_putc('0');<br />uart_putint(godziny,10);<br />uart_puts(&quot; &quot;);<br />if(minuty &lt; 10)uart_putc('0');<br />uart_putint(minuty,10);<br />uart_puts(&quot; &quot;);<br />if(sekundy &lt; 10)uart_putc('0');<br />uart_putint(sekundy,10);<br />uart_puts(&quot;\r\n&quot;);<br /><br /><br /><br />//_delay_ms(1000);<br />}<br /><br />}<br /><br />return 0;<br />}<br /><br />uint8_t dec_to_bcd(uint8_t dec)<br />{<br />return ((dec/10) &lt;&lt; 4) | dec % 10;<br />}<br /><br />uint8_t bcd_to_dec(uint8_t bcd)<br />{<br />return ((bcd&gt;&gt;4 &amp; 0x0f) * 10) + (0x0f &amp; bcd );<br />}[/syntax]<br /><br />Na podstawie powyższego kodu otrzymam następujące dane na terminalu:<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1039/7d3e64edab4c140cd198ed29fdb5e79e.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1039/7d3e64edab4c140cd198ed29fdb5e79e.JPG" alt="Obrazek" /></a><br /><br />Co jest oczywiste dla mnie, bo wyświetlam wartość flagi, która co sekundę na 5ms jest ustawiana na 1, wykonuje się warunek if w pętli głównej i w konsekwencji wykonuję obsługę I2C wraz z wyświetleniem mojej godziny (zaznaczona białą pętlą na obrazku) na terminalu. <br /><br />Moje pytanie jest takie: dlaczego gdy zakomentuję linię 111:<br /><br />[syntax=c]uart_putint(flagi.flag1,10);//!!!! zagadka !!![/syntax]<br /><br />to na terminalu nic się nie pojawia ? <br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1039">fullmoonguy</a> — 1 sie 2013, o 01:06</p><hr />
]]></content>
</entry>
</feed>