{"id":280,"date":"2015-10-17T20:23:44","date_gmt":"2015-10-17T18:23:44","guid":{"rendered":"http:\/\/www.daniel.slask.pl\/?p=280"},"modified":"2021-02-12T21:33:47","modified_gmt":"2021-02-12T20:33:47","slug":"biblioteka-dla-zegara-rtc-pcf8563p","status":"publish","type":"post","link":"https:\/\/daniel.slask.pl\/m\/biblioteka-dla-zegara-rtc-pcf8563p\/","title":{"rendered":"Biblioteka dla zegara RTC PCF8563p"},"content":{"rendered":"\n<p>Przysz\u0142a kolej na prezentacj\u0119 biblioteki zegara RTC PCF8563p w\u0142asnego autorstwa.<\/p>\n\n\n\n<p>Uk\u0142ad PCF8563p jest zegarem czasu rzeczywistego (Real-Time Clock). Jest bratem dobrze znanego uk\u0142adu tej samej marki PCF85<span style=\"color: #ff0000;\">8<\/span>3p. Najwi\u0119ksza r\u00f3\u017cnica wyst\u0119puje w pod\u0142\u0105czeniu tych uk\u0142ad\u00f3w.<\/p>\n\n\n\n<p>PCF8563 nie posiada n\u00f3\u017cki adresowej &#8211; adres uk\u0142adu jest sta\u0142y &#8211; natomiast posiada zamiast niej wyj\u015bcie CLKOUT, oraz pin 7 zosta\u0142 zamieniony z pinem 3. Poni\u017cej przedstawiam schemat pod\u0142\u0105czenia uk\u0142adu:<\/p>\n\n\n\n<figure class=\"wp-block-image alignnone\"><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/10\/pcf8563p.png\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2015\/10\/pcf8563p-150x150.png\" alt=\"pcf8563p\" class=\"wp-image-304\"\/><\/a><figcaption>Pod\u0142\u0105czenie uk\u0142adu RTC &#8211; PCF8563p<\/figcaption><\/figure>\n\n\n\n<p>Kolejna r\u00f3\u017cnica wyst\u0119puje w formacie zapisu roku. Opisywany uk\u0142ad posiada zapis roku jako dwie ostatnie cyfry, np 15 &#8211; rok 2015 (zakres 00 do 99). Natomiast w uk\u0142adzie PCF85<span style=\"color: #ff0000;\">8<\/span>3p wyst\u0119powa\u0142o okre\u015blenie roku parzysto\u015bci (rejestr przechowuj\u0105cy rok w formacie 0 do 3).<\/p>\n\n\n\n<p>W moich bibliotekach nie zaimplementowa\u0142em obs\u0142ugi funkcji alarmu oraz timera.<\/p>\n\n\n\n<p>Poni\u017cej przedstawiam zawarto\u015b\u0107 odpowiednich plik\u00f3w mojej biblioteki (na ko\u0144cu artyku\u0142u mo\u017cna pobra\u0107 komplet plik\u00f3w):<\/p>\n\n\n\n<p>Plik g\u0142\u00f3wny *.c:<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true expand-toggle:false lang:c decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">    \/*\n     * pcf8563p.h\n     *\n     *  Created on: 08-05-2014\n     *   Edited on: 11-05-2014\n     *      Author: Daniel\n     *\n     *       *      UWAGA!!\n     *              Koniecznie na pocz\u0105tku programu nalezy zarejestrowac funkcji do startu, stopu odbierania i wysylania\n     *              danych po i2c (TWI). Dokonuje si\u0119 to przy uzyciu funkcji:\n     *                      register_twi_start_pcf( );                      \/\/rejestracja funkcji start z i2c\n     *                      register_twi_stop_pcf( );                               \/\/rejestracja funkcji stop z i2c\n     *                      register_twi_write_pcf( );      \/\/rejestracja funkcji zapisuj\u0105cej do i2c\n     *                      register_twi_read_pcf( );       \/\/rejestracja funkcji odczytuj\u0105cej z i2c\n     *\n     *              Odczyt danych z rtc dokonuje si\u0119 z callendar_rtc po wczesniejszym wywolaniu funkcji rtc_refresh_data()\n     *              Zapis danych do rtc dokonuje si\u0119 poprzez wywolanie funkcji rtc_write_data(), powczesniejszym wpisaniu\n     *              zadanych danych do callendar_rtc\n     *\n     *\/\n     \n    #ifndef PCF8563P_H_\n    #define PCF8563P_H_\n     \n    #define ADR_PCF8563P_R  0xA3\n    #define ADR_PCF8563P_W  0xA2\n     \n    \/\/adresy odpowiednich rejestr\u00f3w\n     \n    #define RG_SECONDS              0x02\n    #define RG_MINUTES              0x03\n    #define RG_HOURS                0x04\n    #define RG_DAYS                 0x05\n    #define RG_WEEKDAYS             0x06\n    #define RG_MONTHS               0x07\n    #define RG_YEARS                0x08\n     \n    typedef struct{\n            uint8_t seconds;        \/\/sekundy\n            uint8_t minutes;        \/\/minuty\n            uint8_t hours;          \/\/godziny\n            uint8_t days;           \/\/dzien\n            uint8_t weekdays;       \/\/dzien tygodnia\n            uint8_t months;         \/\/miesiac\n            uint8_t years;          \/\/rok\n    }DS_PCF8563;\n     \n    extern volatile DS_PCF8563 callendar_rtc;               \/\/zawiera kalendarz - odczytane dane z rtc\n     \n    void register_twi_start_pcf(void (*twi_callback)(void));                        \/\/rejestracja funkcji start z i2c\n    void register_twi_stop_pcf(void (*twi_callback)(void));                         \/\/rejestracja funkcji stop z i2c\n    void register_twi_write_pcf(void (*twi_callback)(uint8_t bajt));        \/\/rejestracja funkcji zapisuj\u0105cej do i2c\n    void register_twi_read_pcf(uint8_t (*twi_callback)(uint8_t ack));       \/\/rejestracja funkcji odczytuj\u0105cej z i2c\n     \n     \n    uint8_t rtc_write_date(void);                                   \/\/zapisuje dane do rtc, kt\u00f3re znajduja sie w callendar_rtc. Zwraca 1 gdy wszystko OK\n    uint8_t rtc_refresh_date(void);                                 \/\/odswieza date i godziny w callendar_rtc. Zwraca 1 gdy wszystko OK\n     \n     \n    #endif \/* PCF8563P_H_ *\/\n<\/code><\/pre>\n\n\n\n<p>Plik nag\u0142\u00f3wkowy *.h<\/p>\n\n\n\n<pre class=\"wp-block-code height-set:true lang:default decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">    \/*\n     * pcf8563p.c\n     *\n     *  Created on: 08-05-2014\n     *       Edited on: 11-05-2014\n     *      Author: Daniel\n     *\n     *\n     *      Przy pomocy ksi\u0105\u017cki:\n     *                                                      Mikrokontrolery AVR\n     *                                                      J\u0119zyk C - podstawy programowania\n     *\n     *                                                                                                                      Autor:\n     *                                                                                                                              Miros\u0142aw Karda\u015b\n     *\n     *      UWAGA!!\n     *              Koniecznie na pocz\u0105tku programu nalezy zarejestrowac funkcji do startu, stopu odbierania i wysylania\n     *              danych po i2c (TWI). Dokonuje si\u0119 to przy uzyciu funkcji:\n     *                      register_twi_start_pcf( );                      \/\/rejestracja funkcji start z i2c\n     *                      register_twi_stop_pcf( );                               \/\/rejestracja funkcji stop z i2c\n     *                      register_twi_write_pcf( );      \/\/rejestracja funkcji zapisuj\u0105cej do i2c\n     *                      register_twi_read_pcf( );       \/\/rejestracja funkcji odczytuj\u0105cej z i2c\n     *\n     *              Odczyt danych z rtc dokonuje si\u0119 z callendar_rtc po wczesniejszym wywolaniu funkcji rtc_refresh_data()\n     *              Zapis danych do rtc dokonuje si\u0119 poprzez wywolanie funkcji rtc_write_data(), powczesniejszym wpisaniu\n     *              zadanych danych do callendar_rtc\n     *\n     *\/\n     \n     \n    #include &lt;avr\/io.h>\n    #include &lt;avr\/pgmspace.h>\n     \n    #include \"pcf8563p.h\"\n     \n    volatile DS_PCF8563 callendar_rtc;              \/\/zawiera kalendarz\n     \n    \/\/-----*****+++++       funkcje widoczne tylko wewn\u0105trz biblioteki\n     \n    \/\/ konwersja liczby dziesi\u0119tnej na BCD\n    uint8_t dec2bcd(uint8_t dec) {\n    return ((dec \/ 10)&lt;&lt;4) | (dec % 10);\n    }\n     \n    \/\/ konwersja liczby BCD na dziesi\u0119tn\u0105\n    uint8_t bcd2dec(uint8_t bcd) {\n        return ((((bcd) >> 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);\n    }\n     \n    \/\/rejestracje funkcji z i2c\n     \n    static void (*pcf_twi_start)(void);\n    static void (*pcf_twi_stop)(void);\n    static void (*pcf_twi_write)(uint8_t bajt);\n    static uint8_t (*pcf_twi_read)(uint8_t bajt);\n     \n    void register_twi_start_pcf(void (*twi_callback)(void)){\n            \/\/rejestracja funkcji start z i2c\n            pcf_twi_start = twi_callback;\n    }\n     \n    void register_twi_stop_pcf(void (*twi_callback)(void)){\n            \/\/rejestracja funkcji stop z i2c\n            pcf_twi_stop = twi_callback;\n    }\n     \n    void register_twi_write_pcf(void (*twi_callback)(uint8_t bajt)){\n            \/\/rejestracja funkcji zapisuj\u0105cej do i2c\n            pcf_twi_write = twi_callback;\n    }\n     \n    void register_twi_read_pcf(uint8_t (*twi_callback)(uint8_t ack)){\n            \/\/rejestracja funkcji odczytuj\u0105cej z i2c\n            pcf_twi_read = twi_callback;\n    }\n     \n     \n    \/\/-----*****+++++       funkcje widoczne na zewnatrz\n     \n    \/\/--**zapis do rtc\n    uint8_t rtc_write_date(void){\n            \/\/zapisuje dane do rtc, kt\u00f3re znajduja sie w callendar_rtc. Zwraca 1 gdy wszystko OK, 0 gdy nie\n     \n            if(!pcf_twi_read || !pcf_twi_write || !pcf_twi_start || !pcf_twi_stop) return 0;        \/\/jezeli nie zostaly zarejestrowane odpowiednie funkcje\n     \n            uint8_t temp = dec2bcd(callendar_rtc.seconds);  \/\/odczyt z struktury sekund i konwersja na bcd\n     \n            pcf_twi_start();\n            pcf_twi_write(ADR_PCF8563P_W);                  \/\/wyslanie adresu na i2c\n            pcf_twi_write(RG_SECONDS);                              \/\/zapis rozpoczynamy od sekund\n            pcf_twi_write(temp);                                    \/\/wyslanie wartoscie sekund po pcf w formacie bcd\n            temp = dec2bcd(callendar_rtc.minutes);\n            pcf_twi_write(temp);\n            temp = dec2bcd(callendar_rtc.hours);\n            pcf_twi_write(temp);\n            temp = dec2bcd(callendar_rtc.days);\n            pcf_twi_write(temp);\n            temp = dec2bcd(callendar_rtc.weekdays);\n            pcf_twi_write(temp);\n            temp = dec2bcd(callendar_rtc.months);\n            pcf_twi_write(temp);\n            temp = dec2bcd(callendar_rtc.years);\n            pcf_twi_write(temp);\n            pcf_twi_stop();                                                 \/\/procedura stop\n     \n            return 1;\n    }\n     \n    \/\/--**odswiezenie danych z rtc (odczyt z rtc)\n    uint8_t rtc_refresh_date(void){\n            \/\/odswieza date i godziny w callendar_rtc. Zwraca 1 gdy wszystko OK\n     \n            if(!pcf_twi_read || !pcf_twi_write || !pcf_twi_start || !pcf_twi_stop) return 0;        \/\/jezeli nie zostaly zarejestrowane odpowiednie funkcje\n     \n            uint8_t temp=0;\n     \n            pcf_twi_start();                                                \/\/procedura start\n            pcf_twi_write(ADR_PCF8563P_W);                  \/\/adres pcf\n            pcf_twi_write(RG_SECONDS);                              \/\/odczyt zaczynamy od sekund\n            pcf_twi_start();                                                \/\/wyslanie ponownie startu\n            pcf_twi_write(ADR_PCF8563P_R);                  \/\/adres pcf ale tym razem jako odczyt\n     \n            \/\/odczyt sekund i zamaskowanie najstarszego bitu\n            temp = pcf_twi_read(1) &amp; 0x7f;\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.seconds = bcd2dec(temp);\n     \n            \/\/odczyt minut i zamaskowanie najstarszego bitu\n            temp = pcf_twi_read(1) &amp;; 0x7f;\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.minutes = bcd2dec(temp);\n     \n            \/\/odczyt godzin i zamaskowanie\n            temp = pcf_twi_read(1) &amp; 0x3f;\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.hours = bcd2dec(temp);\n     \n            \/\/odczyt dnia i zamaskowanie\n            temp = pcf_twi_read(1) &amp; 0x3f;\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.days = bcd2dec(temp);\n     \n            \/\/odczyt dnia tygodnia i zamaskowanie\n            temp = pcf_twi_read(1) &amp; 0x07;\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.weekdays = temp;\n     \n            \/\/odczyt miesiaca i zamaskowanie najstarszego bitu\n            temp = pcf_twi_read(1) &amp; 0x1f;\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.months = bcd2dec(temp);\n     \n            \/\/odczyt roku\n            temp = pcf_twi_read(0);\n            \/\/konwersja z bcd i zapis do callendar rtc\n            callendar_rtc.years = bcd2dec(temp);\n     \n            pcf_twi_stop();\n     \n            return 1;\n    }\n<\/code><\/pre>\n\n\n\n<p>Obs\u0142uga biblioteki sprowadza si\u0119 do:<\/p>\n\n\n\n<p>1) Rejestracji podstawowych funkcji magistrali TWI (I2C):<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"c\" class=\"language-c line-numbers\">register_twi_start_pcf(twi_start);\nregister_twi_stop_pcf(twi_stop);\nregister_twi_read_pcf(twi_read);\nregister_twi_write_pcf(twi_send);<\/code><\/pre>\n\n\n\n<p>Dzi\u0119ki temu program dzia\u0142a z ka\u017cd\u0105 poprawnie napisan\u0105 bibliotek\u0105 do obs\u0142ugi I2C (TWI).<br>Argumenty kt\u00f3re s\u0105 przekazywane do tych funkcji s\u0105 r\u00f3wnie\u017c funkcjami, kt\u00f3re odpowiadaj\u0105 za start, stop, odczyt i zapis danych po magistrali TWI.<\/p>\n\n\n\n<p>2) Aktualizacji odczytanych danych poprzez wywo\u0142anie funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"c\" class=\"language-c\">rtc_refresh_date();<\/code><\/pre>\n\n\n\n<p>Funkcja ta odczytuje z naszego RTC czas oraz dat\u0119 i zapisuje j\u0105 do odpowiednich rejestr\u00f3w.<\/p>\n\n\n\n<p>3) Odczytu danych poprzez u\u017cycie zmiennej callendar_rt, np.;<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"c\" class=\"language-c\">uint8_t godzina, minuta;\ngodzina = callendar_rtc.hours;\nminuta = callendar_rtc.minutes;<\/code><\/pre>\n\n\n\n<p>Dla &#8222;wyci\u0105gni\u0119cia:&#8221; reszty danych dotycz\u0105cych czasu i\/lub daty post\u0119pujemy podobnie jak zosta\u0142o przedstawione w przyk\u0142adzie<\/p>\n\n\n\n<p>4) Zapisania\/zaktualizowania danych w RTC, poprzez wpisanie nowych danych do zmiennej callendar_rtc, np.:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"c\" class=\"language-c\">callendar_rtc.hours = 11;\ncallendar_rtc.minutes = 30;<\/code><\/pre>\n\n\n\n<p>Nast\u0119pnie nale\u017cy wys\u0142a\u0107 danej do uk\u0142adu RTC poprzez wywo\u0142anie funkcji:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:default decode:true\"><code lang=\"c\" class=\"language-c\">rtc_write_date();<\/code><\/pre>\n\n\n\n<p>W razie jakichkolwiek pyta\u0144, w\u0105tpliwo\u015bci piszcie u\u017cywaj\u0105c formularzu kontaktowego.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p><strong>Dodano 2 listopada 2016r.<\/strong><\/p>\n\n\n\n<p>Pliki biblioteki zosta\u0142y uzupe\u0142nione o mo\u017cliwo\u015b\u0107 konfiguracji przebiegu prostok\u0105tnego na wyj\u015bciu CLKOUT. Aby uaktywni\u0107 przebieg prostok\u0105tny nale\u017cy wywo\u0142a\u0107 funkcj\u0119:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">pcf8563p_set_clkout(freq);<\/code><\/pre>\n\n\n\n<p>gdzie jako parametr nale\u017cy poda\u0107 warto\u015b\u0107 \u017c\u0105danej cz\u0119stotliwo\u015bci. W celu u\u0142atwienia konfiguracji zosta\u0142y stworzone odpowiednie makra, kt\u00f3rych nazwa wskazuje na odpowiednio wybran\u0105 cz\u0119stotliwo\u015b\u0107:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">CLKOUT_32768HZ\t\/\/cz\u0119stotliwo\u015b\u0107 32.768kHz\nCLKOUT_1024HZ\t\/\/cz\u0119stotliwo\u015b\u0107 1.024kHz\nCLKOUT_32HZ\t\/\/cz\u0119stotliwo\u015b\u0107 32Hz\nCLKOUT_1HZ\t\/\/cz\u0119stotliwo\u015b\u0107 1Hz<\/code><\/pre>\n\n\n\n<p>wybrane makro, nale\u017cy przekaza\u0107 do wcze\u015bniejszej funkcji. Przyk\u0142adowo, gdy chcemy uzyska\u0107 przebieg o cz\u0119stotliwo\u015b\u0107 32Hz nale\u017cy wywo\u0142a\u0107 funkcj\u0119 z parametrami:<\/p>\n\n\n\n<pre class=\"wp-block-code lang:c decode:true\"><code lang=\"c\" class=\"language-c\">pcf8563p_set_clkout(CLKOUT_32HZ);<\/code><\/pre>\n\n\n\n<p>Nale\u017cy pami\u0119ta\u0107 o wcze\u015bniejszym zarejestrowaniu funkcji star,stop, write i read. W przypadku b\u0142\u0119d\u00f3w, powy\u017csza funkcja zwr\u00f3ci 0.<\/p>\n\n\n\n<p>Zapraszam r\u00f3wnie\u017c do pobierania plik\u00f3w:<\/p>\n\n\n\n<p>Plik g\u0142\u00f3wny:<\/p>\n\n\n\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link download-button aligncenter\" title=\"Wersja v1.1\" href=\"https:\/\/daniel.slask.pl\/m\/download\/610\/?tmstv=1788163884\" rel=\"nofollow\" id=\"download-link-610\" >\n\t<p>\n\t\tPobierz &ldquo;pcf8563p.c&rdquo;\t<\/p>\n\t<small>pcf8563p.c\t\t&ndash; Pobrano 773 razy\t\t&ndash; 6,75 KB<\/small>\n<\/a>\n\n\n\n<p>Plik nag\u0142\u00f3wkowy:<\/p>\n\n\n\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link download-button aligncenter\" title=\"Wersja v1.1\" href=\"https:\/\/daniel.slask.pl\/m\/download\/608\/?tmstv=1788163884&amp;version=v1-1\" rel=\"nofollow\" id=\"download-link-608\" >\n\t<p>\n\t\tPobierz &ldquo;pcf8563p.h&rdquo;\t<\/p>\n\t<small>pcf8563p.h\t\t&ndash; Pobrano 807 razy\t\t&ndash; 2,77 KB<\/small>\n<\/a>\n\n\n\n<p>Stare wersje:<\/p>\n\n\n\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link download-button aligncenter\" title=\"\" href=\"https:\/\/daniel.slask.pl\/m\/download\/289\/?tmstv=1788163884\" rel=\"nofollow\" id=\"download-link-289\" >\n\t<p>\n\t\tPobierz &ldquo;pcf8563p.c&rdquo;\t<\/p>\n\t<small>pcf8563p.c\t\t&ndash; Pobrano 655 razy\t\t&ndash; 6,82 KB<\/small>\n<\/a>\n\n\n\n<a  data-e-Disable-Page-Transition=\"true\" class=\"download-link download-button aligncenter\" title=\"\" href=\"https:\/\/daniel.slask.pl\/m\/download\/287\/?tmstv=1788163884\" rel=\"nofollow\" id=\"download-link-287\" >\n\t<p>\n\t\tPobierz &ldquo;pcf8563p.h&rdquo;\t<\/p>\n\t<small>pcf8563p.h\t\t&ndash; Pobrano 664 razy\t\t&ndash; 2,85 KB<\/small>\n<\/a>\n","protected":false},"excerpt":{"rendered":"<p>Przysz\u0142a kolej na prezentacj\u0119 biblioteki zegara RTC PCF8563p w\u0142asnego autorstwa. Uk\u0142ad PCF8563p jest zegarem czasu rzeczywistego (Real-Time Clock). Jest bratem dobrze znanego uk\u0142adu tej samej marki PCF8583p. Najwi\u0119ksza r\u00f3\u017cnica wyst\u0119puje w pod\u0142\u0105czeniu tych uk\u0142ad\u00f3w. PCF8563 nie posiada n\u00f3\u017cki adresowej &#8211;&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/daniel.slask.pl\/m\/biblioteka-dla-zegara-rtc-pcf8563p\/\">Wi\u0119cej<\/a><\/p>\n","protected":false},"author":1,"featured_media":307,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[7],"tags":[32,33,31,22],"views":2210,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2015\/10\/space-19070_640-e1445106189751.jpg","jetpack_shortlink":"https:\/\/wp.me\/pcPgV3-4w","_links":{"self":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/280"}],"collection":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/comments?post=280"}],"version-history":[{"count":21,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/280\/revisions"}],"predecessor-version":[{"id":1655,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/280\/revisions\/1655"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media\/307"}],"wp:attachment":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media?parent=280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/categories?post=280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/tags?post=280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}