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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-11-09T18:54:23+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=23413&amp;mode</id>
<entry>
<author><name><![CDATA[michael.873]]></name></author>
<updated>2020-11-09T18:54:23+01:00</updated>
<published>2020-11-09T18:54:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229748#p229748</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229748#p229748"/>
<title type="html"><![CDATA[Re: MCP23017 ODCZYT ZAPIS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229748#p229748"><![CDATA[
Udało się odczytać dane <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br />tak jak przypuszczałem funkcja do odbioru biała błąd i scalak na nią źle odpowiadał<br />[syntax=c]uint8_t mcp23017_read( uint8_t SLA, uint8_t ADDR) {<br /><br />uint8_t res = 0;<br />i2c_start();<br />i2c_write( SLA );<br />i2c_write( ADDR );<br />i2c_start();<br />i2c_write( SLA+1 );<br />res = i2c_read( NACK );<br />i2c_stop();<br /><br />return res;<br />}[/syntax]<br /><br />taka funkcja działa <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />dzięki za pomoc i pozdrawiam <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11107">michael.873</a> — 9 lis 2020, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michael.873]]></name></author>
<updated>2020-11-08T17:37:44+01:00</updated>
<published>2020-11-08T17:37:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229738#p229738</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229738#p229738"/>
<title type="html"><![CDATA[Re: MCP23017 ODCZYT ZAPIS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229738#p229738"><![CDATA[
Niestety dalej mi coś nie wychodzi<br /><br />Ustawiam PORTA jako wejście<br />[syntax=c]#include &quot;MK_I2C/mk_i2c.h&quot;<br />#include &quot;MK_LCD/mk_lcd44780.h&quot;<br /><br />#define I2C_KHZ400<br />#define MCP_ADDR0x40<br />#define PCF8574_LCD_ADDR0x4E<br /><br />#define IODIRA0x00<br />#define IODIRB0x01<br /><br />#define IPOLA0x02<br />#define IPOLB0x03<br /><br />#define GPINTENA0x04<br />#define GPINTENB0x05<br /><br />#define DEFVALA0x06<br />#define DEFVALB0x07<br /><br />#define INTCONA0x08<br />#define INTCONB0x09<br /><br />#define GPPUA0x0C<br />#define GPPUB0x0D<br /><br />#define INTFA0x0E<br />#define INTFB0x0F<br /><br />#define INTCAPA0x10<br />#define INTCAPB0x11<br /><br />#define GPIOA0x12<br />#define GPIOB0x13<br /><br />#define OLATA0x14<br />#define OLATB0x15<br /><br />void mcp23017_write( uint8_t SLA, uint8_t ADDR, uint8_t data ) {<br /><br />i2c_start();<br />i2c_write( SLA );<br />i2c_write( ADDR );<br />i2c_write( data );<br />i2c_stop();<br />}<br /><br />uint8_t mcp23017_read( uint8_t SLA, uint8_t ADDR) {<br /><br />uint8_t res = 0;<br />i2c_start();<br />i2c_write(SLA+1);<br />i2c_write( ADDR );<br />res = i2c_read( NACK );<br />i2c_stop();<br /><br />return res;<br />}<br /><br />uint8_t PIN_MCP;<br /><br />int main (void){<br /><br />// ustawienie prędkoci i2c<br />i2cSetBitrate( I2C_KHZ );<br /><br /><br />lcd_init();<br />lcd_LED( 1 );<br /><br />lcd_locate(0,0);<br />lcd_str_P( PSTR(&quot;TES&quot;));<br /><br /><br />_delay_ms(1000);<br /><br />// Ustawienie PORTA jako wejście<br />mcp23017_write( MCP_ADDR, IODIRA, 0xFF );<br />// Pull-up włączony<br />mcp23017_write( MCP_ADDR, GPPUA, 0xFF );<br /><br />while (1){<br /><br />// Odczyt PORTA<br />PIN_MCP = mcp23017_read( MCP_ADDR, GPIOA );<br />lcd_locate(0,0);<br />lcd_int(PIN_MCP);<br /><br />_delay_ms(10);<br /><br />}<br />};[/syntax]<br /><br />przyciski mam podłączone do GND i do nóżek scalaka MCP<br /><br />Próbowałem odczytać rejestr IODIRA zmieniałem go na 0x0F lub 0xF0 próbowałem różnych kombinacji i odczyt z układu wynosi zawsze 0xFF co na wyświetlaczu pokazuje i się jako 255<br />Wydaje mi się że problem jest w funkcji odczytującej  mcp23017_read tylko nie wiem jaki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11107">michael.873</a> — 8 lis 2020, o 17:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Draxter32]]></name></author>
<updated>2020-11-05T16:01:07+01:00</updated>
<published>2020-11-05T16:01:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229677#p229677</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229677#p229677"/>
<title type="html"><![CDATA[Re: MCP23017 ODCZYT ZAPIS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229677#p229677"><![CDATA[
<div class="quotetitle">michael.873 napisał(a):</div><div class="quotecontent"><br />Witam Wszystkich<br /><br />Mam problem z układem MCP23017<br />chodzi o to ze nie wiem jak odczytać stany PINÓW w układzie<br /></div><br /><br />Aby odczytać stany pinów w układzie należ ustawić rejestr kierunku IODIR w tryb Output = '0' dla danego Pinu. Stan na danym wyprowadzeniu należy odczytać z rejestru GPIO, gdzie wartość 1 oznacza ustanowiony bit, logiczny poziom wysoki na pinie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8185">Draxter32</a> — 5 lis 2020, o 16:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michael.873]]></name></author>
<updated>2020-11-04T22:07:32+01:00</updated>
<published>2020-11-04T22:07:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229669#p229669</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229669#p229669"/>
<title type="html"><![CDATA[MCP23017 ODCZYT ZAPIS]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23413&amp;p=229669#p229669"><![CDATA[
Witam Wszystkich<br /><br />Mam problem z układem MCP23017<br />chodzi o to ze nie wiem jak odczytać stany PINÓW w układzie <br />o ile zapis do układu mi sie udaje to niestety odczyt nie bardzo <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br />napisałem programik który ma za zadanie na 4 młodszych bitach porty A układu ustawić wyjście  i ma do niego diody podpięte katodą <br />a na 4 starszych mam przyciski i jak nacisnę pierwszy guzik to ma mi się zaświecić pierwsza dioda i tak dalej niestety tak nie jest i nie wiem co ustawiam źle <br />zapis mi wychodzi i jak odpowiedni bit ustawię na 0 to diodka się zaświeca czyli komunikacja jest OK<br />[syntax=c]#include &quot;MK_I2C/mk_i2c.h&quot;<br /><br />#define I2C_KHZ400<br />#define MCP_ADDR0x40<br />#define PCF8574_LCD_ADDR0x4E<br /><br />//Kontroluje kierunek wejścia/wyjścia danych.<br />//Gdy bit jest ustawiony, odpowiadający mu pin staje się<br />//Wejście. Gdy bit jest czysty, odpowiadający mu pin<br />//staje się wyjściem.<br />//1 = Pin jest skonfigurowany jako wejście.<br />//0 = Pin jest skonfigurowany jako wyjście.<br />#define IODIRA0x00<br />#define IODIRB0x01<br /><br />//Rejestr ten pozwala użytkownikowi na konfigurację polaryzacji na<br />//odpowiednich bitów portu GPIO.<br />//Jeśli bit jest ustawiony, odpowiadający mu bit rejestru GPIO będzie<br />//odzwierciedlać odwróconą wartość na sworzniu<br />//1 = Bit rejestru GPIO odzwierciedla przeciwny stan logiczny pinu wejściowego.<br />//0 = Bit rejestru GPIO odzwierciedla ten sam stan logiczny pinu wejściowego.<br />#define IPOLA0x02<br />#define IPOLB0x03<br /><br />//REJESTR KONTROLNY<br />//Rejestr GPINTEN kontroluje<br />//funkcja &quot;interrupt-on-change&quot; dla każdego sworznia.<br />//Jeśli bit jest ustawiony, odpowiedni pin jest włączony dla<br />//przerywać na zmianę. DEFVAL i INTCON<br />//Rejestry muszą być również skonfigurowane, jeśli jakieś piny są<br />//włączona możliwość przerywania na zmianę<br />//1 = Włącza pin wejściowy GPIO dla zdarzenia przerwania-zmiany.<br />//0 = Wyłącza pin wejściowy GPIO dla zdarzenia przerwania-zmiany.<br />#define GPINTENA0x04<br />#define GPINTENB0x05<br /><br />//DOMYŚLNY REJESTR PORÓWNAWCZY<br />//W CELU PRZERWANIA WYMIANY<br />//Domyślna wartość porównania jest konfigurowana w<br />//Rejestr DEFVAL. Jeśli jest włączony (przez GPINTEN i<br />//INTCON) w celu porównania z rejestrem DEFVAL, oraz<br />//przeciwna wartość na powiązanym trzpieniu spowoduje, że<br />//przerwać, by się pojawić.<br />//DEF&lt;7:0&gt;: Ustawia wartość porównawczą dla styków skonfigurowanych do zmiany przerwania-zmiany z domyślnych &lt;7:0&gt;.<br />//(Uwaga 1)<br />//Jeśli powiązany poziom pinów jest przeciwny do bitu rejestru, następuje przerwanie<br />#define DEFVALA0x06<br />#define DEFVALB0x07<br /><br />//REJESTR KONTROLI PRZERWANIA<br />//Rejestr INTCON kontroluje sposób, w jaki powiązany sworzeń<br />//wartość jest porównywana dla funkcji przerywania na zmianę.<br />//Jeśli bit jest ustawiony, porównywany jest odpowiedni pin I/O<br />//w stosunku do powiązanego z nim bitu w rejestrze DEFVAL. Jeśli a<br />//wartość bitu jest czysta, odpowiedni pin wejścia/wyjścia jest porównywany<br />//w stosunku do poprzedniej wartości<br />//1 = Wartość pinu jest porównywana z bitem powiązanym w rejestrze DEFVAL.<br />//0 = Wartość pinów porównywana jest z poprzednią wartością pinów.<br />#define INTCONA0x08<br />#define INTCONB0x09<br /><br /><br />#define IOCON0x0A<br /><br /><br />// REZYSTOR WCIĄGANIA<br />// REJESTR KONFIGURACJI<br />// Rejestr GPPU kontroluje rezystory wciągające dla<br />// szpilki portowe. Jeśli bit jest ustawiony i odpowiadający mu pin jest<br />// skonfigurowany jako wejście, odpowiedni pin portu jest<br />// wewnątrz podciągnięty z opornikiem 100 k.<br />// 1 = Pull-up włączony<br />// 0 = Pull-up wyłączony<br />#define GPPUA0x0C<br />#define GPPUB0x0D<br /><br />//PRZERYWAĆ REJESTR FLAG<br />//Rejestr INTF odzwierciedla warunek przerwania na<br />//piny portowe dowolnych pinów, które są włączane w celu przerwania przez<br />//Rejestr GPINTEN. Ustawiony bit wskazuje, że rejestr GPINTEN<br />//skojarzona szpilka spowodowała przerwanie.<br />//Ten rejestr jest tylko do odczytu. Wpisy do tego rejestru będą<br />//Zignorowany.<br />//1 = Pin spowodował przerwanie.<br />//0 = Przerwanie nie jest w toku<br />#define INTFA0x0E<br />#define INTFB0x0F<br /><br />//PRZERWAĆ PRZECHWYCONY REJESTR<br />//Rejestr INTCAP rejestruje wartość portu GPIO na poziomie<br />//czas, w którym nastąpiło przerwanie. Rejestr jest<br />//tylko do odczytu i jest aktualizowana tylko w przypadku przerwania.<br />//Występuje. Rejestr pozostaje niezmieniony do czasu<br />//przerwanie jest kasowane poprzez odczyt INTCAP lub GPIO.<br />//1 = Logika - wysoka<br />//0 = Logika-nisko<br />#define INTCAPA0x10<br />#define INTCAPB0x11<br /><br />//REGISTER PORTU<br />//Rejestr GPIO odzwierciedla wartość na porcie.<br />//Odczyt z tego rejestru powoduje odczytanie portu. Pisząc do tego<br />//rejestr modyfikuje rejestr zatrzasku wyjściowego (OLAT).<br />//1 = Logika - wysoka<br />//0 = Logika-nisko<br />#define GPIOA0x12<br />#define GPIOB0x13<br /><br />//REJESTR ZAPADEK WYJŚCIOWYCH (OLAT)<br />//Rejestr OLAT zapewnia dostęp do wyjścia<br />//zatrzaski. Odczyt z tego rejestru skutkuje odczytem<br />//OLAT, a nie sam port. Napis do tego rejestru<br />//modyfikuje zaczepy wyjściowe, które modyfikują sworznie<br />//skonfigurowane jako wyjścia.<br />//1 = Logika - wysoka<br />//0 = Logika-nisko<br />#define OLATA0x14<br />#define OLATB0x15<br /><br />uint8_t mpx;<br />uint8_t PIN_MCP;<br /><br />#define LED1 0<br />#define LED2 1<br />#define LED3 2<br />#define LED4 3<br /><br />#define KEY1 4<br />#define KEY2 5<br />#define KEY3 6<br />#define KEY4 7<br /><br />int main (void){<br /><br /><br />// ustawienie prędkoci i2c<br />i2cSetBitrate( I2C_KHZ );<br /><br />mpx |= (1&lt;&lt;LED1);<br />mpx |= (1&lt;&lt;LED2);<br />mpx |= (1&lt;&lt;LED3);<br />mpx |= (1&lt;&lt;LED4);<br />mpx |= (1&lt;&lt;KEY1);<br />mpx |= (1&lt;&lt;KEY2);<br />mpx |= (1&lt;&lt;KEY3);<br />mpx |= (1&lt;&lt;KEY4);<br /><br /><br />_delay_ms(15);<br /><br />// bit 0,1,2,3 jako wyjścia<br />// bit 4,5,6,7 jako wejścia<br />mcp23017_write( MCP_ADDR, IODIRA, 0xF0 );<br />// ustawienie wyjśc stan wysoki<br />mcp23017_write( MCP_ADDR, GPIOA, 0x0F );<br />// podciagniecie do VCC<br />mcp23017_write( MCP_ADDR, GPPUA, 0xF0 );<br /><br />while (1){<br /><br />PIN_MCP = mcp23017_read(MCP_ADDR, GPIOA);<br /><br />if (!(PIN_MCP &amp; (1&lt;&lt;KEY1))){<br />mpx &amp;= ~(1&lt;&lt;LED1);<br />} else mpx |= (1&lt;&lt;LED1);<br /><br />if (!(PIN_MCP &amp; (1&lt;&lt;KEY2))){<br />mpx &amp;= ~(1&lt;&lt;LED2);<br />} else mpx |= (1&lt;&lt;LED2);<br /><br />if (!(PIN_MCP &amp; (1&lt;&lt;KEY3))){<br />mpx &amp;= ~(1&lt;&lt;LED3);<br />} else mpx |= (1&lt;&lt;LED3);<br /><br />if (!(PIN_MCP &amp; (1&lt;&lt;KEY4))){<br />mpx &amp;= ~(1&lt;&lt;LED4);<br />} else mpx |= (1&lt;&lt;LED4);<br /><br />mcp23017_write( MCP_ADDR, GPIOA, mpx );<br />_delay_ms(10);<br />}<br />}[/syntax]<br /><br />przetłumaczyłem trochę pdf od MCP ale i tak nie wiem gdzie robię błąd używam biblioteki MK_I2C<br />jak robiłem testy na pcf2874 to wszystko mi działa ale coś ten MCP jest bardziej zaawansowany <br />[syntax=c]void mcp23017_write( uint8_t SLA, uint8_t ADDR, uint8_t data ) {<br /><br />i2c_start();<br />i2c_write( SLA );<br />i2c_write( ADDR );<br />i2c_write( data );<br />i2c_stop();<br />}<br /><br />uint8_t mcp23017_read( uint8_t SLA, uint8_t ADDR) {<br /><br />uint8_t res = 0;<br />i2c_start();<br />i2c_write(SLA+1);<br />i2c_write( ADDR );<br />res = i2c_read( NACK );<br />i2c_stop();<br /><br />return res;<br />}[/syntax]<br /><br />proszę o pomoc  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11107">michael.873</a> — 4 lis 2020, o 22:07</p><hr />
]]></content>
</entry>
</feed>