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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-12-03T20:21:43+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21652&amp;mode</id>
<entry>
<author><name><![CDATA[uschak]]></name></author>
<updated>2018-12-03T20:21:43+01:00</updated>
<published>2018-12-03T20:21:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21652&amp;p=214292#p214292</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21652&amp;p=214292#p214292"/>
<title type="html"><![CDATA[Potencjometr cyfrowy MCP4231 - obsługa, komunikacja po SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21652&amp;p=214292#p214292"><![CDATA[
Witam,<br /><br />Przy małym projekcie musiałem obsłużyc rzeczony w temacie potencjometr cyfrowy MCP4231.<br />Komunikacja po sprzętowym SPI.<br /><br />Jestem początkującym, proszę o wyrozumiałość.<br /><br />Kod nie jest zoptymalizowany z powodu braku... czasu.<br /><br />Sugestie mile widziane.<br />Jeżeli ma ktos jakieś pomysły można usprawniać i się nimi dzielić.<br /><br />Może komuś się przyda.<br /><br /><br /><br />plik MCP4231.c :<br /><br />[syntax=c]/*<br /> *  MCP4231.c<br /> *  Nazwa projektu: Potencjometr_MCP4231_SPI<br /> *  Created on: 2 gru 2018<br /> *      Author: Uschak<br /> */<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;MCP4231.h&quot;<br />#include &quot;../SPI/SPI.h&quot;<br /><br />void MCP4231_sent_cmd(uint8_t cmd) //wysyłanie polecenia do MC4231, cmd = 1-potencjometr 1; 2-potencjometr 2; 4-TCON; 5-status register<br />  {<br />CS_LOW;<br />SPI_sent_uint8(cmd);<br />CS_HIGH;<br />  }<br /><br />void MCP4231_sent_value(uint8_t value, uint8_t pot) //wysłanie wartości do potencjometru, pot - nr potencjometru<br />  {<br />uint8_t buf&#91;2&#93;;<br />uint8_t a = 0;<br />pot &lt;&lt;= 4;<br />a |= pot;<br />buf&#91;0&#93; = a;<br />buf&#91;1&#93; = value;<br /><br />CS_LOW;<br />SPI_sent_buf(buf,2);<br />CS_HIGH;<br />  }<br /><br />void MCP4231_sent_value_percent(uint8_t value, uint8_t pot) // wysyłanie wartości w procentach do potencjometru, pot - nr potencjometru<br />  {<br />uint8_t buf&#91;2&#93;;<br />uint8_t a = 0;<br />pot &lt;&lt;= 4;<br />a |= pot;<br />value = value * 1.28;<br />buf&#91;0&#93; = a;<br />buf&#91;1&#93; = value;<br /><br />CS_LOW;<br />SPI_sent_buf(buf,2);<br />CS_HIGH;<br />  }<br /><br />void MCP4231_increment(uint8_t pot) // inkrementacja wartości, pot - nr potencjometru<br />  {<br />uint8_t a = 0x04;<br />pot &lt;&lt;= 4;<br />a |= pot;<br /><br />MCP4231_sent_cmd(a);<br />  }<br /><br />void MCP4231_decrement(uint8_t pot) //dekrementacja wartości, pot - nr potencjometru<br />  {<br />uint8_t a = 0x08;<br />pot &lt;&lt;= 4;<br />a |= pot;<br /><br />CS_LOW;<br />MCP4231_sent_cmd(a);<br />CS_HIGH;<br />  }<br /><br />uint8_t MCP_read_value(uint8_t pot) // odcztw aktualnej wartości potencjometru, pot = 1-potencjometr 1; 2-potencjometr 2; 4-TCON; 5-status register<br />  {<br />uint8_t a = 0x0C;<br />pot &lt;&lt;= 4;<br />a |= pot;<br /><br />CS_LOW;<br />SPI_sent_uint8(a);<br />uint8_t value = SPI_receive_uint8();<br />CS_HIGH;<br /><br />return value;<br />  }<br /><br /><br />#if USE_SHDN == 1<br />  {<br />void MCP4231_shutdown (void)<br />  {<br />PORT(SHDN_PORT) &amp;= ~(1&lt;&lt;SHDN);<br />  }<br />  }<br /><br />#endif[/syntax]<br /><br /><br />plik MCP4231.h:<br /><br />[syntax=c]/*<br /> * MCP4231.h<br /> *<br /> *  Created on: 2 gru 2018<br /> *      Author: Uschak<br /> */<br /><br />#ifndef MCP4231_MCP4231_H_<br />#define MCP4231_MCP4231_H_<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 />// Makra upraszczające dostęp do portów<br />// *** PORT<br />#define PORT(x) SPORT(x)<br />#define SPORT(x) (PORT##x)<br />// *** PIN<br />#define PIN(x) SPIN(x)<br />#define SPIN(x) (PIN##x)<br />// *** DDR<br />#define DDR(x) SDDR(x)<br />#define SDDR(x) (DDR##x)<br /><br />#define MOSI_PORT B<br />#define MOSI 5<br /><br />#define MISO_PORT B<br />#define MISO 6<br /><br />#define SCK_PORT B<br />#define SCK 7<br /><br />#define CS_PORT B<br />#define CS 4<br />#define CS_LOW PORT(CS_PORT) &amp;= ~(1&lt;&lt;CS)<br />#define CS_HIGH PORT(CS_PORT) |= (1&lt;&lt;CS)<br /><br />#define SHDN_PORT B<br />#define SHDN 0<br />#define USE_SHDN 0<br /><br />void MCP4231_sent_cmd(uint8_t cmd); //wysyłanie polecenia do MC4231<br />void MCP4231_sent_value(uint8_t value, uint8_t pot); //wysłanie wartości do potencjometru, pot - nr potencjometru<br />void MCP4231_sent_value_percent(uint8_t value, uint8_t pot); // wysyłanie wartości w procentach do potencjometru, pot - nr potencjometru<br />void MCP4231_increment(uint8_t pot); // inkrementacja wartości, pot - nr potencjometru<br />void MCP4231_decrement(uint8_t pot); //dekrementacja wartości, pot - nr potencjometru<br />uint8_t MCP_read_value(uint8_t pot);<br /><br />void MCP4231_shutdown (void); //odłączenie nóżek B potencjometrów 0 i 1; zwarcie odbieraków potencjometrów 0 i 1 do nóżek A<br /><br /><br /><br />#endif /* MCP4231_MCP4231_H_ */[/syntax]<br /><br /><br />Wszysktie pliki w załączniku.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8845">uschak</a> — 3 gru 2018, o 20:21</p><hr />
]]></content>
</entry>
</feed>