Код: Выделить всё
while(count--) OCR1B = _FF_spi(0xFF);
Ну и конечно строчки
Код: Выделить всё
_FF_spi(0x3);
_FF_spi(0x0);
_FF_spi(0x0);
_FF_spi(0x0);
А зачем задержка в 1мс?
Код: Выделить всё
while(count--) OCR1B = _FF_spi(0xFF);
Код: Выделить всё
_FF_spi(0x3);
_FF_spi(0x0);
_FF_spi(0x0);
_FF_spi(0x0);
эта строчка читает одну страницу в 128 байтКод: Выделить всё
while(count--) OCR1B = _FF_spi(0xFF);
0х3 это код команды чтения из епромаКод: Выделить всё
_FF_spi(0x3); _FF_spi(0x0); _FF_spi(0x0); _FF_spi(0x0);
То есть подряд 128 байт? И сразу их в OCR1B? Во-первых там двойная буферизация, и пока таймер не переполнится, регистр не обновится, а когда он будет обновляться, там уже останется только 128-й байт (или ХЗ который из них, смотря в какой момент это будет). Во-вторых у вас как-нибудь код соотносится с частотой квантования (обзовем ее Fs), с которой записан звук?Dimon49773 писал(а): эта строчка читает одну страницу в 128 байт
Даже если бы код сработал, вы получили бы циклическое вопроизведение первых 128 семплов. При частоте Fs=11025кГц, это примерно сотая доля секунды.Dimon49773 писал(а): а остальное это первоначальный адрес 00 00 00 H
я понимаю...я потом уже сделаю функцию которая будет читать нормально...мне бы сейчас первые 128 байт загнать в пвм...Даже если бы код сработал, вы получили бы циклическое вопроизведение первых 128 семплов. При частоте Fs=11025кГц, это примерно сотая доля секунды.
Зачем использовать метод тыка, если есть форум. Сделайте как я написал. Читайте в прерывании по переполнению таймера по одному байту, там же суйте этот байт в OCR и прибавляйте +1 к адресу. А в главном цикле вообще ничего не будет.Dimon49773 писал(а):я работаю методом тыка так что я сейчас экспериментирую...если можете помогите с пвм
Да, адрес инкрементируется сам в памяти, но только при последовательном чтении. Как только чтение кончается (перепад на CS - 0->1), для следующего чтения нужно опять подать команду 0х03, а за ней опять нужно передать адрес. Можно конечно всю жизнь держать CS в 0, но что если вдруг в процессе нужно будет подать другую команду, или если нужно воспроизводить не с 0-го адреса? Так сложно завести 3 байта для адреса?Dimon49773 писал(а):адрес сам инкрементируется...
Таймер по любому должен считать до максимума (или от 0 до макс а потом от макс до 0, если phase correct PWM). Просто регистр сравнения нет никакого смысла обновлять чаще чем один раз в период. Он просто не будет обновляться. А раз в период как раз происходит переполнение, так что это прерывание можно использовать для обновления OCR.Dimon49773 писал(а):а прерывания имеете ввиду чтоб таймер считал до 128 или как??
Верно, забыл что x5-я серия это умеет.phanis писал(а):Вроде у атини85 PLL, шимка до 250 КГЦ..