W5500_client+Atmega8_для самых начинающих.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

jcxz писал(а):Булькать будет и в этом случае.
Не будет.
Если скорость работы приёмника больше скорости потока то булькать не будет.

В моём примере скорость потока 320 кБит/с а скорость приёмника 1,5 Мбит/c.
Т.е. у меня есть запас в несколько раз.

Другое дело что передатчик может передавать поток неравномерно... пачками... по несколько пакетов за раз.
В этом случае приёмник говорит передатчику - "Подожди дружище, не спеши ! Передавай по одному пакету за раз!".
В этом случае передатчик снижает скорость передачи... точнее делает передачу более равномерной... и передаёт по одному пакету за раз. Поток стабилизировался.
Именно это я наблюдаю на своём анализаторе.

Поэтому размер буфера не обязательно делать большим.
Тут уже размер буфера больше зависит от качества связи. Точнее от джиттера.
У меня качество связи хорошее. Джиттер минимальный. Поэтому у меня поток стабильный.
Поэтому достаточно уже имеющихся буферов (2048 байт в W5500 + 2048 байт в МК). И можно даже меньше.
Выше всё разбирали.

Другое дело что я не знаю как работает MP3 декодер.
-сколько ему надо передавать байт за раз.
-какой у него размер буфера.
-... и т.д.

Есть ещё одна причина почему может булькать. На первый взгляд не такая очевидная... это выбег частоты.
Выше передавали поток с МК на ПК... и с ПК на телефон... и по всякому))
Тут уже дело не в буфере и не в стабильности потока (джиттере), а в скорости воспроизведении.
Так например при передачи потока с ПК на телефон периодически тоже булькает. Через равные промежутки времени. Достаточно большие промежутки. До полу часа. Сразу незаметно. Но со временем заметно.
А всё дело в том что частоты процессора ПК и телефона отличаются. Соответственно отличается и скорости воспроизведения.
Поэтому пришлось даже добавлять в программу кнопку "скорость воспроизведения".
Где-то выше всё разбирали.
Реклама
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение jcxz »

[uquote="roman.com",url="/forum/viewtopic.php?p=4742325#p4742325"]Не будет.[/uquote]Будет-будет.

[uquote="roman.com",url="/forum/viewtopic.php?p=4742325#p4742325"]В моём примере скорость потока 320 кБит/с а скорость приёмника 1,5 Мбит/c.[/uquote]да хоть 1.5 Гб/с. Вы слышали про сетевые задержки? Скорость пинга? Все эти понятия вам о чём-то говорят?
Траффик в инете не распространяется мгновенно. А значит, если ваш передатчик отправил вам 4KB (полностью заполнив буфер); затем приёмник отправил ему подтверждение (с размером окна == 0 (или 1 байт), так как буфер полон); то затем, когда буфер у приёмника освободится, ему снова надо отправить новый размер окна передатчику, а тому - прислать новые данные. Итого - пакетам нужно как минимум 4-жды прогуляться по сети между удалённым сервером и вашим приёмником. А время прохождения кадра по сети может быть приличным. Когда сервер находится далеко - задержка доставки может даже до нескольких сотен мсек доходить.
И как тут поможет буфер ёмкостью == 0.1 сек??? Никак.

Это хорошо когда рядом находится кеширующий сервер. Но такой есть не всегда.

Добавлено after 3 minutes 34 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4742325#p4742325"]У меня качество связи хорошее. Джиттер минимальный. Поэтому у меня поток стабильный.[/uquote]Вот именно. Вы испытываете в идеальных тепличных условиях. Потому и не булькает.

Добавлено after 2 minutes 12 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4742325#p4742325"]Другое дело что я не знаю как работает MP3 декодер.[/uquote]Ему надо не "байты за раз передавать". Для декодирования ему нужен полный MP3-кадр. Размер MP3-кадра также - разный у разных станций. Зависит от битрейта, количества каналов, формата кодирования, etc...

Добавлено after 1 minute 14 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4742325#p4742325"]Поэтому пришлось даже добавлять в программу кнопку "скорость воспроизведения".
Где-то выше всё разбирали.[/uquote]В моём радио делается автоматическая подстройка частот. Без всяких лишних кнопок.
Реклама
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

про сетевые задержки я не только слышал но и видел.
выше есть картинки.

да.
время прохождения кадра по сети может быть приличным.
если сервер находится в америке то задержка составляет ~140 мсек.
и это тоже есть выше на картинке.
да.
тут уже буфер ёмкостью 0.1 сек не спасёт))

если быть более точным...то приёмник не отправляет передатчику что буфер переполнен.
приёмник отправляет передатчику размер своего буфера.
а передатчик видя что размер приёмного буфера недостаточен приостанавливает передачу.
но суть это не меняет.
все равно передатчик ждет пока приёмник передаст размер своего буфера достаточного размера для продолжения передачи.
и да. получается что пакеты бегают туда-сюда по сети в пустую.

и это ещё одна причина отказаться от дуратского тсп и перейти на современные протоколы.
а в современном протоколе пакеты идут сплошным потоком... в перемешку... без всяких окон.
а приёмник складывает их по порядку... и получает целый кадр.
при этом приёмник отправляет передатчику запрос только если какого пакета не хватает.
чем то напоминает торрент ))

вряли там есть кэширующий сервер... это радио а не ютуб))

я испытывал в разных условиях. и в тепличных и в реальных. и там булькает или нет зависит от условий.
выше есть картинки.

полный MP3-кадр ещё не смотрел.
надо будет разобрать этот вопрос по подробней.

кнопку "скорость воспроизведения" добавили для тестов.
потом сделаем автоматическую подстройку частоты ... когда придумаем как.))
ну примерно я уже представляю как это сделать... будем контролировать заполняемость приёмного буфера.
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение Jack_A »

Пардон, я в инет-аудио - полный нуб, но стало интересно: так что, передатчик с каждым приёмником персонально общается, с квитированием? А если его слушают, к примеру, 1000 абонентов? Это же не радиостанция "Маяк" ?
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение jcxz »

[uquote="Jack_A",url="/forum/viewtopic.php?p=4742490#p4742490"]передатчик с каждым приёмником персонально общается, с квитированием? А если его слушают, к примеру, 1000 абонентов?[/uquote]А вас любой HTTP/HTTPS-сервер не удивляет? На него также могут одновременно тысячи абонентов заходить.
Инет-радио - это такой-же HTTP/HTTPS-сервер. И свои файлы (потоки) передаёт точно так же. Да, с каждым абонентом создаётся отдельное TCP-соединение. И поток байтов в каждом свой.

Добавлено after 23 minutes 27 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4742438#p4742438"]если быть более точным...то приёмник не отправляет передатчику что буфер переполнен.
приёмник отправляет передатчику размер своего буфера.[/uquote]Я и не говорил, что "отправляет что переполнен".
И если быть точным, то приёмник отправляет передатчику не "размер своего буфера", а отправляет "размер свободного места в своём буфере". Но не менее 1(обычно). :)
Да и то не факт - это просто опция, а не обязательное требование.

[uquote="roman.com",url="/forum/viewtopic.php?p=4742438#p4742438"]и это ещё одна причина отказаться от дуратского тсп и перейти на современные протоколы.[/uquote]...ага. И переписать все HTTP-серверы в мире. :)))

[uquote="roman.com",url="/forum/viewtopic.php?p=4742438#p4742438"]вряли там есть кэширующий сервер... это радио а не ютуб))[/uquote]А в чём разница? Инет-станция - это обычный HTTP/HTTPS-сервер. Раздающий файлы. Такой же как все прочие. Почему его нельзя кешировать?
Популярные станции (которые много народу слушает) наверняка кешируются. И задержка с ними будет значительно меньше. Но стоит только подключиться к какой-то малопопулярной станции, как вылезут проблемы. Это я о тестировании "в тепличных условиях".

[uquote="roman.com",url="/forum/viewtopic.php?p=4742438#p4742438"]полный MP3-кадр ещё не смотрел.[/uquote]Размер полного MP3-кадра может достигать 2304 байт. По моей статистике. У AAC+ и того больше - up to 4096 байт/кадр. Вот весь 4KB буфер как раз и будет сожран под такой кадр. Хотя VS1063 вроде даже не умеет декодировать AAC/AAC+.

[uquote="roman.com",url="/forum/viewtopic.php?p=4742438#p4742438"]потом сделаем автоматическую подстройку частоты ... когда придумаем как.))
ну примерно я уже представляю как это сделать... будем контролировать заполняемость приёмного буфера.[/uquote]Всё уже давно придумано и работает. :) Большой буфер - это как раз одно из его назначений: изменение коэффициента ресэмплинга в зависимости от заполненности буфера. При приближении уровня заполненности к нижнему краю буфера - плавно уменьшаем коэфф.ресэмплинга (плавно понижая sample-rate); при приближении уровня заполненности к верхнему краю буфера - плавно увеличиваем коэфф.ресэмплинга (плавно повышая sample-rate); в средней части заполненности буфера коэффициент sample-rate == 1.0.
На малом буфере этот алгоритм не будет работать нормально. А на большом буфере - работает прекрасно: уровень заполненности обычно колеблется около начала или края верхнего подъёма коэфф.ресэмплинга или около начала нижнего края понижения коэфф.ресэмплинга.

Добавлено after 9 minutes 58 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4742325#p4742325"]Соответственно отличается и скорости воспроизведения.[/uquote]А ещё бывают станции с VBR. (Variable Bit Rate). Которые передают кадры не с фиксированным bitrate, а с постоянно меняющимся. Могут хоть каждый новый кадр передавать с другим bitrate. Меняя его в широких пределах.
И даже sample-rate этих кадров может меняться (хотя такое наблюдается реже).
Именно поэтому выше я писал, что инфа в HTTP-заголовке ответа инет-станции:
[uquote="roman.com",url="/forum/viewtopic.php?p=4739526#p4739526"]HTTP/1.0 200 OK
icy-br: 192[/uquote]не имеет никакой практической пользы. Это просто "написано на заборе". Bitrate может измениться сразу же, уже со 2-го MP3-кадра.
И реальный bitrate (если нужен) следует вычислять по фактическому потоку.
Реклама
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

зачем переписывать все HTTP-серверы в мире... достаточно добавить поддержку нового протокола... а дальше само пойдёт.
вон гугл уже вавно продвигает свой QUIC... уже все браузеры его поддерживают... и многие сервера... во всяком случае все сервера гугл.
но главное что процесс запущен.))

"размер свободного места в своём буфере"
я так и сказал.
вот пример реального потока сервера интернет радио.

приёмник передал передатчику что свободного места в приёмном буфере осталось мало )) Win = 0.
-передатчик приостановил передачу...
а ниже приёмник очистил свой буфер и передал передатчику что обновил свой приёмный буфер... и места в приёмном буфере стало много )) Win Update.
-передатчик возобновил передачу...

Изображение

правда не видно с какого места передатчик возобновил передачу...)) но можно проверить.

Допустим что размер полного MP3-кадра может достигать 2304 байт.
Но это вовсе не значит что приёмник должен иметь такой же буфер.
Задача приёмника принимать поток и передавать поток VS1063.
А уже VS1063 должен из потока собирать MP3-кадры.
Я это так понимаю.
Но это не точно))
Я ещё не изучал подробно даташит VS1063...
Как оно там работает... я без понятия))

Далее... коэфф.ресэмплинга.
А этим кто должен заниматься ?
Повторюсь... Задача приёмника принимать поток и передавать поток VS1063.
Значит менять коэфф.ресэмплинга должен VS1063.
Значит мы должны сообщить VS1063 чтоб он изменил коэфф.ресэмплинга.
Я это так понимаю.
Но это не точно))

к слову...
если нет под рукой VS1063 то теоретически мы можем вместо него использовать плеер в ПК.
так мы может проверить работу нашего приёмника на W5500 +Atmega8.
Реклама
PavelPic
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт окт 08, 2020 16:38:42

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение PavelPic »

//Подключение VS1063A
sbit vrs at latb9_bit; //xRESET
sbit vdq at rb4_bit; //DREQ
sbit vbc at lata4_bit; //xDCS/BSYNC
sbit vcs at latb5_bit; //xCS

unsigned short dn1[512],i1; //0..255
unsigned j1; //0..65535

vcs=1; for (j1=0;j1<512;j1=j1+32) {while(vdq==0); vbc=0; for (i1=0;i1<32;i1++) spiwr(dn1[i1+j1]); vbc=1;} //Передача по 32 байта в vs1063
После того как буфер VS1063A заполнится изменится уровень DREQ на 0. После освобождения места в буфере уровень станет 1.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

А почему по 32 байта ? Что-то мало совсем...
Т.е. мы должны ждать пока буфер освободится ? Сразу писать нельзя получается...
Странно...

Добавлено after 1 hour 25 minutes 35 seconds:
надо глянуть даташит...

-16 KiB instruction RAM.
-80 KiB data RAM for user applications.

всего 96 KiB RAM for user code / data.

но передавать можно не больше 32 bytes за раз...

// This example reads status of DREQ pin through the SPI/SCI register
// interface.
#define SCI_WRAMADDR 7
#define SCI_WRAM 6
while (!endOfFile) {
int dreq;
WriteSciReg(SCI_WRAMADDR, 0xC012); // Send address of DREQ register
dreq = ReadSciReg(SCI_WRAM) & 1;
if (dreq) {
// DREQ high: send 1-32 bytes audio data
} else {
// DREQ low: wait 5 milliseconds (so that VS10xx doesn’t get
// continuous SCI operations)
}
} /* while (!endOfFile) */

странное устройство))
ну да ладно.
:tea:

Так и где мы застряли ?))
:tea:
PavelPic
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт окт 08, 2020 16:38:42

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение PavelPic »

Если требуется только воспроизведение MP3 то подойдёт и VS1053B. Программа та же. Если надо GPIO использовать или Line1 и Line2, то управление ими отличается немного. RAM может занимать сам кодек, потому использовать её в своих целях непредсказуемо.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

PavelPic писал(а):RAM может занимать сам кодек, потому использовать её в своих целях непредсказуемо.
про это в даташите ничего не видел...
ну и ладно))
:tea:
ну и что у нас там не работает ?
PavelPic
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт окт 08, 2020 16:38:42

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение PavelPic »

[uquote="PavelPic",url="/forum/viewtopic.php?p=4742213#p4742213"]Закончил разбираться с интернет радио. Буфер, который я задействовал 512 байт внутреннего ОЗУ микроконтроллера, а не 32 Гбайт SD карты или 1 Мбайт внешнего ОЗУ. И то 512 байт требуется, если битрейт более 128 к/бит в секунду. Оказалось, чтобы не заикалось надо ставить буфер W5500 4 килобайта, каждые 100 мс проверять, сколько новых байт в буфере, если более 256 байт или 512 байт, то передавать их в VS1063A. Затем записывать в W5500, сколько байт было считано, так как размер принятых данных (0x0026 0x0027) - есть разность между значениями регистров 0x002a 0x002b и 0x0028 0x0029. И так по кругу по истечению 60..80 мс. Остальные 20..40 мс на выполнение другой программы. Если буфер W5500 более 4 килобайт или менее 4 килобайт, то происходит процесс заикания. Видимо, зависит от битрейта.[/uquote]
Ответ получен почему при буфере более 4 килобайт происходит процесс заикания. https://maker.wiznet.io/forum/15889
Если менее 4 килобайт, то причина в битрейте.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

ничего не понятно... но очень интересно))
:tea:
PavelPic
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт окт 08, 2020 16:38:42

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение PavelPic »

[uquote="roman.com",url="/forum/viewtopic.php?p=4748262#p4748262"]ничего не понятно... но очень интересно))
:tea:[/uquote]
Чаще надо считывать буфер W5500 при его размере более 4 килобайт.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

что-то не то... надо разбираться... VS1053B нет... проверить не могу...

далее...
а где ещё мы можем использовать W5500 ?
например мы можем сделать простую автоматизацию для дома...


СпойлерИзображение
в другой теме уже сделали простую автоматизацию для дома... на базе обычного браузера...
СпойлерИзображение
теперь сделаем отдельное приложение... на базе обычной Java...
СпойлерИзображение
добавим пару пультов ИК...
СпойлерИзображение
СпойлерИзображение
будем управлять телевизором...
СпойлерИзображение
добавим пару датчиков температуры... и блок реле...
СпойлерИзображение
собрали по такой схеме...
СпойлерИзображение
замечательно)) всё работает.
:tea:
Вложения
исходники_Dom_8.rar
(127.05 КБ) 113 скачиваний
схема_Dom_8.rar
(197.5 КБ) 121 скачивание
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

добавим передачу ключей по локалке...
:tea:
Вложения
схема_Dom_9.rar
(206.62 КБ) 125 скачиваний
исходники_Dom_9.rar
(129.38 КБ) 124 скачивания
PavelPic
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт окт 08, 2020 16:38:42

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение PavelPic »

[uquote="PavelPic",url="/forum/viewtopic.php?p=4743487#p4743487"]Если требуется только воспроизведение MP3 то подойдёт и VS1053B. Программа та же. Если надо GPIO использовать или Line1 и Line2, то управление ими отличается немного. RAM может занимать сам кодек, потому использовать её в своих целях непредсказуемо.[/uquote]
Понадобилось проигрывать MP3 с битрейтом 192 кбит/с и 256 кбит/с и буфером у W5500 4 килобайта. Написал в VLSI Solution какие области памяти WRAM можно использовать у VS1063A для своих целей при проигрывании MP3 и использовании регистра SCI_BASS. Ответили 0x2000...0x3fff, 0x6500...0x7fff, 0xe000...0xffff, что составляет 46592 байтов. В итоге хватило.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

так и что у нас ? играет нормально ? не "заикается" ? ))
буфера 4 килобайта хватает ?
:roll:
а то кто-то выше утверждал что для нормального прослушивания радио надо буфера минимум несколько мегабайт...
PavelPic
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт окт 08, 2020 16:38:42

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение PavelPic »

[uquote="roman.com",url="/forum/viewtopic.php?p=4755503#p4755503"]так и что у нас ? играет нормально ? не "заикается" ? ))
буфера 4 килобайта хватает ?
:roll:
а то кто-то выше утверждал что для нормального прослушивания радио надо буфера минимум несколько мегабайт...[/uquote]
Не заикается. Может с Wi-Fi и надо несколько мегабайт (я не проверял на практике), с W5500 64/128 килобайт хватит. При этом я использую постепенное заполнение буфера, 512 байт записывается в буфер, 256 байт считывается из буфера и передается в VS1063A и связь через 4G модем Brovi E3372-325 и коммутатор Netis MW5250.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: W5500_client+Atmega8_для самых начинающих.

Сообщение roman.com »

у W5500 размер буфера по умолчанию 2048 байт.
меня интересует сможет ли нормально работать радио при такой размере буфера.
:roll:
я считаю что сможет))
:tea:

Добавлено after 1 hour 14 minutes 16 seconds:
план был такой:

-есть W5500 размер буфера по умолчанию 2048 байт.
-есть Ардуино размер буфера по умолчанию 2048 байт.
-есть VS1063A размер буфера по умолчанию ... байт.

1.
W5500 принимает данные и складывает в свой буфер по умолчанию 2048 байт.
2.
когда буфер W5500 заполнится сработает прерывание.
3.
когда сработает прерывание Ардуино копирует данные из W5500 в свой буфер по умолчанию 2048 байт.
4.
далее буфер W5500 очищается и W5500 принимает новые данные.
5.
а Ардуино в это время копирует данные из своего буфера в буфер VS1063A.

всё))
:tea:
Ответить

Вернуться в «Периферия»