AVR+WAv

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Всем привет,подскажите пожалуйста собираю wav проигрыватель на atmega8,частота проца 16 мгц,читаю с микро sd карты 2 гб,воспроизвожу 44.1 кгц стерео.
Вопрос в том почему при частоте spi начиная от 500 кгц и заканчивая 4 мгц все окей,а когда ставлю делитель частоты к 2 тоесть получаю частоту spi 8 мгц,музыка ускоряется.
Иногда бывало что даже на частотах от 500 кгц до 4 мгц при подаче питания муз не запускалась,потом прочитав некоторые нюансы сделал инициализацию sd карты на меньших частотах установив делитель 128 тоесть 125 кгц и стало сразу запускаться нормально,но если далее ставлю частоту spi 8 мгц после инициализации на 125 кгц то все равно скорость звука ускоряется,с чем это связано?,помогите пожалуйста.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

sirha писал(а):все равно скорость звука ускоряется
это связано с ошибками в программе
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

это связано с ошибками в программе
Допустим есть ошибка в программе,каким образом происходит ускорение??? почему именно при повышении частоты SPI?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

по вашим вопросам можно только издеваться, а не помогать?
Загадочным))),тогда зачем отвечать что проблема в программе ,если вы не можете написать из за чего это)).
Приведите примеры почему вы так предположили.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

[uquote="sirha",url="/forum/viewtopic.php?p=3441392#p3441392"]...с чем это связано?...[/uquote]
С частотой временнОй дискретизации сигнала.
Docendo discimus
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

sirha писал(а):Приведите примеры почему вы так предположили
а еще что-нибудь до кучи вам не сделать? ;)
я на своем веку повидал столько разных специалистов, что совершенно не удивляюсь, когда у кого-то каждый раз, когда он чешет себе пузо, гаснет свет в сарае. профессионализм, что еще сказать...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

С частотой временнОй дискретизации сигнала
частота дискретизации связана с таймерами,причем тут SPI? и увеличение скорости воспроизведения?,я пойму еще что если скорости spi будет нехватать,а тут все по другому.
я на своем веку повидал столько разных специалистов
А смысл писать ???,вот вы написали,я тоже мог и сам предположить что что то в программе,я же не просто задал вопрос,считайте что вы ничего не написали)),это же форум тут надо помогать,а не вести разглогольствование,не базар же.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

помогают - как могут. большего отсюда не видно, стеклянный шар отдан на полировку :)
посмотрите на что опирается такт программы, я делал музыку - всё опиралось на таймер, он и музыку играл и светодиоды мигал и кнопку опрашивал, он же и запускал следующий байт на чтение... а как сделано у вас я не знаю (смотри выше).
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение 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
Последний раз редактировалось sirha Ср авг 22, 2018 20:12:10, всего редактировалось 3 раза.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

моожет она умудряется по 2 раза в буфер читать? кусок, то небольшой - весь буфер = 1/172 с если блок будет пропущен, то это будет заметно как раз удвоением скорости (перескоки будут не заметны)
оно проверяет читать или нет с карты по адресу воспроизведения? может он успевает вычитать весь блок, а адрес воспроизведения не успевает уйти со стартового значения? (я АСМом редко пользуюсь, не всё разобрал)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

моожет она умудряется по 2 раза в буфер читать? )
оно проверяет читать или нет с карты по адресу воспроизведения? может он успевает вычитать весь блок, а адрес воспроизведения не успевает уйти со стартового значения? (я АСМом редко пользуюсь, не всё разобрал)
Думаю вы правы,в прерывании таймера нету привязке к адресации записи буффера ,чтение идет постоянно без всяких проверок,попробую исправить, организую скорее всего буфер 128 байт,спасибо большое буду исправлять. :)
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

А еще убери исходники под спойлер.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

под спойлер
это как???

Млин были бы вы девушкой Ivanoff-IV расцеловаал бы вас)))),все поправил)) :music:
Вы были правы.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

:oops: :oops: :oops:
Если б был бы я девченкой, я бы маме так помог,
Мама сразу бы сказала - молодчина, ты, сынок! :)
—————
Можешь, как мужик мужику, плюсик поставить... :)
Спойлерпод спойлер:
правка сообщения (если ещё доступна)
выделяешь блок от тега код до тега /код (и теги тоже)
нажимаешь кнопку спойлер
так повторяешь для каждого блока
после этого сообщение станен коротким, и только тот, кто захочет - развернёт портянку кода
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

Спасибо тебе :music:
Можешь, как мужик мужику, плюсик поставить...
А ты думаешь я не пытался :( ,у меня видимо карма -5,не ставиться нифига,грузит страницу бесконца ,ща ещё раз попробую,плюсик как поставить???,где рейтинг сообщения ?не выходит.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

а зачем нужен буфер? у Вас устройство может воспроизводить фрагментированные файлы?
ПС. а девушек (особенно красивых) и я целовать не прочь :)) :)) :))
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

а зачем нужен буфер?
Как зачем))),с самой карты памяти я не смогу напрямую читать на выход так как скорость чтения очень маленькая,для этого применяем ОЗУ,фрагментированные файлы?у меня sd карта малоскоростная 2гб.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

буферить 1 (2, если стерео) байт может сам таймер, если его правильно настроить, а этого достаточно, если нет фрагментации файлов (каждый следующий байт идет за предыдущим и не придется файл собирать по кускам с разных участков флешки).
Вот этот проект я повторял и допиливал под себя - он работает.
там тини 2313, никакого буфера, только прямая запись из карты в регистры таймера, тактовая частота контроллера 8 МГц, семплирование 8 бит 32 кГц, моно, но, думаю, при желании можно и с вашими характеристиками сделать (если с кварцем >=12 МГц).

Добавлено after 1 minute 9 seconds:
я думаю с алгоритмбилдером вы разберетесь, он не сложнее ассемблера. :)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вымогатель припоя
Аватара пользователя
Сообщения: 550
Зарегистрирован: Ср авг 17, 2011 23:12:30

Сообщение sirha »

буферить 1 (2, если стерео) байт может сам таймер, если его правильно настроить,никакого буфера, только прямая запись из карты в регистры таймера
Я все равно не пойму???,как так без буфера,если у меня байт передается с карты очень долго,все равно нужен буфер не маленький не менее 128 байт)),обьясните, байт передается с карты порядка 1 мс или дольше, а читаем мы 1 байт например при частоте 44 кгц за 22 мкс,каким образом то без буфера???
Ответить

Вернуться в «AVR»