{"id":1765,"date":"2015-11-30T11:43:31","date_gmt":"2015-11-30T08:43:31","guid":{"rendered":"http:\/\/www.avray.ru\/?page_id=1765"},"modified":"2015-11-30T17:38:36","modified_gmt":"2015-11-30T14:38:36","slug":"parallel-sending-with-generator","status":"publish","type":"page","link":"https:\/\/www.avray.ru\/ru\/parallel-sending-with-generator\/","title":{"rendered":"\u041f\u0430\u0440\u0430\u043b\u043b. \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c"},"content":{"rendered":"<p><\/p>\n<h2>Arduino + AY-3-8910 \u0438\u043b\u0438 YM2149F<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0442.\u0434.<\/p>\n<p>\u0421\u043a\u0435\u0442\u0447 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443, \u043d\u043e, \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 2\u041c\u0413\u0446<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432 \u043d\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 COM \u043f\u043e\u0440\u0442\u043e\u043c, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u043e\u0440\u0442\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0432\u0434\u0432\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 Clock \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0434\u043b\u044f AY\/YM<\/p>\n<pre>const byte ad[8] = { 8, 9, 2, 3, 4, 5, 6, 7 }; \/\/ connect to DA0,1,...,7\r\nconst byte pinBC1 = 10;\r\nconst byte pinBDIR = 12;\r\nconst byte freqOutputPin = 11;   \/\/ OC2A output pin for ATmega328 boards\r\n\r\n\/\/Fast pin switching macros\r\n#define __BCPORT__ PORTB\r\n#define __BC1__ 2  \/\/ PORT PIN\r\n#define __BDIR__ 4 \/\/ PORT PIN\r\n\r\nvoid initFrequencyGenerator()\r\n{ \/\/ Set Timer 2 CTC mode OC2A toggles on compare match\r\n    TCCR2A = 0x42;\r\n    TCCR2B = 0x01; \/\/ prescaller\r\n    TIMSK2 = 0;\r\n    \/\/ This value determines the output frequency: 0 - 16MHz, 1 - 8MHz, 2 - 4MHz, 3 - 2MHz, 4 - 1MHz\r\n    OCR2A = 3;\r\n}\r\n\r\n\r\nvoid setup() {\r\n  \/\/ INTERRUPT DISABLE\r\n  cli();\r\n\r\n  \/\/init pins\r\n  for(byte i=0; i < 8; i++) pinMode(ad[i], OUTPUT);\r\n\r\n  pinMode(0, INPUT);\r\n\r\n  pinMode(pinBC1, OUTPUT);\r\n  pinMode(pinBDIR, OUTPUT);\r\n\r\n  \/\/inactive mode\r\n  digitalWrite(pinBC1, LOW);\r\n  digitalWrite(pinBDIR, LOW);\r\n\r\n  pinMode(freqOutputPin, OUTPUT);\r\n  initFrequencyGenerator();\r\n\r\n  \/\/serial init at 57600\r\n  UBRR0H = 0;\r\n  UBRR0L = 0x10;\r\n  UCSR0C = 0x06;\r\n  UCSR0A = 0;\r\n  UCSR0B = 0x90;\r\n\r\n  \/\/ INTERRUPT ENABLE\r\n  sei();\r\n}\r\n\r\nvoid send_data(byte address, byte data) {\r\n\/\/ WRITE REGISTER NUMBER\r\n  \/\/write address to DA0-DA7 pins\r\n  PORTB |= address &#038; 0x03;\r\n  PORTD |= address &#038; 0xFC;\r\n  \/\/validate addess\r\n  \/\/set BC1+BDIR bits, latch address mode\r\n  __BCPORT__ |= (1 << __BDIR__) + (1 << __BC1__);\r\n  asm(\"nop\\nnop\\nnop\\nnop\\nnop\\nnop\\nnop\\nnop\"); \/\/set+hold address delay 500ns (400+100 min)\r\n  \/\/clear BC1+BDIR bits, inactive mode\r\n  __BCPORT__ &#038;= ~((1 << __BDIR__) + (1 << __BC1__));\r\n  \/\/ reset pins to tristate mode\r\n  PORTB &#038;= ~(address &#038; 0x03);\r\n  PORTD &#038;= ~(address &#038; 0xFC);\r\n\r\n\/\/ WRITE REGISTER DATA\r\n  \/\/write data to pins\r\n  PORTB |= data &#038; 0x03;\r\n  PORTD |= data &#038; 0xFC;\r\n  \/\/validate data\r\n  \/\/set BDIR bit, write to reg mode\r\n  __BCPORT__ |= ( 1 << __BDIR__); \r\n  asm(\"nop\\nnop\\nnop\\nnop\"); \/\/250ns delay (250min-500max) nop=62.5ns on 16MHz\r\n  \/\/clear BDIR bit, inactive mode\r\n  __BCPORT__ &#038;= ~( 1 << __BDIR__); \r\n  \/\/ reset pins to tristate mode\r\n  PORTB &#038;= ~(data &#038; 0x03);\r\n  PORTD &#038;= ~(data &#038; 0xFC);\r\n}\r\n\r\n\/\/ SERIAL INTERRUPT HANDLER\r\nbool reg = false;\r\nbyte reg_num = 0;\r\nISR(USART_RX_vect)\r\n{\r\n    byte r = UDR0;\r\n    if (bit_is_clear(UCSR0A, FE0))\r\n    {\r\n        if(reg == false)\r\n        {\r\n          if(r <= 15)\r\n          {\r\n            reg_num = r;\r\n            reg = true;\r\n          }\r\n        }\r\n        else\r\n        {\r\n          send_data(reg_num, r);\r\n          reg = false;\r\n        }\r\n    }\r\n}\r\n\r\n\r\nvoid loop() {\r\n  \/\/ Write your code here :)\r\n}<\/pre>\n<p>\u041f\u0438\u043d BDIR \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d \u0441 11 \u043d\u0430 12, \u0430 \u043d\u0430 11-\u043e\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0445\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430.<\/p>\n<p>\u0421\u0438\u0433\u043d\u0430\u043b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c \u0432 CTC \u0440\u0435\u0436\u0438\u043c\u0435, \u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0432\u00a0OCR2A (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 2 \u041c\u0413\u0446).<\/p>\n<p><a href=\"http:\/\/www.avray.ru\/wp-content\/uploads\/2015\/11\/ay_arduino.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-1777 aligncenter\" src=\"http:\/\/www.avray.ru\/wp-content\/uploads\/2015\/11\/ay_arduino-300x186.jpg\" alt=\"ay_arduino\" width=\"300\" height=\"186\" srcset=\"https:\/\/www.avray.ru\/wp-content\/uploads\/2015\/11\/ay_arduino-300x186.jpg 300w, https:\/\/www.avray.ru\/wp-content\/uploads\/2015\/11\/ay_arduino.jpg 751w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p style=\"text-align: center;\">[ad name=\"HTML\"]<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Arduino + AY-3-8910 \u0438\u043b\u0438 YM2149F \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0442.\u0434. \u0421\u043a\u0435\u0442\u0447 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443, \u043d\u043e, \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0432 \u0440\u0430\u0439\u043e\u043d\u0435 2\u041c\u0413\u0446 \u0422\u0430\u043a \u0436\u0435 \u0432 \u043d\u0435\u043c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 COM \u043f\u043e\u0440\u0442\u043e\u043c, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u043e\u0440\u0442\u0430 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u0432\u0434\u0432\u043e\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u043e [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"page-fullwidth.php","meta":{"footnotes":""},"class_list":["post-1765","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages\/1765","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=1765"}],"version-history":[{"count":0,"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages\/1765\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/media?parent=1765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}