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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-10-15T16:15:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=19381&amp;mode</id>
<entry>
<author><name><![CDATA[RYSZARD M]]></name></author>
<updated>2017-10-15T16:15:48+01:00</updated>
<published>2017-10-15T16:15:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197076#p197076</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197076#p197076"/>
<title type="html"><![CDATA[Re: Dawca Czasu 2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197076#p197076"><![CDATA[
anshar <br />Przepięknie dziękuję i pozdrawiam.<br />Masz absolutną rację to był ten BABOL.<br /><br />DZIĘKUJĘ BARDZO<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3171">RYSZARD M</a> — 15 paź 2017, o 16:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-10-15T16:02:14+01:00</updated>
<published>2017-10-15T16:02:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197075#p197075</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197075#p197075"/>
<title type="html"><![CDATA[Re: Dawca Czasu 2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197075#p197075"><![CDATA[
Błąd masz w tych linijkach kodu:<br />[syntax=c]gg = atoi( strtok(tm,&quot;-&quot;) );<br />mm = atoi( strtok(NULL,&quot;-&quot;) );<br />ss = atoi( strtok(NULL,&quot;-&quot;) );[/syntax]<br />Powinno być:<br />[syntax=c]gg = atoi( strtok(tm,&quot;:&quot;) );<br />mm = atoi( strtok(NULL,&quot;:&quot;) );<br />ss = atoi( strtok(NULL,&quot;:&quot;) );[/syntax]<br /><br />Nadlatująca ramka wygląda na przykład tak: +ok=2017-10-15 16:01:15, prawda?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 15 paź 2017, o 16:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[RYSZARD M]]></name></author>
<updated>2017-10-15T15:37:52+01:00</updated>
<published>2017-10-15T15:37:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197073#p197073</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197073#p197073"/>
<title type="html"><![CDATA[Dawca Czasu 2]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19381&amp;p=197073#p197073"><![CDATA[
Witam<br /><br />Mam kłopot z Dawcą Czasu 2 z kompletowane na podstawie poradników Mirka z Youtube o WiFi oraz RTC,<br />taki że po wystartowaniu programu z przypadkowymi danymi o dacie i czasie , program po pobraniu z NTP<br />danych ustawia właściwie DATĘ lecz Czas jest tylko dobry odnośnie GODZINY ale minut i sekund nie wgrywa<br />właściwie do RTC PCF 8583 ustawiane na 0 i 0. Przewertowałem wielokrotnie co tylko mogłem i nie potrafię odszukać BABOLA.<br /><br />Załączam pełen plik main.c<br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 5 paź 2017<br /> *      Author:<br /> */<br /><br /><br />// 12 październik 2017<br />// tworzone przez zemnie jakby od 0 na podstawie poradników o WiFi232 NTP<br />// oraz tutaj do DawcaCzasu2 poradniki  o RTC<br /><br />#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 />#include &lt;avr/wdt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include&quot;MK_USART/mkuart.h&quot;//z green booka<br />#include&quot;LCD/lcd44780.h&quot;<br /><br />#include&quot;MK_PCF8583/mk_pcf8583.h&quot;<br /><br />//******************************deklaracje zmiennych<br />volatile uint16_t Timer1, Timer2;<br />char uart_buf&#91;100&#93;;<br />uint8_t actual_at_cmd;  // aktualnie wysłana komenda AT do modułu Wi-Fi<br /><br />enum {_none, _at_gmt};  // typ wyliczeniowy, _none - wartość 0, _at_gmt - wartość 1<br /><br /><br />//******************************deklaracje funkcji<br />void parse_rs232(char * buf);<br />void GetNtpTime_EVENT(volatile uint16_t *tmr_100ms, uint8_t ss, uint8_t mm, uint8_t hh, void (*timer100ms)(void));<br /><br />void pokazuj_date_czas(TDATETIME *dt);<br /><br /><br />//--------------------------główna funkcja programu main--------------------------------<br />int main(void)<br />{<br />PORTA |= (1&lt;&lt;PA7);<br />        DDRC |= (1&lt;&lt;PC6);<br />        PORTC |= (1&lt;&lt;PC6);//migająca dioda LED na PC6<br /><br />        // ustawienia timera sprzętowego wybranego jako podstawa czasu timerów programowych<br />        /* Timer 2 I konfiguracja silnika timerów programowych */<br />        TCCR2  |= (1&lt;&lt;WGM21);                      // tryb: CTC<br />        TCCR2  |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);   // preskaler: 1024<br />        OCR2  = 107;                               // rozdzielczosć: 10ms (100Hz)<br />        TIMSK  = (1&lt;&lt;OCIE2);                       // odblokowanie przerwania CompareMatch<br /><br />        USART_Init(__UBRR);<br />        register_uart_str_rx_event_callback(parse_rs232);<br /><br />        init_RTC();<br />        register_rtc_event_callback(pokazuj_date_czas);<br /><br />        lcd_init();<br />        lcd_cls();<br />        lcd_str(&quot;Start...&quot;);<br /><br /> //             set_rtc_datetime( &amp;datetime, 2000, 6, 5, 3, 20, 0);<br /> //       set_rtc_date (&amp;datetime, 2017,10,14);<br /> //       set_rtc_time (&amp;datetime, 16,27,0);<br /><br />        Timer2 = 600;<br /><br />        sei();<br /><br />        while(1)<br />        {<br />                UART_RX_STR_EVENT(uart_buf);<br /><br />                GetNtpTime_EVENT( &amp;Timer2, 20, 0, 0, NULL);<br /><br />                RTC_EVENT();<br /><br />                if(!Timer1)<br />                {<br />                        PORTC ^= (1&lt;&lt;PC6);<br />                        Timer1 = 25;      // co 250ms<br />                }<br />        }<br />}<br /><br /><br />void pokazuj_date_czas(TDATETIME *dt){<br />#if DATETIME_AS_STRING == 1<br />        lcd_locate(0,0);<br />        lcd_str(dt -&gt; time);<br /><br />        lcd_locate(1,0);<br />        lcd_str(dt -&gt; date);<br /><br />        lcd_locate(0,14);<br />//        lcd_int(datetime.weekday);<br />        lcd_int(dt -&gt; weekday);<br /><br />        lcd_locate(1,13);<br />        lcd_str_P(&amp;dni&#91; dt -&gt; weekday * 4 &#93;);<br />#endif<br />}<br /><br /><br />void GetNtpTime_EVENT(volatile uint16_t *tmr_100ms, uint8_t ss, uint8_t mm, uint8_t hh, void (*timer100ms)(void)){<br /><br />        static uint32_t ms100_tick;<br /><br />        uint32_t co_ile_czasu = (ss*10ul) + (mm*10ul*60ul) + (hh*10ul*60ul*60ul);<br /><br />        if( !*tmr_100ms){<br />                switch( ms100_tick ){<br />                case 0 ... 2: uart_puts(&quot;+&quot;); break;<br />//                case 3: uart_puts(&quot;a&quot;&quot;\r&quot;); break; tu jest jakiś babol ale to nie to bo nie<br />                //przepisują się minuty i sekundy do RTC tylko się zerują a godzina jest właściwie wpisana<br />                case 3: uart_puts(&quot;a&quot;); break;<br />                case 5: actual_at_cmd = _at_gmt; uart_puts(&quot;AT+GMT=2\r&quot;); break;<br />                case 10: uart_puts(&quot;AT+ENTM\r&quot;); break;<br />                }<br />                ms100_tick++;<br />                if(ms100_tick &gt; co_ile_czasu) ms100_tick = 0;<br /><br />                if (timer100ms) timer100ms ();//dodałem bez efektów<br />                *tmr_100ms = 10;<br />        }<br />}<br /><br /><br />void parse_rs232(char * buf)<br />{<br />        if(!buf&#91;0&#93;) return; // gdy nadleci pusta linia do terminala (ktoś nacisnął enter 3x pod rząd, gdy pierwszy znak 0 to wyjdź z funkcji<br /><br />        uint8_t MM,DD,gg,mm,ss;<br />        uint16_t YY=0;<br /><br />        // 2 zmienne wskaźnikowe jako zmienne lokalne, dlatego że funkcja strtok działa ze wskaźnikami<br /><br />        char * dt;<br />        char * tm;<br /><br />        if(_at_gmt == actual_at_cmd) // analizujemy to co przychodzi z serwera czasu, a nie coś przypadkowego<br />        {<br />                if(!strncasecmp(&quot;+ok=&quot;, buf, 4)) // analizujemy czy początek stringa to &quot;+ok=&quot;<br />                {<br />                        dt = strtok(buf, &quot;=&quot;);<br />                        dt = strtok(NULL, &quot; &quot;);<br />                        tm = strtok(NULL, &quot; &quot;);<br />                                if (10 == strlen( dt ) &amp;&amp; 8 == strlen( tm ))<br />                                {<br />                                    lcd_locate(0,0);<br />                                    lcd_str(&quot;--:--:--&quot;);<br />                                    lcd_locate(1,0);<br />                                    lcd_str(&quot;- sync -   &quot;);<br /><br />                                        YY = atoi( strtok(dt,&quot;-&quot;) );<br />                                        MM = atoi( strtok(NULL,&quot;-&quot;) );<br />                                        DD = atoi( strtok(NULL,&quot;-&quot;) );<br />                                        gg = atoi( strtok(tm,&quot;-&quot;) );<br />                                        mm = atoi( strtok(NULL,&quot;-&quot;) );<br />                                        ss = atoi( strtok(NULL,&quot;-&quot;) );<br /><br /><br />                                        set_rtc_datetime(&amp;datetime, YY, MM, DD, gg, mm, ss);<br /><br /><br />                                    _delay_ms(1000);<br />                                }<br />                }<br />        }<br />//obsługa SOFT RESET dla bootloadera<br />        if(!strncasecmp(&quot;AT+RST?&quot;, buf, 7)) // &lt;stdlib.h&gt;, &lt;string.h&gt;, tą funkcją porównujemy stringi<br />        {<br />                cli();          // disable interrupts<br />                wdt_enable(0);  // set watchdog, &lt;avr/wdt.h&gt;<br />                while(1);       // wait for reset<br />        }<br /><br />}<br /><br /><br />//*** przerwanie Timer2 CompareM<br />ISR(TIMER2_COMP_vect)<br />{<br />static uint16_t n;<br />n = Timer1;<br />if(n) Timer1 = --n;<br />n = Timer2;<br />if (n) Timer2 = --n;<br />}[/syntax]<br /><br />Proszę o poradę <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3171">RYSZARD M</a> — 15 paź 2017, o 15:37</p><hr />
]]></content>
</entry>
</feed>