Нужна доработка кода для ARDUINO

Dubolom
Offline
Зарегистрирован: 15.02.2017

Есть два варианта кода для проигрывания WAV сэмпла из памяти ATTINY85


/* Audio Sample Player

  David Johnson-Davies - www.technoblogy.com - 29th September 2014
 
  CC BY 4.0
  Licensed under a Creative Commons Attribution 4.0 International license:
  http://creativecommons.org/licenses/by/4.0/
*/

/* Direct-coupled capacitorless output */

#include <avr/pgmspace.h>
#include <avr/sleep.h>
#define adc_disable()  (ADCSRA &= ~(1<<ADEN))

// Audio encoded as unsigned 8-bit, 8kHz sampling rate
PROGMEM prog_uchar quack_wav[] = {
 0x7d, 0x7c, 0x7e, 0x7e, 0x7d, 0x7b, 0x7b, 0x7c, 0x7c, 0x7e, 0x7f, 0x7f,
 0x81, 0x83, 0x84, 0x86, 0x88, 0x8a, 0x8b, 0x8c, 0x88, 0x7f, 0x76, 0x6f,
 0x6c, 0x6d, 0x71, 0x75, 0x78, 0x78, 0x75, 0x6b, 0x64, 0x62, 0x61, 0x67,
 0x6f, 0x76, 0x7d, 0x82, 0x85, 0x82, 0x7f, 0x7b, 0x79, 0x79, 0x7f, 0x88,
 0x8e, 0x93, 0x94, 0x92, 0x8d, 0x86, 0x81, 0x80, 0x83, 0x89, 0x91, 0x9a,
 0xa3, 0xa9, 0xab, 0xa5, 0x91, 0x70, 0x59, 0x58, 0x67, 0x80, 0x96, 0xa3,
 0xa5, 0x98, 0x7a, 0x5c, 0x50, 0x55, 0x6a, 0x80, 0x8e, 0x96, 0x94, 0x89,
 0x77, 0x69, 0x62, 0x67, 0x73, 0x79, 0x7a, 0x74, 0x6b, 0x64, 0x63, 0x68,
 0x6d, 0x70, 0x6f, 0x6b, 0x67, 0x64, 0x66, 0x6d, 0x78, 0x84, 0x8d, 0x94,
 0x97, 0x94, 0x92, 0x8e, 0x92, 0x9e, 0xae, 0xc4, 0xd6, 0xdd, 0xc7, 0x84,
 0x45, 0x37, 0x58, 0x95, 0xbd, 0xc1, 0xb2, 0x8c, 0x53, 0x28, 0x24, 0x49,
 0x88, 0xaf, 0xb1, 0x9f, 0x88, 0x79, 0x71, 0x78, 0x8b, 0xa1, 0xa2, 0x91,
 0x7c, 0x71, 0x7a, 0x85, 0x8c, 0x88, 0x77, 0x5c, 0x3f, 0x31, 0x38, 0x53,
 0x6a, 0x73, 0x6b, 0x59, 0x4f, 0x50, 0x5f, 0x76, 0x87, 0x91, 0x93, 0x8f,
 0x8d, 0x91, 0x9d, 0xb2, 0xcf, 0xe8, 0xf3, 0xd7, 0x7d, 0x25, 0x22, 0x67,
 0xbe, 0xe2, 0xbd, 0x86, 0x58, 0x38, 0x34, 0x4e, 0x7c, 0x9f, 0x93, 0x71,
 0x68, 0x7e, 0xa0, 0xb3, 0xad, 0x96, 0x7c, 0x6e, 0x71, 0x90, 0xb1, 0xb6,
 0x9f, 0x76, 0x5a, 0x50, 0x4d, 0x55, 0x59, 0x55, 0x4c, 0x45, 0x46, 0x4e,
 0x56, 0x5a, 0x5e, 0x5d, 0x5f, 0x69, 0x7a, 0x91, 0xa2, 0xaa, 0xb1, 0xba,
 0xc6, 0xe5, 0xf2, 0xb3, 0x4f, 0x23, 0x59, 0xad, 0xd6, 0xb6, 0x7c, 0x63,
 0x4d, 0x3e, 0x51, 0x66, 0x6d, 0x60, 0x56, 0x75, 0xa5, 0xb6, 0xa6, 0x84,
 0x6c, 0x73, 0x8a, 0xa2, 0xb3, 0xab, 0x96, 0x8c, 0x8b, 0x8b, 0x7a, 0x62,
 0x52, 0x4c, 0x4e, 0x52, 0x59, 0x58, 0x54, 0x50, 0x51, 0x5b, 0x5f, 0x6a,
 0x7c, 0x80, 0x85, 0x8f, 0xa8, 0xc8, 0xe3, 0xed, 0xe9, 0xa0, 0x24, 0x35,
 0xa0, 0xe7, 0xde, 0x82, 0x57, 0x6f, 0x83, 0x7b, 0x66, 0x3f, 0x29, 0x44,
 0x79, 0xb4, 0xb0, 0x7b, 0x67, 0x79, 0x95, 0x9e, 0x94, 0x85, 0x82, 0x8b,
 0xa5, 0xba, 0x9d, 0x6d, 0x59, 0x69, 0x76, 0x65, 0x4e, 0x49, 0x53, 0x5d,
 0x63, 0x57, 0x4b, 0x5d, 0x76, 0x85, 0x83, 0x7c, 0x90, 0xbb, 0xdf, 0xf2,
 0xe2, 0x7b, 0x1d, 0x56, 0xd4, 0xf7, 0xa1, 0x4b, 0x70, 0xae, 0x9e, 0x7c,
 0x43, 0x15, 0x2d, 0x69, 0xa5, 0x9e, 0x5b, 0x52, 0x89, 0xa8, 0x94, 0x70,
 0x64, 0x7d, 0x9a, 0xaa, 0xb1, 0x8a, 0x57, 0x6a, 0x99, 0x97, 0x67, 0x47,
 0x4f, 0x69, 0x6d, 0x5c, 0x59, 0x52, 0x5c, 0x7a, 0x85, 0x81, 0x82, 0xa1,
 0xd4, 0xec, 0xe4, 0xc2, 0x54, 0x23, 0x9d, 0xf6, 0xd6, 0x6f, 0x45, 0xa4,
 0xd0, 0x86, 0x44, 0x25, 0x37, 0x7d, 0x9a, 0x88, 0x5a, 0x4f, 0x92, 0xb0,
 0x84, 0x64, 0x78, 0x95, 0x9d, 0x90, 0x8d, 0x8d, 0x83, 0x91, 0x91, 0x71,
 0x51, 0x55, 0x72, 0x76, 0x65, 0x5a, 0x5f, 0x6c, 0x74, 0x79, 0x78, 0x77,
 0x97, 0xc2, 0xd7, 0xeb, 0xc2, 0x47, 0x3c, 0xbd, 0xf0, 0xab, 0x5a, 0x77,
 0xcd, 0xad, 0x5d, 0x3e, 0x41, 0x74, 0x90, 0x6e, 0x4a, 0x3f, 0x82, 0xba,
 0x82, 0x4a, 0x63, 0x92, 0xa0, 0x87, 0x70, 0x7b, 0x8a, 0x9d, 0xa5, 0x76,
 0x4b, 0x5e, 0x89, 0x77, 0x47, 0x46, 0x62, 0x7a, 0x74, 0x6b, 0x75, 0x81,
 0x99, 0xc6, 0xdd, 0xcb, 0x78, 0x19, 0x81, 0xf7, 0xac, 0x59, 0x53, 0xae,
 0xe7, 0x7d, 0x3b, 0x4b, 0x56, 0x87, 0x88, 0x4c, 0x3a, 0x68, 0xac, 0x9a,
 0x41, 0x37, 0x85, 0x9a, 0x80, 0x6e, 0x6a, 0x80, 0x8c, 0x92, 0x8a, 0x70,
 0x65, 0x71, 0x78, 0x64, 0x5a, 0x63, 0x6a, 0x75, 0x76, 0x82, 0x94, 0x9c,
 0xbc, 0xd3, 0xc6, 0x5b, 0x25, 0xaf, 0xec, 0x90, 0x50, 0x73, 0xc0, 0xcb,
 0x75, 0x3f, 0x55, 0x73, 0x9a, 0x82, 0x4d, 0x56, 0x96, 0xaf, 0x68, 0x3b,
 0x68, 0xa0, 0x89, 0x61, 0x6e, 0x8b, 0x95, 0x85, 0x80, 0x78, 0x74, 0x7d,
 0x7b, 0x67, 0x5d, 0x74, 0x76, 0x60, 0x67, 0x7e, 0x8c, 0x98, 0xae, 0xc3,
 0xcb, 0x79, 0x23, 0x86, 0xe5, 0xa9, 0x55, 0x69, 0xc2, 0xce, 0x7f, 0x47,
 0x50, 0x6c, 0x93, 0x75, 0x40, 0x5b, 0x95, 0xb7, 0x76, 0x38, 0x68, 0xa0,
 0x8f, 0x5b, 0x52, 0x7d, 0x9c, 0x8d, 0x79, 0x73, 0x75, 0x7a, 0x74, 0x66,
 0x58, 0x6a, 0x7f, 0x71, 0x68, 0x75, 0x88, 0x9e, 0xaa, 0xac, 0xb6, 0x5a,
 0x23, 0xaa, 0xdd, 0x7a, 0x42, 0x75, 0xc1, 0xb5, 0x5e, 0x44, 0x66, 0x7e,
 0x8d, 0x5e, 0x44, 0x7e, 0xa9, 0x9b, 0x67, 0x4b, 0x82, 0xa5, 0x74, 0x5f,
 0x6b, 0x8e, 0xa2, 0x8c, 0x7f, 0x7b, 0x7f, 0x7d, 0x7b, 0x79, 0x66, 0x68,
 0x82, 0x8a, 0x8a, 0x8d, 0x8b, 0xa7, 0xb8, 0xbc, 0xa0, 0x39, 0x67, 0xdd,
 0xaa, 0x5e, 0x63, 0x93, 0xc3, 0x91, 0x48, 0x5d, 0x75, 0x8c, 0x82, 0x48,
 0x61, 0xa5, 0x9d, 0x6a, 0x54, 0x6f, 0x96, 0x7d, 0x59, 0x66, 0x80, 0x8f,
 0x87, 0x78, 0x72, 0x7d, 0x80, 0x72, 0x73, 0x70, 0x6f, 0x7f, 0x85, 0x88,
 0x96, 0xa3, 0xb2, 0xb4, 0xb1, 0x78, 0x45, 0xa5, 0xcd, 0x74, 0x5f, 0x87,
 0xa6, 0xa2, 0x70, 0x5a, 0x6a, 0x75, 0x81, 0x6c, 0x52, 0x72, 0xa2, 0x90,
 0x5a, 0x5a, 0x82, 0x92, 0x66, 0x56, 0x72, 0x82, 0x7d, 0x76, 0x79, 0x73,
 0x73, 0x6f, 0x6f, 0x71, 0x67, 0x6d, 0x72, 0x75, 0x88, 0x8e, 0x9a, 0xaf,
 0xb3, 0xba, 0x63, 0x40, 0xc9, 0xc0, 0x5e, 0x6e, 0x8c, 0xa9, 0xa5, 0x67,
 0x60, 0x72, 0x79, 0x86, 0x63, 0x5a, 0x8b, 0xa3, 0x79, 0x5a, 0x6e, 0x90,
 0x93, 0x5c, 0x5e, 0x8a, 0x88, 0x7a, 0x7e, 0x81, 0x81, 0x82, 0x71, 0x6c,
 0x75, 0x71, 0x7c, 0x7f, 0x7b, 0x87, 0x94, 0xa7, 0xb2, 0xb4, 0x70, 0x43,
 0xb4, 0xd6, 0x75, 0x60, 0x94, 0xa9, 0x9d, 0x7c, 0x6c, 0x7a, 0x7a, 0x78,
 0x6c, 0x68, 0x7d, 0x99, 0x8a, 0x69, 0x6f, 0x82, 0x8a, 0x6a, 0x62, 0x87,
 0x88, 0x75, 0x7f, 0x94, 0x87, 0x7a, 0x6e, 0x68, 0x7e, 0x7d, 0x6f, 0x70,
 0x7f, 0x91, 0x92, 0x9a, 0xa2, 0xb0, 0x7d, 0x39, 0x96, 0xd2, 0x74, 0x60,
 0x9a, 0xa3, 0x9b, 0x7d, 0x68, 0x7f, 0x83, 0x7a, 0x6a, 0x70, 0x83, 0x99,
 0x91, 0x6d, 0x7a, 0x86, 0x86, 0x71, 0x60, 0x7b, 0x85, 0x7e, 0x80, 0x8e,
 0x89, 0x7a, 0x73, 0x72, 0x81, 0x7b, 0x6c, 0x77, 0x88, 0x92, 0x8b, 0x8e,
 0xa3, 0xba, 0x84, 0x2f, 0x83, 0xd7, 0x87, 0x60, 0x91, 0xa1, 0x9b, 0x86,
 0x6b, 0x7c, 0x84, 0x7b, 0x6f, 0x74, 0x83, 0x90, 0x92, 0x78, 0x79, 0x87,
 0x88, 0x79, 0x6b, 0x7b, 0x86, 0x84, 0x80, 0x84, 0x87, 0x7f, 0x71, 0x73,
 0x85, 0x7b, 0x70, 0x79, 0x8b, 0x9a, 0x8b, 0x85, 0xaa, 0xbe, 0x60, 0x37,
 0xb2, 0xc8, 0x69, 0x67, 0x9e, 0xa9, 0x95, 0x75, 0x6c, 0x7f, 0x87, 0x7a,
 0x63, 0x79, 0x8e, 0x8d, 0x83, 0x6f, 0x7b, 0x88, 0x81, 0x6b, 0x6c, 0x82,
 0x82, 0x74, 0x78, 0x84, 0x7d, 0x7b, 0x7b, 0x6e, 0x6e, 0x7d, 0x76, 0x67,
 0x79, 0x8f, 0x81, 0x80, 0x93, 0x99, 0xa3, 0x6c, 0x51, 0xaa, 0xa0, 0x5d,
 0x7d, 0x97, 0x8f, 0x99, 0x7b, 0x71, 0x80, 0x77, 0x7a, 0x70, 0x72, 0x87,
 0x8b, 0x7c, 0x76, 0x7d, 0x7f, 0x81, 0x6b, 0x6b, 0x7f, 0x7c, 0x77, 0x76,
 0x7e, 0x80, 0x73, 0x68, 0x74, 0x81, 0x6d, 0x6c, 0x7a, 0x85, 0x83, 0x77,
 0x8c, 0xaa, 0xa2, 0x53, 0x51, 0xb4, 0x98, 0x43, 0x60, 0x97, 0x91, 0x7c,
 0x6c, 0x73, 0x7e, 0x76, 0x6a, 0x66, 0x7d, 0x83, 0x85, 0x81, 0x74, 0x7f,
 0x85, 0x82, 0x71, 0x74, 0x87, 0x83, 0x7a, 0x7d, 0x84, 0x84, 0x7d, 0x6f,
 0x7c, 0x82, 0x66, 0x70, 0x81, 0x74, 0x75, 0x7b, 0x87, 0x89, 0x80, 0x96,
 0xaf, 0x73, 0x43, 0x93, 0xaf, 0x6c, 0x5b, 0x8c, 0xa8, 0x93, 0x77, 0x6f,
 0x7d, 0x82, 0x83, 0x6c, 0x71, 0x8e, 0x84, 0x7f, 0x74, 0x7a, 0x88, 0x84,
 0x73, 0x71, 0x87, 0x85, 0x7e, 0x79, 0x83, 0x90, 0x7f, 0x74, 0x7e, 0x78,
 0x69, 0x7e, 0x7d, 0x61, 0x7d, 0x8d, 0x78, 0x7c, 0x80, 0x89, 0x97, 0x95,
 0x9a, 0x72, 0x6a, 0xb6, 0x95, 0x56, 0x8b, 0xac, 0x92, 0x80, 0x76, 0x84,
 0x86, 0x79, 0x7c, 0x74, 0x7b, 0x85, 0x81, 0x77, 0x7a, 0x82, 0x80, 0x7e,
 0x75, 0x80, 0x8b, 0x81, 0x7c, 0x85, 0x8b, 0x81, 0x7a, 0x73, 0x7b, 0x84,
 0x74, 0x65, 0x6c, 0x83, 0x7e, 0x66, 0x6c, 0x83, 0x85, 0x7a, 0x75, 0x7b,
 0x99, 0x9d, 0x93, 0x7f, 0x64, 0xa3, 0xaf, 0x6c, 0x79, 0xa2, 0x98, 0x84,
 0x7a, 0x7c, 0x8b, 0x7f, 0x77, 0x6e, 0x73, 0x89, 0x7f, 0x7b, 0x80, 0x81,
 0x80, 0x84, 0x7f, 0x77, 0x84, 0x88, 0x85, 0x84, 0x88, 0x85, 0x7d, 0x7e,
 0x7e, 0x7a, 0x74, 0x76, 0x73, 0x6c, 0x7b, 0x7a, 0x6f, 0x75, 0x75, 0x7a,
 0x80, 0x71, 0x78, 0x8b, 0x83, 0x88, 0x8c, 0x99, 0x8b, 0x66, 0x9d, 0xab,
 0x6d, 0x73, 0x96, 0x90, 0x83, 0x7b, 0x79, 0x80, 0x79, 0x72, 0x6c, 0x75,
 0x81, 0x7c, 0x7a, 0x7b, 0x84, 0x82, 0x7a, 0x7b, 0x7d, 0x82, 0x82, 0x81,
 0x81, 0x8a, 0x88, 0x7b, 0x7c, 0x83, 0x7f, 0x71, 0x72, 0x7c, 0x7c, 0x73,
 0x6d, 0x7a, 0x7f, 0x6c, 0x6c, 0x7b, 0x79, 0x7a, 0x7a, 0x77, 0x81, 0x82,
 0x79, 0x7f, 0x8a, 0x8b, 0x8e, 0x95, 0x7e, 0x6b, 0x8f, 0x8f, 0x65, 0x70,
 0x8d, 0x85, 0x79, 0x79, 0x7b, 0x7a, 0x77, 0x77, 0x71, 0x7a, 0x81, 0x7c,
 0x81, 0x82, 0x83, 0x81, 0x82, 0x7d, 0x7c, 0x86, 0x84, 0x80, 0x85, 0x8a,
 0x86, 0x82, 0x83, 0x84, 0x81, 0x7a, 0x7d, 0x7d, 0x74, 0x72, 0x7b, 0x80,
 0x7a, 0x71, 0x76, 0x7f, 0x76, 0x75, 0x77, 0x77, 0x7e, 0x7d, 0x7b, 0x7f,
 0x81, 0x7f, 0x84, 0x84, 0x83, 0x87, 0x8e, 0x94, 0x76, 0x6a, 0x91, 0x8b,
 0x6b, 0x7b, 0x8f, 0x85, 0x7a, 0x7b, 0x87, 0x83, 0x75, 0x7b, 0x7c, 0x82,
 0x7f, 0x7c, 0x84, 0x81, 0x86, 0x82, 0x7e, 0x81, 0x80, 0x81, 0x7f, 0x83,
 0x85, 0x85, 0x82, 0x7f, 0x7f, 0x80, 0x80, 0x75, 0x76, 0x7e, 0x7b, 0x77,
 0x78, 0x7f, 0x7e, 0x77, 0x7c, 0x81, 0x7d, 0x7e, 0x7e, 0x7f, 0x84, 0x81,
 0x7d, 0x82, 0x82, 0x7b, 0x7e, 0x80, 0x81, 0x7a, 0x7b, 0x81, 0x7e, 0x7b,
 0x7b, 0x7d, 0x7e, 0x7d, 0x7c, 0x7e, 0x81, 0x80, 0x82, 0x88, 0x8b, 0x8f,
 0x82, 0x72, 0x90, 0x8e, 0x72, 0x7d, 0x8c, 0x88, 0x7c, 0x7d, 0x86, 0x81,
 0x74, 0x7a, 0x7b, 0x7c, 0x7b, 0x78, 0x83, 0x81, 0x80, 0x7e, 0x81, 0x82,
 0x7c, 0x82, 0x81, 0x81, 0x81, 0x82, 0x82, 0x81, 0x82, 0x81, 0x81, 0x7d,
 0x7f, 0x80, 0x7d, 0x7f, 0x80, 0x7f, 0x80, 0x7f, 0x80, 0x81, 0x7d, 0x80,
 0x82, 0x7f, 0x80
};
unsigned int quack_wav_len = 1467;
unsigned int p = 0;

void setup() {
 // Enable 64 MHz PLL and use as source for Timer1
 PLLCSR = 1<<PCKE | 1<<PLLE;    

 // Set up Timer/Counter1 for PWM output
 TIMSK = 0;                              // Timer interrupts OFF
 TCCR1 = 1<<PWM1A | 2<<COM1A0 | 1<<CS10; // PWM A, clear on match, 1:1 prescale
 GTCCR = 1<<PWM1B | 2<<COM1B0;           // PWM B, clear on match
 OCR1A = 128; OCR1B = 128;               // 50% duty at start

 // Set up Timer/Counter0 for 8kHz interrupt to output samples.
 TCCR0A = 3<<WGM00;                      // Fast PWM
 TCCR0B = 1<<WGM02 | 2<<CS00;            // 1/8 prescale
 TIMSK = 1<<OCIE0A;                      // Enable compare match
 OCR0A = 124;                            // Divide by 1000

 set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 pinMode(4, OUTPUT);
 pinMode(1, OUTPUT);
}

void loop() { }

// Sample interrupt
ISR(TIMER0_COMPA_vect) {
 char sample = pgm_read_byte(&quack_wav[p++]);
 OCR1A = sample; OCR1B = sample ^ 255;
 // End of data? Go to sleep
 if (p == quack_wav_len) {
   adc_disable();
   sleep_enable();
   sleep_cpu();  // 1uA
 }
}

и

//MODIFIED Version of Adafruit Trinket code to give attiny85 PCM capability
//The Attiny will take a very short sound sample that will sound good if looped
//I used the sound of a sonic screwdriver to example this capability
//Crete PCM using a program such as http://thieumsweb.free.fr/english/gbacss.html, copy the code right after PROGMEM = {    and make sure that it ends with the };
//I use 8000 as my sample rate as allows the longest soundbyte to be uploaded to the chip
/*
if you change the sample rate, alter the sample_rate value
Otherwise the program will create a looped sound on pin 4 of the attiny85
*/
// Audio playback sketch for Adafruit Trinket.  Requires 3.3V
// Trinket board and Winbond W25Q80BV serial flash loaded with
// audio data.  PWM output on pin 4; add ~25 KHz low-pass filter
// prior to amplification.  Uses ATtiny-specific registers;
// WILL NOT RUN ON OTHER ARDUINOS.



int sample_rate = 8000;
const unsigned char sample[] PROGMEM = {32, 242, 67, 102, 211, 46, 156, 163, 54, 197, 94, 112, 183, 56, 183, 112, 97, 187, 69, 158, 136, 87, 177, 95, 126, 164, 77, 162, 129, 95, 164, 115, 104, 174, 84, 146, 138, 101, 148, 129, 103, 161, 104, 131, 142, 107, 144, 122, 122, 143, 108, 145, 118, 127, 135, 119, 134, 125, 126, 130, 129, 115, 148, 108, 137, 129, 123, 125, 140, 110, 144, 111, 145, 110, 142, 118, 135, 119, 136, 124, 123, 137, 118, 132, 129, 123, 132, 126, 126, 135, 114, 145, 110, 137, 133, 102, 169, 83, 157, 125, 100, 171, 92, 131, 167, 56, 200, 91, 106, 199, 43, 175, 151, 42, 221, 93, 72, 244, 26, 148, 195, 24, 196, 132, 62, 209, 74, 130, 174, 53, 199, 89, 116, 181, 59, 179, 115, 99, 181, 76, 151, 145, 80, 176, 108, 105, 174, 91, 125, 170, 72, 159, 140, 80, 176, 109, 107, 169, 93, 139, 139, 104, 150, 114, 127, 142, 104, 152, 111, 132, 132, 118, 137, 123, 125, 135, 122, 124, 140, 112, 139, 121, 134, 116, 143, 110, 143, 113, 143, 112, 142, 115, 137, 123, 127, 133, 119, 138, 115, 139, 121, 124, 139, 114, 134, 135, 107, 154, 106, 133, 145, 89, 177, 83, 153, 129, 97, 175, 86, 137, 165, 51, 211, 75, 121, 192, 34, 201, 119, 59, 234, 54, 113, 225, 11, 184, 165, 31, 213, 106, 79, 210, 60, 148, 162, 55, 207, 75, 131, 173, 56, 191, 101, 107, 184, 65, 165, 134, 80, 189, 88, 122, 176, 69, 154, 153, 66, 182, 119, 84, 192, 82, 132, 156, 92, 148, 131, 104, 160, 99, 142, 130, 111, 149, 110, 137, 127, 120, 137, 123, 124, 137, 119, 131, 130, 122, 136, 116, 143, 112, 140, 116, 141, 113, 138, 124, 126, 129, 128, 129, 121, 139, 115, 138, 118, 137, 119, 131, 131, 119, 135, 127, 118, 145, 110, 137, 133, 103, 167, 82, 165, 114, 105, 181, 66, 164, 141, 63, 217, 54, 148, 178, 26, 228, 90, 70, 250, 17, 154, 201, 6, 216, 121, 61, 212, 79, 115, 186, 61, 166, 135, 79, 193, 74, 146, 151, 73, 188, 91, 121, 175, 64, 174, 124, 84, 197, 70, 140, 170, 57, 180, 128, 75, 193, 96, 104, 189, 67, 157, 136, 99, 152, 127, 102, 168, 90, 149, 122, 122, 137, 117, 135, 126, 122, 137, 121, 125, 136, 117, 136, 121, 131, 130, 117, 141, 118, 130, 126, 132, 120, 132, 131, 121, 132, 127, 128, 122, 140, 112, 141, 118, 134, 125, 128, 130, 123, 131, 130, 116, 147, 109, 134, 141, 95, 171, 86, 151, 134, 86, 190, 72, 147, 158, 56, 212, 68, 131, 191, 21, 223, 102, 60, 252, 21, 152, 195, 18, 208, 119, 72, 202, 84, 115, 182, 69, 154, 147, 77, 180, 96, 126, 157, 82, 168, 111, 106, 180, 67, 164, 136, 75, 198, 76, 130, 175, 57, 178, 124, 90, 175, 107, 106, 178, 76, 155, 131, 105, 146, 131, 99, 165, 98, 142, 122, 133, 118, 136, 122, 131, 122, 134, 124, 125, 134, 121, 133, 124, 128, 132, 119, 136, 125, 124, 133, 123, 131, 124, 131, 125, 129, 125, 134, 117, 139, 119, 131, 130, 121, 134, 126, 122, 138, 115, 140, 114, 142, 116, 131, 138, 102, 166, 86, 158, 124, 95, 188, 64, 163, 143, 60, 226, 40, 158, 178, 15, 244, 72, 91, 231, 21, 177, 157, 45, 211, 88, 110, 180, 79, 141, 152, 89, 151, 135, 97, 161, 110, 122, 153, 91, 162, 110, 117, 166, 77, 163, 129, 83, 195, 73, 138, 167, 61, 186, 104, 114, 156, 109, 120, 161, 85, 160, 119, 114, 145, 123, 113, 152, 107, 140, 119, 137, 116, 138, 120, 135, 118, 137, 121, 127, 135, 116, 138, 122, 125, 135, 122, 126, 136, 117, 134, 126, 127, 127, 129, 126, 131, 120, 138, 117, 133, 129, 120, 140, 115, 138, 123, 126, 135, 115, 146, 102, 155, 107, 131, 147, 86, 182, 75, 160, 130, 87, 196, 53, 179, 125, 68, 237, 8, 202, 137, 38, 248, 40, 137, 192, 30, 203, 111, 84, 200, 69, 140, 160, 77, 161, 129, 100, 156, 118, 114, 154, 104, 136, 137, 103, 159, 102, 136, 142, 96, 157, 123, 96, 185, 72, 150, 152, 69, 192, 84, 139, 140, 110, 131, 148, 91, 163, 109, 126, 138, 121, 125, 136, 121, 131, 124, 134, 118, 137, 120, 132, 125, 128, 129, 123, 135, 118, 136, 123, 126, 132, 126, 123, 135, 123, 127, 131, 124, 129, 127, 127, 129, 124, 132, 125, 126, 135, 114, 145, 108, 144, 118, 129, 134, 112, 153, 92, 166, 98, 136, 147, 83, 187, 69, 169, 115, 104, 186, 46, 207, 84, 109, 212, 8, 231, 87, 92, 215, 36, 180, 135, 70, 203, 72, 140, 155, 83, 158, 125, 109, 148, 121, 118, 144, 115, 129, 136, 114, 140, 121, 125, 137, 117, 132, 136, 109, 144, 127, 104, 169, 87, 147, 140, 86, 183, 76, 161, 115, 128, 124, 145, 96, 162, 103, 137, 128, 125, 127, 131, 124, 129, 128, 127, 126, 132, 122, 133, 125, 126, 132, 121, 134, 123, 129, 129, 126, 129, 127, 129, 125, 130, 128, 124, 129, 132, 116, 141, 118, 131, 129, 126, 125, 136, 111, 150, 101, 152, 110, 135, 132, 112, 154, 92, 169, 89, 153, 123, 106, 174, 64, 195, 75, 146, 158, 50, 229, 42, 160, 163, 41, 226, 59, 142, 167, 57, 195, 91, 119, 174, 67, 174, 111, 116, 152, 107, 135, 132, 120, 131, 130, 120, 137, 120, 131, 129, 121, 137, 116, 140, 114, 142, 116, 129, 141, 97, 168, 88, 153, 126, 103, 174, 70, 182, 88, 150, 116, 138, 111, 149, 109, 137, 129, 121, 132, 129, 123, 130, 130, 121, 134, 124, 125, 134, 119, 134, 126, 125, 133, 123, 129, 128, 127, 127, 129, 127, 126, 129, 127, 127, 127, 133, 116, 141, 115, 138, 116, 142, 110, 148, 105, 152, 102, 153, 106, 142, 122, 122, 144, 98, 170, 77, 173, 102, 121, 170, 56, 209, 60, 159, 145, 64, 219, 40, 181, 124, 84, 197, 63, 161, 138, 79, 193, 73, 149, 144, 87, 170, 101, 131, 139, 114, 135, 126, 126, 130, 125, 128, 131, 118, 144, 110, 138, 132, 107, 159, 93, 153, 120, 113, 162, 80, 176, 88, 150, 126, 108, 165, 78, 180, 82, 160, 109, 136, 124, 126, 135, 114, 144, 113, 136, 123, 132, 119, 140, 115, 138, 120, 135, 119, 135, 121, 133, 122, 132, 125, 129, 126, 132, 118, 139, 117, 135, 123, 132, 123, 129, 132, 114, 148, 106, 145, 114, 142, 108, 154, 99, 154, 105, 146, 114, 133, 130, 114, 155, 86, 177, 80, 161, 118, 108, 173, 67, 188, 84, 138, 156, 70, 199, 63, 167, 123, 100, 172, 85, 149, 137, 90, 180, 80, 152, 133, 100, 158, 104, 145, 113, 141, 119, 128, 135, 120, 125, 140, 117, 123, 154, 87, 162, 120, 100, 180, 73, 161, 127, 93, 185, 64, 177, 105, 121, 157, 85, 174, 82, 164, 104, 136, 131, 115, 146, 106, 154, 99, 154, 108, 139, 121, 134, 116, 144, 109, 145, 111, 145, 109, 144, 118, 129, 131, 127, 123, 139, 111, 146, 110, 141, 120, 126, 136, 118, 137, 118, 141, 107, 154, 99, 152, 110, 138, 121, 136, 114, 145, 114, 133, 130, 115, 150, 93, 171, 78, 178, 89, 145, 136, 93, 180, 72, 167, 115, 110, 175, 64, 189, 88, 138, 141, 98, 159, 103, 138, 137, 97, 168, 95, 141, 135, 103, 158, 99, 153, 101, 153, 116, 118, 156, 95, 144, 135, 108, 130, 158, 75, 173, 117, 92, 196, 59, 163, 142, 67, 210, 52, 171, 127, 89, 193, 57, 184, 94, 136, 140, 100, 162, 91, 163, 96, 154, 105, 148, 110, 139, 120, 133, 121, 137, 116, 145, 103, 156, 101, 143, 126, 115, 144, 118, 122, 149, 98, 158, 107, 132, 135, 114, 144, 110, 146, 111, 143, 113, 141, 115, 134, 129, 120, 136, 120, 135, 121, 137, 109, 160, 83, 179, 71, 184, 75, 172, 101, 130, 150, 91, 165, 94, 147, 133, 92, 185, 63, 182, 100, 123, 156, 90, 156, 117, 119, 144, 110, 145, 117, 125, 145, 104, 149, 108, 146, 106, 148, 125, 99, 185, 69, 161, 129, 101, 147, 144, 71, 193, 96, 104, 196, 53, 166, 146, 58, 221, 43, 173, 135, 73, 209, 45, 186, 109, 104, 179, 63, 189, 80, 157, 115, 131, 128, 130, 116, 145, 109, 138, 127, 125, 127, 139, 105, 155, 106, 132, 142, 98, 159, 107, 125, 156, 85, 167, 106, 124, 152, 91, 160, 104, 143, 116, 140, 116, 135, 127, 121, 137, 113, 145, 109, 147, 107, 153, 96, 168, 79, 179, 75, 177, 87, 149, 129, 107, 162, 89, 159, 112, 127, 141, 101, 166, 86, 160, 118, 110, 165, 90, 150, 122, 119, 139, 123, 123, 140, 115, 141, 116, 133, 121, 141, 106, 146, 128, 93, 200, 42, 186, 124, 83, 180, 110, 89, 203, 64, 137, 179, 47, 190, 117, 81, 205, 53, 168, 135, 75, 208, 47, 188, 106, 104, 185, 56, 189, 88, 142, 136, 107, 151, 113, 127, 139, 115, 127, 144, 102, 148, 124, 116, 147, 113, 124, 153, 86, 167, 103, 130, 150, 88, 169, 108, 110, 175, 69, 175, 101, 136, 127, 127, 128, 129, 128, 122, 136, 117, 140, 109, 153, 98, 159, 101, 151, 99, 162, 94, 147, 124, 113, 161, 83, 170, 99, 141, 125, 125, 130, 124, 133, 121, 129, 136, 110, 152, 105, 138, 131, 119, 125, 147, 96, 160, 110, 127, 142, 109, 143, 122, 114, 149, 121, 99, 196, 38, 204, 103, 88, 201, 72, 122, 194, 42, 176, 148, 56, 205, 89, 110, 186, 60, 173, 119, 99, 181, 70, 170, 112, 113, 168, 70, 184, 82, 154, 122, 113, 156, 101, 137, 138, 107, 137, 139, 98, 157, 119, 110, 162, 95, 143, 134, 101, 162, 102, 130, 149, 92, 161, 113, 115, 161, 89, 154, 118, 125, 132, 125, 133, 114, 148, 108, 141, 119, 134, 112, 156, 91, 163, 102, 141, 124, 133, 113, 144, 123, 113, 157, 90, 163, 106, 130, 139, 111, 141, 120, 128, 130, 122, 138, 116, 136, 128, 116, 148, 106, 133, 148, 87, 170, 106, 115, 174, 69, 174, 106, 117, 162, 91, 133, 174, 42, 217, 80, 105, 206, 44, 156, 174, 34, 207, 113, 75, 208, 73, 129, 173, 61, 184, 99, 124, 155, 89, 166, 101, 137, 139, 94, 177, 71, 174, 106, 117, 168, 80, 155, 137, 92, 158, 124, 101, 162, 110, 116, 164, 87, 154, 124, 112, 149, 112, 128, 144, 102, 153, 113, 128, 140, 111, 139, 121, 131, 124, 128, 134, 115, 143, 117, 131, 127, 130, 118, 144, 104, 149, 116, 129, 131, 126, 124, 136, 122, 120, 149, 101, 151, 116, 127, 139, 113, 139, 119, 132, 127, 123, 136, 119, 132, 134, 110, 152, 104, 137, 141, 90, 172, 99, 126, 164, 70, 182, 100, 116, 173, 67, 169, 136, 63, 217, 69, 115, 213, 16, 194, 147, 35, 230, 80, 96, 210, 52, 154, 156, 69, 183, 96, 128, 150, 93, 164, 99, 144, 126, 113, 158, 81, 176, 97, 121, 173, 66, 172, 128, 85, 180, 104, 105, 178, 84, 136, 157, 81, 167, 113, 117, 150, 109, 130, 143, 102, 150, 119, 122, 143, 110, 142, 116, 136, 121, 128, 134, 118, 132, 137, 106, 154, 107, 135, 130, 118, 140, 120, 126, 140, 111, 142, 117, 135, 117, 143, 109, 142, 121, 129, 128, 129, 124, 130, 129, 123, 127, 137, 114, 137, 131, 108, 157, 100, 139, 141, 86, 184, 80, 142, 155, 70, 191, 89, 118, 186, 44, 194, 115, 74, 220, 54, 130, 207, 8, 216, 122, 52, 229, 67, 115, 195, 53, 167, 134, 94, 163, 105, 134, 134, 113, 146, 110, 142, 120, 126, 141, 100, 165, 95, 134, 157, 73, 174, 122, 86, 192, 81, 126, 170, 77, 151, 146, 81, 176, 101, 127, 146, 110, 129, 145, 100, 149, 122, 117, 143, 118, 126, 135, 120, 130, 127, 130, 123, 131, 131, 117, 142, 114, 138, 119, 136, 120, 132, 125, 133, 116, 143, 113, 138, 118, 137, 116, 137, 125, 122, 134, 126, 120, 143, 110, 143, 117, 131, 132, 113, 152, 97, 155, 114, 119, 161, 74, 186, 86, 130, 172, 52, 201, 93, 101, 207, 30, 194, 129, 56, 229, 57, 119, 218, 4, 214, 125, 54, 221, 77, 105, 201, 52, 163, 139, 91, 163, 109, 130, 135, 113, 148, 103, 151, 112, 129, 143, 97, 164, 100, 129, 159, 77, 167, 130, 78, 199, 75, 131, 168, 74, 157, 138, 90, 164, 116, 109, 161, 99, 136, 138, 108, 141, 128, 115, 141, 124, 118, 143, 116, 130, 133, 121, 130, 127, 129, 122, 136, 119, 135, 118, 139, 115, 137, 121, 134, 118, 139, 116, 135, 125, 128, 127, 129, 127, 126, 129, 130, 119, 142, 112, 141, 120, 127, 140, 100, 167, 84, 162, 116, 107, 177, 61, 189, 96, 113, 190, 37, 209, 91, 98, 211, 29, 189, 138, 44, 244, 40, 138, 198, 21, 205, 123, 63, 212, 82, 105, 199, 54, 163, 140, 88, 164, 112, 124, 139, 118, 134, 120, 138, 115, 137, 127, 115, 149, 108, 133, 144, 97, 151, 134, 86, 184, 88, 125, 169, 74, 159, 132, 98, 154, 130, 92, 181, 79, 154, 124, 118, 135, 132, 110, 150, 110, 136, 126, 127, 125, 133, 121, 134, 124, 129, 127, 128, 127, 130, 121, 139, 115, 137, 125, 124, 132, 126, 123, 136, 116, 139, 118, 135, 122, 133, 120, 139, 111, 148, 107, 144, 118, 127, 142, 98, 171, 80, 164, 115, 106, 183, 51, 200, 85, 121, 185, 36, 218, 74, 119, 195, 33, 201
};

int fish = 0;
int sizesample = sizeof(sample);

void setup() {

 PLLCSR |= _BV(PLLE);               // Enable 64 MHz PLL
 delayMicroseconds(100);            // Stabilize
 while(!(PLLCSR & _BV(PLOCK)));     // Wait for it...
 PLLCSR |= _BV(PCKE);               // Timer1 source = PLL

 // Set up Timer/Counter1 for PWM output
 TIMSK  = 0;                        // Timer interrupts OFF
 TCCR1  = _BV(CS10);                // 1:1 prescale
 GTCCR  = _BV(PWM1B) | _BV(COM1B1); // PWM B, clear on match
 OCR1C  = 255;                      // Full 8-bit PWM cycle
 OCR1B  = 127;                      // 50% duty at start

 pinMode(4, OUTPUT);                // Enable PWM output pin

 // Set up Timer/Counter0 for sample-playing interrupt.
 // TIMER0_OVF_vect is already in use by the Arduino runtime,
 // so TIMER0_COMPA_vect is used.  This code alters the timer
 // interval, making delay(), micros(), etc. useless (the
 // overflow interrupt is therefore disabled).

 // Timer resolution is limited to either 0.125 or 1.0 uS,
 // so it's rare that the playback rate will precisely match
 // the data, but the difference is usually imperceptible.
 TCCR0A = _BV(WGM01) | _BV(WGM00);  // Mode 7 (fast PWM)
 if(sample_rate >= 31250) {
   TCCR0B = _BV(WGM02) | _BV(CS00); // 1:1 prescale
   OCR0A  = ((F_CPU + (sample_rate / 2)) / sample_rate) - 1;
 } else {                           // Good down to about 3900 Hz
   TCCR0B = _BV(WGM02) | _BV(CS01); // 1:8 prescale
   OCR0A  = (((F_CPU / 8L) + (sample_rate / 2)) / sample_rate) - 1;
 }
 TIMSK = _BV(OCIE0A); // Enable compare match, disable overflow
}

void loop() {
delay(1000);
}

ISR(TIMER0_COMPA_vect) {
 OCR1B = pgm_read_byte(&sample[fish]);      // Read flash, write PWM reg.
 fish ++;
 if (fish >= sizesample){fish = 0;}
 /*
 if(++index >= samples) {           // End of audio data?
   index = 0;                       // We must repeat!
   flash.endRead();
   flash.beginRead(6);              // Skip 6 byte header
 }
 */
}

В первом случае он играет при подаче питания или после ресета. Для прямого подключения динамика синхронно задействованы 2 PWMа.

Во втором случае играет на один PWM но по непрерывно по кругу.

Нужно:

Добавить в код кнопку при нажатии которой один из выходов будет вставать в режим HIGH, после отпускания которой будет запускаться проигрывание сэмпла, после проигрывания сэмпла выход находящийся в режиме HIGH должен вставать в LOW.

Так же проигрывание должно осуществляться не двумя а одним PWMом, т.к. будет использоваться LPF и УНЧ.

Какой код будет взят за основу не важно, первый выглядит понятнее, второй полнее (и может быть лучше). В идеале перепилить оба.

Предложения в ЛС

vvadim
Offline
Зарегистрирован: 23.05.2012

здесь лички нет, оставляй свои координаты))))

Dubolom
Offline
Зарегистрирован: 15.02.2017

Хех, точняк))

lts2000@ya.ru