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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=47&amp;t=21322&amp;mode</id>
<entry>
<author><name><![CDATA[bboylubsko]]></name></author>
<updated>2018-09-25T00:11:54+01:00</updated>
<published>2018-09-25T00:11:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211959#p211959</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211959#p211959"/>
<title type="html"><![CDATA[Re: Problem z zegarkiem RTC na Arduino Nano.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211959#p211959"><![CDATA[
Dzięki. Kluczowa okazała się linijka:<br />[syntax=cpp]// set the initial time here:<br />  // DS3231 seconds, minutes, hours, day, date, month, year<br />  // setDS3231time(30,42,21,4,26,11,14);[/syntax]<br /><br />Ustawiłem w niej czas na sztywno 13 sekund do przodu przed kliknięciem przycisku wgrywania. Działa idealnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17832">bboylubsko</a> — 25 wrz 2018, o 00:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DarkMajster]]></name></author>
<updated>2018-09-24T22:54:42+01:00</updated>
<published>2018-09-24T22:54:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211958#p211958</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211958#p211958"/>
<title type="html"><![CDATA[Re: Problem z zegarkiem RTC na Arduino Nano.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211958#p211958"><![CDATA[
Pewnie kompilacja i wgrywanie trwa właśnie około 13 sekund. Najprościej wgraj raz program z ustawianiem czasu, tylko cofnij sekundy o 13, a potem tę linijkę wgrywającą czas do scalaka usuń i gotowe <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=17494">DarkMajster</a> — 24 wrz 2018, o 22:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[chi.cygni]]></name></author>
<updated>2018-09-24T20:13:05+01:00</updated>
<published>2018-09-24T20:13:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211955#p211955</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211955#p211955"/>
<title type="html"><![CDATA[Re: Problem z zegarkiem RTC na Arduino Nano.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211955#p211955"><![CDATA[
<div class="quotetitle">bboylubsko napisał(a):</div><div class="quotecontent"><br />Mam problem z zegarkiem DS3231. Liczy ładnie czas, ale jest opóźniony o 13 sekund. Jak to skorygować?<br /></div><br /><br />Bawiłem się zegarkami i fajna to zabawa, zwłaszcza dla mnie jako początkującego. Nie używam Arduino, tylko Mirkowe biblioteki.<br />Ale przecież idea jest taka sama. &quot;Skorygować czas&quot; - jak rozumiem - to wpisać w rejestr sekund odpowiednią wartość.<br />Jeśli za pomocą programu w C (lub podobnego), to po wgraniu należy usunąć (zakomentować) funkcję zapisu do rejestru sekund,<br />bo inaczej, za każdym razem przy starcie mikrokontrolera nastąpi dokładnie taki sam zapis. Po zapisie tylko odczytujesz a zegarek &quot;pamięta&quot; czas<br />(bo chyba podtrzymanie bateryjne po wyłączeniu ma?).<br /><br />Poszukałem na szybko i tu masz ładnie te zegarki opisane z kodem w Arduino:<br /><a href="https://tronixstuff.com/2014/12/01/tutorial-using-ds1307-and-ds3231-real-time-clock-modules-with-arduino/"  class="postlink">https://tronixstuff.com/2014/12/01/tutorial-using-ds1307-and-ds3231-real-time-clock-modules-with-arduino/</a><br /><a href="https://www.instructables.com/id/Arduino-DS3231-RTC-Clock/"  class="postlink">https://www.instructables.com/id/Arduino-DS3231-RTC-Clock/</a><br /><br />Takich stron są dziesiątki. Znajdziesz rozwiązanie bez problemu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3240">chi.cygni</a> — 24 wrz 2018, o 20:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bboylubsko]]></name></author>
<updated>2018-09-25T00:12:43+01:00</updated>
<published>2018-09-24T14:51:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211949#p211949</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211949#p211949"/>
<title type="html"><![CDATA[Problem z zegarkiem RTC na Arduino Nano.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21322&amp;p=211949#p211949"><![CDATA[
Mam problem z zegarkiem DS3231. Liczy ładnie czas, ale jest opóźniony o 13 sekund. Jak to skorygować?<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br />[syntax=cpp]#include &lt;LiquidCrystal_I2C.h&gt;<br />#include &lt;Wire.h&gt;<br /><br />#include &quot;i2c_BMP280.h&quot;<br /><br />#define DS3231_I2C_ADDRESS 0x68<br />#define btnPRAWO   0<br />#define btnGORA    1<br />#define btnDOL     2<br />#define btnLEWO    3<br />#define btnWYBIERZ 4<br />#define btnBRAK    5<br /><br />  // set the initial time here:<br />  // DS3231 seconds, minutes, hours, day, date, month, year<br />  // setDS3231time(30,42,21,4,26,11,14);<br /><br />LiquidCrystal_I2C lcd (0x27, 16, 2);  <br />BMP280 bmp280;<br /><br />// Convert normal decimal numbers to binary coded decimal<br />byte decToBcd(byte val)<br />{<br />  return( (val/10*16) + (val%10) );<br />}<br />// Convert binary coded decimal to normal decimal numbers<br />byte bcdToDec(byte val)<br />{<br />  return( (val/16*10) + (val%16) );<br />}<br /><br />byte stopnie&#91;8&#93; =<br />{<br />  B01100,<br />  B10010,<br />  B10010,<br />  B01100,<br />  B00000,<br />  B00000,<br />  B00000,<br />  B00000 };<br /><br />  byte S&#91;8&#93; =<br />{<br />  B00010,<br />  B00100,<br />  B01110,<br />  B10000,<br />  B01110,<br />  B00001,<br />  B11110, <br />  B00000 };<br /><br />int lcd_key      = 0;<br />int adc_key_in   = 0;<br />int read_LCD_buttons()                   //Odczyt klawiszy.<br /><br />{<br /> adc_key_in = analogRead(0);            // Odczytuje wartości na pinie analogowym. <br /> if (adc_key_in &gt; 1000) return btnBRAK; <br /> if (adc_key_in &lt; 50)   return btnPRAWO;<br /> if (adc_key_in &lt; 235)  return btnGORA;<br /> if (adc_key_in &lt; 350)  return btnDOL;<br /> if (adc_key_in &lt; 550)  return btnLEWO;<br /> if (adc_key_in &lt; 800)  return btnWYBIERZ;<br />}<br /><br /><br />void setup()<br />{<br />    lcd.init();<br />    bmp280.initialize();          // Odpala czujnik BMP280.<br />    Wire.begin();<br />    lcd.createChar(1,stopnie);    // Tworzy znak 1 (stopnie Celsjusza).<br />    lcd.createChar(3,S);          // Tworzy znak 3 (ś).<br />}<br />void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte<br />dayOfMonth, byte month, byte year)<br />{<br />  <br />  // sets time and date data to DS3231<br />  Wire.beginTransmission(DS3231_I2C_ADDRESS);<br />  Wire.write(0); // set next input to start at the seconds register<br />  Wire.write(decToBcd(second)); // set seconds<br />  Wire.write(decToBcd(minute)); // set minutes<br />  Wire.write(decToBcd(hour)); // set hours<br />  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)<br />  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)<br />  Wire.write(decToBcd(month)); // set month<br />  Wire.write(decToBcd(year)); // set year (0 to 99)<br />  Wire.endTransmission();<br />}<br />void readDS3231time(byte *second,<br />byte *minute,<br />byte *hour,<br />byte *dayOfWeek,<br />byte *dayOfMonth,<br />byte *month,<br />byte *year)<br />{<br />  Wire.beginTransmission(DS3231_I2C_ADDRESS);<br />  Wire.write(0); // set DS3231 register pointer to 00h<br />  Wire.endTransmission();<br />  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);<br />  // request seven bytes of data from DS3231 starting from register 00h<br />  *second = bcdToDec(Wire.read() &amp; 0x7f);<br />  *minute = bcdToDec(Wire.read());<br />  *hour = bcdToDec(Wire.read() &amp; 0x3f);<br />  *dayOfWeek = bcdToDec(Wire.read());<br />  *dayOfMonth = bcdToDec(Wire.read());<br />  *month = bcdToDec(Wire.read());<br />  *year = bcdToDec(Wire.read());<br />}<br />void displayTime()<br />{<br />  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;<br />  // retrieve data from DS3231<br />  readDS3231time(&amp;second, &amp;minute, &amp;hour, &amp;dayOfWeek, &amp;dayOfMonth, &amp;month,<br />  &amp;year);<br />  // send it to the serial monitor<br />  <br />  lcd.setCursor(0,1);<br />  if (hour&lt;10)<br />  {<br />    lcd.print(&quot;0&quot;);<br />  }<br />  lcd.print(hour, DEC);<br /><br />  lcd.setCursor(2,1);<br />  lcd.print(&quot;:&quot;);<br />  <br />  lcd.setCursor(3,1);<br />  if (minute&lt;10)<br />  {<br />    lcd.print(&quot;0&quot;);<br />  }<br />  lcd.print(minute, DEC);<br /><br /><br />  lcd.setCursor(5,1);<br />  lcd.print(&quot;:&quot;);<br /><br />  <br />  lcd.setCursor(6,1);<br />  if (second&lt;10)<br />  {<br />    lcd.print(&quot;0&quot;);<br />  }<br />  lcd.print(second, DEC);<br /><br /><br />  lcd.setCursor(8,1);<br />  lcd.print(&quot;   &quot;);<br /><br /><br />  lcd.setCursor(11,1);<br />  if (dayOfMonth&lt;10)<br />  {<br />    lcd.print(&quot;0&quot;);<br />  }<br />  lcd.print(dayOfMonth, DEC);<br /><br /><br />  lcd.setCursor(13,1);<br />  lcd.print(&quot;/&quot;);<br /><br /><br />  lcd.setCursor(14,1);<br />   if (month&lt;10)<br />  {<br />    lcd.print(&quot;0&quot;);<br />  }<br />  lcd.print(month, DEC);<br />  <br />  <br />  lcd.setCursor(12,0);<br />  lcd.print(&quot;20&quot;);<br />  lcd.setCursor(14,0);<br />  lcd.print(year);<br />  <br />  lcd.setCursor(0,0);<br />  switch(dayOfWeek){<br />  case 1:<br />    lcd.print(&quot;Niedziela   &quot;);<br />    break;<br />  case 2:<br />    lcd.print(&quot;Poniedzialek&quot;);<br />    break;<br />  case 3:<br />    lcd.print(&quot;Wtorek      &quot;);<br />    break;<br />  case 4:<br />    lcd.print(&quot;Sroda       &quot;);<br />    break;<br />  case 5:<br />    lcd.print(&quot;Czwartek    &quot;);<br />    break;<br />  case 6:<br />    lcd.print(&quot;Piatek      &quot;);<br />    break;<br />  case 7:<br />    lcd.print(&quot;Sobota      &quot;);<br />    break;<br />  }<br />}<br />void loop()<br />{<br />   lcd_key = read_LCD_buttons();         // Odczyt klawisza.<br /><br />   switch (lcd_key)                      // Zależy co naciśniesz, to się wykona.<br />{                                <br />   <br />   case btnBRAK:                        // Gdy nic nie wciśniesz.<br />     {<br />      displayTime(); // display the real-time clock data on the Serial Monitor,<br />      delay(1000); // every second<br />   break;<br />      <br />     }<br />   <br />   case btnWYBIERZ:                     // Gdy naciśniesz przycisk Wybierz.<br />     {<br />      bmp280.awaitMeasurement();<br />    <br />      float temperature;<br />      bmp280.getTemperature(temperature);<br />    <br />      float pascal;<br />      bmp280.getPressure(pascal);<br />      bmp280.triggerMeasurement(); <br />      <br />      lcd.setCursor(0,0); <br />      lcd.print(&quot;Temperatura:    &quot;);<br />      lcd.setCursor(0,1);<br />      lcd.print(temperature);<br />      lcd.setCursor(5,1); <br />      lcd.write(1);<br />      lcd.setCursor(6,1);<br />      lcd.print(&quot;C          &quot;);<br />      delay(3000);<br />      lcd.clear();<br />      <br />      lcd.setCursor(0,0); <br />      lcd.print(&quot;Ci&quot;);<br />      lcd.setCursor(2,0);<br />      lcd.write(3);<br />      lcd.setCursor(3,0);<br />      lcd.print(&quot;nienie:      &quot;);<br />      <br />      lcd.setCursor(0,1);<br />      lcd.print(pascal/100,1);<br />      lcd.setCursor(6,1);<br />      lcd.print(&quot; hPa       &quot;);<br />      delay(3000);<br />   break;<br />     }<br /><br />   case btnGORA:                       // Gdy naciśniesz przycisk w Górę.<br />     {<br />      bmp280.awaitMeasurement();<br />      <br />      float temperature;<br />      bmp280.getTemperature(temperature);<br />      <br />      float pascal;<br />      bmp280.getPressure(pascal);<br />      bmp280.triggerMeasurement();<br />      <br />      lcd.setCursor(0,0); <br />      lcd.print(&quot;Temperatura:    &quot;);<br />      lcd.setCursor(0,1);<br />      lcd.print(temperature);<br />      lcd.setCursor(5,1); <br />      lcd.write(1);<br />      lcd.setCursor(6,1);<br />      lcd.print(&quot;C          &quot;);<br />      delay(500);<br />   break;<br />     }<br /><br />   case btnDOL:                         // Gdy naciśniesz przycisk w Dół.<br />     {<br />      bmp280.awaitMeasurement();<br />      <br />      float temperature;<br />      bmp280.getTemperature(temperature);<br />      <br />      float pascal;<br />      bmp280.getPressure(pascal);<br />      bmp280.triggerMeasurement();<br />      lcd.setCursor(0,0); <br />      lcd.print(&quot;Ci&quot;);<br />      lcd.setCursor(2,0);<br />      lcd.write(3);<br />      lcd.setCursor(3,0);<br />      lcd.print(&quot;nienie:      &quot;);<br />      <br />      lcd.setCursor(0,1);<br />      lcd.print(pascal/100,1);<br />      lcd.setCursor(6,1);<br />      lcd.print(&quot; hPa       &quot;);<br />      delay(500);<br />   break;<br />     }<br /> }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17832">bboylubsko</a> — 24 wrz 2018, o 14:51</p><hr />
]]></content>
</entry>
</feed>