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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-19T13:56:55+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7199&amp;mode</id>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-06-19T13:56:55+01:00</updated>
<published>2014-06-19T13:56:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=85031#p85031</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=85031#p85031"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=85031#p85031"><![CDATA[
Ok. Problem rozwiązałem samodzielnie.<br />Napisałem proste menu do nastawiania nie tylko minut, ale całego zegara za pomocą dwóch przycisków. <br />Po wejściu do menu, nie występuje żadna funkcja obsługująca komunikację TWI, i wyłączone są przerwania od PCFa, następnie w chwili zatwierdzania uC przerabia nastawione cyfry na kod bcd a następnie wysyła do odpowiednich rejestrów układu i wszystko działa jak należy <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=2997">Demooon</a> — 19 cze 2014, o 13:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-06-16T18:59:19+01:00</updated>
<published>2014-06-16T18:59:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84692#p84692</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84692#p84692"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84692#p84692"><![CDATA[
Nigdy tego nie stosowałem ale<br />spróbuj wgrać malutki program testowy<br />wykorzystujący ten sposób i sprawdź czy działa<br />poprawnie. <br />Według mnie powinien ,nie widzę jakiegoś błędu<br />ale jak nie sprawdzisz w realu to nie będziesz miał<br />pewności.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 16 cze 2014, o 18:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-06-16T14:29:11+01:00</updated>
<published>2014-06-16T14:29:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84659#p84659</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84659#p84659"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84659#p84659"><![CDATA[
Sam pomysł na odczytanie aktualnych minut, ich inkrementację i ponowne wysłanie jest prawidłowy ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 16 cze 2014, o 14:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-06-15T09:47:32+01:00</updated>
<published>2014-06-15T09:47:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84509#p84509</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84509#p84509"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84509#p84509"><![CDATA[
Zegar po zapisie działa normalnie. <br />Trzymając przycisk cały czas wyświetlana liczba minut jedności przeskakuje prawidłowo, liczba minut dziesiątek wyświetla raz 9, raz 7 , ogólnie nie da się tego przewidzieć. jeśli puszczę przycisk i jedności i dziesiątki minut wyświetla 00, jeśli wcisne raz i puszczę to samo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 15 cze 2014, o 09:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-06-14T18:57:56+01:00</updated>
<published>2014-06-14T18:57:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84447#p84447</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84447#p84447"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84447#p84447"><![CDATA[
Mógłbyś opisać dokładniej co Ci się<br />pojawia na wyświetlaczy po naciśnięciu <br />przycisku i czy zegar po zapisie <br />działa normalnie.<br /><br />Pomijając oczywiście błędne wyświetlanie liczb<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 14 cze 2014, o 18:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-06-14T14:45:41+01:00</updated>
<published>2014-06-14T14:45:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84425#p84425</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84425#p84425"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84425#p84425"><![CDATA[
Ponawiam prośbę o pomoc  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 14 cze 2014, o 14:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-06-13T19:10:30+01:00</updated>
<published>2014-06-13T19:10:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84356#p84356</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84356#p84356"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=84356#p84356"><![CDATA[
Witam ponownie. Mam pewien problem z programem.<br />Po dodaniu trymera układ PCF  spieszy, bardzo nieznacznie ale jednak <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Chciałbym dodać do układu 2 przyciski dzięki którym będe mógł inkrementować lub dekrementować rejestr minut w układzie.<br />Po wcisnięciu przycisku jednak wyświetlają mi się liczby których natury nie potrafię zrozumieć. <br />Oto kod: bardzo proszę o jakąś wskazówkę / pomoc .<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#define ACK 1<br />#define NACK 0<br />#define ADDR 0xA0<br />// wyswietlacze<br />#define W1 (1&lt;&lt;PB0)<br />#define W2 (1&lt;&lt;PB1)<br />#define W3 (1&lt;&lt;PB2)<br />#define W4 (1&lt;&lt;PB3)<br />// segmenty<br />#define A (1&lt;&lt;PA0)<br />#define B (1&lt;&lt;PA1)<br />#define C (1&lt;&lt;PA2)<br />#define D (1&lt;&lt;PA3)<br />#define E (1&lt;&lt;PA4)<br />#define F (1&lt;&lt;PA5)<br />#define G (1&lt;&lt;PA6)<br />// przyciski<br />#define PLUS (1&lt;&lt;PD6)<br />#define MINUS (1&lt;&lt;PD5)<br />// makra wcisnietych przyciskow<br />#define PLUSON !(PIND &amp; PLUS)<br />#define MINUSON !(PIND &amp; MINUS)<br />// ledy<br />#define LED1 (1&lt;&lt;PC6)<br />#define LED2 (1&lt;&lt;PC7)<br />// deklaracje funkcji<br />uint8_t pluswcisniety(void);<br />uint8_t minuswcisniety(void);<br />// tablica przechowująca znaki wyswietlacza w kolejnosci od 0 do 9<br /><br />uint8_t cyfry&#91;10&#93; = { (A | B | C | D | E | F),<br />(B | C),<br />(A | B | G | D | E),<br />(A | B | C | D | G),<br />(B | C | F | G),<br />(A | C | D | F | G),<br />(A | C | D | E | F | G),<br />(A | B | C | F),<br />(A | B | C | D | E | F | G),<br />(A | B | C | D | F | G),};<br /><br />volatile uint8_t numer1;<br />volatile uint8_t numer2;<br />volatile uint8_t numer3;<br />volatile uint8_t numer4;<br />uint8_t odczytana;<br />uint8_t zapis&#91;4&#93;;<br />volatile uint8_t odczyt&#91;2&#93;;<br />uint8_t sekundy=00;<br />uint8_t minuty=12;<br />uint8_t godziny=17;<br />volatile uint8_t int0_flag;<br /><br />// funkcje sprzętowej obsługi I2C<br />void TWI_start(void) {<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTA);<br />while (!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br />void TWI_stop(void) {<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO);<br />while (TWCR&amp;(1&lt;&lt;TWSTO));<br />}<br />void TWI_write(uint8_t bajt) {<br />TWDR=bajt;<br />TWCR=(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN);<br />while (!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br />uint8_t TWI_read(uint8_t ack) {<br />TWCR = (1&lt;&lt;TWINT)|(ack&lt;&lt;TWEA)|(1&lt;&lt;TWEN);<br />while ( !(TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br />void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf ) {<br /><br />TWI_start();<br />TWI_write(SLA);<br />TWI_write(adr);<br />while (len--) TWI_write(*buf++);<br />TWI_stop();<br />}<br />void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf) {<br /><br />TWI_start();<br />TWI_write(SLA);<br />TWI_write(adr);<br />TWI_start();<br />TWI_write(SLA + 1);<br />while (len--) *buf++ = TWI_read( len ? ACK : NACK );<br />TWI_stop();<br />}<br /><br />// funkcje użytkowe<br />uint8_t dec2bcd(uint8_t dec){<br />return ((dec/10)&lt;&lt;4)|(dec%10);<br />}<br />uint8_t bcd2dec_dziesiatki(uint8_t bcd) {<br />return ((bcd&gt;&gt;4)&amp; 0x0F);<br />}<br /><br />uint8_t bcd2dec_jednosci(uint8_t bcd) {<br />return ((bcd)&amp; 0x0F);<br />}<br />uint8_t bcd2dec(uint8_t bcd) {<br />    return ((((bcd) &gt;&gt; 4) &amp; 0x0F) * 10) + ((bcd) &amp; 0x0F);<br />}<br /><br /><br />int main(void) {<br />DDRB |= W1 | W2 | W3 | W4; // anody wyświetlaczy jako wyjście<br />PORTB |= W1 | W2 | W3 | W4;  // stan wysoki na wyswietlaczach ( wszystkie wyłączone)<br />    DDRA |= 0xFF; // cały PORT A (segmenty) jako wyjście<br />    DDRC |=LED1|LED2; //  pin Ledów jako wyjscie<br />    PORTC |=LED1|LED2; // stan wysoki na Ledach (wyłączony)<br />    DDRD &amp;=~(1&lt;&lt;PD2); // INT0 wejscie<br />    PORTD |=(1&lt;&lt;PD2); // podciagniete do Vcc<br />    DDRD &amp;= ~(PLUS|MINUS) ;// przyciski jako wejscia<br />    PORTD |= PLUS|MINUS; // podciagniete wewnetrznie do vcc<br /><br /> // konfiguracja timera dla wyswietlacza<br />TCCR0|= (1&lt;&lt;WGM01)|(1&lt;&lt;CS00)|(1&lt;&lt;CS02); // tryb CTC, preskaler 1024<br />OCR0=39;<br />TIMSK=(1&lt;&lt;OCIE0); // zezwolenie na przerwanie Compare Match<br />sei();  // globalne włączenie przerwań<br /><br />// Przerwanie INT0 od PCF8583<br />MCUCR |= (1&lt;&lt;ISC00);// wyzwalanie zboczem narastającym lub opadajacym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br />zapis&#91;0&#93;=0;<br />zapis&#91;1&#93;=dec2bcd(sekundy);<br />zapis&#91;2&#93;=dec2bcd(minuty);<br />zapis&#91;3&#93;=dec2bcd(godziny);<br />    TWI_write_buf(ADDR, 0x01,4,zapis);<br />TWI_write_buf(ADDR, 0x08,1,0b10001010); // przerwanie co 1s od układu<br /><br /><br /><br />while(1)<br />{<br /><br /><br />if(int0_flag)<br />{<br />TWI_read_buf(ADDR,0x03,2,odczyt);<br />int0_flag=0;<br />}<br /><br /><br />if(pluswcisniety())<br />{<br />odczytana=bcd2dec(odczyt&#91;0&#93;);<br />odczytana++;<br />odczyt&#91;0&#93;=dec2bcd(odczytana);<br />TWI_write_buf(ADDR, 0x03,1,odczyt&#91;0&#93;);<br />}<br /><br />if(minuswcisniety())<br />{<br /><br />}<br />numer4=bcd2dec_jednosci(odczyt&#91;0&#93;);<br />numer3=bcd2dec_dziesiatki(odczyt&#91;0&#93;);<br />numer2=bcd2dec_jednosci(odczyt&#91;1&#93;);<br />numer1=bcd2dec_dziesiatki(odczyt&#91;1&#93;);<br /><br />}<br /><br /><br />}<br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint8_t licznik = 1;<br /><br />PORTB = ~licznik;<br /><br />if (licznik == 1)<br />PORTA = ~(cyfry&#91;numer1&#93;);<br />else if (licznik == 2)<br />PORTA = ~(cyfry&#91;numer2&#93;);<br />else if (licznik == 4)<br />PORTA = ~(cyfry&#91;numer3&#93;);<br />else if (licznik == 8)<br />PORTA = ~(cyfry&#91;numer4&#93;);<br /><br />licznik &lt;&lt;= 1;<br />if (licznik &gt; 8)<br />licznik = 1;<br /><br />}<br /><br />ISR(INT0_vect)<br />{<br />int0_flag=1;  // ustawienie flagi<br />// zmiana stanu diod sekundowych<br />PORTC^=LED1;<br />PORTC^=LED2;<br />}<br /><br /><br />// funkcje eliminujące zjawisko drgania styków<br />uint8_t pluswcisniety(void) {<br />if (PLUSON) {<br />_delay_ms(80);<br />if (PLUSON)<br />return 1;<br />}<br /><br />return 0;<br />}<br /><br />uint8_t minuswcisniety(void) {<br />if (MINUSON) {<br />_delay_ms(80);<br />if (MINUSON)<br />return 1;<br />}<br /><br />return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 13 cze 2014, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-05-31T17:30:19+01:00</updated>
<published>2014-05-31T17:30:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82919#p82919</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82919#p82919"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82919#p82919"><![CDATA[
Bardzo dobrze, ale można jeszcze lepiej. Tutaj akurat odczyt trwa bardzo krótko, ale mimo wszystko...<br />Można zrobić jeszcze inaczej:<br />Powołujemy do życia zmienną np:<br /><br />[syntax=c]uint8_t czytaj;[/syntax]<br /><br />W przerwaniu robimy tak:<br />[syntax=c]czytaj = 1;[/syntax]<br /><br />W w pętli while(1):<br />[syntax=c]if (czytaj) { //sprawdzamy czy flaga (zmienna) czytaj jest różna od zera<br /><br />//<br />// tutaj odczyt z PCF'a<br />//<br /><br />czytaj = 0; //zerujemy flagę odczytu. Zostanie ustawiona przy ponowny wejściu w przerwanie.<br /><br />} // koniec sprawdzania flagi czytaj[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 31 maja 2014, o 17:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-05-31T17:22:16+01:00</updated>
<published>2014-05-31T17:22:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82918#p82918</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82918#p82918"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82918#p82918"><![CDATA[
Racja, przeniosłem funkcję odczytu do obsługi przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 31 maja 2014, o 17:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-05-31T16:48:21+01:00</updated>
<published>2014-05-31T16:48:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82917#p82917</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82917#p82917"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82917#p82917"><![CDATA[
Nie, chodzi mi o to, że w Twoim kodzie dokonujesz nieustannych operacji odczytu z PCF przez magistralę I2C. Są one w pętli while.<br />W zależności od prędkości magistrali I2C te operacje będą się odbywać kilka tysięcy razy na sekundę.<br /><br />Pomyśl czy nie lepiej jest odczyt czasu z PCF powiązać z przerwaniem INT0. Po co tysiące razy odczytywać z PCFa to samo. Przecież miedzy &quot;tyknięciami&quot; na INT nic się w jego rejestrach nie zmienia. Sygnał 1 Hz jest właśnie między innymi po to. Migać diodą można z samego PCFa, nie trzeba używać przerwania.<br /><br />Chyba, że zależy Ci na odczycie setnych sekund. Wtedy należy częściej dokonywać odczytu. Ale z projektu nie wynika byś zamierzał ich używać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 31 maja 2014, o 16:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-05-31T16:11:15+01:00</updated>
<published>2014-05-31T16:11:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82909#p82909</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82909#p82909"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82909#p82909"><![CDATA[
Ok, zadziałało. Jednak ustawiłem reakcję przerwania na obojętnie jakie zbocze na początku.  W przerwaniu zostawiłem tylko zmianę stanu. Dzięki za wskazówkę.<br /><br />Co do twojego pytania sq8dsr.<br />Chodzi ci o jednorazowe wpisanie danych do PCFa, a następnie korzystanie tylko z tego przerwania bez odczytu rejestrów ? w sensie w obsłudze przerwania inkrementować sekundy , jeśli większe od 60 inkrementować minuty itd. ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 31 maja 2014, o 16:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-05-31T16:02:36+01:00</updated>
<published>2014-05-31T16:02:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82906#p82906</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82906#p82906"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82906#p82906"><![CDATA[
Ma idealnie 50% <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=1589">sq8dsr</a> — 31 maja 2014, o 16:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-05-31T15:49:40+01:00</updated>
<published>2014-05-31T15:49:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82905#p82905</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82905#p82905"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82905#p82905"><![CDATA[
mam pomysł na diodę tz. aby zapalała<br />się przy różnuch zboczach sygnału na INT0<br /><br />po wejściu do przerwania zmień reakcję przerwania na przeciwne zbocze<br />dzięki temu uzyskasz zmianę co pół sekundy<br />tylko nie wiem czy wypełnienie sygnału z PCF-a ma 50%<br />i dioda może nierówno mrugać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 31 maja 2014, o 15:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-05-31T15:26:37+01:00</updated>
<published>2014-05-31T15:26:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82904#p82904</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82904#p82904"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82904#p82904"><![CDATA[
A czemu nie używasz przerwania od PCFa jako sygnału do odczytania czasu ?<br />Bo teraz to wiedzę, że odczyt odbywa się w sposób ciągły. <br />No chyba że zależy Ci na odczycie setnych sekundy. Bo PCF rejestr z setnymi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 31 maja 2014, o 15:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-05-31T14:35:25+01:00</updated>
<published>2014-05-31T14:35:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82900#p82900</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82900#p82900"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82900#p82900"><![CDATA[
Ok. Trochę to odwlekłem ze względu na nakład uczelnianych obowiązków ale w końcu ruszyłem.<br />Układ działa, zarówno zapisanie wartości do rejestrów, odczyt tych rejestrów jak i prawidłowe ich wyświetlenie.<br />Udało mi się nawet ustawić przerwania równo co 1s według noty PCFa.<br />Teraz czas na testy i udoskonalanie kodu a następnie budowa wspomnianej obudowy. Główna koncepcja została spełniona.<br /><br />Jeśli ktoś miałby jakieś koncepcje, poprawki co do kodu bardzo proszę o sugestie.<br />Narazie w przerwaniu dioda zmienia swój stan co 1s, ma ktoś pomysł jak zrobić aby zapalała się i gasła ? Jak wiadomo wszelke delaye odpadają.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#define ACK 1<br />#define NACK 0<br />#define ADDR 0xA0<br />// wyswietlacze<br />#define W1 (1&lt;&lt;PB0)<br />#define W2 (1&lt;&lt;PB1)<br />#define W3 (1&lt;&lt;PB2)<br />#define W4 (1&lt;&lt;PB3)<br />// segmenty<br />#define A (1&lt;&lt;PA0)<br />#define B (1&lt;&lt;PA1)<br />#define C (1&lt;&lt;PA2)<br />#define D (1&lt;&lt;PA3)<br />#define E (1&lt;&lt;PA4)<br />#define F (1&lt;&lt;PA5)<br />#define G (1&lt;&lt;PA6)<br />uint8_t cyfry&#91;10&#93; = { (A | B | C | D | E | F), // 0<br />(B | C), // 1<br />(A | B | G | D | E), // 2<br />(A | B | C | D | G), // 3<br />(B | C | F | G), // 4<br />(A | C | D | F | G), // 5<br />(A | C | D | E | F | G), // 6<br />(A | B | C | F), // 7<br />(A | B | C | D | E | F | G), // 8<br />(A | B | C | D | F | G),}; // 9<br /><br />volatile uint8_t numer1;<br />volatile uint8_t numer2;<br />volatile uint8_t numer3;<br />volatile uint8_t numer4;<br /><br />uint8_t zapis&#91;4&#93;;<br />uint8_t odczyt&#91;2&#93;;<br />uint8_t sekundy=00;<br />uint8_t minuty=25;<br />uint8_t godziny=15;<br /><br />// funkcje sprzętowej obsługi I2C<br />void TWI_start(void) {<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTA);<br />while (!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br />void TWI_stop(void) {<br />TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO);<br />while (TWCR&amp;(1&lt;&lt;TWSTO));<br />}<br />void TWI_write(uint8_t bajt) {<br />TWDR=bajt;<br />TWCR=(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN);<br />while (!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br />uint8_t TWI_read(uint8_t ack) {<br />TWCR = (1&lt;&lt;TWINT)|(ack&lt;&lt;TWEA)|(1&lt;&lt;TWEN);<br />while ( !(TWCR &amp; (1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br />void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf ) {<br /><br />TWI_start();<br />TWI_write(SLA);<br />TWI_write(adr);<br />while (len--) TWI_write(*buf++);<br />TWI_stop();<br />}<br />void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf) {<br /><br />TWI_start();<br />TWI_write(SLA);<br />TWI_write(adr);<br />TWI_start();<br />TWI_write(SLA + 1);<br />while (len--) *buf++ = TWI_read( len ? ACK : NACK );<br />TWI_stop();<br />}<br />// funkcje użytkowe<br />uint8_t dec2bcd(uint8_t dec){<br />return ((dec/10)&lt;&lt;4)|(dec%10);<br />}<br />uint8_t bcd2dec_dziesiatki(uint8_t bcd) {<br />return ((bcd&gt;&gt;4)&amp; 0x0F);<br />}<br /><br />uint8_t bcd2dec_jednosci(uint8_t bcd) {<br />return ((bcd)&amp; 0x0F);<br />}<br /><br /><br />int main(void) {<br />DDRB |= W1 | W2 | W3 | W4; // anody wyświetlaczy jako wyjście<br />PORTB |= W1 | W2 | W3 | W4;  // stan wysoki na wyswietlaczach ( wszystkie wyłączone)<br />    DDRA |= 0xFF; // cały PORT A (segmenty) jako wyjście<br />    DDRD |=(1&lt;&lt;PD6); //  pin Leda jako wyjscie<br />    PORTD |=(1&lt;&lt;PC6); // stan wysoki na Ledzie (wyłączony)<br />    DDRD &amp;=~(1&lt;&lt;PD2); // INT0 wejscie<br />    PORTD |=(1&lt;&lt;PD2); // podciagniete do Vcc<br /><br /> // konfiguracja timera dla wyswietlacza<br />TCCR0|= (1&lt;&lt;WGM01)|(1&lt;&lt;CS00)|(1&lt;&lt;CS02); // tryb CTC, preskaler 1024<br />OCR0=39;<br />TIMSK=(1&lt;&lt;OCIE0); // zezwolenie na przerwanie Compare Match<br />sei();  // globalne włączenie przerwań<br /><br />// Przerwanie INT0 od PCF8583<br />MCUCR |= (1&lt;&lt;ISC01);// wyzwalanie zboczem opadającym<br />GICR |= (1&lt;&lt;INT0);// odblokowanie przerwania<br /><br /><br />zapis&#91;0&#93;=0;<br />zapis&#91;1&#93;=dec2bcd(sekundy);<br />zapis&#91;2&#93;=dec2bcd(minuty);<br />zapis&#91;3&#93;=dec2bcd(godziny);<br />TWI_write_buf(ADDR, 0x01,4,zapis);<br />TWI_write_buf(ADDR, 0x08,1,0b10001010); // przerwanie co 1s od układu<br /><br /><br /><br />while(1)<br />{<br />TWI_read_buf(ADDR,0x03,2,odczyt);<br />numer4=bcd2dec_jednosci(odczyt&#91;0&#93;);<br />numer3=bcd2dec_dziesiatki(odczyt&#91;0&#93;);<br />numer2=bcd2dec_jednosci(odczyt&#91;1&#93;);<br />numer1=bcd2dec_dziesiatki(odczyt&#91;1&#93;);<br />}<br /><br /><br />}<br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint8_t licznik = 1;<br /><br />PORTB = ~licznik;<br /><br />if (licznik == 1)<br />PORTA = ~(cyfry&#91;numer1&#93;);<br />else if (licznik == 2)<br />PORTA = ~(cyfry&#91;numer2&#93;);<br />else if (licznik == 4)<br />PORTA = ~(cyfry&#91;numer3&#93;);<br />else if (licznik == 8)<br />PORTA = ~(cyfry&#91;numer4&#93;);<br /><br />licznik &lt;&lt;= 1;<br />if (licznik &gt; 8)<br />licznik = 1;<br /><br />}<br /><br />ISR(INT0_vect)<br />{<br />PORTD^=(1&lt;&lt;PD6); // zmiana stanu diody sekundowej<br />}[/syntax]<br /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/2997/1775be10c945c31e4e58ffa0cb25f79c.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2997/1775be10c945c31e4e58ffa0cb25f79c.JPG" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 31 maja 2014, o 14:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-05-27T20:36:55+01:00</updated>
<published>2014-05-27T20:36:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82571#p82571</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82571#p82571"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82571#p82571"><![CDATA[
Korzystając z wolnej chwili w trakcie czekania na przesyłkę z częściami zrobiłem główny moduł wyświetlacza który wpinany będzie w główną płytę. Na płytce same połączenia, wszystkie opory będą na głównej. W późniejszej fazie planuję zrobić czarną nakładkę na równi z wyświetlaczami aby tylko je było widać.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/2997/b5bc55d55b3712c72cda69af076b9087.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2997/b5bc55d55b3712c72cda69af076b9087.JPG" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 27 maja 2014, o 20:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2014-05-27T16:05:15+01:00</updated>
<published>2014-05-27T16:05:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82546#p82546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82546#p82546"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82546#p82546"><![CDATA[
<div class="quotetitle">Demooon napisał(a):</div><div class="quotecontent"><br />R = 400<br /></div><br /><br />400 będzie ok ale pomyśl o dodaniu jakiejś regulacj:) czasem w słoneczny dzień może kiepsko być widać, przynajmniej jak kupowałem ostatnio czerwone wyświetlacze i sobie zrobiłem taką regulację;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 27 maja 2014, o 16:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-05-27T07:45:21+01:00</updated>
<published>2014-05-27T07:45:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82507#p82507</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82507#p82507"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82507#p82507"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />.... i te rezystory 100R dla diod &quot;sekundowych&quot; mogą być za małe - będzie dawało<br /></div><br /><br />Zarówno dla tych sekundowych jak i ledów wyświetlacza R = 400 na schemacie  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Narazie to tylko suchy schemat, nic nie zmontowane. Właściwy opór dobiorę przy montażu aby uzyskać porządaną jasność.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 27 maja 2014, o 07:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-05-26T23:21:42+01:00</updated>
<published>2014-05-26T23:21:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82499#p82499</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82499#p82499"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82499#p82499"><![CDATA[
Rozważ, na płytce modułu z RTC, dodanie trymera w obwodzie rezonatora. Możesz go potrzebować do regulacji +/-.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 26 maja 2014, o 23:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-05-26T22:22:22+01:00</updated>
<published>2014-05-26T22:22:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82493#p82493</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82493#p82493"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82493#p82493"><![CDATA[
Witam<br />.... i te rezystory 100R dla diod &quot;sekundowych&quot; mogą być za małe - będzie dawało  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> .<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 26 maja 2014, o 22:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2014-05-26T21:52:28+01:00</updated>
<published>2014-05-26T21:52:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82487#p82487</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82487#p82487"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82487#p82487"><![CDATA[
Jeśli mógłbym Ci coś zasugerować, to rozważ zmianę PCF-a na DS3231. Pod tym adresem <!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2013/11/rtc-ds3231-najdokadniejszy-zegarek-na.html" >http://mirekk36.blogspot.com/2013/11/rt ... ek-na.html</a><!-- m --> znajdziesz poradnik Mirka gdzie dokładnie opisuje ten układ, również od strony programowej.<br />Piszę o tym dlatego że sam zbudowałem sobie zegarek na PCF-ie i zaczyna mnie on powoli wkurzać. A to ze względu na &quot;spóźnianie się&quot; lub &quot;spieszenie&quot;. Ja wiem że Mirek wielokrotnie wspominał o tym iż takie zachowanie PCF-a jest raczej normalne i że w np rocznym rozliczeniu czasu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> te &quot;spóźnienia&quot; i &quot;spieszenia&quot; w sumie wyjdą na zero. Jednak gdy ma się zegarek przed oczami a poniżej pasek w TV gdzie też jest godzina wyświetlana i widzi człowiek np trzy minuty różnicy w jedną lub drugą stronę, no to trochę to drażni <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Oczywiście to jest akurat w moim przypadku maksymalna różnica jak się pojawiła, najczęściej jet to około 1,5 minuty no ale nie zmienia to faktu że kłuje to w oczy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />No ale to tylko taka luźna sugestia, co by później teść Ci nie wypominał jak się spóźni na autobus <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <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=758">Marcin_G</a> — 26 maja 2014, o 21:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2014-05-26T16:28:46+01:00</updated>
<published>2014-05-26T16:28:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82431#p82431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82431#p82431"/>
<title type="html"><![CDATA[Re: PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82431#p82431"><![CDATA[
Bardzo fajny projekcik, schemat wydaje się ok, dorzuciłbym tak z czystej upierdliwści kondek 100nF przed 7805 i dał elektrolita za nim 100uF. ale myślę że tak jak teraz jest będzie też bardzo fajnie działać:) czekamy na efekty;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 26 maja 2014, o 16:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Demooon]]></name></author>
<updated>2014-05-26T16:15:30+01:00</updated>
<published>2014-05-26T16:15:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82429#p82429</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82429#p82429"/>
<title type="html"><![CDATA[PCF8583 + multipleksowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7199&amp;p=82429#p82429"><![CDATA[
Witam serdecznie forumowiczów. <br />Temat konfigurowania liczników, obsługi przerwań i inne podstawy mam już za sobą, więc postanowiłem zabrać się za swoją pierwszą w życiu komunikację i wymianę danych. Na początek wybrałem I2C(TWI) i jeden z popularnych układów RTC (PCF8583, ponieważ jest wspierany przez bluebooka)<br />Moim celem jest zegar czasu rzeczywistego pokazujący czas na 4 wyświetlaczach 7-segmentowych. gg-mm i między nimi 2 diody led, sygnalizujące odmierzoną sekundę.<br /><br />Koncepcja jest taka:<br />- moduł RTC z podtrzymaniem bateryjnym (CR2032) wpinany w główną płytę sterującą<br />- płytka z 4 wyświetlaczami wpinana 11 goldpinami prostopadle do głównej płyty sterującej<br />- miganie diod LED w przerwaniu zewnętrznym od układu RTC<br />- całość zasilana zasilaczem sieciowym o napięciu wyjściowym 9V<br />- przezroczysta obudowa z plexi<br />- układ ma być prezentem dla teścia więc w razie problemów liczę na waszą pomoc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Narazie zrobiłem schemat i czekam na przesyłkę z częściami. Będę sukcesywnie opisywał postępy prac w tym temacie.<br />Proszę o sprawdzenie poprawności schematu i trzymajcie kciuki.<br />Zegarek.pdf<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2997">Demooon</a> — 26 maja 2014, o 16:15</p><hr />
]]></content>
</entry>
</feed>