"Ардуино - запись звука"
Где тут сказано про конкретное устройство ?)))
Нагуглил вот такой видос. Ардуино запись звука с исходниками.
https://www.youtube.com/watch?v=E9LKPFY3GGI&t=184s
Повторил. Все работает. И вполне устраивает.
Но хотелось бы немножко допилить код. Не буду валить в кучу все свои хотелки.
Поэтому начну с самого необходимого.
Я хочу запихнуть в ардуино на базе Atmega8, поэтому мне нужно сократить код
при компиляции даже выдает вот это, но устройство работает.
Мы, наверное, не нормальные люди, нам достаточно того что в даташите написаноroman.com писал(а):нормальные люди сначала пишут младшие регистры...
ADCL = 11111111
а када младшие регистры заполнятся... переносим разряды в старшие регистры...
ADCH = 00000011
при чтении процесс обратный...
Если результат преобразования выравнивается влево ADLAR=1 и достаточно точности 8-разрядного значения, для получения результата можно прочитать только содержимое регистра ADCH.
да никакой нет разницы)) просто ПК работает быстрей... вот и вся разница... ))Novice user писал(а):разницу между ардуиной и ПК огромная
в том то и дело... точности 8-разрядного значения нам не достаточно.))Dimon456 писал(а):нам достаточно того что в даташите написано
Оперативы хватит?roman.com писал(а):buf00[bufByteCount] = ADCW; // на флешку запишутся ВСЕ 10 бит результат преобразования ADC...
Код: Выделить всё
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;
}Можно ли отказаться от буфера ответ тоже был (я задавал данный вопрос),читайте темунадо 2 буфера по 512 байт-пока в первый буфер записываем значения АЦП (сигнал с микрофона) второй буфер пишем на флешку,когда заполнится первый буфер пишем значения АЦП во второй буфер,а первый пишем на флешку и так по кругу (я про исходник из 1 поста)
Код: Выделить всё
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;
}как узнал ?olegue писал(а):в сектор пишется только 256 байт.
какой плеер ? на ПК что ли...olegue писал(а):Может быть это уже аудиоплейер разруливается эту проблему?
да кто его знает))olegue писал(а):зачем rec.write(buf00, 256) нужен второй параметр.
или сделать буфер не влияющим на размер Озу. - тоже годится.roman.com писал(а):можно ли отказать от буфера ?
открыл получившийся файл в хекс-редактор. Все данные идут сплошняком, никаких типа пустых блоков или одинаковобайтовых блоков я не наблюдаю.roman.com писал(а):olegue писал(а):
в сектор пишется только 256 байт.
как узнал ?
Код: Выделить всё
Скетч использует 13180 байт (40%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 885 байт (43%) динамической памяти, оставляя 1163 байт для локальных переменных. Максимум: 2048 байт.
Проверил основательно. Все работает как надо! Буфер - 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 байт исчезающе мал
ты купил за бутылку пива готовый процессор... Ардуину... или другую фигню))Morroc писал(а):Так и надо, чем еще в этой жизни заняться ?
roman.com, я знаю на что я способен на что нет, берусь за те задачи которые по наитию кажутся мне по силам или с помощью людей здесь могут быть предположительно решеныroman.com писал(а):напиши свою... это прям так трудно что ли... https://cxem.net/mc/mc435.php
А его и не надо переписывать, просто убрать лишнее, отказаться от поддержки ехFat Fat32, оставить только Fat16, минус сколько программного кода и т.д.olegue писал(а):cdfat я переписывать не буду.
С генератора подаешь синус (меандр, треугольник), а потом в hex смотришь что получилось в итоге.olegue писал(а):Проверил основательно.
Конкретнее, решите нужна вам атмега8 и на ардуино или нет?olegue писал(а):счас есть задумка перенести это все на esp8266