Страница 1 из 2
AVR+WAv
Добавлено: Ср авг 22, 2018 07:26:01
sirha
Всем привет,подскажите пожалуйста собираю wav проигрыватель на atmega8,частота проца 16 мгц,читаю с микро sd карты 2 гб,воспроизвожу 44.1 кгц стерео.
Вопрос в том почему при частоте spi начиная от 500 кгц и заканчивая 4 мгц все окей,а когда ставлю делитель частоты к 2 тоесть получаю частоту spi 8 мгц,музыка ускоряется.
Иногда бывало что даже на частотах от 500 кгц до 4 мгц при подаче питания муз не запускалась,потом прочитав некоторые нюансы сделал инициализацию sd карты на меньших частотах установив делитель 128 тоесть 125 кгц и стало сразу запускаться нормально,но если далее ставлю частоту spi 8 мгц после инициализации на 125 кгц то все равно скорость звука ускоряется,с чем это связано?,помогите пожалуйста.
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 07:41:13
ARV
sirha писал(а):все равно скорость звука ускоряется
это связано с ошибками в программе
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 07:53:32
sirha
это связано с ошибками в программе
Допустим есть ошибка в программе,каким образом происходит ускорение??? почему именно при повышении частоты SPI?
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 07:58:08
ARV
sirha писал(а):каким образом происходит ускорение
загадочным

вы на самом деле не понимаете, что по вашим вопросам можно только издеваться, а не помогать?
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 07:59:59
sirha
по вашим вопросам можно только издеваться, а не помогать?
Загадочным))),тогда зачем отвечать что проблема в программе ,если вы не можете написать из за чего это)).
Приведите примеры почему вы так предположили.
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 08:02:16
pyzhman
[uquote="sirha",url="/forum/viewtopic.php?p=3441392#p3441392"]...с чем это связано?...[/uquote]
С частотой временнОй дискретизации сигнала.
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 08:02:41
ARV
sirha писал(а):Приведите примеры почему вы так предположили
а еще что-нибудь до кучи вам не сделать?

я на своем веку повидал столько разных специалистов, что совершенно не удивляюсь, когда у кого-то каждый раз, когда он чешет себе пузо, гаснет свет в сарае. профессионализм, что еще сказать...
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 08:05:11
sirha
С частотой временнОй дискретизации сигнала
частота дискретизации связана с таймерами,причем тут SPI? и увеличение скорости воспроизведения?,я пойму еще что если скорости spi будет нехватать,а тут все по другому.
я на своем веку повидал столько разных специалистов
А смысл писать ???,вот вы написали,я тоже мог и сам предположить что что то в программе,я же не просто задал вопрос,считайте что вы ничего не написали)),это же форум тут надо помогать,а не вести разглогольствование,не базар же.
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 08:34:28
Ivanoff-iv
помогают - как могут. большего отсюда не видно, стеклянный шар отдан на полировку

посмотрите на что опирается такт программы, я делал музыку - всё опиралось на таймер, он и музыку играл и светодиоды мигал и кнопку опрашивал, он же и запускал следующий байт на чтение... а как сделано у вас я не знаю (смотри выше).
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 08:55:22
sirha
а как сделано у вас я не знаю
;//прерывания ТАЙМЕРА
Спойлер
Код: Выделить всё
TIMER:
push R17
in R17,SREG
push R16
;//читаем ОЗУ в первый канал
ld R20,Y+
;//проверяем концовку адресса ОЗУ,считаем до 512 байт
;/////////////////////////////////////////
cpi R28,0x5F
breq pro_play
rjmp play_OCR
pro_play:
cpi R29,0x02
brne play_OCR
rjmp clear_adressOZY
;////////////////////////////////////////
;//играем выборки
play_OCR:
ldi R16,0x00
out OCR1AH,R16
out OCR1AL,R20
ld R20,Y+
;//читаем ОЗУ во второй канал
out OCR1BH,R16
out OCR1BL,R20
pop R16
out SREG,R17
pop R17
reti
;//обнуление адресса ОЗУ и проигрывание последней выборки
clear_adressOZY:
ldi R16,0x00
out OCR1AH,R16
out OCR1AL,R20
;///////////////
ld R20,Y+
out OCR1BH,R16
out OCR1BL,R20
;//обнуляем счетчик
ldi R28,0x60
ldi R29,0x00
pop R16
out SREG,R17
pop R17
reti
ничего особенного буфер 512 байт,разбит на две части по 256 байт,читаю карту и записываю в первую часть буфера -записал,пока карта читает из первого буфера пишу во вторую часть буфера и потом наоборот.
чтение буфера и коды:
Спойлер
Код: Выделить всё
write_onebuffer:
;//проверка от повторной записи
cpi R27,0x00
brne wait_41
rjmp wait_4
wait_41:
ret
wait_4:
;//шлём байт
ldi byte,0xff
rcall write_byte
;//пишем байт в ОЗУ
st X+,R16
cpi R26,0x60
brne wait_4
cpi R27,0x01
brne wait_4
ret
;//функция записи байт второго буффера
write_twobuffer:
;//проверка от повторной записи
cpi R27,0x01
brne wait_51
rjmp wait_5
wait_51:
ret
wait_5:
;//шлём байт
ldi byte,0xff
rcall write_byte
;//пишем байт в ОЗУ
st X+,R16
cpi R26,0x60
brne wait_5
cpi R27,0x02
brne wait_5
;//сдвигаем 2 раза CRC
ldi byte,0xff
rcall write_byte
ldi byte,0xff
rcall write_byte
;//проверка принятия пакета
ldi byte,0xFE
rcall pro_otvet
;//очистим память
ldi R26,0x60
ldi R27,0x00
ret
;//Инициализация и общий цикл
Спойлер
Код: Выделить всё
;//инициализация карты
;//****
**************************************************************************
rcall installSPIinit;;/125 кгц
delayms 20
;//подадим первые 80 импульсов
;//////////////////////////////
rcall ss_on
rcall impuls
rcall ss_off
;//////////////////////////////
;//Выполним CMD0
ldi byte,0x40
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x95
rcall write_byte
;/////////////////////////
;//проверка ответа
ldi byte,0x01
rcall pro_otvet
;//////////////////////////////
;//Выполним ACMD41
ACMD41:
ldi byte,0x77
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
;/////////////////////////
;//проверка ответа
ldi byte,0x01
rcall pro_otvet
;//////////////////////////
ldi byte,0x69
rcall write_byte
ldi byte,0x40
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0xFF
rcall write_byte
;/////////////////////////
ldi byte,0xFF
rcall write_byte
;//проверка ответа
ldi byte,0x00
rcall pro_otvet_ACMD41
;///////////
;//отправляем команду на чтение карточки CMD18
ldi byte,0x52
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x04
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
ldi byte,0x00
rcall write_byte
;/////////////////////////
;//проверка ответа
ldi byte,0x00
rcall pro_otvet
sbi PORTB,0
;//проверка принятия пакета
ldi byte,0xFE
rcall pro_otvet
rcall installSPI ;//8 мгц
;//////////////////////////
;//запишем первые 256 байт в ОЗУ
adress_OZY 0x00,0x60
rcall write_onebuffer
ldi R28,0x60
ldi R29,0x00
;//вкл таймер и прерывание
rcall start_HIM
rcall start_TIMER
sei
;//////////////////////////////////////////////////////////////
;/////////////////////////////////////////////////////////////
[i];;//ОСНОВНОЙ ЦИКЛ ПРОГРАММЫ[/i]
MAINplay:
;//распишем алгоритм записи байт в ОЗУ
cpi R29,0x01
brcs two_buffer
cpi R29,0x02
brcc PRO
cpi R28,0x60
brcs two_buffer
rjmp one_buffer
PRO:
cpi R28,0x60
brcs one_buffer
rjmp MAINplay
;//пишем в первый буфер 256 байт
one_buffer:
rcall write_onebuffer
rjmp MAINplay
;//пишем во второй буфер 256 байт
two_buffer:
rcall write_twobuffer
rjmp MAINplay
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 10:38:24
Ivanoff-iv
моожет она умудряется по 2 раза в буфер читать? кусок, то небольшой - весь буфер = 1/172 с если блок будет пропущен, то это будет заметно как раз удвоением скорости (перескоки будут не заметны)
оно проверяет читать или нет с карты по адресу воспроизведения? может он успевает вычитать весь блок, а адрес воспроизведения не успевает уйти со стартового значения? (я АСМом редко пользуюсь, не всё разобрал)
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 18:20:52
sirha
моожет она умудряется по 2 раза в буфер читать? )
оно проверяет читать или нет с карты по адресу воспроизведения? может он успевает вычитать весь блок, а адрес воспроизведения не успевает уйти со стартового значения? (я АСМом редко пользуюсь, не всё разобрал)
Думаю вы правы,в прерывании таймера нету привязке к адресации записи буффера ,чтение идет постоянно без всяких проверок,попробую исправить, организую скорее всего буфер 128 байт,спасибо большое буду исправлять.

Re: AVR+WAv
Добавлено: Ср авг 22, 2018 18:46:48
afz
А еще убери исходники под спойлер.
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 19:43:16
sirha
под спойлер
это как???
Млин были бы вы девушкой Ivanoff-IV расцеловаал бы вас)))),все поправил))
Вы были правы.
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 19:54:05
Ivanoff-iv
Если б был бы я девченкой, я бы маме так помог,
Мама сразу бы сказала - молодчина, ты, сынок!

—————
Можешь, как мужик мужику, плюсик поставить...
Спойлер
под спойлер:
правка сообщения (если ещё доступна)
выделяешь блок от тега код до тега /код (и теги тоже)
нажимаешь кнопку спойлер
так повторяешь для каждого блока
после этого сообщение станен коротким, и только тот, кто захочет - развернёт портянку кода
Re: AVR+WAv
Добавлено: Ср авг 22, 2018 20:14:23
sirha
Спасибо тебе
Можешь, как мужик мужику, плюсик поставить...
А ты думаешь я не пытался

,у меня видимо карма -5,не ставиться нифига,грузит страницу бесконца ,ща ещё раз попробую,плюсик как поставить???,где рейтинг сообщения ?не выходит.
Re: AVR+WAv
Добавлено: Чт авг 23, 2018 08:50:31
Ivanoff-iv
а зачем нужен буфер? у Вас устройство может воспроизводить фрагментированные файлы?
ПС. а девушек (особенно красивых) и я целовать не прочь

Re: AVR+WAv
Добавлено: Чт авг 23, 2018 15:05:44
sirha
а зачем нужен буфер?
Как зачем))),с самой карты памяти я не смогу напрямую читать на выход так как скорость чтения очень маленькая,для этого применяем ОЗУ,фрагментированные файлы?у меня sd карта малоскоростная 2гб.
Re: AVR+WAv
Добавлено: Чт авг 23, 2018 16:11:58
Ivanoff-iv
буферить 1 (2, если стерео) байт может сам таймер, если его правильно настроить, а этого достаточно, если нет фрагментации файлов (каждый следующий байт идет за предыдущим и не придется файл собирать по кускам с разных участков флешки).
Вот этот проект я повторял и допиливал под себя - он работает.
там тини 2313, никакого буфера, только прямая запись из карты в регистры таймера, тактовая частота контроллера 8 МГц, семплирование 8 бит 32 кГц, моно, но, думаю, при желании можно и с вашими характеристиками сделать (если с кварцем >=12 МГц).
Добавлено after 1 minute 9 seconds:
я думаю с алгоритмбилдером вы разберетесь, он не сложнее ассемблера.

Re: AVR+WAv
Добавлено: Чт авг 23, 2018 17:45:37
sirha
буферить 1 (2, если стерео) байт может сам таймер, если его правильно настроить,никакого буфера, только прямая запись из карты в регистры таймера
Я все равно не пойму???,как так без буфера,если у меня байт передается с карты очень долго,все равно нужен буфер не маленький не менее 128 байт)),обьясните, байт передается с карты порядка 1 мс или дольше, а читаем мы 1 байт например при частоте 44 кгц за 22 мкс,каким образом то без буфера???