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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-01-07T00:28:18+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=14107&amp;mode</id>
<entry>
<author><name><![CDATA[jurekdsk]]></name></author>
<updated>2016-01-07T00:28:18+01:00</updated>
<published>2016-01-07T00:28:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149864#p149864</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149864#p149864"/>
<title type="html"><![CDATA[Re: Problem z RTC PCF 8583]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149864#p149864"><![CDATA[
Po zmianie  z A2 na A0 w linijce: &quot;#define PCF8583_ADDR 0xA0&quot; program działa poprawnie dziękuję za szybką pomoc, i przepraszam za umieszczenie kodu pozdrawiam! <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11716">jurekdsk</a> — 7 sty 2016, o 00:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-01-07T00:06:16+01:00</updated>
<published>2016-01-07T00:06:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149861#p149861</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149861#p149861"/>
<title type="html"><![CDATA[Re: Problem z RTC PCF 8583]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149861#p149861"><![CDATA[
Witam<br /><div class="quotetitle">jurekdsk napisał(a):</div><div class="quotecontent"><br />znanego wszystkim...<br /></div><br />...którzy mają BB - na forum nie należy wstawiać oryginalnych kodów z książki  <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 7 sty 2016, o 00:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jurekdsk]]></name></author>
<updated>2016-01-06T23:21:59+01:00</updated>
<published>2016-01-06T23:21:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149859#p149859</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149859#p149859"/>
<title type="html"><![CDATA[Problem z RTC PCF 8583]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14107&amp;p=149859#p149859"><![CDATA[
Witam wszystkich! Jestem początkującym programistą, więc staram się realizować programy w oparciu o Bluebooka i związane z nim biblioteki.<br />Próbuję zrealizować pomiar czasu rzeczywistego przy pomocy atmegi32A oraz układu RTC PCF 8583 który kupiłem:<br /><a href="https://obrazkiforum.atnel.pl/11716/5c485d265344f02409c9f602b41a4cf2.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/11716/5c485d265344f02409c9f602b41a4cf2.jpg" alt="Obrazek" /></a><br />W programie Eclipse użyłem znanego wszystkim kodu (zaktualizowanego):<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2010-09-07<br /> *       Autor: Mirosław Kardaś<br /> *<br /> *       Program korzysta ze sprzętowej obsługi I2C/TWI<br /> *       Umożliwia zapis danych do RTC oraz EEPROM a także<br /> *       oczyt z tych urządzeń<br /> *<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 /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />#define PCF8583_ADDR 0xA2<br /><br />#define _24C04_ADDR 0xA8<br /><br />// utworzenie typu u08, odpowiednika uint8_t aby kod był bardziej czytelny<br />typedef unsigned char  u08;<br />typedef unsigned short u16;<br /><br /><br /><br />uint8_t tekst&#91;&#93; = &quot;EEPROM&quot;;<br /><br />uint8_t bo&#91; sizeof(tekst)+1 &#93;; // bufor pomocniczy na odczyt z EEPROM<br /><br />volatile uint8_t int0_flag=1;// flaga zmieniana w przerwaniu i sprawdzana w pętli głównej<br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec);<br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd);<br /><br />// odczyt danych z pamięci EEPROM<br />void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br />// zapis danych do pamięci EEPROM<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf);<br /><br />int main(void) {<br /><br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7); // podświetlenie wyświetlacza LCD<br /><br />// Przerwanie INT0<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadającym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />PORTD |= (1&lt;&lt;PD2);// podciągnięcie pinu INT0 do VCC<br /><br /><br />// definiujemy sobie dla polepszenia czytelności programu typ wyliczeniowy<br />// wskazujący nam później na odpowiednie indeksy w tablicy (buforze)<br />enum {ss=1, mm, hh};<br />uint8_t bufor&#91;4&#93;;// rezerwacja bufora 4 bajty<br />uint8_t sekundy, minuty, godziny;<br /><br /><br />lcd_init();<br /><br />i2cSetBitrate(100);<br /><br />sei();<br /><br />lcd_str_P(PSTR(&quot;start...&quot;));<br /><br />// Ustawianie czasu na godzinę: 18:34:27<br /><br />bufor&#91;0&#93; = 0;// setne części sekundy<br />bufor&#91;1&#93; = dec2bcd(27);// sekundy<br />bufor&#91;2&#93; = dec2bcd(34);// minuty<br />bufor&#91;3&#93; = dec2bcd(20);// godziny<br />// zapis 4 bajtów z bufora pod adres 0x01 w pamięci RAM naszego RTC<br />TWI_write_buf( PCF8583_ADDR, 0x01, 4, bufor );<br /><br /><br />// zapis tekstu do pamięci EEPROM od adresu 253, dlatego aby tekst<br />// został zapisany w jednym i drugim banku pamięci<br />EI2C_write_buf( _24C04_ADDR, 253, sizeof(tekst), tekst );<br /><br />while(1) {<br /><br />if ( int0_flag ) {<br />//odczyt 4 bajtów do bufora od adresu 0x01 z pamięci RAM naszego RTC<br />TWI_read_buf( PCF8583_ADDR, 0x01, 4, bufor );<br /><br />sekundy = bcd2dec( bufor&#91;ss&#93; );<br />minuty = bcd2dec( bufor&#91;mm&#93; );<br />godziny = bcd2dec( bufor&#91;hh&#93; );<br /><br />// wyświetlenie czasu na LCD<br />lcd_locate(1,0);<br />if( godziny &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(godziny);<br />lcd_str(&quot;:&quot;);<br />if( minuty &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(minuty);<br />lcd_str(&quot;:&quot;);<br />if( sekundy &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(sekundy);<br /><br />// odczyt z EEPROM<br />EI2C_read_buf( _24C04_ADDR, 253, sizeof(tekst), bo );<br /><br />// wyświetlenie napisu z EEPROM na LCD<br />lcd_locate(0, 9);<br />lcd_str( (char*)bo );<br /><br />int0_flag=0;<br />}<br /><br />}<br />}<br /><br /><br />// procedura obsługi przerwania INT 0<br />ISR( INT0_vect ) {<br />int0_flag = 1;<br />}<br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />uint8_t dec2bcd(uint8_t dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}<br /><br /><br />// odczyt danych z pamięci EEPROM<br />void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {<br /><br />while (len--) {<br />TWI_start();<br />TWI_write(device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />TWI_write(subAddr);<br />TWI_start();<br />TWI_write(device + 1);<br />*buf++ = TWI_read( NACK );<br />TWI_stop();<br />subAddr++;<br />}<br /><br /><br />}<br /><br />// zapis danych do pamięci EEPROM<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf) {<br /><br />while (len--) {<br />TWI_start();<br />// ustawienie 9 bitu adresu pamięci EEPROM w ramach<br />// sprzętowego adresu urządzenia na pozycji bitu 1 (nr.2)<br />TWI_write( device | ((subAddr&gt;&gt;8)&lt;&lt;1) );<br />TWI_write(subAddr);<br /><br />TWI_write(*buf++);<br /><br />TWI_stop();<br />_delay_ms(5); // oczekiwanie na zapis<br />subAddr++;<br />}<br />}[/syntax]<br />Mój problem polega na tym, że na wyświetlaczu nie wyświetla się nic poza &quot;start...&quot; , jeśli zakomentuję tą linijkę:<br />&quot;TWI_read_buf( PCF8583_ADDR, 0x01, 4, bufor );&quot; to na ekranie pojawia się godzina która została zapisana do bufora.<br />Dodam jeszcze, że sprawdziłem diodą czy generowane są przerwania na int0 i dioda zapala się i gaśnie równo co sekundę.<br />Zmierzyłem również piny SDA i SCL na układzie RTC i każde z nich miało rezystancję 10K om względem pinu VCC.<br />Atmega32A i mój kwarc 16Mhz również ustawione w projekcie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11716">jurekdsk</a> — 6 sty 2016, o 23:21</p><hr />
]]></content>
</entry>
</feed>