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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-06-12T09:45:51+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=50&amp;t=11969&amp;mode</id>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2015-06-12T09:45:51+01:00</updated>
<published>2015-06-12T09:45:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131558#p131558</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131558#p131558"/>
<title type="html"><![CDATA[Re: Biblioteka do MPC23017]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131558#p131558"><![CDATA[
Szanowni koledzy,  byłbym wdzięczny za jeszcze  trochę pomocy  przy  tłumaczeniu tej biblioteki. <br />Mam  w swoim projekcie  bibliotekę do  obsługi  TWI od Mirka  i  za jej pomocą  chcę  wykonywać  tę transmisję. <br />W kodzie  do  obsługi MPC23017 mam  taką oto funkcję:<br /><br />[syntax=c]uint8_t readRegister(uint8_t addr){<br />// read the current GPINTEN<br />Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);<br />wiresend(addr);<br />Wire.endTransmission();<br />Wire.requestFrom(MCP23017_ADDRESS | i2caddr, 1);<br />return wirerecv();<br />}[/syntax]<br /><br /><br />i wyczuwam, że  jest  to coś w rodzaju  Mirkowego  TWI_read()   Podobnie  brzmi funkcja  [syntax=c]void writeRegister(uint8_t regAddr, uint8_t regValue){<br />// Write the register<br />Wire.beginTransmission(MCP23017_ADDRESS | i2caddr);<br />wiresend(regAddr);<br />wiresend(regValue);<br />Wire.endTransmission();<br />}(uint8_t addr)[/syntax] Na  czas  dalszych rozwarzań przyjmijmy że można to tak zamienić. <br />I tak zamieniałem, aż do  czasu  napotkania  takiej   funkcji :<br /><br />[syntax=c]void updateRegisterBit(uint8_t pin, uint8_t pValue, uint8_t portAaddr, uint8_t portBaddr) {<br />uint8_t regValue;<br />uint8_t regAddr=regForPin(pin,portAaddr,portBaddr);<br />uint8_t bit=bitForPin(pin);<br />regValue = TWI_read(regAddr);<br /><br />// set the value for the particular bit<br />bitWrite(regValue,bit,pValue);<br /><br />writeRegister(regAddr,regValue);<br />}[/syntax]<br /><br />Chodzi  o jej przedostatnią i ostatnią  linijkę bitWrite(regValue,bit,pValue); writeRegister(regAddr,regValue);   gdzie podaje się dwa i trzy  argumenty: Adres bit  i  wartość . Kiedy  porównać  to  do  Mirkowej  funkcji  TWI_write, tam podaje  się tylko  jeden argument. Istnieje możliwość przekształcenia tych funkcji tak aby działały z  Mirka  biblioteką do  TWI?   Z  tego co  widzę  to   funkcja  którą  opisuję  wyżej  służy  do odczytu i porównania stanu portów  układu, i  jestem pewny, że  da się to  zrealizować przy  użyciu  Mirkowego  TWI, ale trochę wiedzy  mi  brakuje na temat tego  co się w  tych  bibliotekach  tak na prawdę dzieje, żeby móc  samemu to przekształcić.  Może ktoś  rozjaśnić?<br /><br />Cała  biblioteka w C++ do obsługi  układu  znajduje się tu: <!-- m --><a class="postlink" href="https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library" >https://github.com/adafruit/Adafruit-MC ... no-Library</a><!-- m --><br /><br /><br />Ech  Widzę  teraz, że   funkcja writeRegister potrzebuje wartości  i  adresu  a   funkcja  Mirka tylko jednej zmiennej o nazwie &quot;bajt&quot;. W takim razie  pytanie  będzie  brzmiało  Skąd  funkcja  TWI_write  od Mirka  wie  gdzie  zapisać ten bajt?  w  znaczeniu pod  jaki adres go skierować ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 12 cze 2015, o 09:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2015-06-10T12:43:28+01:00</updated>
<published>2015-06-10T12:43:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131407#p131407</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131407#p131407"/>
<title type="html"><![CDATA[Re: Biblioteka do MPC23017]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131407#p131407"><![CDATA[
Tak zgadza się mam plik nagłówka i źródła.  &quot;Static&quot; już dołączam. W sumie  cały  pierwszy kod  to  zawartość pliku nagłówka. W pliku źródłowym mam tylko funkcje. A mówiąc o konstruktorach, mówisz o tym co jest w  argumentach  funkcji? czy tak? Nie widziałem tam żadnych zmiennych do inicjalizowania więc  wydaje mi się że  powinno śmigać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Wielkie  dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 10 cze 2015, o 12:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jarosław J]]></name></author>
<updated>2015-06-10T11:34:35+01:00</updated>
<published>2015-06-10T11:34:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131400#p131400</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131400#p131400"/>
<title type="html"><![CDATA[Biblioteka do MPC23017]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11969&amp;p=131400#p131400"><![CDATA[
Hej W mojej Atmedze zabrakło portów  Chcę dołączyć układ MPC23017, który  może wspomóc dwoma 16bitowymi  potami po i2c.<br />Znalazłem bibliotekę  z Arduino obsługującą  ten ekspander, jednak  jest ona napisana  w C++  Chcę  przetłumaczyć tę bibliotekę dla kompilatora dla C  Z tego co widzę to jest ona prosta  ale jeśli mógłby ktoś wspomóc moje rozumowanie: <br /><br />Na początek  ten fragment  z klasami <br /><br /><br />[syntax=cpp]class Adafruit_MCP23017 {<br />public:<br />  void begin(uint8_t addr);<br />  void begin(void);<br /><br />  void pinMode(uint8_t p, uint8_t d);<br />  void digitalWrite(uint8_t p, uint8_t d);<br />  void pullUp(uint8_t p, uint8_t d);<br />  uint8_t digitalRead(uint8_t p);<br /><br />  void writeGPIOAB(uint16_t);<br />  uint16_t readGPIOAB();<br />  uint8_t readGPIO(uint8_t b);<br /><br />  void setupInterrupts(uint8_t mirroring, uint8_t open, uint8_t polarity);<br />  void setupInterruptPin(uint8_t p, uint8_t mode);<br />  uint8_t getLastInterruptPin();<br />  uint8_t getLastInterruptPinValue();<br /><br /> private:<br />  uint8_t i2caddr;<br /><br />  uint8_t bitForPin(uint8_t pin);<br />  uint8_t regForPin(uint8_t pin, uint8_t portAaddr, uint8_t portBaddr);<br /><br />  uint8_t readRegister(uint8_t addr);<br />  void writeRegister(uint8_t addr, uint8_t value);<br /><br />  /**<br />   * Utility private method to update a register associated with a pin (whether port A/B)<br />   * reads its value, updates the particular bit, and writes its value.<br />   */<br />  void updateRegisterBit(uint8_t p, uint8_t pValue, uint8_t portAaddr, uint8_t portBaddr);<br /><br />};[/syntax]<br /><br /> wydaje mi się że mogę uprościć bezkarnie usuwając klasy a  pozostawiając same deklaracje  jedna pod  drugą?<br /><br />Natomiast wszystkie  funkcje  tej biblioteki  posiadają taki zapis :<br />[syntax=c]uint8_t Adafruit_MCP23017::bitForPin(uint8_t pin){<br />return pin%8;<br />}[/syntax]<br /><br />którego  kompilator  nie toleruje  wysypując  &quot;syntax error&quot;<br /><br /><br />więc tutaj również usuwam klasę  pozostawiając   funkcję  w tej postaci <br />[syntax=c]uint8_t bitForPin(uint8_t pin){<br />return pin%8;<br />}[/syntax]<br /><br />Powiedzcie tylko czy to wystarczy  czy  usunięcie  atrybutów  klas  nie zemści się jakoś później w  pracy  biblioteki?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=786">Jarosław J</a> — 10 cze 2015, o 11:34</p><hr />
]]></content>
</entry>
</feed>