Ардуино - запись звука
Re: Ардуино - запись звука
Вы название темы внимательно читали ?
"Ардуино - запись звука"
Где тут сказано про конкретное устройство ?)))
"Ардуино - запись звука"
Где тут сказано про конкретное устройство ?)))
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Ардуино - запись звука
Это вы название читали? не ПК,а АРДУИНО!!! разницу между ардуиной и ПК огромная,даже оперативка отличается в тысячи раз!!!
А что за конкретное устройство-первый пост данной темы-
А что за конкретное устройство-первый пост данной темы-
Нагуглил вот такой видос. Ардуино запись звука с исходниками.
https://www.youtube.com/watch?v=E9LKPFY3GGI&t=184s
Повторил. Все работает. И вполне устраивает.
Но хотелось бы немножко допилить код. Не буду валить в кучу все свои хотелки.
Поэтому начну с самого необходимого.
Я хочу запихнуть в ардуино на базе Atmega8, поэтому мне нужно сократить код
при компиляции даже выдает вот это, но устройство работает.
Re: Ардуино - запись звука
Мы, наверное, не нормальные люди, нам достаточно того что в даташите написаноroman.com писал(а):нормальные люди сначала пишут младшие регистры...
ADCL = 11111111
а када младшие регистры заполнятся... переносим разряды в старшие регистры...
ADCH = 00000011
при чтении процесс обратный...
Если результат преобразования выравнивается влево ADLAR=1 и достаточно точности 8-разрядного значения, для получения результата можно прочитать только содержимое регистра ADCH.
Re: Ардуино - запись звука
да никакой нет разницы)) просто ПК работает быстрей... вот и вся разница... ))Novice user писал(а):разницу между ардуиной и ПК огромная
а принцип работы у них одинаковый... те же самые прерывания... те же самые оперативки и т.д.
в том то и дело... точности 8-разрядного значения нам не достаточно.))Dimon456 писал(а):нам достаточно того что в даташите написано
а даташиты мы и сами читать умеем))
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Ардуино - запись звука
Дело ваше,раз уж не видите никакой разницы между ардуино на атмега8/328 и современным ПК
По мне так 8 бит для ардуино более чем достаточно
По мне так 8 бит для ардуино более чем достаточно
Re: Ардуино - запись звука
вы отвлеклись от темы...
а вопрос был конкретный - как происходит запись флешки ? подробно ! ))
ну хорошо... допустим записали мы данные в буфер...
например так:
buf00[bufByteCount] = ADCH; // на флешку запишутся СТАРШИЕ 8 бит результат преобразования ADC...
или так:
buf00[bufByteCount] = ADCL; // на флешку запишутся МЛАДШИЕ 8 бит результат преобразования ADC...
или так:
buf00[bufByteCount] = ADCW; // на флешку запишутся ВСЕ 10 бит результат преобразования ADC...
а дальше ??? как из буфера Ардуины данные попадают на флешку ??? вот самый главный вопрос ! а не ваши выравнивания всякие))...

а вопрос был конкретный - как происходит запись флешки ? подробно ! ))
ну хорошо... допустим записали мы данные в буфер...
например так:
buf00[bufByteCount] = ADCH; // на флешку запишутся СТАРШИЕ 8 бит результат преобразования ADC...
или так:
buf00[bufByteCount] = ADCL; // на флешку запишутся МЛАДШИЕ 8 бит результат преобразования ADC...
или так:
buf00[bufByteCount] = ADCW; // на флешку запишутся ВСЕ 10 бит результат преобразования ADC...
а дальше ??? как из буфера Ардуины данные попадают на флешку ??? вот самый главный вопрос ! а не ваши выравнивания всякие))...
Re: Ардуино - запись звука
Оперативы хватит?roman.com писал(а):buf00[bufByteCount] = ADCW; // на флешку запишутся ВСЕ 10 бит результат преобразования ADC...
Ему и так оперативы не хватает, а ты ему в два раза хочешь увеличить.
Re: Ардуино - запись звука
хватит умничать ))
ТС задал несколько конкретный вопросов...
зачем надо два буфера 512 байт ?
можно ли использовать только один буфер 512 байт ?
можно ли уменьшить размер буфера ? вместо 512 байт например 300 байт ?
можно ли вообще отказать от буфера и писать сразу на флешку ?
кто знает ответы... пишите...

ТС задал несколько конкретный вопросов...
зачем надо два буфера 512 байт ?
можно ли использовать только один буфер 512 байт ?
можно ли уменьшить размер буфера ? вместо 512 байт например 300 байт ?
можно ли вообще отказать от буфера и писать сразу на флешку ?
кто знает ответы... пишите...
Re: Ардуино - запись звука
olegue, вот твой участок кодаизмени такпотом можешь попробовать и так
Спойлер
Код: Выделить всё
if (bufByteCount == 386 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 386 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (recByteCount % 1024 == 386 && recPressed == 1) {
rec.write(buf00, 386); // save buf01 to card
recByteSaved += 386;
}
if (recByteCount % 1024 == 0 && recPressed == 1) {
rec.write(buf01, 386); // save buf02 to card
recByteSaved += 386;
}Код: Выделить всё
if (bufByteCount == 256 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 256 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (recByteCount % 512 == 256 && recPressed == 1) {
rec.write(buf00, 256); // save buf01 to card
recByteSaved += 256;
}
if (recByteCount % 512 == 0 && recPressed == 1) {
rec.write(buf01, 256); // save buf02 to card
recByteSaved += 256;
}Код: Выделить всё
if (bufByteCount == 128 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 128 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (recByteCount % 256 == 128 && recPressed == 1) {
rec.write(buf00, 128); // save buf01 to card
recByteSaved += 128;
}
if (recByteCount % 256 == 0 && recPressed == 1) {
rec.write(buf01, 128); // save buf02 to card
recByteSaved += 128;
}-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: Ардуино - запись звука
Зачем надо 2 буфера по 512 байт я написал здесь https://radiokot.ru/forum/viewtopic.php ... 1#p4239571
А вот как записать звук на пк не было!
Можно ли отказаться от буфера ответ тоже был (я задавал данный вопрос),читайте темунадо 2 буфера по 512 байт-пока в первый буфер записываем значения АЦП (сигнал с микрофона) второй буфер пишем на флешку,когда заполнится первый буфер пишем значения АЦП во второй буфер,а первый пишем на флешку и так по кругу (я про исходник из 1 поста)
А вот как записать звук на пк не было!
Re: Ардуино - запись звука
roman.com, Продолжайте
Dimon456, Пробую...
Добавлено after 12 minutes 38 seconds:
Dimon456, была у меня аткая мысль, но так как я не понимал к чему это приведет не стал это делать
Добавлено after 10 minutes 29 seconds:
Dimon456, Все отлично, поставил 256 буфера. Работает хоршоо! Не знаю, может шума чуток добавилоь, а может показалось.
А тепрь расскажите почему это сработало! И еще вагон памяти более 500байт осталось оперативы.
по такой же схеме можно и 128 сделать, и еще больше памяти освободиться. Причин , опочему это не произодет я не вижу сейчас.
Добавлено after 7 minutes 12 seconds:
в сектор пишется только 256 байт. Может быть это уже аудиоплейер разруливается эту проблему?
Добавлено after 29 minutes 25 seconds:
А может это функция write не делает прожиг пока не заполнит сектор на 512 байт?
Добавлено after 5 minutes 27 seconds:
Есил допустим я пропишу
rec.write("HELLO, WORLD");
rec.write("HELLO, WORLD");
получается ,что эти строки должны быть в разный секторах?
Добавлено after 2 minutes 1 second:
или write переписывает сектор, оптимизируя его заполнение.
иначе зачем rec.write(buf00, 256) нужен второй параметр. Для этого он и нужен. ИМХО.
Вопросы, вопросы...
Dimon456, Пробую...
Добавлено after 12 minutes 38 seconds:
Dimon456, была у меня аткая мысль, но так как я не понимал к чему это приведет не стал это делать
Добавлено after 10 minutes 29 seconds:
Dimon456, Все отлично, поставил 256 буфера. Работает хоршоо! Не знаю, может шума чуток добавилоь, а может показалось.
А тепрь расскажите почему это сработало! И еще вагон памяти более 500байт осталось оперативы.
Код: Выделить всё
if (bufByteCount == 256 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 256 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (recByteCount % 512 == 256 && recPressed == 1) {
rec.write(buf00, 256); // save buf01 to card
recByteSaved += 256;
}
if (recByteCount % 512 == 0 && recPressed == 1) {
rec.write(buf01, 256); // save buf02 to card
recByteSaved += 256;
}Добавлено after 7 minutes 12 seconds:
в сектор пишется только 256 байт. Может быть это уже аудиоплейер разруливается эту проблему?
Добавлено after 29 minutes 25 seconds:
А может это функция write не делает прожиг пока не заполнит сектор на 512 байт?
Добавлено after 5 minutes 27 seconds:
Есил допустим я пропишу
rec.write("HELLO, WORLD");
rec.write("HELLO, WORLD");
получается ,что эти строки должны быть в разный секторах?
Добавлено after 2 minutes 1 second:
или write переписывает сектор, оптимизируя его заполнение.
иначе зачем rec.write(buf00, 256) нужен второй параметр. Для этого он и нужен. ИМХО.
Вопросы, вопросы...
Re: Ардуино - запись звука
как узнал ?olegue писал(а):в сектор пишется только 256 байт.
какой плеер ? на ПК что ли...olegue писал(а):Может быть это уже аудиоплейер разруливается эту проблему?
да кто его знает))olegue писал(а):зачем rec.write(buf00, 256) нужен второй параметр.
на самый главный вопрос пока не ответили.... можно ли отказать от буфера ?
Добавлено after 3 minutes 14 seconds:
[uquote="Novice user",url="/forum/viewtopic.php?p=4242638#p4242638"]А вот как записать звук на пк не было![/uquote]
так мы не только на ПК пишем)) мы прост опишем)) куда... нам не важно))
Re: Ардуино - запись звука
или сделать буфер не влияющим на размер Озу. - тоже годится.roman.com писал(а):можно ли отказать от буфера ?
открыл получившийся файл в хекс-редактор. Все данные идут сплошняком, никаких типа пустых блоков или одинаковобайтовых блоков я не наблюдаю.roman.com писал(а):olegue писал(а):
в сектор пишется только 256 байт.
как узнал ?
Добавлено after 27 minutes 15 seconds:
а если уменьшить буфер до 64байт и убрать часы то ,к сожалению, в Атмегу8 это все равно не поместиться потому что все равно много кода 13180байт, а в атмеге8 - 8к, а вот по озу вполне себе нормально
Код: Выделить всё
Скетч использует 13180 байт (40%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 885 байт (43%) динамической памяти, оставляя 1163 байт для локальных переменных. Максимум: 2048 байт.
Re: Ардуино - запись звука
olegue, а вам в Атмегу8 надо?
Re: Ардуино - запись звука
Ага, атмегу8 надо. У нас без этого никак, создаем себе трудности стоимостью в бутылку пива и героически преодолеваем их всем форумом месяц, да и то писаниной только
Так и надо, чем еще в этой жизни заняться ?
[uquote="olegue",url="/forum/viewtopic.php?p=4242689#p4242689"]или сделать буфер не влияющим на размер Озу. - тоже годится.[/uquote]
Вам уже ответили - переходите на пк, это ведь тоже самое что ардуино, но озу там столько, что буфер в 512 байт исчезающе мал ) Поскольку буфер - это озу... ничего не выйдет )
[uquote="olegue",url="/forum/viewtopic.php?p=4242689#p4242689"]или сделать буфер не влияющим на размер Озу. - тоже годится.[/uquote]
Вам уже ответили - переходите на пк, это ведь тоже самое что ардуино, но озу там столько, что буфер в 512 байт исчезающе мал ) Поскольку буфер - это озу... ничего не выйдет )
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Re: Ардуино - запись звука
Проверил основательно. Все работает как надо! Буфер - 256 байт. Надо конечно еще погонять и послушать получившеееся, если что увеличу немую паузу с которой бились еще в самом начале и Morroc порешалDimon456 писал(а):olegue, вот твой участок кодаСпойлер
измени такКод: Выделить всё
if (bufByteCount == 386 && bufWrite == 0) { bufByteCount = 0; bufWrite = 1; } else if (bufByteCount == 386 & bufWrite == 1) { bufByteCount = 0; bufWrite = 0; } if (recByteCount % 1024 == 386 && recPressed == 1) { rec.write(buf00, 386); // save buf01 to card recByteSaved += 386; } if (recByteCount % 1024 == 0 && recPressed == 1) { rec.write(buf01, 386); // save buf02 to card recByteSaved += 386; }потом можешь попробовать и такКод: Выделить всё
if (bufByteCount == 256 && bufWrite == 0) { bufByteCount = 0; bufWrite = 1; } else if (bufByteCount == 256 & bufWrite == 1) { bufByteCount = 0; bufWrite = 0; } if (recByteCount % 512 == 256 && recPressed == 1) { rec.write(buf00, 256); // save buf01 to card recByteSaved += 256; } if (recByteCount % 512 == 0 && recPressed == 1) { rec.write(buf01, 256); // save buf02 to card recByteSaved += 256; }Код: Выделить всё
if (bufByteCount == 128 && bufWrite == 0) { bufByteCount = 0; bufWrite = 1; } else if (bufByteCount == 128 & bufWrite == 1) { bufByteCount = 0; bufWrite = 0; } if (recByteCount % 256 == 128 && recPressed == 1) { rec.write(buf00, 128); // save buf01 to card recByteSaved += 128; } if (recByteCount % 256 == 0 && recPressed == 1) { rec.write(buf01, 128); // save buf02 to card recByteSaved += 128; }
Morroc писал(а):У нас без этого никак, создаем себе трудности стоимостью в бутылку пива и героически преодолеваем их всем форумом месяц
После всего что было - уже нет. Немножко разобрался что к чему. cdfat я переписывать не буду. Мне файловая система нужна.Dimon456 писал(а):olegue, а вам в Атмегу8 надо?
я от ПК только отошел, а вы меня опять к нему. Сейчас ПК меня интересует только в контексте передачи готовых файлов по Wifi на ftp сервер. Или через sim800 сразу в WEBMorroc писал(а):Вам уже ответили - переходите на пк, это ведь тоже самое что ардуино, но озу там столько, что буфер в 512 байт исчезающе мал
но из первостепенных задач, счас растусую файлы по папкам по дате записи.
Памят
Re: Ардуино - запись звука
ты купил за бутылку пива готовый процессор... Ардуину... или другую фигню))Morroc писал(а):Так и надо, чем еще в этой жизни заняться ?
ты залил готовый код... не понимая как он работает...
ты ничего нового в своей жизни не открыл ! ))
ты в пустую потратил свою жизнь !))
[uquote="olegue",url="/forum/viewtopic.php?p=4242778#p4242778"]cdfat я переписывать не буду. Мне файловая система нужна.[/uquote]
напиши свою... это прям так трудно что ли... https://cxem.net/mc/mc435.php
блин... да это простой AVR )) и простая флешка... с двумя командами - чтение и запись))
уже бы написал бы всё своё... это не Windows написать... с гигабайтами файлов... и миллионами строк кода))
Re: Ардуино - запись звука
[uquote="roman.com",url="/forum/viewtopic.php?p=4242795#p4242795"]ты ничего нового в своей жизни не открыл ! ))[/uquote]
(Как и 99.9% населения планетки.) С утра открыл пару новых файлов в Excel, бутылку колы и окно, окно правда старое, если это чем то отличается от написания кода диктофона на готовом языке программирования для готового мк с готовой системой команд, то три раза ха
надо начинать с каменного топора и выделки кожи.
(Как и 99.9% населения планетки.) С утра открыл пару новых файлов в Excel, бутылку колы и окно, окно правда старое, если это чем то отличается от написания кода диктофона на готовом языке программирования для готового мк с готовой системой команд, то три раза ха
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Re: Ардуино - запись звука
roman.com, я знаю на что я способен на что нет, берусь за те задачи которые по наитию кажутся мне по силам или с помощью людей здесь могут быть предположительно решеныroman.com писал(а):напиши свою... это прям так трудно что ли... https://cxem.net/mc/mc435.php
если я продолжу вникать в то что вы пишите, то возможно через какое -то время и своя файловая сстема перестанен для меня проблемой. Но как вы понимаете любому человеку важнее результат сейчас даже без фундаментальных знаний чем через год с ними.
Добавлено after 6 minutes 43 seconds:
в этой теме я основательно вник и в данные и в заголовки , ну и много понял уже.
Добавлено after 54 minutes 47 seconds:
счас есть задумка перенести это все на esp8266, там готовый wifi есть , но с переносом алгоритма сэмплирования придется повозится.
Re: Ардуино - запись звука
А его и не надо переписывать, просто убрать лишнее, отказаться от поддержки ехFat Fat32, оставить только Fat16, минус сколько программного кода и т.д.olegue писал(а):cdfat я переписывать не буду.
Еще не рассматривался вариант без буфера, сколько времени выполняется функция write, сам я не смотрел что туда пишется, ни кто здесь ни чего не сказал про это. Может, вечером в протеусе и гляну.
С генератора подаешь синус (меандр, треугольник), а потом в hex смотришь что получилось в итоге.olegue писал(а):Проверил основательно.
Конкретнее, решите нужна вам атмега8 и на ардуино или нет?olegue писал(а):счас есть задумка перенести это все на esp8266