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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-06-25T10:07:27+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22246&amp;mode</id>
<entry>
<author><name><![CDATA[Bigrazor]]></name></author>
<updated>2019-06-25T10:07:27+01:00</updated>
<published>2019-06-25T10:07:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=220007#p220007</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=220007#p220007"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=220007#p220007"><![CDATA[
Witam.<br />Też jestem w trakcie uczenia się, ale może takie rozwiązanie tobie spasuje (wycinek z mojego sterownika stworzonego na postawie BB) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />[syntax=c]//zdefiniuj <br />#define il_pk 8<br />char t_pk&#91;il_pk&#93;&#91;4&#93;;<br />char PK&#91;8&#93;={PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7};<br /><br />void czas(TDATETIME * dt ){<br />DS3231_get_datetime( &amp;datetime );<br /> sec = (dt-&gt;ss);<br /> godz = (dt-&gt;hh);<br /> min = (dt-&gt;mm);<br /> rok = (dt-&gt;year);<br /> miesc = (dt-&gt;month);<br /> dzien = (dt-&gt;day);<br /> dtydz = (dt-&gt;dayofwek);<br />}<br />// i sprawdzaj<br />czas(&amp;datetime);<br />for(int i = 0;i&lt;il_pk;i++)//sterowanie czasowe przekaźniki<br />{<br />if((((t_pk&#91;i&#93;&#91;0&#93;*60)+t_pk&#91;i&#93;&#91;1&#93;)&lt;=((godz*60)+min))&amp;&amp;(((t_pk&#91;i&#93;&#91;2&#93;*60)+t_pk&#91;i&#93;&#91;3&#93;)&gt;=((godz*60)+min)))<br />{PORTA &amp;= ~(1&lt;&lt;PK&#91;i&#93;);}<br /><br />if(((t_pk&#91;i&#93;&#91;2&#93;*60)+t_pk&#91;i&#93;&#91;3&#93;)&lt;=((godz*60)+min)){PORTA |= (1&lt;&lt;PK&#91;i&#93;);}<br /><br />}[/syntax]<br /><br />Oczywiści musisz trochę zmodyfikować pod swoje potrzeby, ale chodzi o samą ideę, pozostanie tylko zapis i odczyt z EEPROM, bo ja korzystałem z zewnętrznej pamięci 24c32.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17955">Bigrazor</a> — 25 cze 2019, o 10:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-17T08:54:05+01:00</updated>
<published>2019-06-17T08:54:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219737#p219737</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219737#p219737"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219737#p219737"><![CDATA[
OK pisałem że się nie znam  <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=18503">miki53</a> — 17 cze 2019, o 08:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-16T21:46:49+01:00</updated>
<published>2019-06-16T21:46:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219735#p219735</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219735#p219735"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219735#p219735"><![CDATA[
<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Jeszcze raz się przyglądam twojej funkcji i coś mi nie gra chodzi mi o wskażnik  al-&gt;<br />wskazuje on na czas ustalany przez RTC oraz na czas który my ustawiamy jako czas<br />alarmu potem ten sam wskażnik wskazuje na godziny alarmu ( ahh ), minuty ( amm )<br />oraz sekundy ( ass )<br /><br />Nie za dużo iak na jeden wskażnik ?<br /></div><br />Bez obawy nie jest za dużo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> wskaźnik al-&gt; wskazuje na zmienne w strukturze i nie robi się &quot;kogel mogel&quot;  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />popatrz, na początku wpisuje do zmiennych ahh, amm, ass wartości czasu alarmu, żeby później można było policzyć czas alarmu - użyłem wskaźnika bo zmienne są w strukturze. Później wpisuję do zmiennej czas (także ona jest w strukturze), wartość aktualnego czasu odczytanego z RTC przez wskaźnik dt-&gt; ponieważ te są w innej strukturze, a ponieważ mam utworzony TYP strukturalny to zmienne alarm1, alarm2, alarm3 tworzą osobne struktury i nic się nie pomiesza <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> W końcu wszystko działa według założenia.<br /><br /><div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Mirek moał osobny wskażnik ( tak dla przykładu )<br /><br />dla godziny i inny dla daty <br />tak aby to się nie pomieszało wszystko w jednym<br /></div><br />Popatrz np. na funkcję Pana Mirka get_rtc_datetime, on tam dużo używa wskaźnika dt-&gt;, a zmiennych w strukturze TDATETIME jest dużo więcej niż w mojej strukturze TALARM. Chyba, że o inny wskaźnik Ci chodzi? Bo Pan Mirek dla daty i czasu używa wskaźnika dt-&gt;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 16 cze 2019, o 21:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-16T17:19:38+01:00</updated>
<published>2019-06-16T17:19:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219730#p219730</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219730#p219730"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219730#p219730"><![CDATA[
W mojej funkcji są porty ustawione na stałe ale <br />podczas ustawień dla danego wyjścia można je przełączać <br /><br />np. można zmieniać wyjście dla każdej nastawy niezależnie <br /><br />zobacz <br /> <br />// USTAWIANIE włącz - hh - mm - ss - nr portu / wyłącz - hh - mm - ss - nr portu<br />// ----------------------------------------------------------------<br />// set_rtc_alarm( &amp;datetime, 15, 32, 0, 2, 15, 33, 0, 2 );<br />// ****************************************************************<br /><br />w miejscu gdzie ustawiasz - port - możesz wstawiać dowolny port zamiast 2- dla PD5 wpisz <br />1 i masz już ustawiony port PD6 <br />możesz nawet mieszać,  włączasz port PD5 a wyłączasz wcześniej ustawiony port PD6<br />i wszystkie są ustawiane pełnym czasem ( godziny, minuty, sekundy )<br /><br />Jeszcze raz się przyglądam twojej funkcji i coś mi nie gra chodzi mi o wskażnik<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 41 minutach ]</span></strong><br /><br />Jeszcze raz się przyglądam twojej funkcji i coś mi nie gra chodzi mi o wskażnik  al-&gt;<br />wskazuje on na czas ustalany przez RTC oraz na czas który my ustawiamy jako czas<br />alarmu potem ten sam wskażnik wskazuje na godziny alarmu ( ahh ), minuty ( amm )<br />oraz sekundy ( ass )<br /><br />Nie za dużo iak na jeden wskażnik ?<br /><br />Ja staram się podglądać jak to robi Mirek <br /><br />Mirek moał osobny wskażnik  ( tak dla przykładu )<br /> <br />dla godziny i inny dla daty <br />tak aby to się nie pomieszało wszystko w jednym <br /><br />A Ty masz jeden wskażnik prawie do wszystkiego <br />Ja tam się nie znam ale na chłopski rozum to w tym wskażniku musi być kogel mogel  <br /><br /><br />[syntax=c]al-&gt;ahh = godzina;<br />        al-&gt;amm = minuta;<br />        al-&gt;ass = sekunda;<br /> <br />        // obliczanie czasu i alarmu w konkretnym alarmie(1,2,3)<br />        al-&gt;czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br />        al-&gt;alarm = ( al-&gt;ahh * 3600 ) + ( al-&gt;amm * 60 ) + ( al-&gt;ass );<br /> <br />        // włączenie wyjścia<br />        if( al-&gt;czas &gt;= al-&gt;alarm &amp;&amp; al-&gt;czas &lt;= al-&gt;alarm+dlugosc ) {[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 16 cze 2019, o 17:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-16T14:38:50+01:00</updated>
<published>2019-06-16T14:38:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219728#p219728</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219728#p219728"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219728#p219728"><![CDATA[
Moja funkcja może wydawać się skomplikowana dlatego, że chciałem, aby byla uniwersalna. Ale dzięki temu można sterować dowolnym pinem na dowolnym porcie niezależnie. W pliku main.c tam są źle opisane wywołania bo zrobiłem copy and paste, ale myślę że można się domyślić z argumentów, ktore piny są sterowane. <br /><br />Co do Twojej funkcji to jak działa to jest dobrze, ale za każdym razem jak bedziesz chcial zmienic port i pin to musisz ingerować w funkcję. Ja napisalem tak żeby tego uniknąć.<br /><br />A co do ilości zmiennych żeby ustawić 8 alarmów to nic mi nie przychodzi do głowy czy dało by sie uprościć. Musialby się ktoś wypowiedzieć z doświadczeniem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 16 cze 2019, o 14:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-16T12:23:14+01:00</updated>
<published>2019-06-16T12:23:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219723#p219723</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219723#p219723"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219723#p219723"><![CDATA[
Teraz nasuwa się następny problem <br />jak wyprowadzić ustawienia czasów alarmów na zewnątrz <br />aby można było ustawiać czasy za pomocą przycisków<br /><br />tylko że na jedną nastawę potrzebuję <br />dla włącz - hh - mm - ss - port / dla wyłącz - hh - mm - ss - port  = 8 x 8 nastaw dla 8 portów <br />to wychodzi 64 zmienne trochę sporo <br /><br />Czy dało by się prościej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 16 cze 2019, o 12:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-15T13:10:33+01:00</updated>
<published>2019-06-15T13:10:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219686#p219686</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219686#p219686"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219686#p219686"><![CDATA[
Dzięki Ci za pomoc <br /><br />Tylko Ty zechciałeś pomóc i podjąć temat za to gorące dzięki.<br /><br />Co do twojej funkcji to wydaje mi się że jest nieco skomplikowana <br />bo wskażnik goni wskażnik  ale nie twierdzę że jest zła<br />ma działać i oto chodzi<br /><br />ja nie umiem jeszcze programować więc piszę w prosty sposób <br />mam nadzieję że kiedyś się nauczę  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  <br />moja funkcja w nowej formie wygląda tak <br />( działa całkiem fajnie )<br /><br />plik main.c  -  ustawiam porty<br /><br />[syntax=c]//******** DOTYCZY WYJSC STERUJĄCYCH  ********************************************<br /> DDRD |= (1&lt;&lt;PD5); // ustawiamy PORT PD5 jako wyjście<br /> PORTD |= (1&lt;&lt;PD5);<br /> DDRD |= (1&lt;&lt;PD6); // ustawiamy PORT PD6 jako wyjście<br /> PORTD |= (1&lt;&lt;PD6);<br />// *******************************************************************************[/syntax] <br /><br />plik main.c - ustawienia dla dwóch wyjść alarmu pracujących niezależnie <br /><br />[syntax=c]while(1) {<br /><br />UART_RX_STR_EVENT( uart_buf ); // wywoływanie funkcji UARTA<br /><br />        // do funkcji EVENT - ss - mm - hh - wpisujemy czas po jakim ma się zsynchronizowac zegar<br />//GetNtpTime_EVENT( &amp;Timer2, 10, 0, 0,  NULL );<br /><br /><br /><br />// ** USTAWIANIE GODZINY ALARMU WŁĄCZ - WYŁĄCZ - PORT PD5 i PD6<br />// ** ustawiamy dla włączenia hh-mm-ss-port dla wyłączenia hh-mm-ss-port ****<br />// ----------------------------------------------------------------<br /> set_rtc_alarm( &amp;datetime, 15, 32, 0, 1, 15, 33, 0, 1 ); // ALARM NR-1 PORT - PD5<br />// ****************************************************************<br />// ----------------------------------------------------------------<br /> set_rtc_alarm( &amp;datetime, 15, 34, 0, 2, 15, 35, 0, 2 ); // ALARM NR-2 PORT - PD6<br />// ****************************************************************[/syntax]<br /><br />plik mk_pcf8583.c  - funkcja  <br /><br />[syntax=c]// ****  FUNKCJA WŁĄCZAJĄCA PORT PC7 DLA ALARMU ********************************************<br />void set_rtc_alarm( TDATETIME * dt, uint8_t ahh, uint8_t amm, uint8_t ass, uint8_t port, uint8_t wahh, uint8_t wamm, uint8_t wass, uint8_t wyj ){<br /> czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br /> alarm = ( ahh * 3600 ) + ( amm * 60 ) + ass;<br /><br /><br />     if ( (czas == alarm) &amp;&amp; ( port == 1)) {<br />     PORTD &amp;= ~(1&lt;&lt;PD5);<br />        }<br />     else<br />     if ( (czas == alarm ) &amp;&amp; ( port == 2)) {<br />     PORTD &amp;= ~(1&lt;&lt;PD6);<br />        }<br /><br /><br />// ****  FUNKCJA WYŁĄCZAJĄCA PORT PC7 DLA ALARMU ********************************************<br /> czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br />     walarm = ( wahh * 3600 ) + ( wamm * 60 ) + wass;<br /><br />     if (( czas == walarm) &amp;&amp; (wyj == 1 )) {<br />     PORTD |= (1&lt;&lt;PD5);<br />        }<br />     else<br />     if ((czas == walarm) &amp;&amp; ( wyj == 2)) {<br />     PORTD |= (1&lt;&lt;PD6);<br />    }<br />}<br />// *****************************************************************************************[/syntax]<br /><br />plik mk_pcf8583.h  - zmienne globalne<br /><br />[syntax=c]// *** MOJE ZMIENNE GLOBALNE DLA ALARMU *******************<br /> uint16_t alarm;<br /> uint16_t walarm;<br /> uint16_t czas;<br />// ********************************************************[/syntax]<br /><br />plik mk_pcf8583.h - nagłówek funkcji<br /><br />[syntax=c]// *** MOJA FUNKCJA DLA ALARMU *****************************************************************************************<br /> void set_rtc_alarm( TDATETIME * dt, uint8_t ahh, uint8_t amm, uint8_t ass, uint8_t port, uint8_t wahh, uint8_t wamm, uint8_t wass, uint8_t wyj );<br />// ************************************************************************************************[/syntax]<br /><br />Napisz swoje zdanie na temat mojego nieudolnego pisania ( ale bez owijania w bawełnę )<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 15 cze 2019, o 13:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-15T10:48:18+01:00</updated>
<published>2019-06-15T10:48:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219684#p219684</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219684#p219684"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219684#p219684"><![CDATA[
Dobra miki53, mam dla Ciebie funkcję - może Cie ucieszy  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ewentualnie dopiszesz sobie trzy argumenty do wpisania godziny wyłączenia alarmu bo ja wpisałem długość trwania alarmu.<br /><br />Nawiązując do:<br /><div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />A teraz chciałbym to rozwinąć do niezależnej możliwości włączania i wyłączania 8-mioma portami C<br />Czy macie jakieś pomysły ?, aby nie pisać jednej funkcji dla jednego wyjścia <br />Może by się dało jedną funkcją niezależnie wysterować 8 portów?<br /></div><br />chodziło Ci o piny chyba? Więc spróbowałem swoich sił i wyszła mi funkcja, która jest poniżej. Działa, jeśli ktoś widzi jakieś błędy to proszę o poprawę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Zgodnie z tym co pisałem wyżej o utworzeniu struktury dla alarmów w pliku *.h mamy:<br />[syntax=c]/* struktura alarmu */<br />typedef struct {<br />uint8_t ahh;<br />uint8_t amm;<br />uint8_t ass;<br />uint16_t czas;<br />uint16_t alarm;<br />} TALARM;<br /><br />extern TALARM alarm1, alarm2, alarm3;// wskaźnik do zmiennych tablicowych alarmów<br /><br />void set_rtc_alarm( TDATETIME * dt, TALARM * al, uint8_t pin_mask, volatile uint8_t * port, uint8_t godzina, uint8_t minuta, uint8_t sekunda, uint16_t dlugosc );[/syntax]<br />W pliku *.c:<br />[syntax=c]TALARM alarm1, alarm2, alarm3; // wskaźnik do zmiennych tablicowych<br /><br />/*<br />* Parametry wejściowe:<br />* * dt - wskaźnik na zmienną w strukturalną czasu<br />* * al - wskaźnik na zmienną strukturalną alarmu<br />*   pin_mask - maska pinu wyjściowego np. PB3<br />*   * port - nazwa PINx portu na którym jest pin wyjściowy np: PINB<br />*   godzina - godzina włączenia alarmu<br />*   minuta - minuta włączenia alarmu<br />*   sekunda - sekunda włączenia alarmu<br />*   dlugosc - czas trwania alarmu w sekundach<br />*/<br />void set_rtc_alarm( TDATETIME * dt, TALARM * al, uint8_t pin_mask, volatile uint8_t * port, uint8_t godzina, uint8_t minuta, uint8_t sekunda, uint16_t dlugosc ) {<br /><br />// wpisanie czasu do konkretnego alarmu(1,2,3)<br />al-&gt;ahh = godzina;<br />al-&gt;amm = minuta;<br />al-&gt;ass = sekunda;<br /><br />// obliczanie czasu i alarmu w konkretnym alarmie(1,2,3)<br />al-&gt;czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br />al-&gt;alarm = ( al-&gt;ahh * 3600 ) + ( al-&gt;amm * 60 ) + ( al-&gt;ass );<br /><br />// włączenie wyjścia<br />if( al-&gt;czas &gt;= al-&gt;alarm &amp;&amp; al-&gt;czas &lt;= al-&gt;alarm+dlugosc ) {<br /><br />*port &amp;= ~(1&lt;&lt;pin_mask);<br /><br />// wyłączenie wyjścia<br />} else {<br /><br />*port |= (1&lt;&lt;pin_mask);<br /><br />}<br />}[/syntax]<br />W main.c:<br />[syntax=c]// przed while(1) trzeba zainicjować wyjścia<br />        DDRB |= (1&lt;&lt;PB4);// pin PB4 jako wyjście<br />PORTB |= (1&lt;&lt;PB4);// wyłączenie diody<br /><br />DDRC |= (1&lt;&lt;PC7)|(1&lt;&lt;PC5);// pin PC7, PC5 jako wyjście<br />PORTC |= (1&lt;&lt;PC7)|(1&lt;&lt;PC5);// wyłączenie diod<br /><br />               <br />while(1) {<br /><br />RTC_EVENT();// zdarzenie z RTC<br /><br />set_rtc_alarm( &amp;datetime, &amp;alarm1, PC7, &amp;PORTC, 3, 0, 0, 10 );    // o 3:00:00 włącz diodę na PC7, wyłącz po 10s<br />set_rtc_alarm( &amp;datetime, &amp;alarm2, PC5, &amp;PORTC, 3, 0, 10, 10 );  // o 3:00:10 włącz diodę na PC7, wyłącz po 10s<br />set_rtc_alarm( &amp;datetime, &amp;alarm3, PB4, &amp;PORTB, 3, 0, 20, 10 );  // o 3:00:20 włącz diodę na PC7, wyłącz po 10s<br /><br />}[/syntax]<br />Przeanalizuj i daj znać  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 15 cze 2019, o 10:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-14T14:13:19+01:00</updated>
<published>2019-06-14T14:13:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219668#p219668</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219668#p219668"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219668#p219668"><![CDATA[
Coś w tym rodzaju <br />z tym że ja rozbudowałem nieco funkcję o element wyłączania <br /><br />zaraz pokażę jak ta funkcja teraz wygląda <br /><br />plik mk_pcf8583.c<br />[syntax=c]// ****  FUNKCJA WŁĄCZAJĄCA PORT PC7 DLA ALARMU ********************************************<br />void set_rtc_alarm( TDATETIME * dt, uint8_t ahh, uint8_t amm, uint8_t ass, uint8_t wahh, uint8_t wamm, uint8_t wass ){<br /> czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br /> alarm = ( ahh * 3600 ) + ( amm * 60 ) + ass;<br /><br />     if ( czas == alarm ){<br />      alert = 1;<br />        }<br /><br />     if ( alert == 1){<br />    // PORTC ^= (1&lt;&lt;PC7);<br />     PORTC &amp;= ~(1&lt;&lt;PC7);<br />        }<br />// ****  FUNKCJA WYŁĄCZAJĄCA PORT PC7 DLA ALARMU ********************************************<br /> czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br />     walarm = ( wahh * 3600 ) + ( wamm * 60 ) + wass;<br /><br />     if ( czas == walarm ){<br />     PORTC |= (1&lt;&lt;PC7);<br />          alert = 0;<br />        }<br />     }<br />// *****************************************************************************************[/syntax]<br /><br />A tak się zmieniło w pliku main.c<br />[syntax=c]while(1) {<br /><br />UART_RX_STR_EVENT( uart_buf ); // wywoływanie funkcji UARTA<br /><br />        // do funkcji EVENT - ss - mm - hh - wpisujemy czas po jakim ma się zsynchronizowac zegar<br />//GetNtpTime_EVENT( &amp;Timer2, 10, 0, 0,  NULL );<br /><br />// ** USTAWIANIE GODZINY ALARMU WŁĄCZ - WYŁĄCZ - PORT PC7<br />// ** ustawiamy dla włączenia hh-mm-ss dla wyłączenia hh-mm-ss ****<br />// ----------------------------------------------------------------<br />// set_rtc_alarm( &amp;datetime, 15, 32, 0, 15, 33, 0 );<br />// ****************************************************************<br /><br /><br />RTC_EVENT();[/syntax]<br /><br />Teraz myślę aby wykorzystać komendy #define <br />w ten sposób aby przypisać portom numery rozpoznawcze <br /><br />aby to wyglądało w taki sposób <br /><br />DDRC |= (1&lt;&lt;PC7); // ustawiamy PORT PC7 jako wyjście<br />#define A1 PORTC &amp;= ~LED_PIN // załączanie diody<br />#define A2 PORTC |= LED_PIN // wyłączanie diody<br /><br />DDRC |= (1&lt;&lt;PC6); // ustawiamy PORT PC6 jako wyjście<br />#define A3 PORTC &amp;= ~LED_PIN // załączanie diody<br />#define A4 PORTC |= LED_PIN // wyłączanie diody<br /><br />//   USTAWIANIE  włącz - hh - mm - ss - nr portu / wyłącz - hh - mm - ss - nr portu<br />// ----------------------------------------------------------------<br />// set_rtc_alarm( &amp;datetime, 15, 32, 0, 1, 15, 33, 0, 2 );<br />// ****************************************************************<br /><br />( nie piszę tego fragmentu w SYNTEX C bo to tylko dla celów pokazowych a nie kod )<br /><br />Ale nie wiem na razie jak do tego doprowadzić<br />aby to zadziałało w taki sposób?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 14 cze 2019, o 14:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-13T16:45:58+01:00</updated>
<published>2019-06-13T16:45:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219659#p219659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219659#p219659"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219659#p219659"><![CDATA[
Mam pewną koncepcje. Utworzyć typ strukturalny dla alarmów i wtedy funkcję mozna by wywolywać w ten sposób:<br /><br />[syntax=c]set_rtc_alarm( &amp;datetime, &amp;alarm1, PORTC, PC5, 8, 30, 45, 10);<br />set_rtc_alarm( &amp;datetime, &amp;alarm2, PORTD, PD3, 7, 20, 55, 15);[/syntax]<br /><br />Gdzie po kolei przekazywałbyś wskaźnik na strukturę czasu, wskaźnik na strukturę alarmów, port, pin, godzinę alarmu, minutę alarmu, sekundę alarmu, długość trwania alarmu w sekundach.<br /><br />Czy chodziłoby Ci o coś takiego?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 13 cze 2019, o 16:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-13T10:18:22+01:00</updated>
<published>2019-06-13T10:18:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219657#p219657</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219657#p219657"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219657#p219657"><![CDATA[
Panie i Panowie mamy uzupełnioną bibliotekę PCF8583 o funkcję budzika<br /><br />wstawiłem ustawianie godziny alarmu w to miejsce w pliku main.c <br />[syntax=c]while(1) {<br /><br />UART_RX_STR_EVENT( uart_buf ); // wywoływanie funkcji UARTA<br /><br />        // do funkcji EVENT - ss - mm - hh - wpisujemy czas po jakim ma się zsynchronizowac zegar<br />//GetNtpTime_EVENT( &amp;Timer2, 10, 0, 0,  NULL );<br /><br />// ******* USTAWIANIE GODZINY ALARMU ***********************<br />// set_rtc_alarm( &amp;datetime, 17, 17, 0 );<br />// *********************************************************<br /><br /><br />RTC_EVENT();[/syntax]<br /><br />i faktycznie działa  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br /><br />A teraz chciałbym to rozwinąć do niezależnej możliwości włączania i wyłączania 8-mioma portami C<br />Czy macie jakieś pomysły ?,  aby nie pisać jednej funkcji dla jednego wyjścia <br />Może by się dało jedną funkcją niezależnie wysterować 8 portów?<br /><br />To znaczy <br />że ustawiamy tylko 8 takich kodów ( jak niżej ) dla poszczególnych nastaw <br />[syntax=c]// ******* USTAWIANIE GODZINY ALARMU ***********************<br />// set_rtc_alarm( &amp;datetime, 17, 17, 0 );<br />// *********************************************************[/syntax]<br />Ale jak wybrać port jakiego ma dotyczyć ?<br /><br />Gdyby się udało rozwinąć ten temat to mielibyśmy sterownik imitujący obecność domowników<br />gdy nas niema w domu , lub fajny sterownik<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 13 cze 2019, o 10:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-13T08:53:07+01:00</updated>
<published>2019-06-13T08:53:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219653#p219653</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219653#p219653"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219653#p219653"><![CDATA[
Cześć miki53,<br /><br />Sprawdziłem teraz Twoją funkcję. Wszystko jest dobrze, jedynie musisz wrzucić wywołanie funkcji:<br />[syntax=c]set_rtc_alarm( &amp;datetime, 15, 32, 00 );[/syntax]<br /><br />do funkcji void RTC_EVENT( void ), żeby Twoja funkcja zaczęła pobierać aktualny czas.<br /><br />Jak wywołasz funkcję przed pętlą to wartość zmiennej czas = 0.<br /><br />Sprawdziłem, Twoją funkcję tak jak napisałem wyżej i działa. Po osiągnięciu ustawionego czasu dioda zmienia swój stan.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 13 cze 2019, o 08:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-12T20:17:23+01:00</updated>
<published>2019-06-12T20:17:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219644#p219644</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219644#p219644"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219644#p219644"><![CDATA[
OK dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 12 cze 2019, o 20:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2019-06-12T19:41:22+01:00</updated>
<published>2019-06-12T19:41:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219641#p219641</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219641#p219641"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219641#p219641"><![CDATA[
Postaram sie pomóc jutro rano bo będę u siebie to będę mógł przetestować kod <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> narazie nic nie zauważyłem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 12 cze 2019, o 19:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-12T19:22:21+01:00</updated>
<published>2019-06-12T19:22:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219640#p219640</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219640#p219640"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219640#p219640"><![CDATA[
Koledzy podpowiedzcie  coś jeśli macie jakiś pomysł<br />Ja staram się pisać posty tak aby każdy mógł w jasny sposób<br />z nich z korzystać i zastosować w swoich projektach<br />ale nie jestem orłem w programowaniu jestem naprawdę na początku tej drogi<br /><br />I wasze podpowiedzi przydadzą się nie tylko mi ale też będą z pożytkiem <br />dla innych<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 12 cze 2019, o 19:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-12T12:10:58+01:00</updated>
<published>2019-06-12T12:10:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219633#p219633</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219633#p219633"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219633#p219633"><![CDATA[
Zapomniałem dodać jak ustawiam alarmu <br />plik main.c<br />[syntax=c]// **** USTAWIANIE GODZINY ALARMU ***************************<br />// set_rtc_alarm( &amp;datetime, 15, 32, 00 );<br />// ***********************************************************[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 12 cze 2019, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-06-11T14:49:05+01:00</updated>
<published>2019-06-11T14:49:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219627#p219627</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219627#p219627"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219627#p219627"><![CDATA[
Witam serdecznie <br /><br />Po wielkich bojach udało mi się dzięki Mirka poradnikom Dawca czasu i RTC programowanie w C <br />zrobić zegar z wyświetlaczem LCD, chciałem wstawić funkcję budzika do biblioteki PCF8583<br />aby móc ją w pużniejszym czasie przerobić na sterownik z większą ilością wyjść sterowanych czasowo<br /><br />wstawiłem funkcje budzika w kod i nawet niema błędów  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  tylko że ne wiem jak z niej wyjść aby <br />włączyła mi diodę testową<br /><br />Prosiłbym o pomocne podpowiedzi<br /><br />plik mk_pcf8583.h <br />zmienne globalne<br />[syntax=c]// *** MOJE ZMIENNE GLOBALNE DLA ALARMU *******************<br /> uint16_t alarm;<br /> uint16_t czas;<br /> uint8_t alert;<br />// ********************************************************[/syntax]<br />plik mk_pcf8583.h <br />deklaracja funkcji dla alarmu<br />[syntax=c]// *** MOJA FUNKCJA DLA ALARMU ***********************************************<br /> void set_rtc_alarm( TDATETIME * dt, uint8_t ahh, uint8_t amm, uint8_t ass );<br />// ***************************************************************************[/syntax]<br />mk_pcf8583.c<br />definicja funkcji alarmu<br />[syntax=c]// **** MOJA FUNKCJA DLA ALARMU ********************************************<br />void set_rtc_alarm( TDATETIME * dt, uint8_t ahh, uint8_t amm, uint8_t ass ) {<br />     czas = ( dt-&gt;hh * 3600 ) + ( dt-&gt;mm * 60 ) + ( dt-&gt;ss );<br />     alarm = ( ahh * 3600 ) + ( amm * 60 ) + ass;<br /><br />     if ( czas == alarm ){<br />     alert++;<br />     }<br /><br />     if ( alert &gt; 0){<br />     PORTC ^= (1&lt;&lt;PC7);<br />     }<br />}<br /><br />// *************************************************************************[/syntax]<br /><br />Testowa dioda PC7 nie chce mi się włączyć nawet <br />jeśli wpiszę warunek jej zapalania do funkcji main.c <br />po uprzednim za komentowaniu if w funkcji <br />to znaczy <br />[syntax=c]if ( alert &gt; 0){<br />     PORTC ^= (1&lt;&lt;PC7);<br />     }[/syntax]<br /><br />Czy koledzy mogliby mi podpowiedzieć co zrobić aby to zadziałało<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 11 cze 2019, o 14:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-16T19:05:07+01:00</updated>
<published>2019-05-16T19:05:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219045#p219045</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219045#p219045"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219045#p219045"><![CDATA[
<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Mirku mógłbyś spojrzeć na powyższy kod czy on ma prawo zadziałać<br /></div><br />Ja nie jestem (przykro mi) analizować długich kodów - tylko i wyłącznie krótkie wyekstrachowane fragmenty kodów testowych ... nie mam po prostu aż tyle czasu<br /><br />ale widzę, że kolega wyżej zrobił tą analizę i napisał tobie kilka uwag - proszę pochyl się nad nimi<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />Poza tym tak jak pisałem wyżej napisz krótki main.c ze sztucznym zegarkiem wg opisu jaki ci podałem i sam potestuj - no to nie powinno być trudne - a i kod do analizy na forum ci się skróci drastycznie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 maja 2019, o 19:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-05-16T17:13:58+01:00</updated>
<published>2019-05-16T17:13:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219044#p219044</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219044#p219044"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219044#p219044"><![CDATA[
Mirku mógłbyś spojrzeć na powyższy kod czy on ma prawo zadziałać<br />kod ten jest pisany w podobny sposób jak biblioteka dla PCF8583<br />jeśli w tym kodzie to zadziała to i w kodze biblioteki jeśli w ten sposób<br />wstawię to powinno zadziałać    tak mi się wydaje   <br /><br />Nie chcę nadużywać cierpliwości ale starczy jak powiesz że będzie działać<br />lub nie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 16 maja 2019, o 17:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kaz K]]></name></author>
<updated>2019-05-16T17:02:29+01:00</updated>
<published>2019-05-16T17:02:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219043#p219043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219043#p219043"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219043#p219043"><![CDATA[
Nie zadziała! Pomieszane zdrowo w kodzie . Pierwsze to definicje diody wyrzuć przed int main, a po drugie co Ci ma załaczyć diodę jak w petli main nie masz odpowiednich funkcji .  Przeczytaj od początku ksiąke Mirka i zacznij od migania diodą i zrozumienia  podstaw, bo tutaj przepisałeś kod  i powstawiałeś przypadkowo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20460">Kaz K</a> — 16 maja 2019, o 17:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-16T16:40:40+01:00</updated>
<published>2019-05-16T16:40:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219041#p219041</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219041#p219041"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219041#p219041"><![CDATA[
<div class="quotetitle">miki53 napisał(a):</div><div class="quotecontent"><br />Przepraszam że zadaję tego typu pytanie ale nie posiadam jeszcze układu DS3231<br />na który jest napisany ten kod i nie mogę tego fizycznie sam sprawdzić<br /></div><br /><br />Jak można pisać, że nie da się tego sprawdzić bez DS3231 ??? no panie kochany, a co za problem sztucznie napędzać sobie czas w procku i sprawdzać alarm ? toż to tylko inkrementowanie godzin, minut i sekund - gdzieś w timerze programowym co sekundę i już masz sztuczny zegarek do sprawdzania<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br />programowanie nie polega tylko na pisaniu gotowego kodu ale pisaniu fragmentów do testowania swojego kodu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 maja 2019, o 16:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-05-16T13:51:51+01:00</updated>
<published>2019-05-16T13:51:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219040#p219040</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219040#p219040"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219040#p219040"><![CDATA[
Jeśli wstawię procedury obsługi alarmu w sposób jak poniżej w kodzie to to mi<br />zadziała ?<br />Przepraszam że zadaję tego typu pytanie ale nie posiadam jeszcze układu DS3231<br />na który jest napisany ten kod i nie mogę tego fizycznie sam sprawdzić <br />proszę o wyrozumiałość <br /><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 &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br /><br />typedef union {<br />uint8_t bytes&#91;7&#93;;<br />struct {<br />uint8_t ss;<br />uint8_t mm;<br />uint8_t hh;<br />uint8_t dayofwek;<br />uint8_t day;<br />uint8_t month;<br />uint8_t year;<br />};<br />} TDATETIME;<br /><br /><br />typedef struct {<br />int8_t cel;<br />uint8_t fract;<br />} TTEMP;<br /><br /><br />#define DS3231_ADDR 0xD0<br /><br />void DS3231_init( void );<br />uint8_t dec2bcd(uint8_t dec);<br />uint8_t bcd2dec(uint8_t bcd);<br />void DS3231_get_datetime( TDATETIME * dt );<br />void show_time( TDATETIME * dt );<br />void show_date( TDATETIME * dt );<br />void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss );<br />void DS3231_set_date( uint8_t year, uint8_t month, uint8_t day, uint8_t dayofweek );<br />void DS3231_get_temp( TTEMP * tmp );<br />void show_temperature( TTEMP * tmp );<br /><br /><br /><br /><br />TDATETIME datetime;<br />TTEMP temperature;<br /><br />char days&#91;7&#93;&#91;4&#93; = {<br />&quot;pon&quot;, &quot;wto&quot;, &quot;sro&quot;, &quot;czw&quot;, &quot;pia&quot;, &quot;sob&quot;, &quot;nie&quot;<br />};<br /><br />// ******** ZMIENNE DLA ALARMU *****************************<br /><br />uint16_t czas;<br />uint16_t alarm;<br /><br />// ******** ZMIENNE DO WŁACZANIA ALARMU -- TESTOWEJ LED ***<br /><br />uint8_t ah = 00;// *  TU USTAWIAM<br />uint8_t am = 01;// *  TESTOWY<br />uint8_t as = 00;// *  CZAS NA -- 00:01:00<br />uint8_t i;<br /><br />// **********************************************************<br />// ******* ZMIENNE DO WYŁĄCZANIA ALARMU -- TESTOWEJ LED *****<br /><br />uint8_t ahw = 00;// *  TU USTAWIAM<br />uint8_t amw = 01;// *  TESTOWY<br />uint8_t asw = 50;// *  CZAS NA -- 00:01:50<br /><br />// ** ahw = alarm godziny wyłączania *************************<br />// ** amw = alarm minuty wyłączania  *************************<br />// ** asw = alarm sekundy wyłączania *************************<br /><br /><br />uint8_t stc&#91;&#93; = {12,18,18,12,32,32,32,32};<br /><br />int main( void ) {<br /><br />lcd_init();<br />lcd_defchar(0, stc);<br />lcd_cls();<br />lcd_LED(1);<br />lcd_str(&quot;start...&quot;);<br /><br />// konfiguracja wejścia INT0<br />PORTD |= (1&lt;&lt;PD2);<br />MCUCR |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00); // zbocze narastające<br /><br /><br />i2cSetBitrate(100);<br /><br />DS3231_init();<br /><br />//DS3231_set_time( 17,46,0 );<br />//DS3231_set_date( 13, 10, 31, 4 );<br /><br />// ******** DOTYCZY ALARMU -- MASZYNA STANU DLA DIODY TESTOWEJ **********************<br /><br />DDRC |= (1&lt;&lt;PC3); // ustawiamy PORT PC3 jako wyjście<br /><br />#define LED_PIN (1&lt;&lt;PC3); //definicja pinu, diody testowej<br />#define LED_ON PORTC &amp;= ~LED_PIN // załączanie diody<br />#define LED_OFF PORTC |= LED_PIN // wyłączanie diody<br />#define LED_TOG PORTC ^= LED_PIN // zmiana stanu diody<br />// ******************************************************************************<br /><br />// sei();<br />while(1) {<br /><br /><br />// **** WŁĄCZA ALARM ************************************<br />    LED_OFF;// stan początkowy diody -- wyłączona<br /><br />             if (i&gt;0)<br />               {<br />        LED_ON; //TESTOWA DIODA LED - stan WŁĄCZ<br />                }<br />// *****************************************************<br /><br /><br />if( GIFR &amp; (1&lt;&lt;INTF0) ) {<br /><br />DS3231_get_datetime( &amp;datetime );<br />DS3231_get_temp( &amp;temperature );<br /><br />lcd_locate(0,0);<br />show_date( &amp;datetime );<br /><br />lcd_locate(1,0);<br />show_time( &amp;datetime );<br /><br />lcd_locate(1,9);<br />show_temperature( &amp;temperature );<br /><br />GIFR |= (1&lt;&lt;INTF0);  // kasowanie flagi<br />}<br /><br />}<br />}<br /><br /><br />void DS3231_init( void ) {<br />uint8_t ctrl = 0;<br />TWI_write_buf( DS3231_ADDR, 0x0e, 1, &amp;ctrl );<br />}<br /><br />void DS3231_get_datetime( TDATETIME * dt ) {<br />uint8_t i;<br />uint8_t buf&#91;7&#93;;<br />TWI_read_buf( DS3231_ADDR, 0x00, 7, buf );<br />for( i=0; i&lt;7; i++ ) dt-&gt;bytes&#91;i&#93; = bcd2dec( buf&#91;i&#93; );<br />}<br /><br /><br />void show_time( TDATETIME * dt ) {<br />if( dt-&gt;hh &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;hh);<br />lcd_str(&quot;:&quot;);<br />if( dt-&gt;mm &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;mm);<br />lcd_str(&quot;:&quot;);<br />if( dt-&gt;ss &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;ss);<br /><br />}<br /><br />void show_date( TDATETIME * dt ) {<br />lcd_str(&quot;20&quot;);<br />if( dt-&gt;year &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;year);<br />lcd_str(&quot;-&quot;);<br />if( dt-&gt;month &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;month);<br />lcd_str(&quot;-&quot;);<br />if( dt-&gt;day &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;day);<br />lcd_str(&quot;  &quot;);<br />lcd_str( days&#91; dt-&gt;dayofwek - 1 &#93; );<br />}<br /><br />void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss ) {<br />uint8_t buf&#91;3&#93;;<br />buf&#91;0&#93;=dec2bcd(ss);<br />buf&#91;1&#93;=dec2bcd(mm);<br />buf&#91;2&#93;=dec2bcd(hh);<br />TWI_write_buf( DS3231_ADDR, 0x00, 3, buf );<br /><br />// ******** USTAWIENIA DLA ALARMU -- WŁĄCZANIE TESTOWEJ LED ************************<br /><br />            czas = (hh*3600)+(mm*60)+ss;<br />            alarm = (ah * 3600)+(am * 60)+as;<br /><br />                if (czas == alarm ){<br /><br />                   i=1; // WŁĄCZ LED<br />                 }<br /><br />// ******************************************************************************<br />// ********* USTAWIANIE DLA ALARMU -- WYŁĄCZANIE TESTOWEJ LED **********************<br /><br />            czas = (hh*3600)+(mm*60)+ss;<br />            alarm = (ahw * 3600)+(amw * 60)+asw;<br /><br />                   if (czas == alarm ){<br /><br />                      i=0; // WYŁĄCZ LED<br />                    }<br /><br />// ******************************************************************************<br /><br /><br /><br /><br />}<br /><br />void DS3231_set_date( uint8_t year, uint8_t month, uint8_t day, uint8_t dayofweek ) {<br />uint8_t buf&#91;4&#93;;<br />buf&#91;0&#93;=dayofweek;<br />buf&#91;1&#93;=dec2bcd(day);<br />buf&#91;2&#93;=dec2bcd(month);<br />buf&#91;3&#93;=dec2bcd(year);<br />TWI_write_buf( DS3231_ADDR, 0x03, 4, buf );<br />}<br /><br /><br />void DS3231_get_temp( TTEMP * tmp ) {<br />uint8_t buf&#91;2&#93;;<br />TWI_read_buf( DS3231_ADDR, 0x11, 2, buf );<br />tmp-&gt;cel = buf&#91;0&#93; ;<br />tmp-&gt;fract = buf&#91;1&#93;&gt;&gt;6;<br /><br />TWI_read_buf( DS3231_ADDR, 0x0e, 1, buf );<br />buf&#91;0&#93; |= (1&lt;&lt;5);<br />TWI_write_buf( DS3231_ADDR, 0x0e, 1, buf );<br />}<br /><br /><br />void show_temperature( TTEMP * tmp ) {<br />uint8_t fr&#91;4&#93; = {0,2,5,7};<br /><br />if( tmp-&gt;cel &lt; 100 ) lcd_str(&quot; &quot;);<br />if( tmp-&gt;cel &lt; 10 ) lcd_str(&quot; &quot;);<br /><br />lcd_int(tmp-&gt;cel);<br />lcd_str(&quot;.&quot;);<br />if( tmp-&gt;cel &gt;= 0 ) lcd_int( fr&#91; tmp-&gt;fract &#93; );<br />else lcd_int( fr&#91; 3 - tmp-&gt;fract &#93; );<br /><br />lcd_str(&quot;\x80&quot;&quot;C&quot;);<br />}<br /><br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 16 maja 2019, o 13:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-15T19:17:54+01:00</updated>
<published>2019-05-15T19:17:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219026#p219026</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219026#p219026"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219026#p219026"><![CDATA[
Poszukaj sobie informacji o kodowaniu czasu unixowego - to bardzie rozbudowane niż to co ci podałem i co już uruchomiłeś - ale zawiera również datę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 maja 2019, o 19:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-05-15T17:09:59+01:00</updated>
<published>2019-05-15T17:09:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219021#p219021</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219021#p219021"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219021#p219021"><![CDATA[
Proszę o wybaczenie za moje marudzenie ale mam jeszcze parę pytań <br />związanych z alarmem ale w związku z poniższym kodem tym razem <br />dotyczącego układu DS3231 kod napisany dla tego układy jest trochę <br />w innej formie i nie bardzo potrafię się odnieść do zastosowania <br />Mirka wzoru z górnego listingu do tego kodu, prosiłbym o dalsze podpowiedzi<br /><br />Czy mógłbym jeszcze prosić o przykład z zastosowaniem nie tylko alarmu ustawianego <br />na konkretną godzinę ale jeszcze na konkretny dzień ?  <br /><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 &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br /><br />typedef union {<br />uint8_t bytes&#91;7&#93;;<br />struct {<br />uint8_t ss;<br />uint8_t mm;<br />uint8_t hh;<br />uint8_t dayofwek;<br />uint8_t day;<br />uint8_t month;<br />uint8_t year;<br />};<br />} TDATETIME;<br /><br /><br />typedef struct {<br />int8_t cel;<br />uint8_t fract;<br />} TTEMP;<br /><br /><br />#define DS3231_ADDR 0xD0<br /><br />void DS3231_init( void );<br />uint8_t dec2bcd(uint8_t dec);<br />uint8_t bcd2dec(uint8_t bcd);<br />void DS3231_get_datetime( TDATETIME * dt );<br />void show_time( TDATETIME * dt );<br />void show_date( TDATETIME * dt );<br />void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss );<br />void DS3231_set_date( uint8_t year, uint8_t month, uint8_t day, uint8_t dayofweek );<br />void DS3231_get_temp( TTEMP * tmp );<br />void show_temperature( TTEMP * tmp );<br /><br /><br /><br /><br />TDATETIME datetime;<br />TTEMP temperature;<br /><br />char days&#91;7&#93;&#91;4&#93; = {<br />&quot;pon&quot;, &quot;wto&quot;, &quot;sro&quot;, &quot;czw&quot;, &quot;pia&quot;, &quot;sob&quot;, &quot;nie&quot;<br />};<br /><br />uint8_t stc&#91;&#93; = {12,18,18,12,32,32,32,32};<br /><br />int main( void ) {<br /><br />lcd_init();<br />lcd_defchar(0, stc);<br />lcd_cls();<br />lcd_LED(1);<br />lcd_str(&quot;start...&quot;);<br /><br />// konfiguracja wejścia INT0<br />PORTD |= (1&lt;&lt;PD2);<br />MCUCR |= (1&lt;&lt;ISC01)|(1&lt;&lt;ISC00); // zbocze narastające<br /><br /><br />i2cSetBitrate(100);<br /><br />DS3231_init();<br /><br />//DS3231_set_time( 17,46,0 );<br />//DS3231_set_date( 13, 10, 31, 4 );<br /><br />// sei();<br />while(1) {<br /><br />if( GIFR &amp; (1&lt;&lt;INTF0) ) {<br /><br />DS3231_get_datetime( &amp;datetime );<br />DS3231_get_temp( &amp;temperature );<br /><br />lcd_locate(0,0);<br />show_date( &amp;datetime );<br /><br />lcd_locate(1,0);<br />show_time( &amp;datetime );<br /><br />lcd_locate(1,9);<br />show_temperature( &amp;temperature );<br /><br />GIFR |= (1&lt;&lt;INTF0);  // kasowanie flagi<br />}<br /><br />}<br />}<br /><br /><br />void DS3231_init( void ) {<br />uint8_t ctrl = 0;<br />TWI_write_buf( DS3231_ADDR, 0x0e, 1, &amp;ctrl );<br />}<br /><br />void DS3231_get_datetime( TDATETIME * dt ) {<br />uint8_t i;<br />uint8_t buf&#91;7&#93;;<br />TWI_read_buf( DS3231_ADDR, 0x00, 7, buf );<br />for( i=0; i&lt;7; i++ ) dt-&gt;bytes&#91;i&#93; = bcd2dec( buf&#91;i&#93; );<br />}<br /><br /><br />void show_time( TDATETIME * dt ) {<br />if( dt-&gt;hh &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;hh);<br />lcd_str(&quot;:&quot;);<br />if( dt-&gt;mm &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;mm);<br />lcd_str(&quot;:&quot;);<br />if( dt-&gt;ss &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;ss);<br />}<br /><br />void show_date( TDATETIME * dt ) {<br />lcd_str(&quot;20&quot;);<br />if( dt-&gt;year &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;year);<br />lcd_str(&quot;-&quot;);<br />if( dt-&gt;month &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;month);<br />lcd_str(&quot;-&quot;);<br />if( dt-&gt;day &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(dt-&gt;day);<br />lcd_str(&quot;  &quot;);<br />lcd_str( days&#91; dt-&gt;dayofwek - 1 &#93; );<br />}<br /><br />void DS3231_set_time( uint8_t hh, uint8_t mm, uint8_t ss ) {<br />uint8_t buf&#91;3&#93;;<br />buf&#91;0&#93;=dec2bcd(ss);<br />buf&#91;1&#93;=dec2bcd(mm);<br />buf&#91;2&#93;=dec2bcd(hh);<br />TWI_write_buf( DS3231_ADDR, 0x00, 3, buf );<br />}<br /><br />void DS3231_set_date( uint8_t year, uint8_t month, uint8_t day, uint8_t dayofweek ) {<br />uint8_t buf&#91;4&#93;;<br />buf&#91;0&#93;=dayofweek;<br />buf&#91;1&#93;=dec2bcd(day);<br />buf&#91;2&#93;=dec2bcd(month);<br />buf&#91;3&#93;=dec2bcd(year);<br />TWI_write_buf( DS3231_ADDR, 0x03, 4, buf );<br />}<br /><br /><br />void DS3231_get_temp( TTEMP * tmp ) {<br />uint8_t buf&#91;2&#93;;<br />TWI_read_buf( DS3231_ADDR, 0x11, 2, buf );<br />tmp-&gt;cel = buf&#91;0&#93; ;<br />tmp-&gt;fract = buf&#91;1&#93;&gt;&gt;6;<br /><br />TWI_read_buf( DS3231_ADDR, 0x0e, 1, buf );<br />buf&#91;0&#93; |= (1&lt;&lt;5);<br />TWI_write_buf( DS3231_ADDR, 0x0e, 1, buf );<br />}<br /><br /><br />void show_temperature( TTEMP * tmp ) {<br />uint8_t fr&#91;4&#93; = {0,2,5,7};<br /><br />if( tmp-&gt;cel &lt; 100 ) lcd_str(&quot; &quot;);<br />if( tmp-&gt;cel &lt; 10 ) lcd_str(&quot; &quot;);<br /><br />lcd_int(tmp-&gt;cel);<br />lcd_str(&quot;.&quot;);<br />if( tmp-&gt;cel &gt;= 0 ) lcd_int( fr&#91; tmp-&gt;fract &#93; );<br />else lcd_int( fr&#91; 3 - tmp-&gt;fract &#93; );<br /><br />lcd_str(&quot;\x80&quot;&quot;C&quot;);<br />}<br /><br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 15 maja 2019, o 17:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[miki53]]></name></author>
<updated>2019-05-14T17:44:20+01:00</updated>
<published>2019-05-14T17:44:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219004#p219004</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219004#p219004"/>
<title type="html"><![CDATA[Re: Jak ustawić funkcję budzika]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22246&amp;p=219004#p219004"><![CDATA[
Mirku jesteś naprawdę WIELKI !!<br /><br />Fajnie kod zadziałał mogę włączać i wyłączać diodę testową o ustalonych godzinach  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br /><br />DLA KOLEGÓW <br /><br />PRZYKŁADOWY KOD DO TESTOWANIA ZACZERPNIĘTY Z  BB<br />Mikrokontrolery AVR<br />Język C<br />podstawy programowania<br /><br />Wszystkie potrzebne biblioteki są zawarte w lekcji o nazwie - 08_I2C_SOFT  <br /><br />DZIAŁAJĄCY KOD Z ALARMEM  to tylko testowy kod a nie ostateczny program<br /><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 &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#include &quot;I2C_SOFT/i2c_soft.h&quot;<br /><br />//#define PCF8583_ADDR 0xA0// gdy A1 --&gt; GND<br />#define PCF8583_ADDR 0xA2// gdy A1 --&gt; VCC<br /><br />//ja #define _24C04_ADDR 0xA8<br /><br /><br />uint8_t tekst&#91;&#93; = &quot;EEPROM!&quot;;<br /><br />// ******** ZMIENNE DLA ALARMU *****************************<br /><br />uint16_t czas;<br />uint16_t alarm;<br /><br />// ******** ZMIENNE DO WŁACZANIA ALARMU -- TESTOWEJ LED ***<br /><br />uint8_t ah = 00;// *  TU USTAWIAM<br />uint8_t am = 01;// *  TESTOWY<br />uint8_t as = 00;// *  CZAS NA -- 00:01:00<br />uint8_t i;<br /><br />// **********************************************************<br />// ******* ZMIENNE DO WYŁĄCZANIA ALARMU -- TESTOWEJ LED *****<br /><br />uint8_t ahw = 00;// *  TU USTAWIAM<br />uint8_t amw = 01;// *  TESTOWY<br />uint8_t asw = 50;// *  CZAS NA -- 00:01:50<br /><br />// ** ahw = alarm godziny wyłączania *************************<br />// ** amw = alarm minuty wyłączania  *************************<br />// ** asw = alarm sekundy wyłączania *************************<br /><br /><br />uint8_t bo&#91; sizeof(tekst)+1 &#93;; // bufor pomocniczy na odczyt z EEPROM<br /><br />volatile uint8_t int0_flag=1;// flaga zmieniana w przerwaniu i sprawdzana w pętli głównej<br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec);<br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd);<br /><br />// odczyt danych z pamięci EEPROM<br />//ja  void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br /><br />// zapis danych do pamięci EEPROM<br />//ja  void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br /><br />int main(void) {<br /><br />//******** DOTYCZY ALARMU ********************************************************<br />DDRC |= (1&lt;&lt;PC3); // ustawiamy PORT PC3 jako wyjście<br />#define LED_PIN (1&lt;&lt;PC3); //definicja pinu, diody testowej<br />#define LED_ON PORTC &amp;= ~LED_PIN // załączanie diody<br />#define LED_OFF PORTC |= LED_PIN // wyłączanie diody<br />#define LED_TOG PORTC ^= LED_PIN // zmiana stanu diody<br /><br />//******** USTAWIONE PORTY PODŚWIETLENIA LCD DLA ATMEGI_8 ************************<br /><br />DDRC |= (1&lt;&lt;PC2);// ustawiamy kierunek linii podświetlenia LCD jako WYJŚCIE<br />PORTC |= (1&lt;&lt;PC2);// załączamy podświetlenie LCD - stan wysoki<br />//********************************************************************************<br />// Przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadającym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);// podciągnięcie pinu INT0 do VCC<br /><br /><br />// definiujemy sobie dla polepszenia czytelności programu typ wyliczeniowy<br />// wskazujący nam później na odpowiednie indeksy w tablicy (buforze)<br />enum {ss=1, mm, hh};<br />uint8_t bufor&#91;4&#93;;// rezerwacja bufora 4 bajty<br />uint8_t sekundy, minuty, godziny;<br /><br /><br /><br />i2c_init();<br />lcd_init();<br /><br />sei();<br /><br />lcd_str_P(PSTR(&quot;start...&quot;));<br />_delay_ms(500);<br /><br />//***************************************************************************<br />// Ustawianie czasu na godzinę: 18:34:27<br />/*<br />bufor&#91;0&#93; = 0;// setne części sekundy<br />bufor&#91;1&#93; = dec2bcd(00);// sekundy<br />bufor&#91;2&#93; = dec2bcd(44);// minuty<br />bufor&#91;3&#93; = dec2bcd(15);// godziny<br />// zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC<br />I2C_write_buf( PCF8583_ADDR, 0x01, 4, bufor );<br />*/<br />//****************************************************************************<br />// zapis tekstu do pamięci EEPROM od adresu 253, dlatego aby tekst<br />// został zapisany w jednym i drugim banku pamięci<br />//jaEI2C_write_buf( _24C04_ADDR, 253, sizeof(tekst), tekst );<br /><br />while(1) {<br /><br />// **** WŁĄCZA ALARM ************************************<br />    LED_OFF;// stan początkowy diody -- wyłączona<br /><br />if (i&gt;0)<br />   {<br />LED_ON; //TESTOWA DIODA LED - stan WŁĄCZ<br />   }<br />// ******************************************************<br /><br />// ***** TEST PRZED FLAGĄ ********************************<br />/*<br />  czas = (godziny*3600)+(minuty*60)+sekundy;<br />  alarm = (ah * 3600)+(am * 60)+as;<br /><br />            if (czas == alarm ){<br /><br />            i++; // WŁĄCZ LED<br />            }<br />*/<br />// *******************************************************<br /><br /><br /><br />if ( int0_flag ) {<br />//odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC<br />I2C_read_buf( PCF8583_ADDR, 0x01, 4, bufor );<br /><br />sekundy = bcd2dec( bufor&#91;ss&#93; );<br />minuty = bcd2dec( bufor&#91;mm&#93; );<br />godziny = bcd2dec( bufor&#91;hh&#93; );<br /><br />// ******** ustawienia dla alarmu WŁĄCZANIE TESTOWEJ LED ************************<br /><br />            czas = (godziny*3600)+(minuty*60)+sekundy;<br />            alarm = (ah * 3600)+(am * 60)+as;<br /><br />            if (czas == alarm ){<br /><br />            i=1; // WŁĄCZ LED<br />            }<br /><br />// ******************************************************************************<br />// ********* ustawienia dla alarmu WYŁĄCZANIE TESTOWEJ LED **********************<br /><br />            czas = (godziny*3600)+(minuty*60)+sekundy;<br />                      alarm = (ahw * 3600)+(amw * 60)+asw;<br /><br />                      if (czas == alarm ){<br /><br />                      i=0; // WYŁĄCZ LED<br />                      }<br /><br />// ******************************************************************************<br /><br />// wyświetlenie czasu na LCD<br />lcd_cls();// kasowanie ekranu<br />lcd_locate(0,4);<br />if( godziny &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(godziny);<br />lcd_str(&quot;:&quot;);<br />if( minuty &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(minuty);<br />lcd_str(&quot;:&quot;);<br />if( sekundy &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(sekundy);<br /><br />lcd_locate(1, 0);<br />lcd_str_P(PSTR(&quot;ustaw alarm&quot;));<br /><br /><br /><br /><br />// odczyt z EEPROM<br />//ja EI2C_read_buf( _24C04_ADDR, 253, sizeof(tekst), bo );<br /><br />// wyświetlenie napisu z EEPROM na LCD<br />//jalcd_locate(1, 9);<br />//jalcd_str( (char*)bo );<br /><br />int0_flag=0;<br />}<br /><br />}<br />}<br /><br /><br />// procedura obsługi przerwania INT 0<br />ISR( INT0_vect ) {<br />int0_flag = 1;<br />}<br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18503">miki53</a> — 14 maja 2019, o 17:44</p><hr />
]]></content>
</entry>
</feed>