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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-04T12:22:16+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13751&amp;mode</id>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2015-12-04T12:22:16+01:00</updated>
<published>2015-12-04T12:22:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147015#p147015</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147015#p147015"/>
<title type="html"><![CDATA[Re: Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147015#p147015"><![CDATA[
przespałem się z tym i wymyśliłem że dokładność do 5 sekund przecież jest super wystarczająca. Dodatkowo nikt nie będzie widział czasu zarówno z GPS jak i RTC (teraz tak mam, ale to tylko testowo) więc jak ta różnica się zwiększy to wtedy przepisze czas. Dodatkowo wprowadzę zmienną w EEPROM która się będzie inkrementowała za każdym razem kiedy czas będzie zapisywany z GPS do RTC - ciekawe ile razy w ciągu roku takie przypisanie nastąpi.<br />A tak teoretycznie tylko się zastanawiałem czy można super idealnie to zsynchronizować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 4 gru 2015, o 12:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2015-12-04T10:34:51+01:00</updated>
<published>2015-12-04T10:34:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147007#p147007</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147007#p147007"/>
<title type="html"><![CDATA[Re: Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147007#p147007"><![CDATA[
Musisz się zastanowić kiedy co się dzieje i jakiej dokładności potrzebujesz. Pomyśl - dostajesz ramkę z GPS, obrabiasz. Do następnej ramki (pewnie po sekundzie) masz jeden czas. Teraz tak. Ramka już troszkę ma, musisz ją zapisać do RTC i wtedy już czas z ramki GPS jest &quot;starszy&quot; od RTC. Prawdopodobnie tu jest ta różnica. Dodatkowo podobnie jest z odczytem i porównaniem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 4 gru 2015, o 10:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2015-12-03T23:24:31+01:00</updated>
<published>2015-12-03T23:24:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147002#p147002</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147002#p147002"/>
<title type="html"><![CDATA[Re: Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=147002#p147002"><![CDATA[
No i miałeś rację Mirku.<br />Po przerzuceniu wszystkiego do osobnych plików trochę się wyczyściło w funkcji main i teraz prawie działa.<br />Piszę prawie bo mam problem na konwersjach typu i porównywaniu tych dat (z GPSa i RTC).<br />1. Czas z GPS jest w zmiennej np. <div class="codetitle"><b>Code:</b></div><div class="codecontent">ggmmss&#91;7&#93; = &quot;233000&quot;</div><br />Czas w DS3231 jest w BCD ale my w programie mamy uniostrukturę [syntax=c]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 />extern TDATETIME datetime;[/syntax]<br /><br />jak teraz porównać te 2 wartości w prosty sposób.<br />najlepiej byłoby mi założyć taką samą unię do biblioteki GPS'a ale powiem szczerze że mnie to na razie przerasta<br />tak pytam na sucho na razie - zanim zacznę coś psuć - bo tak na okrędkę to można stworzyć dodatkowe zmienne tablicowe i przekopiować dane i potem je porównywać, ale pewnie będzie łatwiej wskaźnikami - tylko jak się do tego dobrać? <br /><br />i drugie pytanie (tylko nie czepiajcie się że chcę być za dokładny) - na razie synchronizację zrobiłem z palca i po naciśnięciu guzika czas z GPS przepisywany jest do DS3231 - ale niestety mimo ze działa synchronizacja to zawsze jest różnica i o 1 sekundę jest opóźniony RTC<br />czyżby te konwersje tyle trwały<br />Funkcje do zapisu wyglądają tak[syntax=c]void DS3231_set_time_gps( char * godzina_z_gps ) {<br />    char godz&#91;3&#93;;<br />    char min&#91;3&#93;;<br />    char sek&#91;3&#93;;<br />memcpy (godz, &amp;godzina_z_gps&#91;0&#93;,2);<br />memcpy (min, &amp;godzina_z_gps&#91;2&#93;,2);<br />memcpy (sek, &amp;godzina_z_gps&#91;4&#93;,2);<br />uint8_t buf&#91;3&#93;;<br />buf&#91;0&#93;=dec2bcd(atoi(sek));<br />buf&#91;1&#93;=dec2bcd(atoi(min));<br />buf&#91;2&#93;=dec2bcd(atoi(godz));<br />TWI_write_buf( DS3231_ADDR, 0x00, 3, buf );<br />}<br /><br />void DS3231_set_date_gps( char * data_z_gps, uint8_t dayofweek ) {<br />    char rok&#91;3&#93;;<br />    char miesiac&#91;3&#93;;<br />    char dzien&#91;3&#93;;<br />uint8_t buf&#91;4&#93;;<br />memcpy (dzien, &amp;data_z_gps&#91;0&#93;,2);<br />memcpy (miesiac, &amp;data_z_gps&#91;2&#93;,2);<br />memcpy (rok, &amp;data_z_gps&#91;4&#93;,2);<br />buf&#91;0&#93;=dayofweek;<br />buf&#91;1&#93;=dec2bcd(atoi(dzien));<br />buf&#91;2&#93;=dec2bcd(atoi(miesiac));<br />buf&#91;3&#93;=dec2bcd(atoi(rok));<br />TWI_write_buf( DS3231_ADDR, 0x03, 4, buf );<br />}[/syntax]<br />a dlatego się pytam bo jak już zrobie sprawdzanie czy czas GPS == czas RTC to ta 1 sekunda wyjdzie.<br /><br />no i w końcu muszę dorobić obliczanie dnia tygodnia - ale to już na deser.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 3 gru 2015, o 23:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2015-12-03T14:02:37+01:00</updated>
<published>2015-12-03T14:02:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146956#p146956</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146956#p146956"/>
<title type="html"><![CDATA[Re: Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146956#p146956"><![CDATA[
Dziękuję Mirku za konstruktywną krytykę.<br /><br />Najpierw wydzielę DS3231 do osobnej biblioteki bo na razie w main.c jest tego sporo.<br />Najważniejsze że uzyskałem odpowiedź że to nie wina procka i wydajności - a stąd było takie przypuszczenie że skoro oba projekty jako osobne działają bezproblemowo a połączone ze sobą już nie to tutaj podejrzenie padło na sprzęt. Sprawdzę jeszcze tą bibliotekę do GPSa czy czasami to parasowanie nie trwa za długo - wrzucę jakiegoś taimera i sprawdzę ile razy w ciągu sek się zinkrementuje <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Tak więc posprzątam trochę i jak będę miał pytania to się odezwę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 3 gru 2015, o 14:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-12-03T12:42:52+01:00</updated>
<published>2015-12-03T12:42:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146948#p146948</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146948#p146948"/>
<title type="html"><![CDATA[Re: Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146948#p146948"><![CDATA[
<div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />(pamiętacie że to przerwanie jest wyzwalane co 1s z DS3231 i podawane na PD2:INT0) i niestety przy takim wywołaniu na UART spływa sieczka (dowolne losowe znaki)<br /></div><br />Panie - przerwanie INT może być wywoływane nawet i 100x szybciej niż co 1 sekundę i nie będzie żadnej sieczki z UART'a ... A skoro masz sieczkę to znaczy, że niestety jest ona spowodowana (bez urazy no ale tak jest) sieczką w kodzie źródłowym ... Gdy mnie coś nie działa w programie, to nie mawiam sobie, że winne jest temu jakieś przerwanie, jakiś timer, czy bóg wie jaki inny moduł w procku - tylko szukam właśnie sieczki w swoim kodzie źródłowym ....<br /><br />A kolega widzę po raz kolejny upatruje czarodziejskich problemów w sprzęcie. Gdyby przerwania INTx miały przeszkadzać w pracy UART'a to kolego <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... toż to byłaby masakra na skalę światową a procki, które by tak miały - trzeba byłoby wywalić do kosza <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> na śmieci <br /><br /><div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />Tak sobie myślę - może zwiększyć prędkośc z 11,0592 MHz do 20<br /></div><br />Można - ale z punktu widzenia opisanego problemu wydaje się to być ruch KOMPLETNIE nieuzasadniony , dlaczego ? Dlatego że to co robisz to można byłoby spokojnie robić popędzając procka kwarcem 1.8432 MHz (zakładając że potrzebujesz baudrate max 38400) albo 3.6864 MHz jeśli potrzeba większego baudrate np 115200, i to działałoby bez mrugnięcia okiem .... Ba! .... gdyby procek miał obsługiwać tylko DS3231 i parsować dane z GPS'a to hmmm byłby wykorzystywany w kilku promilach swoich możliwości - a resztę czasu leżałby odłogiem do góry brzuchem nic nie robiąc.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />może przestawić GPSa na szybszy RS232 (jest 9600)<br /></div><br /><br />to działałoby nawet na 4800 albo i 2400 jeśli twój moduł GPS może z takimi prędkościami nadawać - żadna różnica<br /><br /><br /><div class="quotetitle">iwi napisał(a):</div><div class="quotecontent"><br />Może funkcję parasującą wywoływać też w przerwaniu zegarka co 1s.<br /></div><br />To pokazuje, że kolega niestety KOMPLETNIE nie rozumie jak działa parsowanie w oparciu o zdarzenia. W ogóle co to są zdarzenia.<br /><br />Zrozum - zdarzenia EVENTS, dają to, że dane są parsowane prawie NATYCHMIAST gdy nadlecą, gdy nastąpi takie zdarzenie w procku. A to, że ty chcesz sterować czasem kiedy ma dochodzić do parsowania np co sekundę to już masakra amerykańską piłą tarczową. Dlaczego ? Dlatego, że jeśli np dane będą nadlatywały chociażby 10 razy na sekundę, a nie zmieszczą się w buforze cyklicznym to masz pan pozamiatane i tracisz kupę nadlatujących informacji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 gru 2015, o 12:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2015-12-03T12:27:01+01:00</updated>
<published>2015-12-03T12:27:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146946#p146946</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146946#p146946"/>
<title type="html"><![CDATA[Re: Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146946#p146946"><![CDATA[
Wrzuć main'a, to może coś poradzimy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 3 gru 2015, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[iwi]]></name></author>
<updated>2015-12-03T11:02:00+01:00</updated>
<published>2015-12-03T11:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146942#p146942</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146942#p146942"/>
<title type="html"><![CDATA[Zegarek DS3231 z pobieraniem czasu i daty z GPS'a]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13751&amp;p=146942#p146942"><![CDATA[
Witajcie.<br />Chciałbym połączyć 2 projekty ze sobą zegarek z Mirka blogu DS3231 z moim GPSem.<br />Problem w tym, że po połączeniu tych 2 projektów dane na UART przestają przychodzić poprawne i zegarek nie chce się ustawić. Tak sobie myślę, że DS3231 co 1s wysyła impuls na INT0 Atmgi która wykonuje przerwanie i przez to brakuje czasu na odebranie i sparasowanie ramki od GPS.<br />Albo przerwanie od UARTu nie może być razem z przerwaniem od INT0 - i to się gryzie<br />Na razie wywołuje to parasowanie przed przerwaniem z DS3231 (pamiętacie że to przerwanie jest wyzwalane co 1s z DS3231 i podawane na PD2:INT0) i niestety przy takim wywołaniu na UART spływa sieczka (dowolne losowe znaki) <br /><br />Chciałbym żeby za każdym razem po załączeniu zasilania zegarek pobrał godzinę z DS3231 a w tle sprawdzał GPSa jeśli FIX będzie 1 lub 2 to sprawdzi czy godzinę i datę ma właściwą a jeśli nie to przepisze do DS3231 - po tej operacji już czasu i daty nie musi sprawdzać więc pozostanie mu tylko analiza ramki GPGGA oraz GPVTG (z prędkością) - prędkość jest co prawda jeszcze w ramce z datą ale cały czas miałem na uwadze żeby po zsynchronizowaniu nie sprawdzał tej ramki, a GPVTG jest o wiele krótsza.<br /><br />Tak sobie myślę - może zwiększyć prędkośc z 11,0592 MHz do 20 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />może przestawić GPSa na szybszy RS232 (jest 9600)<br />Może funkcję parasującą wywoływać też w przerwaniu zegarka co 1s.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1988">iwi</a> — 3 gru 2015, o 11:02</p><hr />
]]></content>
</entry>
</feed>