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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-09T14:08:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=17256&amp;mode</id>
<entry>
<author><name><![CDATA[LukaszM13]]></name></author>
<updated>2017-01-09T14:08:47+01:00</updated>
<published>2017-01-09T14:08:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179461#p179461</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179461#p179461"/>
<title type="html"><![CDATA[Re: Watchdog w dwu atmegach działa inaczej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179461#p179461"><![CDATA[
Dziękuję Ci Robercie za odpowiedź.<br />Napotkałem jednak dodatkowy problem. Próbowałem oszacować ile zajmuje jeden cykl watchdoga w tych atmegach i ku mojemu zdziwieniu czas ten jest zmienny w ramach kości, tj przez 10min średnia wynosi około np 8.7s przez następne 10 min średnia wychodzi 9.1s albo nawet 10.4s, i ta zmienność jest chaotyczna tj raz 9.1 raz 8.7 raz 10.4 znowu 8.7 i tak losowo skacz pomiędzy różnymi wartościami. spodziewałbym się że w tych samych warunkach zasilania czy temperatury jeden tick tego watchdoga powinien wynosić w przybliżeni tyle samo. Czy mam rację?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16044">LukaszM13</a> — 9 sty 2017, o 14:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2017-01-06T02:57:50+01:00</updated>
<published>2017-01-06T02:57:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179208#p179208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179208#p179208"/>
<title type="html"><![CDATA[Re: Watchdog w dwu atmegach działa inaczej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179208#p179208"><![CDATA[
Korzystasz z timera watchdoda, który nie jest zaprojektowany do precyzyjnego odmierzania czasu. Watchdog ma zabezpieczać układ przed zawieszeniem poprzez wykonanie awaryjnej procedury (typowo reset) i niewielkie różnice czasu nie mają tu znaczenia. U Ciebie różnica wynosi ok. 4.7% co według mnie jest akceptowalnym wynikiem jak dla timera watchgoda.<br />Możesz rozwiązać swój problem ustawiając dla każdego układu indywidualnie liczbę ticków timera watchdoga po jakim będziesz robił pomiar.<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 6 sty 2017, o 02:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[LukaszM13]]></name></author>
<updated>2017-01-06T01:16:20+01:00</updated>
<published>2017-01-06T01:16:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179206#p179206</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179206#p179206"/>
<title type="html"><![CDATA[Watchdog w dwu atmegach działa inaczej]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17256&amp;p=179206#p179206"><![CDATA[
Witam Wszystkich<br />to mój pierwszy post na tym forum. Jestem początkujący. Problem jest być może banalny ale w żaden sposób nie mogę go rozwiązać.<br />Kupiłem Arduino UNO R3 z Atmega328P-PU. Napisałem program, który wykonuje pomiary temperatury co 10 min a w między czasie przechodzi w stan uśpienia. Czas uśpienia jest odmierzany za pomocą WatchDoga z czasem 8s czyli maksymalnie ile się da. Program zasypia na 8s budzi zwiększa zmienną itd aż dojdzie do czasu tuż przed upływem 10min. Po pewnym czasie postanowiłem spróbować podmienić atmegę z zestawu na nową. Kupiłem wgrałem bootloader za pomoca Arduino IDE (i USB asp)  wsadziłem na płytkę Arduino UNO, wgrałem ten sam program i klapa.... Ten nowy układ źle odmierza ten czas. odmierzany czas jest ponad 10min i to o jakieś 20s. W moim programie jest tak że program się synchronizuje do pełnych minut i dziesiątek minut tj sekundy na zero a minuty na wielokrotność 10 (10,20,30 itd) konsekwencją jest to ze pomiar jest robiony co 11 minut zamiast 10.<br />Moją pierwszą myślą było że może fusy kwarcu są źle ustawione tj. inna niż 16MHz  jak w arduino uno. <br />Kupiłem MkAVRCalculator  i okazało się że wszystkie fusy są ustawione dokładnie tak jak w tej 'oryginalnej' Atmedze328P_PU. Według MkAVRCalculator te dwie atmegi wydaja się identyczne a jednak ten sam program na tej samej płytce arduino działa na nich inaczej... 4orginalan z płytyki atmega kończy odmierzanie  mniej więcej po czasie 9:52 i czeka do pełnych 10 minut a ta nowa tamega kończy odmierzanie po jakiś 10:20. Czy ktoś mógłby doradzić o co tu może chodzić. Dodam że kupiłem 4 szt tych atmeg i próby przeprowadziłem na dwu z nich i efekty są takie same. Jakieś pomysły ?? rady? wskazówki  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><br /> <a href="https://obrazkiforum.atnel.pl/16044/45d3a5079cc6bd4a8a3a7a5abe3e3b75.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16044/45d3a5079cc6bd4a8a3a7a5abe3e3b75.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/16044/ee28e9c989374aa8a450c021bd0de2df.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16044/ee28e9c989374aa8a450c021bd0de2df.png" alt="Obrazek" /></a><a href="https://obrazkiforum.atnel.pl/16044/6dcb89539164561fbf5a67d09586b678.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16044/6dcb89539164561fbf5a67d09586b678.png" alt="Obrazek" /></a><br /><a href="https://obrazkiforum.atnel.pl/16044/7bea1292487be0ad318e7ce5b2ae312a.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16044/7bea1292487be0ad318e7ce5b2ae312a.png" alt="Obrazek" /></a><br /><br />W setup mam cos takiego:<br />[syntax=c]// This next section of code is timing critical, so interrupts are disabled.<br />  // See more details of how to change the watchdog in the ATmega328P datasheet<br />  // around page 50, Watchdog Timer.<br />  noInterrupts();<br />  <br />  // Set the watchdog reset bit in the MCU status register to 0.<br />  MCUSR &amp;= ~(1&lt;&lt;WDRF);<br />  <br />  // Set WDCE and WDE bits in the watchdog control register.<br />  WDTCSR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE);<br /><br />  // Set watchdog clock prescaler bits to a value of 8 seconds.<br />  WDTCSR = (1&lt;&lt;WDP0) | (1&lt;&lt;WDP3);<br />  <br />  // Enable watchdog as interrupt only (no reset).<br />  WDTCSR |= (1&lt;&lt;WDIE);<br />  <br />  // Enable interrupts again.<br />  interrupts();<br />watchdogActivated=true; //żeby wykonać pomiar po włączeniu[/syntax]<br />Funkcja 'usypiająca':<br />[syntax=c]void sleepNow()         // here we put the arduino to sleep<br />{<br /> <br />  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // sleep mode is set here<br />  // Turn off the ADC while asleep.<br />  power_adc_disable();<br /><br />  sleep_enable();          // enables the sleep bit in the mcucr register<br />  // so sleep is possible. just a safety pin<br /><br />  /* Now it is time to enable an interrupt. We do it here so an<br />     accidentally pushed interrupt button doesn't interrupt<br />     our running program. if you want to be able to run<br />     interrupt code besides the sleep function, place it in<br />     setup() for example.<br /><br />     In the function call attachInterrupt(A, B, C)<br />     A   can be either 0 or 1 for interrupts on pin 2 or 3.<br /><br />     B   Name of a function you want to execute at interrupt for A.<br /><br />     C   Trigger mode of the interrupt pin. can be:<br />                 LOW        a low level triggers<br />                 CHANGE     a change in level triggers<br />                 RISING     a rising edge of a level triggers<br />                 FALLING    a falling edge of a level triggers<br /><br />     In all but the IDLE sleep modes only LOW can be used.<br />  */<br /><br /><br />  Serial.println(&quot;ScSTOPS&quot;);//Sleep Confirmed: Should STOPS<br /> <br />  delay(100);<br /><br />  sleep_mode();            // here the device is actually put to sleep!!<br />  <br />  sleep_disable();         // first thing after waking from sleep:<br /> <br />  power_all_enable();<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16044">LukaszM13</a> — 6 sty 2017, o 01:16</p><hr />
]]></content>
</entry>
</feed>