{"id":125,"date":"2014-08-14T22:55:48","date_gmt":"2014-08-14T18:55:48","guid":{"rendered":"http:\/\/www.avray.ru\/?page_id=125"},"modified":"2015-12-06T13:34:06","modified_gmt":"2015-12-06T10:34:06","slug":"parallel_sending","status":"publish","type":"page","link":"https:\/\/www.avray.ru\/ru\/parallel_sending\/","title":{"rendered":"\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430"},"content":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043a\u0435\u0442\u0447\u0430 \u0434\u043b\u044f Arduino \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p><span style=\"color: #800000;\"><strong>\u0414\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 AY-Player (\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 30.11.2015)<\/strong><\/span><\/p>\n<pre>const int ad[8] = { 8, 9, 2, 3, 4, 5, 6, 7 }; \/\/ connect to DA0,1,...,7\r\n\r\nconst int pinBC1 = 10;\r\nconst int pinBDIR = 11;\r\n\r\n\/\/Fast pin switching macros\r\n#define CLR(x,y) (x&amp;=(~(1&lt;&lt;y)))\r\n#define SET(x,y) (x|=(1&lt;&lt;y))\r\n#define __BCPORT__ PORTB\r\n#define __BC1__ 2\r\n#define __BDIR__ 3\r\n\r\nvoid setup() {\r\n\/\/init pins\r\nfor( int i=0; i &lt; 8; i++)\r\npinMode(ad[i], OUTPUT);\r\n\r\npinMode(pinBC1, OUTPUT);\r\npinMode(pinBDIR, OUTPUT);\r\n\r\n\/\/inactive mode\r\ndigitalWrite(pinBC1, LOW);\r\ndigitalWrite(pinBDIR, LOW);\r\n\r\n\/\/serial init\r\nSerial.begin(57600);\r\n}\r\n\r\nvoid send_data(unsigned char address, unsigned char data) {\r\n\/\/write address to pins\r\nPORTB |= address &amp; 0x03;\r\nPORTD |= address &amp; 0xFC;\r\n\/\/validate addess\r\n__BCPORT__ |= (1 &lt;&lt; __BDIR__) + (1 &lt;&lt; __BC1__);\r\ndelayMicroseconds(1);\r\n__BCPORT__ &amp;= ~((1 &lt;&lt; __BDIR__) + (1 &lt;&lt; __BC1__));\r\nPORTB &amp;= ~(address &amp; 0x03);\r\nPORTD &amp;= ~(address &amp; 0xFC);\r\n\r\n\/\/write data to pins\r\nPORTB |= data &amp; 0x03;\r\nPORTD |= data &amp; 0xFC;\r\n\/\/validate data\r\nSET(__BCPORT__,__BDIR__);\r\ndelayMicroseconds(1);\r\nCLR(__BCPORT__,__BDIR__);\r\nPORTB &amp;= ~(data &amp; 0x03);\r\nPORTD &amp;= ~(data &amp; 0xFC);\r\n}\r\nvoid loop() {\r\nbyte reg;\r\nwhile(1) {\r\ndo {\r\nwhile(Serial.available() &lt; 1) { delayMicroseconds(1); }\r\nreg = Serial.read();\r\n}\r\nwhile( reg &gt; 15 );\r\n\r\nwhile(Serial.available() &lt; 1) { delayMicroseconds(1); }\r\nsend_data(reg, Serial.read());\r\n}\r\n}<\/pre>\n<p><strong>\u0414\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 AY-Player<\/strong><\/p>\n<pre>const int ad[8] = { 8, 9, 2, 3, 4, 5, 6, 7 }; \/\/ connect to DA0,1,...,7\r\n\r\nconst int pinBC1 = 10;\r\nconst int pinBDIR = 11;\r\n\r\n\/\/Fast pin switching macros\r\n#define CLR(x,y) (x&amp;=(~(1&lt;&lt;y)))\r\n#define SET(x,y) (x|=(1&lt;&lt;y))\r\n#define __BCPORT__ PORTB\r\n#define __BC1__ 2\r\n#define __BDIR__ 3\r\n\r\n\/\/const int ledPin = 13;\r\n\r\nbyte buf[16];\r\nbyte buf2[16];\r\n\r\nvoid setup(){\r\n\/\/init pins\r\nfor( int i=0; i &lt; 8; i++)\r\npinMode(ad[i], OUTPUT);\r\n\r\npinMode(pinBC1, OUTPUT);\r\npinMode(pinBDIR, OUTPUT);\r\n\/\/pinMode(ledPin, OUTPUT);\r\n\r\n\/\/inactive mode\r\ndigitalWrite(pinBC1, LOW);\r\ndigitalWrite(pinBDIR, LOW);\r\n\r\nmemset(buf,0,16);\r\nmemset(buf2,0,16);\r\n\r\n\/\/serial init\r\nSerial.begin(19200);\r\n}\r\n\r\nvoid send_data(unsigned char address, unsigned char data)\r\n{\r\n\/\/write address to pins\r\nPORTB |= address &amp; 0x03;\r\nPORTD |= address &amp; 0xFC;\r\ndelayMicroseconds(1);\r\n\/\/validate addess\r\n__BCPORT__ |= (1 &lt;&lt; __BDIR__) + (1 &lt;&lt; __BC1__);\r\ndelayMicroseconds(1);\r\n__BCPORT__ &amp;= ~((1 &lt;&lt; __BDIR__) + (1 &lt;&lt; __BC1__));\r\nPORTB &amp;= ~(address &amp; 0x03);\r\nPORTD &amp;= ~(address &amp; 0xFC);\r\n\r\n\/\/write data to pins\r\nPORTB |= data &amp; 0x03;\r\nPORTD |= data &amp; 0xFC;\r\ndelayMicroseconds(1);\r\n\/\/validate data\r\nSET(__BCPORT__,__BDIR__);\r\ndelayMicroseconds(1);\r\nCLR(__BCPORT__,__BDIR__);\r\nPORTB &amp;= ~(data &amp; 0x03);\r\nPORTD &amp;= ~(data &amp; 0xFC);\r\n}\r\n\r\nbyte bufcnt = 0;\r\nbyte prev = 0;\r\n\r\nvoid loop() {\r\nwhile(1)\r\n{\r\nwhile(Serial.available() &lt; 1) { delayMicroseconds(1); }\r\n\r\nbyte data = Serial.read(); buf[bufcnt] = data;\r\n\r\nif(bufcnt &gt; 13 &amp;&amp; data==0x7F &amp;&amp; prev == 0x80)\r\n{\r\nbufcnt=0;\r\nbreak;\r\n}\r\nelse\r\n{\r\nif(bufcnt&lt;16)\r\nbufcnt++;\r\n}\r\n\r\nprev = data;\r\n}\r\n\r\n\/\/digitalWrite(ledPin, HIGH);\r\n\/\/PORTB |= (1&lt;&lt;5);\r\n\r\nfor (int i = 0; i &lt; 14; i++)\r\n{\r\nif( buf[i]!=buf2[i])\r\n{\r\nif(!(i==13 &amp;&amp; buf[i] == 0xFF))\r\nsend_data(i, buf[i]);\r\n}\r\n}\r\n\r\nmemcpy(buf2,buf,16);\r\n\r\n\/\/digitalWrite(ledPin, LOW);\r\n\/\/PORTB &amp;= ~(1&lt;&lt;5);\r\n}<\/pre>\n<p><a href=\"http:\/\/www.avray.ru\/wp-content\/uploads\/2014\/08\/pinmap3ch.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-81\" src=\"http:\/\/www.avray.ru\/wp-content\/uploads\/2014\/08\/pinmap3ch-300x144.png\" alt=\"pinmap3ch\" width=\"300\" height=\"144\" srcset=\"https:\/\/www.avray.ru\/wp-content\/uploads\/2014\/08\/pinmap3ch-300x144.png 300w, https:\/\/www.avray.ru\/wp-content\/uploads\/2014\/08\/pinmap3ch.png 715w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 (Arduino) 8,9,2,3,4,5,6,7<br \/>\nBC1 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 10<br \/>\nBDIR \u043a\u043e\u043d\u0442\u0430\u043a\u0442 11<\/p>\n<p>\u0421\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u043c \u0432\u044b\u0448\u0435<\/p>\n<p style=\"text-align: center;\">[ad name=&#187;HTML&#187;]<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043a\u0435\u0442\u0447\u0430 \u0434\u043b\u044f Arduino \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440. \u0414\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 AY-Player (\u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 30.11.2015) const int ad[8] = { 8, 9, 2, 3, 4, 5, 6, 7 }; \/\/ connect to DA0,1,&#8230;,7 const int pinBC1 = 10; const int pinBDIR = 11; \/\/Fast pin switching macros #define CLR(x,y) (x&amp;=(~(1&lt;&lt;y))) #define SET(x,y) (x|=(1&lt;&lt;y)) #define [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"page-fullwidth.php","meta":{"footnotes":""},"class_list":["post-125","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages\/125","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/comments?post=125"}],"version-history":[{"count":0,"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages\/125\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/media?parent=125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}