{"id":1265,"date":"2025-12-06T20:05:37","date_gmt":"2025-12-06T16:35:37","guid":{"rendered":"https:\/\/ilk.ir\/sahifa\/?p=1265"},"modified":"2025-12-06T20:07:34","modified_gmt":"2025-12-06T16:37:34","slug":"%da%a9%d9%86%d8%aa%d8%b1%d9%84-%d9%85%d8%a8%d8%af%d9%84-%d8%af%db%8c%d8%ac%db%8c%d8%aa%d8%a7%d9%84-%d8%a8%d9%87-%d8%a2%d9%86%d8%a7%d9%84%d9%88%da%af-mcp4922-%d8%af%d8%b1-rpi","status":"publish","type":"post","link":"https:\/\/ilk.ir\/sahifa\/world\/%d8%a7%d9%84%da%a9%d8%aa%d8%b1%d9%88%d9%86%db%8c%da%a9\/%da%a9%d9%86%d8%aa%d8%b1%d9%84-%d9%85%d8%a8%d8%af%d9%84-%d8%af%db%8c%d8%ac%db%8c%d8%aa%d8%a7%d9%84-%d8%a8%d9%87-%d8%a2%d9%86%d8%a7%d9%84%d9%88%da%af-mcp4922-%d8%af%d8%b1-rpi\/","title":{"rendered":"\u06a9\u0646\u062a\u0631\u0644 \u0645\u0628\u062f\u0644 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0628\u0647 \u0622\u0646\u0627\u0644\u0648\u06af MCP4922 \u062f\u0631 RPi"},"content":{"rendered":"\n<p>\u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0645\u0628\u062f\u0644 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0628\u0647 \u0622\u0646\u0627\u0644\u0648\u06af <strong>MCP4922<\/strong> \u06a9\u0647 \u06cc\u06a9 \u062a\u0631\u0627\u0634\u0647 \u062f\u0648 \u06a9\u0627\u0646\u0627\u0644\u0647 \u06f1\u06f2 \u0628\u06cc\u062a\u06cc \u0627\u0633\u062a\u060c \u0628\u0627 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a \u062f\u0631 \u0631\u0632\u0628\u0631\u06cc \u067e\u0627\u06cc\u060c \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0631\u0627\u06cc\u0648\u0631 \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631\u06cc SPI \u0644\u06cc\u0646\u0648\u06a9\u0633 (<code>spidev<\/code>) \u0627\u0633\u062a\u060c \u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u0627\u0646\u0646\u062f \u062a\u0631\u0627\u0634\u0647 \u0642\u0628\u0644\u06cc.<\/p>\n\n\n\n<p>\u062a\u0631\u0627\u0634\u0647 MCP4922 \u0637\u0628\u0642 \u062f\u06cc\u062a\u0627\u0634\u06cc\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0633\u0631\u0639\u062a \u06a9\u0644\u0627\u06a9 <strong>\u062a\u0627 \u06f2\u06f0 \u0645\u06af\u0627\u0647\u0631\u062a\u0632 (20 MHz)<\/strong> \u06a9\u0627\u0631 \u06a9\u0646\u062f. \u0645\u0627 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0631\u0639\u062a \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u062d\u062f\u0627\u06a9\u062b\u0631 \u06a9\u0627\u0631\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06f1. \u067e\u06cc\u0634\u200c\u0646\u06cc\u0627\u0632\u0647\u0627 \u0648 \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631\u06cc<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u0627\u0644\u0641) \u0641\u0639\u0627\u0644\u200c\u0633\u0627\u0632\u06cc SPI<\/h3>\n\n\n\n<p>\u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 SPI \u062f\u0631 \u0631\u0632\u0628\u0631\u06cc \u067e\u0627\u06cc \u0634\u0645\u0627 \u0641\u0639\u0627\u0644 \u0627\u0633\u062a (<code>sudo raspi-config<\/code> -&gt; Interface Options -&gt; SPI -&gt; Enable).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0628) \u0627\u062a\u0635\u0627\u0644\u0627\u062a MCP4922 \u0628\u0647 RPi 3<\/h3>\n\n\n\n<p>MCP4922 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u06cc\u0646\u200c\u0647\u0627\u06cc \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631\u06cc SPI0 \u0628\u0647 \u0631\u0632\u0628\u0631\u06cc \u067e\u0627\u06cc \u0645\u062a\u0635\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>\u067e\u0627\u06cc\u0647 MCP4922<\/strong><\/td><td><strong>\u0646\u0627\u0645 \u067e\u0627\u06cc\u0647<\/strong><\/td><td><strong>\u0627\u062a\u0635\u0627\u0644 \u0628\u0647 RPi (BCM)<\/strong><\/td><td><strong>\u067e\u06cc\u0646 \u0641\u06cc\u0632\u06cc\u06a9\u06cc RPi<\/strong><\/td><\/tr><\/thead><tbody><tr><td>9<\/td><td>SDI (Data In)<\/td><td>MOSI (GPIO10)<\/td><td>Pin 19<\/td><\/tr><tr><td>8<\/td><td>SCK (Clock)<\/td><td>SCLK (GPIO11)<\/td><td>Pin 23<\/td><\/tr><tr><td>7<\/td><td>$\\overline{\\text{CS}}$ (Chip Select)<\/td><td>CE0 (GPIO8)<\/td><td>Pin 24<\/td><\/tr><tr><td>1<\/td><td>VDD<\/td><td>3.3V<\/td><td>Pin 17<\/td><\/tr><tr><td>4<\/td><td>VSS<\/td><td>GND<\/td><td>Pin 6<\/td><\/tr><tr><td>10<\/td><td>$\\overline{\\text{LDAC}}$<\/td><td><strong>GND<\/strong> (\u0628\u0631\u0627\u06cc \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0641\u0648\u0631\u06cc)<\/td><td>Pin 9\/GND<\/td><\/tr><tr><td>11<\/td><td>$\\overline{\\text{SHDN}}$<\/td><td><strong>VDD\/3.3V<\/strong> (\u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 \u062f\u0627\u0626\u0645)<\/td><td>Pin 1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u0646\u06a9\u062a\u0647 \u0633\u0631\u0639\u062a:<\/strong> \u0628\u0631\u0627\u06cc <strong>\u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a<\/strong>\u060c \u067e\u06cc\u0646 $\\overline{\\text{LDAC}}$ (Load DAC) \u0631\u0627 \u0628\u0647 \u0632\u0645\u06cc\u0646 (GND) \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0647\u0631 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc \u06a9\u0647 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0631\u0648\u06cc \u062e\u0631\u0648\u062c\u06cc DAC (VOUT) \u0638\u0627\u0647\u0631 \u0634\u0648\u062f.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06f2. \u06a9\u062f \u0628\u0631\u0646\u0627\u0645\u0647 C (\u0628\u0627 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a)<\/h2>\n\n\n\n<p>\u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u06a9 \u0645\u0648\u062c <strong>\u067e\u0644\u0647\u200c\u0627\u06cc (Step Wave)<\/strong> \u06cc\u0627 <strong>\u0645\u0648\u062c \u062f\u0646\u062f\u0627\u0646\u200c\u0627\u0631\u0647\u200c\u0627\u06cc (Sawtooth)<\/strong> \u0633\u0627\u062f\u0647 \u0631\u0627 \u0628\u0627 \u0633\u0631\u0639\u062a \u0628\u0627\u0644\u0627 \u0631\u0648\u06cc <strong>\u06a9\u0627\u0646\u0627\u0644 A<\/strong> \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0645\u0627 \u0627\u0632 <code>printf<\/code> \u062f\u0627\u062e\u0644 \u062d\u0644\u0642\u0647 \u0627\u0635\u0644\u06cc \u067e\u0631\u0647\u06cc\u0632 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a \u0648\u0631\u0648\u062f\u06cc\/\u062e\u0631\u0648\u062c\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0639\u0627\u0645\u0644 (IO) \u0633\u0631\u0639\u062a \u0631\u0627 \u06a9\u0627\u0647\u0634 \u0646\u062f\u0647\u062f.<\/p>\n\n\n\n<p>\u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645 <code>dac_spi.c<\/code> \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n\n\n\n<p>C<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#<strong>include<\/strong> &lt;stdint.h&gt;\n#<strong>include<\/strong> &lt;unistd.h&gt;\n#<strong>include<\/strong> &lt;stdio.h&gt;\n#<strong>include<\/strong> &lt;stdlib.h&gt;\n#<strong>include<\/strong> &lt;fcntl.h&gt;\n#<strong>include<\/strong> &lt;sys\/ioctl.h&gt;\n#<strong>include<\/strong> &lt;linux\/types.h&gt;\n#<strong>include<\/strong> &lt;linux\/spi\/spidev.h&gt;\n\n\/\/ \u0645\u0633\u06cc\u0631 \u062f\u0633\u062a\u06af\u0627\u0647 SPI (\u0645\u0639\u0645\u0648\u0644\u0627\u064b CE0)\nstatic const char *device = \"\/dev\/spidev0.0\";\n\n\/\/ \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a \u06a9\u0644\u0627\u06a9 \u0628\u0631\u0627\u06cc MCP4922\n\/\/ 20,000,000 Hz = 20 MHz (\u0628\u0627\u06cc\u062f \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u0633\u06cc\u0645\u200c\u06a9\u0634\u06cc \u062e\u0648\u0628 \u0627\u0633\u062a)\nstatic uint32_t speed = 20000000; \n\n\/\/ \u062a\u0646\u0638\u06cc\u0645\u0627\u062a SPI\nstatic uint8_t mode = SPI_MODE_0; \/\/ MCP4922 \u0627\u0632 Mode 0 \u06cc\u0627 3 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f\nstatic uint8_t bits = 8;\nstatic uint16_t delay = 0;\n\n\/\/ \u062a\u0627\u0628\u0639 \u0633\u0627\u062e\u062a 16 \u0628\u06cc\u062a \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc MCP4922\n\/\/ control_word = D15 D14 D13 D12 (4 \u0628\u06cc\u062a \u06a9\u0646\u062a\u0631\u0644)\n\/\/ value = D11...D0 (12 \u0628\u06cc\u062a \u062f\u0627\u062f\u0647)\nuint16_t build_command(uint8_t channel, uint16_t value) {\n    uint16_t command = 0;\n\n    \/\/ 4 \u0628\u06cc\u062a \u06a9\u0646\u062a\u0631\u0644 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u0627\u0644 A:\n    \/\/ D15 (A\/B): 0 (\u06a9\u0627\u0646\u0627\u0644 A)\n    \/\/ D14 (BUF): 1 (\u0628\u0627\u0641\u0631 \u0634\u062f\u0647 - \u062a\u0648\u0635\u06cc\u0647 \u0634\u062f\u0647)\n    \/\/ D13 (GA):  0 (\u06af\u06cc\u0646 2x)\n    \/\/ D12 (SHDN): 1 (\u0641\u0639\u0627\u0644)\n    \/\/ \u0628\u06cc\u062a\u200c\u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644\n    command = (channel == 0) ? 0x3000 : 0xB000; \/\/ 0x3000 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u0627\u0644 A \u0628\u0627 Gain=2x\n\n    \/\/ \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 12 \u0628\u06cc\u062a \u062f\u0627\u062f\u0647\n    \/\/ \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0633\u0627\u062e\u062a\u0627\u0631 \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631\u06cc MCP4922\u060c 12 \u0628\u06cc\u062a \u062f\u0627\u062f\u0647 \u062f\u0631 \u0628\u06cc\u062a\u200c\u0647\u0627\u06cc D0-D11 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u062f.\n    \/\/ \u0627\u0645\u0627 \u062f\u0631 \u0627\u0631\u0633\u0627\u0644 SPI\u060c \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc 12 \u0628\u06cc\u062a\u06cc \u0628\u0627\u06cc\u062f \u062f\u0631 16 \u0628\u06cc\u062a \u0641\u0631\u0633\u062a\u0627\u062f\u0647 \u0634\u0648\u0646\u062f.\n    \/\/ \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c 12 \u0628\u06cc\u062a \u062f\u0627\u062f\u0647 \u0628\u0627\u06cc\u062f 4 \u0628\u06cc\u062a \u0628\u0647 \u0686\u067e \u0634\u06cc\u0641\u062a \u062f\u0627\u062f\u0647 \u0634\u0648\u0646\u062f \u062a\u0627 \u062c\u0627\u06cc Control Word \u0631\u0627 \u067e\u0631 \u06a9\u0646\u0646\u062f.\n    \n    \/\/ \u062a\u0635\u062d\u06cc\u062d: MCP4922 \u0627\u0632 16 \u0628\u06cc\u062a \u0628\u0647 \u0635\u0648\u0631\u062a \u067e\u06cc\u0648\u0633\u062a\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 4 \u0628\u06cc\u062a \u0627\u0648\u0644 \u0622\u0646 \u06a9\u0646\u062a\u0631\u0644 \u0627\u0633\u062a.\n    \/\/ Control Bits: A\/B, BUF, GA, SHDN\n    \/\/ Data Bits: D11, D10, ..., D0\n    \n    \/\/ 0x3000 = 0011 0000 0000 0000 (Control Word A, BUF=1, GA=2x, SHDN=1)\n    \/\/ \u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0647\u06cc\u0645 D11...D0 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0633\u0645\u062a \u0631\u0627\u0633\u062a Control Word \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u0645.\n    command |= (value &amp; 0x0FFF); \n    \n    \/\/ \u0627\u06a9\u0646\u0648\u0646 \u0628\u0627\u06cc\u062f \u0628\u0627\u06cc\u062a\u200c\u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0646\u062a\u0642\u0627\u0644 SPI \u062f\u0631\u0633\u062a \u06a9\u0646\u06cc\u0645 (16 \u0628\u06cc\u062a \u0631\u0627 \u0628\u0647 2 \u0628\u0627\u06cc\u062a \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u06cc\u0645)\n    \n    \/\/ \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u06af\u06cc\u060c \u0645\u0627 \u062f\u0631 \u062a\u0627\u0628\u0639 \u0627\u0631\u0633\u0627\u0644\u060c 2 \u0628\u0627\u06cc\u062a \u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u06cc\u06a9 uint16_t \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645.\n    return command;\n}\n\n\/\/ \u062a\u0627\u0628\u0639 \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647 16 \u0628\u06cc\u062a\u06cc \u0628\u0647 DAC\nint send_dac_data(int fd, uint16_t command) {\n    int ret;\n    \n    \/\/ \u062a\u0628\u062f\u06cc\u0644 16 \u0628\u06cc\u062a \u0628\u0647 2 \u0628\u0627\u06cc\u062a (Big Endian)\n    uint8_t tx&#91;2];\n    tx&#91;0] = (command &gt;&gt; 8) &amp; 0xFF; \/\/ \u0628\u0627\u06cc\u062a \u0628\u0627\u0644\u0627 (\u0634\u0627\u0645\u0644 Control Bits)\n    tx&#91;1] = command &amp; 0xFF;        \/\/ \u0628\u0627\u06cc\u062a \u067e\u0627\u06cc\u06cc\u0646 (\u0634\u0627\u0645\u0644 Data Bits)\n\n    struct spi_ioc_transfer tr = {\n        .tx_buf = (unsigned long)tx,\n        .rx_buf = 0, \/\/ \u0645\u0627 \u0627\u0632 DAC \u0686\u06cc\u0632\u06cc \u0646\u0645\u06cc\u200c\u062e\u0648\u0627\u0646\u06cc\u0645\n        .len = 2,    \/\/ \u0627\u0631\u0633\u0627\u0644 2 \u0628\u0627\u06cc\u062a\n        .delay_usecs = delay,\n        .speed_hz = speed,\n        .bits_per_word = bits,\n    };\n\n    \/\/ \u0627\u062c\u0631\u0627\u06cc \u0627\u0646\u062a\u0642\u0627\u0644 SPI\n    ret = ioctl(fd, SPI_IOC_MESSAGE(1), &amp;tr);\n    if (ret &lt; 1) {\n        perror(\"can't send spi message\");\n        return -1;\n    }\n    return 0;\n}\n\n\nint main(int argc, char *argv&#91;]) {\n    int fd;\n    \n    \/\/ \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u062f\u0633\u062a\u06af\u0627\u0647 SPI\n    fd = open(device, O_RDWR);\n    if (fd &lt; 0) {\n        perror(\"can't open device\");\n        return 1;\n    }\n\n    \/\/ \u062a\u0646\u0638\u06cc\u0645 \u0645\u062f\n    if (ioctl(fd, SPI_IOC_WR_MODE, &amp;mode) == -1) {\n        perror(\"can't set spi mode\");\n        return 1;\n    }\n\n    \/\/ \u062a\u0646\u0638\u06cc\u0645 \u0637\u0648\u0644 \u06a9\u0644\u0645\u0647\n    if (ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &amp;bits) == -1) {\n        perror(\"can't set bits per word\");\n        return 1;\n    }\n\n    \/\/ \u062a\u0646\u0638\u06cc\u0645 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a\n    if (ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &amp;speed) == -1) {\n        perror(\"can't set max speed hz\");\n        return 1;\n    }\n\n    printf(\"SPI MCP4922 Interface Started at %d Hz\\n\", speed);\n    \n    \/\/ \u062d\u0644\u0642\u0647 \u0627\u0635\u0644\u06cc: \u062a\u0648\u0644\u06cc\u062f \u0645\u0648\u062c \u062f\u0646\u062f\u0627\u0646\u200c\u0627\u0631\u0647\u200c\u0627\u06cc\n    uint16_t dacValue = 0;\n    while (1) {\n        \/\/ \u0633\u0627\u062e\u062a \u062f\u0633\u062a\u0648\u0631 (\u06a9\u0627\u0646\u0627\u0644 A\u060c Gain=2x\u060c \u0641\u0639\u0627\u0644)\n        uint16_t command = build_command(0, dacValue); \/\/ 0 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0646\u0627\u0644 A\n        \n        \/\/ \u0627\u0631\u0633\u0627\u0644 \u062f\u0627\u062f\u0647\n        if (send_dac_data(fd, command) == -1) {\n             break; \/\/ \u062f\u0631 \u0635\u0648\u0631\u062a \u062e\u0637\u0627\u060c \u062e\u0627\u0631\u062c \u0634\u0648\n        }\n        \n        \/\/ \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u0642\u062f\u0627\u0631\n        dacValue++;\n        if (dacValue &gt; 4095) { \/\/ 12 \u0628\u06cc\u062a = 0 \u062a\u0627 4095\n            dacValue = 0;\n        }\n\n        \/\/ \u0646\u06a9\u062a\u0647: \u0647\u06cc\u0686 \u062a\u0627\u062e\u06cc\u0631\u06cc (delay) \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0644\u0642\u0647 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a \u062a\u0627 \u0633\u0631\u0639\u062a \u062d\u062f\u0627\u06a9\u062b\u0631 \u0628\u0627\u0634\u062f.\n        \/\/ \u0641\u0631\u06a9\u0627\u0646\u0633 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062f\u0631 \u062e\u0631\u0648\u062c\u06cc VOUT A \u0628\u0631\u0627\u0628\u0631 \u0627\u0633\u062a \u0628\u0627 (20,000,000 \/ 16) Hz = 1.25 MHz\n    }\n\n    close(fd);\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u06f3. \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0648 \u0627\u062c\u0631\u0627<\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0631\u062f\u0646:<\/strong><code>gcc -o dac_spi dac_spi.c<\/code><\/li>\n\n\n\n<li>\u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0646:(\u0646\u06cc\u0627\u0632 \u0628\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0633\u062a\u06af\u0627\u0647 \/dev\/spidev0.0 \u062f\u0627\u0631\u062f\u060c \u067e\u0633 \u0628\u0627 sudo \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.)Bash<code>sudo .\/dac_spi<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u0646\u062a\u06cc\u062c\u0647<\/h3>\n\n\n\n<p>\u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u060c \u0633\u06cc\u06af\u0646\u0627\u0644 \u0648\u0644\u062a\u0627\u0698 \u062e\u0631\u0648\u062c\u06cc (VOUT A) \u0628\u0647 \u0633\u0631\u0639\u062a \u0627\u0632 \u06f0 \u0648\u0644\u062a \u0634\u0631\u0648\u0639 \u06a9\u0631\u062f\u0647 \u0648 \u0628\u0647 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0648\u0644\u062a\u0627\u0698 (\u06f2 \u0628\u0631\u0627\u0628\u0631 \u0648\u0644\u062a\u0627\u0698 \u0645\u0631\u062c\u0639\u060c $2 \\times V_{REF}$) \u0645\u06cc\u200c\u0631\u0633\u062f \u0648 \u0633\u067e\u0633 \u0628\u0644\u0627\u0641\u0627\u0635\u0644\u0647 \u0628\u0647 \u0635\u0641\u0631 \u0628\u0627\u0632 \u0645\u06cc\u200c\u06af\u0631\u062f\u062f (\u0645\u0648\u062c \u062f\u0646\u062f\u0627\u0646\u200c\u0627\u0631\u0647\u200c\u0627\u06cc).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a \u0646\u0645\u0648\u0646\u0647\u200c\u0628\u0631\u062f\u0627\u0631\u06cc (Sampling Rate):<\/strong> \u0628\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0644\u0627\u06a9 \u0631\u0648\u06cc <strong>20 \u0645\u06af\u0627\u0647\u0631\u062a\u0632<\/strong>\u060c \u0647\u0631 \u0646\u0645\u0648\u0646\u0647 \u06f1\u06f6 \u0628\u06cc\u062a \u0632\u0645\u0627\u0646 \u0645\u06cc\u200c\u0628\u0631\u062f. \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646\u060c \u062d\u062f\u0627\u06a9\u062b\u0631 \u0646\u0631\u062e \u0646\u0645\u0648\u0646\u0647\u200c\u0628\u0631\u062f\u0627\u0631\u06cc \u062d\u062f\u0648\u062f $1.25$ \u0645\u06cc\u0644\u06cc\u0648\u0646 \u0646\u0645\u0648\u0646\u0647 \u0628\u0631 \u062b\u0627\u0646\u06cc\u0647 (Mega Samples Per Second &#8211; MSPS) \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<\/li>\n<\/ul>\n\n\n\n<p>\u0627\u06af\u0631 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0648\u0627\u0642\u0639\u06cc \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0646\u0648\u06cc\u0632 \u06cc\u0627 \u0633\u06cc\u0645\u200c\u06a9\u0634\u06cc \u0646\u0627\u0645\u0646\u0627\u0633\u0628 \u062f\u0631 \u0627\u06cc\u0646 \u0633\u0631\u0639\u062a \u062f\u0686\u0627\u0631 \u0645\u0634\u06a9\u0644 \u0634\u062f\u06cc\u062f\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0642\u062f\u0627\u0631 <code>speed<\/code> \u0631\u0627 \u0628\u0647 <strong>10,000,000<\/strong> (10 MHz) \u06a9\u0627\u0647\u0634 \u062f\u0647\u06cc\u062f.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0628\u0631\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0645\u0628\u062f\u0644 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0628\u0647 \u0622\u0646\u0627\u0644\u0648\u06af MCP4922 \u06a9\u0647 \u06cc\u06a9 \u062a\u0631\u0627\u0634\u0647 \u062f\u0648 \u06a9\u0627\u0646\u0627\u0644\u0647 \u06f1\u06f2 \u0628\u06cc\u062a\u06cc \u0627\u0633\u062a\u060c \u0628\u0627 \u062d\u062f\u0627\u06a9\u062b\u0631 \u0633\u0631\u0639\u062a \u062f\u0631 \u0631\u0632\u0628\u0631\u06cc \u067e\u0627\u06cc\u060c \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0631\u0627\u06cc\u0648\u0631 \u0633\u062e\u062a\u200c\u0627\u0641\u0632\u0627\u0631\u06cc SPI \u0644\u06cc\u0646\u0648\u06a9\u0633 (spidev) \u0627\u0633\u062a\u060c \u062f\u0642\u06cc\u0642\u0627\u064b \u0645\u0627\u0646\u0646\u062f \u062a\u0631\u0627\u0634\u0647 \u0642\u0628\u0644\u06cc. \u062a\u0631\u0627\u0634\u0647 MCP4922 \u0637\u0628\u0642 \u062f\u06cc\u062a\u0627\u0634\u06cc\u062a\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0627 \u0633\u0631\u0639\u062a \u06a9\u0644\u0627\u06a9 \u062a\u0627 \u06f2\u06f0 \u0645\u06af\u0627\u0647\u0631\u062a\u0632 (20 MHz) \u06a9\u0627\u0631 \u06a9\u0646\u062f. \u0645\u0627 \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0631\u0639\u062a \u0628\u0631\u0627\u06cc &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[239,238,240],"class_list":["post-1265","post","type-post","status-publish","format-standard","","category-13","tag--mcp4922","tag-238","tag-240"],"_links":{"self":[{"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/posts\/1265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/comments?post=1265"}],"version-history":[{"count":2,"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/posts\/1265\/revisions"}],"predecessor-version":[{"id":1267,"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/posts\/1265\/revisions\/1267"}],"wp:attachment":[{"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/media?parent=1265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/categories?post=1265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ilk.ir\/sahifa\/wp-json\/wp\/v2\/tags?post=1265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}