{"id":134,"date":"2014-08-14T23:14:16","date_gmt":"2014-08-14T19:14:16","guid":{"rendered":"http:\/\/www.avray.ru\/?page_id=134"},"modified":"2015-12-06T15:58:15","modified_gmt":"2015-12-06T12:58:15","slug":"%d0%bf%d1%80%d0%be%d0%b8%d0%b3%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-rsf-%d0%b8%d0%b7-eeprom","status":"publish","type":"page","link":"https:\/\/www.avray.ru\/ru\/%d0%bf%d1%80%d0%be%d0%b8%d0%b3%d1%80%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-rsf-%d0%b8%d0%b7-eeprom\/","title":{"rendered":"\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435 RSF \u0438\u0437 EEPROM"},"content":{"rendered":"<p><\/p>\n<h2>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f RSF \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 EEPROM (Arduino)<\/h2>\n<p><br style=\"color: #282828;\" \/><br \/>\n<strong>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0432 EEPROM<\/strong><br \/>\n<br style=\"color: #282828;\" \/><\/p>\n<pre>\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435  \u0440\u0430\u0437\u043c\u0435\u0440       \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\r\n0         1 \u0431\u0430\u0439\u0442       \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0439\r\n\r\n1         2 \u0431\u0430\u0439\u0442\u0430      \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438 1\r\n3         2 \u0431\u0430\u0439\u0442\u0430      \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0432 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 1\r\n\r\n5         2 \u0431\u0430\u0439\u0442\u0430      \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438 2\r\n7         2 \u0431\u0430\u0439\u0442\u0430      \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0432 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 2\r\n..........\r\n\r\nX         2 \u0431\u0430\u0439\u0442\u0430      \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438 N\r\nX         2 \u0431\u0430\u0439\u0442\u0430      \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0432 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 N\r\n\r\nX                      \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 RSF \u0444\u0430\u0439\u043b\u0430 1\r\n\r\nX                      \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 RSF \u0444\u0430\u0439\u043b\u0430 2\r\n\r\nX                      \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 RSF \u0444\u0430\u0439\u043b\u0430 3\r\n...........\r\n\r\nX                      \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 RSF \u0444\u0430\u0439\u043b\u0430 N\r\n<\/pre>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043c\u0435\u043b\u043e\u0434\u0438\u0439<\/h2>\n<pre>Wire.begin();\r\nsongs = readEEPROM(disk1, 0);\r\nSerial.begin(19200); \/\/ 57600 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 14.0+\r\nfor(int i=0; i&lt;songs; i++) playsong(i);\r\n<\/pre>\n<h2>Functions<\/h2>\n<pre>byte readEEPROM(int deviceaddress, unsigned int eeaddress )\r\n{\r\n  byte rdata = 0;\r\n  Wire.beginTransmission(deviceaddress);\r\n  Wire.write((int)(eeaddress >> 8));   \/\/ MSB\r\n  Wire.write((int)(eeaddress & 0xFF)); \/\/ LSB\r\n  Wire.endTransmission();\r\n  Wire.requestFrom(deviceaddress,1);\r\n  if (Wire.available()) rdata = Wire.read();\r\n  return rdata;\r\n}<\/pre>\n<h2>\u0424\u0443\u043d\u043a\u0446\u0438\u044f PlaySong \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0434\u043e\u00a013.2 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e<\/h2>\n<pre>void playsong(byte num)\r\n{\r\n  int offset = readEEPROM(disk1, 1 + num*4) + readEEPROM(disk1, 1 + num*4 + 1)*256;\r\n  int frames = readEEPROM(disk1, 1 + num*4 + 2) + readEEPROM(disk1, 1 + num*4 + 3)*256;\r\n\r\n  offset += 16; \/\/RSF header\r\n\r\n  int frame = 0;\r\n  byte tmp;\r\n\r\n  byte writebuf[16];\r\n  memset(writebuf,0,14);\r\n  writebuf[14] = 0x80;\r\n  writebuf[15] = 0x7F;\r\n\r\n\r\n  unsigned int tmp2, skip;\r\n\r\n  while( frame < frames )\r\n  {\r\n    skip = 1;\r\n    tmp = readEEPROM(disk1, offset++);\r\n    if(tmp == 0xFE)\r\n    {\r\n         tmp = readEEPROM(disk1, offset++);\r\n         skip = tmp * 16;\r\n    }\r\n    else if(tmp == 0xFD)\r\n    {\r\n         tmp = readEEPROM(disk1, offset++);\r\n         skip = tmp * 2;\r\n    }\r\n    else if(tmp != 0xFF)\r\n    {\r\n         tmp2 = tmp * 256;\r\n         tmp2 += readEEPROM(disk1, offset++);\r\n         byte reg = 0;\r\n         writebuf[13] = 0xFF;\r\n         while(tmp2 > 0 && reg < 14)\r\n         {\r\n             if(tmp2 &#038; 1 == 1)\r\n             {\r\n                 writebuf[reg] = readEEPROM(disk1, offset++);\r\n             }\r\n             tmp2 >>= 1;\r\n             reg++;\r\n         }\r\n         Serial.write(writebuf,16);\r\n     }\r\n     for(int i = 1; i <= skip; i++) delay(20);\r\n\r\n     frame += skip;\r\n  }\r\n  \/\/stop\r\n  memset(writebuf,0,14);\r\n  writebuf[7] = 63;\r\n  Serial.write(writebuf,16);\r\n}<\/pre>\n<h2>\u0424\u0443\u043d\u043a\u0446\u0438\u044f PlaySong \u00a0\u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 14.0+ (\u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0430\u0441\u044c)<\/h2>\n<pre>void playsong(byte num)\r\n{\r\n   int offset = readEEPROM(disk1, 1 + num*4) + readEEPROM(disk1, 1 + num*4 + 1)*256;\r\n   int frames = readEEPROM(disk1, 1 + num*4 + 2) + readEEPROM(disk1, 1 + num*4 + 3)*256;\r\n\r\n   offset += 16; \/\/RSF header\r\n\r\n   int frame = 0;\r\n   byte tmp, tmp3;\r\n\r\n   byte writebuf[16];\r\n\r\n   \/\/mute\r\n   memset(writebuf,0,14);\r\n   writebuf[7] = 63;\r\n\r\n   for(int i = 0; i <14; i++) {\r\n      Serial.write(i,1);\r\n      Serial.write(writebuf[i],1);\r\n   }\r\n\r\n   memset(writebuf,0,14);\r\n   writebuf[13] = 0xFF;\r\n\r\n   Serial.write(writebuf[13],1); \/\/ to synchronize\r\n\r\n   unsigned int tmp2, skip;\r\n\r\n   while( frame < frames )\r\n   {\r\n       skip = 1;\r\n       tmp = readEEPROM(disk1, offset++);\r\n       if(tmp == 0xFE)\r\n       {\r\n           tmp = readEEPROM(disk1, offset++);\r\n           skip = tmp * 16;\r\n       }\r\n       else if(tmp == 0xFD)\r\n       {\r\n           tmp = readEEPROM(disk1, offset++);\r\n           skip = tmp * 2;\r\n       }\r\n       else if(tmp != 0xFF)\r\n       {\r\n           tmp2 = tmp * 256;\r\n           tmp2 += readEEPROM(disk1, offset++);\r\n           byte reg = 0;\r\n           while(tmp2 > 0 && reg < 14)\r\n           {\r\n               if(tmp2 &#038; 1 == 1)\r\n               {\r\n                   tmp3 = readEEPROM(disk1, offset++);\r\n                   if(writebuf[reg] != tmp3)\r\n                   {\r\n                       writebuf[reg] = tmp3;\r\n                       if(!(reg==13 &#038;&#038; tmp3==0xFF))\r\n                       {\r\n                           Serial.write(reg,1);\r\n                           Serial.write(tmp3,1);\r\n                       }\r\n                   }\r\n               }\r\n               tmp2 >>= 1;\r\n               reg++;\r\n           }\r\n       }\r\n       for(int i = 1; i <= skip; i++) delay(20);\r\n       frame += skip;\r\n   }\r\n   \/\/mute\r\n   memset(writebuf,0,14);\r\n   writebuf[7] = 63;\r\n\r\n   for(int i = 0; i <14; i++) {\r\n       Serial.write(i,1);\r\n       Serial.write(writebuf[i],1);\r\n   }\r\n}<\/pre>\n<p style=\"text-align: center;\">[ad name=\"HTML\"]<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u044f RSF \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 EEPROM (Arduino) \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u0432 EEPROM \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 0 1 \u0431\u0430\u0439\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0439 1 2 \u0431\u0430\u0439\u0442\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438 1 3 2 \u0431\u0430\u0439\u0442\u0430 \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 \u0432 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 1 5 2 \u0431\u0430\u0439\u0442\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0437\u0430 \u0434\u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438 2 7 2 \u0431\u0430\u0439\u0442\u0430 \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0444\u0440\u0435\u0439\u043c\u043e\u0432 [&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-134","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages\/134","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=134"}],"version-history":[{"count":0,"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/pages\/134\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.avray.ru\/ru\/wp-json\/wp\/v2\/media?parent=134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}