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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-07T22:14:30+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=42&amp;t=2603&amp;mode</id>
<entry>
<author><name><![CDATA[chemik0]]></name></author>
<updated>2015-11-07T22:14:30+01:00</updated>
<published>2015-11-07T22:14:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=144742#p144742</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=144742#p144742"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=144742#p144742"><![CDATA[
<div class="quotetitle">fredek napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">nixie napisał(a):</div><div class="quotecontent">A ja z uporem maniaka twierdzę, że linie A0-A2 są w tej chwili nie podłączone ani do VCC ani do GND....<br /></div><br /><br /><img src="http://fredek.dnsalias.com/atnel/TinyRTC_V1_1_mod.jpg" alt="Obrazek" /><br /><br />Sprawdziłem ten trop, linie A0..A2 połączone do GND przez rezystorki 1R0 (akurat takie mam) - sytuacja bez zmian, odczyt działa, zapis nie działa.<br /><br /><em><strong>Problem był z adresowaniem większych pamięci, już wszystko działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /></strong></em><br /><br />[syntax=c]// odczyt danych z pamięci EEPROM 24C32<br />void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf)<br />{<br /><br />while (len--)<br />{<br />TWI_start();// wysłanie sekwencji START<br />TWI_write( device ); // wysłanie bajtu adresu układu pamięci na magistrali<br />TWI_write( subAddr&gt;&gt;8 ); // wysłanie starszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_write( subAddr );// wysłanie młodszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_start();// wysłanie sygnału start<br />TWI_write( device + 1 );// wysłanie bajtu adresu układu pamięci na magistrali z bitem R/W w stanie wysokim (odczyt)<br />*buf++ = TWI_read( NACK );// odebranie bajtu danych + NACK<br />TWI_stop();// wysłanie sekwencji STOP<br />subAddr++;<br />}<br />}<br /><br />// zapis danych do pamięci EEPROM dla 24C32<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf)<br />{<br /><br />while (len--)<br />{<br />TWI_start();// wysłanie sekwencji START<br />TWI_write( device );// wysłanie bajtu adresu układu pamięci na magistrali<br />TWI_write( subAddr&gt;&gt;8 );// wysłanie starszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_write( subAddr );// wysłanie młodszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_write(*buf++);// wysłanie bajtu danych przeznaczonego do zapisu<br />TWI_stop();// wysłanie sekwencji STOP<br />_delay_ms(5); // oczekiwanie na zapis<br />subAddr++;<br />}<br />}[/syntax]<br /><br />Podziękowania dla <strong>rezasurmar</strong> za link i <strong>barney</strong> za konsultacje na tlenie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /></div><br /><br /><br />Witajcie,<br />Odgrzeję trochę kotlecika...<br />Próbuję uruchomić pamięć 24C32 na identycznym module, ale przy próbie odczytu program zatrzymuje się na linii<br />[syntax=c]*buf++ = TWI_read( NACK );// odebranie bajtu danych + NACK[/syntax]<br />Korzystam z bibliotek Mirka i funkcji powyżej.<br />Nie specjalnie ogarniam I2C więc bardzo proszę o podpowiedź co może być nie tak.<br /><br />Mój kod<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />// ----------------------------------------------<br />#include &quot;MK_USART/mkuart.h&quot;<br />#include &quot;komendy_at.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br />#include &quot;Clock/clock.h&quot;<br /><br /><br />//-----------------------------------------------<br /><br />uint8_t eep&#91;256&#93;;<br />uint8_t a&#91;&#93; = {1,3,45,33,55,26,75,23,43,0};<br /><br />int main(void)<br />{<br /><br />USART_Init(__UBRR);<br /><br />register_uart_str_rx_event_callback( parse_uart_data );<br /><br />sei();<br /><br />i2cSetBitrate(100);<br /><br />DS3231_init();<br /><br />EI2C_write_buf(0xA0, 10,sizeof(a),a );<br /><br />EI2C_read_buf(0xA0,10,10,eep);<br /><br /><br /><br />while(1)<br />{<br />UART_RX_STR_EVENT(bufor);<br />Clock();<br />}<br />}[/syntax]<br /><br />...magistrala I2C pracuje poprawnie ponieważ w tle chodzi sobie zegar z którego cały czas odczytuje dane.<br /><br /><br /><br /><strong>Panowie KOTLET się przypalił!<br />przez nieuwagę wziąłem moduł bez przylutowanych rezystorów na pinach adresowych</strong><br /><br />Sorka za zamieszanie <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=91">chemik0</a> — 7 lis 2015, o 22:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2013-03-21T18:23:04+01:00</updated>
<published>2013-03-21T18:23:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31262#p31262</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31262#p31262"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31262#p31262"><![CDATA[
<div class="quotetitle">nixie napisał(a):</div><div class="quotecontent"><br />A ja z uporem maniaka twierdzę, że linie A0-A2 są w tej chwili nie podłączone ani do VCC ani do GND....<br /></div><br /><br /><img src="http://fredek.dnsalias.com/atnel/TinyRTC_V1_1_mod.jpg" alt="Obrazek" /><br /><br />Sprawdziłem ten trop, linie A0..A2 połączone do GND przez rezystorki 1R0 (akurat takie mam) - sytuacja bez zmian, odczyt działa, zapis nie działa.<br /><br /><em><strong>Problem był z adresowaniem większych pamięci, już wszystko działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /></strong></em><br /><br />[syntax=c]<br />// odczyt danych z pamięci EEPROM 24C32<br />void EI2C_read_buf(u08 device, u16 subAddr, u16 len, u08 *buf)<br />{<br /><br />while (len--)<br />{<br />TWI_start();// wysłanie sekwencji START<br />TWI_write( device ); // wysłanie bajtu adresu układu pamięci na magistrali<br />TWI_write( subAddr&gt;&gt;8 ); // wysłanie starszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_write( subAddr );// wysłanie młodszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_start();// wysłanie sygnału start<br />TWI_write( device + 1 );// wysłanie bajtu adresu układu pamięci na magistrali z bitem R/W w stanie wysokim (odczyt)<br />*buf++ = TWI_read( NACK );// odebranie bajtu danych + NACK<br />TWI_stop();// wysłanie sekwencji STOP<br />subAddr++;<br />}<br />}<br /><br />// zapis danych do pamięci EEPROM dla 24C32<br />void EI2C_write_buf(u08 device, u16 subAddr, u16 len, u08 *buf)<br />{<br /><br />while (len--)<br />{<br />TWI_start();// wysłanie sekwencji START<br />TWI_write( device );// wysłanie bajtu adresu układu pamięci na magistrali<br />TWI_write( subAddr&gt;&gt;8 );// wysłanie starszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_write( subAddr );// wysłanie młodszego bajtu adresu komórki pamięci, spod której nastąpi odczyt<br />TWI_write(*buf++);// wysłanie bajtu danych przeznaczonego do zapisu<br />TWI_stop();// wysłanie sekwencji STOP<br />_delay_ms(5); // oczekiwanie na zapis<br />subAddr++;<br />}<br />}<br /><br />[/syntax]<br /><br />Podziękowania dla <strong>rezasurmar</strong> za link i <strong>barney</strong> za konsultacje na tlenie <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=919">fredek</a> — 21 mar 2013, o 18:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nixie]]></name></author>
<updated>2013-03-21T08:34:22+01:00</updated>
<published>2013-03-21T08:34:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31203#p31203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31203#p31203"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31203#p31203"><![CDATA[
A ja z uporem maniaka twierdzę, że linie A0-A2 są w tej chwili nie podłączone ani do VCC ani do GND. Na powiększeniu płytki widać jak piny są wyprowadzone do środkowych pół i zapewne muszą być zmostkowane z lewym albo prawym polem aby nadać układowi adres. Sprawdzałeś to miernikiem? Może w tej chwili dane są przypadkowo odczytywane bo nogi wiszą w powietrzu. <br /><br /><a href="http://forum.atnel.pl/_obrazki/o/358_9ad146c5d0ab5a8fab33767b1d352fcd.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/358_9ad146c5d0ab5a8fab33767b1d352fcd.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=358">nixie</a> — 21 mar 2013, o 08:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-03-20T23:25:25+01:00</updated>
<published>2013-03-20T23:25:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31190#p31190</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31190#p31190"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31190#p31190"><![CDATA[
PS. Była też jakaś poprawka na forum &quot;naszym&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />, no i są do pobrania aktualizacje kodów do i2c.<p>Statystyki: Napisane przez Gość — 20 mar 2013, o 23:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2013-03-20T23:21:45+01:00</updated>
<published>2013-03-20T23:21:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31189#p31189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31189#p31189"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31189#p31189"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />Korzystasz z bibliotek Mirka?, looknij sobie na stronę radzio.dxp.pl, nie wiem, czy dobrze kojarzę, ale były jakieś różnice między sterowaniem 24x04 wg mirkowych bibliotek, a np. większymi jak 24x32, czy 24x64 którego mam na pokładzie ATB-GLS, pewny nie jestem, ale po wymianie na 24c64 nie do końca mi chciało coś działać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Nie wgryzałem się w problem jeszcze <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />.<br /></div><br /><br />Tak, korzystam z bibliotek Mirka. Udało mi się praktycznie na 100% ustalić, że nie działa zapis, odczyt jest ok.<br />Dzięki, popatrzę na stronkę radzio.dxp.pl ale raczej już jutro, na dziś mam dosyć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=919">fredek</a> — 20 mar 2013, o 23:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-03-20T23:03:01+01:00</updated>
<published>2013-03-20T23:03:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31188#p31188</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31188#p31188"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31188#p31188"><![CDATA[
Korzystasz z bibliotek Mirka?, looknij sobie na stronę radzio.dxp.pl, nie wiem, czy dobrze kojarzę, ale były jakieś różnice między sterowaniem 24x04 wg mirkowych bibliotek, a np. większymi jak 24x32, czy 24x64 którego mam na pokładzie ATB-GLS, pewny nie jestem, ale po wymianie na 24c64 nie do końca mi chciało coś działać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />. Nie wgryzałem się w problem jeszcze <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />.<p>Statystyki: Napisane przez Gość — 20 mar 2013, o 23:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2013-03-20T22:26:55+01:00</updated>
<published>2013-03-20T22:26:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31180#p31180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31180#p31180"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31180#p31180"><![CDATA[
Jak zmienia się zmienna <strong>adres</strong> to są inne śmieci na wyświetlaczu.<br />Wygląda, że nie działa zapis do eepromu, działa tylko odczyt. <br /><br />[syntax=c]<br />if ( menu==3 ) // Menu EEPROM<br />{<br />lcd_cls();<br />lcd_str(&quot;(S3) EEPROM test&quot;);<br /><br />EI2C_read_buf( _24C32_ADDR, adres, sizeof(tekst), bo );<br /><br />// wyświetlenie napisu z EEPROM na LCD<br />lcd_locate(1, 0);<br />lcd_str( (char*)bo );<br />adres++;<br /><br />_delay_ms(2000);<br />}<br />[/syntax]<br /><br />Czyli mam teraz przesuwające się śmieci z eepromu.<br /><br />W pdf jest że:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">Write Protect (WP): AT24C32D/64D has a Write Protect pin that provides hardware data protection. The Write Protect<br />pin allows normal read/write operations when connected to ground (GND). When the Write Protect pin is connected to<br />VCC, the write protection feature is enabled and operates as shown in the following table.</div><br /><br />Na pinie 7 scalaka jest masę podłączona na stałe, czyli zapis powinien działać, wygląda to na problem z oprogramowaniem do zapisu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=919">fredek</a> — 20 mar 2013, o 22:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nixie]]></name></author>
<updated>2013-03-20T22:09:34+01:00</updated>
<published>2013-03-20T22:09:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31172#p31172</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31172#p31172"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31172#p31172"><![CDATA[
A mnie jednak intrygują te pola, zwłaszcza, że są po stronie linii A0-A2.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=358">nixie</a> — 20 mar 2013, o 22:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2013-03-20T22:04:01+01:00</updated>
<published>2013-03-20T22:04:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31169#p31169</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31169#p31169"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31169#p31169"><![CDATA[
<div class="quotetitle">nixie napisał(a):</div><div class="quotecontent"><br />Jesteś pewien, że masz prawidłowy adres? Sprawdzałeś jak są podłączone linie A1-A3. Na płytce widać jakby dodatkowe pola 1-3, czyżby do ustawiania adresu?<br /></div><br /><br />Adres pamięci wg pdf to:<br /> 1 0 1 0 A2 A1 A0 R/W<br />Na wyświetlaczu w dolnej linijce pojawiają się dane tylko dla A0, sprawdziłem A2, A4, A6, A8, AA, AE - dolna linijka czysta, także to raczej nie problem z adresem.<br />Komunikacja na I2C też działa bo w menu 2 są poprawne wskazania z zegarka.<br /><br />Coś nie tak jest z eeprom.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=919">fredek</a> — 20 mar 2013, o 22:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[nixie]]></name></author>
<updated>2013-03-20T22:04:24+01:00</updated>
<published>2013-03-20T21:54:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31163#p31163</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31163#p31163"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31163#p31163"><![CDATA[
Jesteś pewien, że masz prawidłowy adres? Sprawdzałeś jak są podłączone linie A0-A2. Na płytce widać jakby dodatkowe pola 1-3, czyżby do ustawiania adresu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=358">nixie</a> — 20 mar 2013, o 21:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2013-03-20T21:26:39+01:00</updated>
<published>2013-03-20T21:26:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31158#p31158</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31158#p31158"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31158#p31158"><![CDATA[
Czyli o ile dobrze rozumiem pod adresem D0 na magistrali jest DS1307 (i działa, sprawdzone) a 4k bajty eepromu powinno być pod A0 na magistrali I2C. <br />Fajnie, kupiłem RTC a  dodatkowo mam pamięć i to sporo, idę testować ten eeprom  <img src="https://forum.atnel.pl/images/smilies/icon_mrgreen.gif" alt=":mrgreen:" title="Pan Zielony" /> <br />Dzięki <strong>Rupus</strong> i <strong>rezasurmar</strong> za pomoc  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Dodano po testach:<br /><br />No chyba jest jakiś problem z odczytem z eepromu, zamiast napisu na dolnej linijce mam kwadraciki  <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> <br /><br /><img src="http://fredek.dnsalias.com/atnel/blad_eeprom.jpg" alt="Obrazek" /><br /><br />Kod programu trochę na kolanie klepany i testowo ale błędu nie widzę  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /> <br /><br />[syntax=c]<br />/*<br /> * main.c<br /> *<br /> *  Created on: 20-03-2013<br /> *       Autor: fredek<br /> */<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /><br />#define DS1307_ADDR 0xD0<br />#define _24C04_ADDR 0xA0<br /><br />typedef uint8_t u08;<br />typedef uint16_t u16;<br />typedef uint32_t u32;<br /><br />// obsługa klawiszy<br />#define KEY_PIN ((1&lt;&lt;PD3)|(1&lt;&lt;PD4)|(1&lt;&lt;PD5)|(1&lt;&lt;PD6))<br />#define KEY_S1 !(PIND &amp; (1&lt;&lt;PD3) ) // klawisz S1<br />#define KEY_S2 !(PIND &amp; (1&lt;&lt;PD4) ) // klawisz S2<br />#define KEY_S3 !(PIND &amp; (1&lt;&lt;PD5) ) // klawisz S3<br />#define KEY_S4 !(PIND &amp; (1&lt;&lt;PD6) ) // klawisz S4<br /><br />// LED do sygnalizacji nacinięcia klawisza<br />#define LED_PIN (1&lt;&lt;PB3)// LED na PB3<br />#define LED_ON PORTB |= LED_PIN// włączenie diody PB3<br />#define LED_OFF PORTB &amp;= ~LED_PIN// wyłączenie diody PB3<br /><br />// zmienne globalne<br /><br />// menu<br />u08 menu=0;// poziom menu<br />u08 cnt=90;// blokada odczytu klawiszy<br /><br />// ADC<br />u16 liczba;// wartosc ADC<br />u32 napiecie;// wartosc napięcia<br />u08 cz_d;// częsc dziesiętna<br />u16 cz_u;// częsc ułamkowa<br /><br />// EEPROM<br />u16 adres=100;// adres odczytu/zapisu do eeprom<br /><br />// konwersja liczby dziesiętnej na BCD<br />u08 dec2bcd(u08 dec);<br />// konwersja liczby BCD na dziesiętną<br />u08 bcd2dec(u08 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 /><br />DDRB |= LED_PIN;// ustawiamy kierunek wyjciowy dla PB3<br />DDRD &amp;= ~KEY_PIN;// kierunek pinów kalwiszy - wejściowy<br />PORTD |= KEY_PIN;// podciągnięcie pinów kalwiszy do VCC<br /><br />/* ustawienie TIMER0 dla F_CPU=8 MHz */<br />TCCR0 |= (1&lt;&lt;WGM01);/* tryb CTC */<br />TCCR0 |= (1&lt;&lt;CS02)|(1&lt;&lt;CS00);/* preskaler = 1024 */<br />OCR0 = 255;/* dodatkowy podział przez 255 (rej. przepełnienia) - ok 30 Hz */<br />TIMSK |= (1&lt;&lt;OCIE0);/* zezwolenie na przerwanie CompareMatch */<br /><br />// ============== konfiguracja ADC =======================<br />ADMUX |= (1&lt;&lt;REFS0);// AVCC with external capacitor at AREF pin<br />ADMUX |= (1&lt;&lt;MUX2)|(1&lt;&lt;MUX1)|(1&lt;&lt;MUX0);// ADC7/PA7<br />ADCSRA |= (1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1);// prescaler 64<br />ADCSRA |= (1&lt;&lt;ADEN);// wlaczenie ADC<br /><br />sei();// włączamy globalne przerwania<br /><br />i2cSetBitrate(100);// definiujemy szybkosc transmisji<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=0, mm, hh, day, date, month, year, control};<br />uint8_t bufor[8];// rezerwacja bufora 8 bajtów<br />uint8_t sekundy, minuty, godziny, dzien, miesiac;<br /><br />// Ustawianie RTC<br /><br />//bufor[0] = dec2bcd(00);// sekundy<br />//bufor[1] = dec2bcd(28);// minuty<br />//bufor[2] = dec2bcd(19);// godziny<br />//bufor[3] = dec2bcd(3);// day 1-7<br />//bufor[4] = dec2bcd(20);// date 1-31<br />//bufor[5] = dec2bcd(3);// month 1-12<br />//bufor[6] = dec2bcd(13);// year 00-99<br />//bufor[7] = 0b10010000;// control<br />//TWI_write_buf( DS1307_ADDR, 0x00, 8, bufor );<br /><br /><br />u08 tekst[] = &quot;Zapis eeprom&quot;;<br />u08 bo[ sizeof(tekst)+1 ]; // bufor pomocniczy na odczyt z EEPROM<br /><br />// zapis tekstu do pamięci EEPROM<br /><br />EI2C_write_buf( _24C04_ADDR, adres, sizeof(tekst), tekst );<br /><br />lcd_init();<br /><br />u08 znak_e[] = {0,0,14,17,31,16,14,2};// wzór znaku litery ę w pamięci RAM<br />u08 znak_l[] = {0,12,4,6,12,4,31,0};// wzór znaku litery ł w pamięci RAM<br />u08 znak_o[] = {4,32,14,17,17,17,14,0};// wzór znaku litery ó w pamięci RAM<br />lcd_defchar(0x80, znak_e);// załadowanie znaku do pamięci CGRAM<br />lcd_defchar(0x81, znak_l);// załadowanie znaku do pamięci CGRAM<br />lcd_defchar(0x82, znak_o);// załadowanie znaku do pamięci CGRAM<br /><br />lcd_cls();<br />lcd_str(&quot;Test: TinyRTC&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot; v 0.1 fredek&quot;);<br /><br />_delay_ms(3000);<br /><br />// Program główny<br /><br />while (1)<br />{<br /><br />if (menu==1) // Mierzymy napięcęcie na akumulatorku<br />{<br />ADCSRA |= (1&lt;&lt;ADSC);// odczyt ADC<br />while(ADCSRA &amp; (1&lt;&lt;ADSC));<br />liczba=ADCW;<br />}<br /><br />if ( !(menu) ) // Menu główne<br />{<br />lcd_cls();<br />lcd_str(&quot;  Menu g\x81\x82wne:&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot; ADC RTC EEPROM&quot;);<br />_delay_ms(1000);<br />}<br /><br />if ( menu==1 )// Menu ADC<br />{<br />lcd_locate(0,0);<br />lcd_str(&quot;(S1) Akumulator &quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot;Napi\x80&quot;);<br />lcd_str(&quot;cie &quot;);<br />napiecie=(liczba*5);// =ADC*5V<br />napiecie=(napiecie*1000/1023);// korekta dla 1024 kroków przetwornika<br />cz_d=napiecie/1000;// obliczenie częsci dziesiętnej<br />lcd_int(cz_d);<br />lcd_str(&quot;.&quot;);<br />cz_u=napiecie%1000;// obliczenie czesci ułamkowej<br />if (cz_u&lt;100) lcd_str(&quot;0&quot;);// dopisanie 0 po . jak częsc dziesiętna &lt;100<br />if (cz_u&lt;10) lcd_str(&quot;0&quot;);// dopisanie 0 po . jak częsc dziesiętna &lt;10<br />lcd_int(cz_u);<br />lcd_str(&quot; V   &quot;);<br />_delay_ms(500);<br />}<br /><br />if ( menu==2 )// Menu RTC<br />{<br />TWI_read_buf( DS1307_ADDR, 0x00, 7, bufor );<br /><br />//dane w buforze: ss, mm, hh, day, date, month, year, control<br /><br />sekundy = bcd2dec( bufor[ss] );<br />minuty = bcd2dec( bufor[mm] );<br />godziny = bcd2dec( bufor[hh] );<br />dzien = bcd2dec( bufor[date]);<br />miesiac = bcd2dec( bufor[month]);<br /><br />lcd_locate(0,0);<br />lcd_str(&quot;(S2) Data / czas&quot;);<br />lcd_locate(1,0);<br />if( dzien &lt; 10 ) lcd_str(&quot; &quot;);<br />lcd_int(dzien);<br />lcd_str(&quot;-&quot;);<br />if( miesiac &lt; 10 ) lcd_str(&quot;0&quot;);<br />lcd_int(miesiac);<br />lcd_str(&quot; / &quot;);<br />if( godziny &lt; 10 ) lcd_str(&quot; &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 />lcd_str(&quot;  &quot;);<br />_delay_ms(1000);<br />}<br /><br />if ( menu==3 ) // Menu EEPROM<br />{<br />lcd_cls();<br />lcd_str(&quot;(S3) EEPROM test&quot;);<br /><br />EI2C_read_buf( _24C04_ADDR, adres, sizeof(tekst), bo );<br /><br />// wyświetlenie napisu z EEPROM na LCD<br />lcd_locate(1, 0);<br />lcd_str( (char*)bo );<br /><br />_delay_ms(5000);<br />}<br /><br />if ( menu==4 ) // Menu 4<br />{<br />lcd_cls();<br />lcd_str(&quot;(S4) Menu 4&quot;);<br />_delay_ms(1000);<br /><br />}<br />}<br />}<br /><br />/* =========== PROCEDURA OBSŁUGI PRZERWANIA – COMPARE MATCH =============<br />   obsługa klawiszy S1..S4 ok 30 razy na sek,<br />   po wykryciu nacinięcia zmiana stanu menu<br />   i blokada odczytu na ok 1 sek (LED na PB3 do sygnalizacji) */<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />if ( !(cnt) ) // jeżeli cnt = 0 - brak blokady, sprawdzamy klawisze<br />{<br />LED_OFF;// wyłączamy LED PB3<br />if ( KEY_S1 )<br />{<br />if (menu==1) menu=0;<br />else menu=1;<br />cnt=30;// blokada odczytu na ok 1 sek<br />}<br />if ( KEY_S2 )<br />{<br />if (menu==2) menu=0;<br />else menu=2;<br />cnt=30;// blokada odczytu na ok 1 sek<br />}<br />if ( KEY_S3 )<br />{<br />if (menu==3) menu=0;<br />else menu=3;<br />cnt=30;// blokada odczytu na ok 1 sek<br />}<br />if ( KEY_S4 )<br />{<br />if (menu==4) menu=0;<br />else menu=4;<br />cnt=30;// blokada odczytu na ok 1 sek<br />}<br />}<br />else<br />{<br />cnt-=1;// blokada klawiszy - zmniejszamy tylko licznik<br />LED_ON;// włączamy LED PB3<br />}<br />}<br /><br /><br />// konwersja liczby dziesiętnej na BCD<br />u08 dec2bcd(u08 dec) {<br />return ((dec / 10)&lt;&lt;4) | (dec % 10);<br />}<br /><br />// konwersja liczby BCD na dziesiętną<br />u08 bcd2dec(u08 bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<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 />// 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 />}<br /><br /><br />[/syntax]<br /><br />Co robię źle ?<br /><br /> <span style="color: #FF0000">Kod umieszczamy w znacznikach [syntax=c] - Zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=919">fredek</a> — 20 mar 2013, o 21:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-03-20T19:00:55+01:00</updated>
<published>2013-03-20T19:00:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31141#p31141</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31141#p31141"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31141#p31141"><![CDATA[
Pewne źródła podają, że to zwykły eeprom 24c32 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Rupus był szybszy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<p>Statystyki: Napisane przez Gość — 20 mar 2013, o 19:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Rupus]]></name></author>
<updated>2013-03-20T18:56:21+01:00</updated>
<published>2013-03-20T18:56:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31140#p31140</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31140#p31140"/>
<title type="html"><![CDATA[Re: TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31140#p31140"><![CDATA[
AT24c32D<br /><!-- m --><a class="postlink" href="http://www.atmel.com/Images/doc8800.pdf" >http://www.atmel.com/Images/doc8800.pdf</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1057">Rupus</a> — 20 mar 2013, o 18:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[fredek]]></name></author>
<updated>2013-03-20T18:20:06+01:00</updated>
<published>2013-03-20T18:20:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31133#p31133</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31133#p31133"/>
<title type="html"><![CDATA[TinyRTC V1.1]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=2603&amp;p=31133#p31133"><![CDATA[
Kupiłem na ebay moduł RTC z układem DS1307Z (to ten układ po prawej stronie).<br />Wygląda to tak:<br /><img src="http://fredek.dnsalias.com/atnel/TinyRTC_V1_1.jpg" alt="Obrazek" /><br />Z modułem jako takim problemu nie ma, komunikacja działa prawidłowo, zegarek chodzi dobrze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Zastanawia mnie tylko co robi na płytce ten scalaczek po lewej czyli ATMLH048:<br /><img src="http://fredek.dnsalias.com/atnel/ATMLH048.jpg" alt="Obrazek" /><br />Google nic ciekawego mi nie znalazło  <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" /> <br />Ma może ktoś datasheet od tego układu lub schemat od całego modułu TinyRTC V1.1  <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=919">fredek</a> — 20 mar 2013, o 18:20</p><hr />
]]></content>
</entry>
</feed>