Ардуино - запись звука

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

Re: Ардуино - запись звука

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

Вы название темы внимательно читали ?

"Ардуино - запись звука"

Где тут сказано про конкретное устройство ?)))
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Ардуино - запись звука

Сообщение Novice user »

Это вы название читали? не ПКАРДУИНО!!! разницу между ардуиной и ПК огромная,даже оперативка отличается в тысячи раз!!!
А что за конкретное устройство-первый пост данной темы-
Нагуглил вот такой видос. Ардуино запись звука с исходниками.
https://www.youtube.com/watch?v=E9LKPFY3GGI&t=184s

Повторил. Все работает. И вполне устраивает.
Но хотелось бы немножко допилить код. Не буду валить в кучу все свои хотелки.
Поэтому начну с самого необходимого.

Я хочу запихнуть в ардуино на базе Atmega8, поэтому мне нужно сократить код
при компиляции даже выдает вот это, но устройство работает.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Ардуино - запись звука

Сообщение Dimon456 »

roman.com писал(а):нормальные люди сначала пишут младшие регистры...
ADCL = 11111111
а када младшие регистры заполнятся... переносим разряды в старшие регистры...
ADCH = 00000011

при чтении процесс обратный...
Мы, наверное, не нормальные люди, нам достаточно того что в даташите написано
Если результат преобразования выравнивается влево ADLAR=1 и достаточно точности 8-разрядного значения, для получения результата можно прочитать только содержимое регистра ADCH.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

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

Novice user писал(а):разницу между ардуиной и ПК огромная
да никакой нет разницы)) просто ПК работает быстрей... вот и вся разница... ))
а принцип работы у них одинаковый... те же самые прерывания... те же самые оперативки и т.д.
:)
Dimon456 писал(а):нам достаточно того что в даташите написано
в том то и дело... точности 8-разрядного значения нам не достаточно.))
а даташиты мы и сами читать умеем))
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Ардуино - запись звука

Сообщение Novice user »

Дело ваше,раз уж не видите никакой разницы между ардуино на атмега8/328 и современным ПК
По мне так 8 бит для ардуино более чем достаточно
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

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

вы отвлеклись от темы...
:roll:
а вопрос был конкретный - как происходит запись флешки ? подробно ! ))
:roll:
ну хорошо... допустим записали мы данные в буфер...

например так:

buf00[bufByteCount] = ADCH; // на флешку запишутся СТАРШИЕ 8 бит результат преобразования ADC...

или так:

buf00[bufByteCount] = ADCL; // на флешку запишутся МЛАДШИЕ 8 бит результат преобразования ADC...

или так:

buf00[bufByteCount] = ADCW; // на флешку запишутся ВСЕ 10 бит результат преобразования ADC...

а дальше ??? как из буфера Ардуины данные попадают на флешку ??? вот самый главный вопрос ! а не ваши выравнивания всякие))...
:tea:
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Ардуино - запись звука

Сообщение Dimon456 »

roman.com писал(а):buf00[bufByteCount] = ADCW; // на флешку запишутся ВСЕ 10 бит результат преобразования ADC...
Оперативы хватит?
Ему и так оперативы не хватает, а ты ему в два раза хочешь увеличить.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

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

хватит умничать ))
:))
ТС задал несколько конкретный вопросов...

зачем надо два буфера 512 байт ?
можно ли использовать только один буфер 512 байт ?
можно ли уменьшить размер буфера ? вместо 512 байт например 300 байт ?
можно ли вообще отказать от буфера и писать сразу на флешку ?

кто знает ответы... пишите...
:)
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Ардуино - запись звука

Сообщение 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;
  }
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Ардуино - запись звука

Сообщение Novice user »

Зачем надо 2 буфера по 512 байт я написал здесь https://radiokot.ru/forum/viewtopic.php ... 1#p4239571
надо 2 буфера по 512 байт-пока в первый буфер записываем значения АЦП (сигнал с микрофона) второй буфер пишем на флешку,когда заполнится первый буфер пишем значения АЦП во второй буфер,а первый пишем на флешку и так по кругу (я про исходник из 1 поста)
Можно ли отказаться от буфера ответ тоже был (я задавал данный вопрос),читайте тему
А вот как записать звук на пк не было!
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: Ардуино - запись звука

Сообщение olegue »

roman.com, Продолжайте

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;
  }
по такой же схеме можно и 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) нужен второй параметр. Для этого он и нужен. ИМХО.

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

Re: Ардуино - запись звука

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

olegue писал(а):в сектор пишется только 256 байт.
как узнал ?
olegue писал(а):Может быть это уже аудиоплейер разруливается эту проблему?
какой плеер ? на ПК что ли...
olegue писал(а):зачем rec.write(buf00, 256) нужен второй параметр.
да кто его знает))

на самый главный вопрос пока не ответили.... можно ли отказать от буфера ?

Добавлено after 3 minutes 14 seconds:
[uquote="Novice user",url="/forum/viewtopic.php?p=4242638#p4242638"]А вот как записать звук на пк не было![/uquote]
так мы не только на ПК пишем)) мы прост опишем)) куда... нам не важно))
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: Ардуино - запись звука

Сообщение olegue »

roman.com писал(а):можно ли отказать от буфера ?
или сделать буфер не влияющим на размер Озу. - тоже годится.
roman.com писал(а):olegue писал(а):
в сектор пишется только 256 байт.

как узнал ?
открыл получившийся файл в хекс-редактор. Все данные идут сплошняком, никаких типа пустых блоков или одинаковобайтовых блоков я не наблюдаю.

Добавлено after 27 minutes 15 seconds:
а если уменьшить буфер до 64байт и убрать часы то ,к сожалению, в Атмегу8 это все равно не поместиться потому что все равно много кода 13180байт, а в атмеге8 - 8к, а вот по озу вполне себе нормально

Код: Выделить всё

Скетч использует 13180 байт (40%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 885 байт (43%) динамической памяти, оставляя 1163 байт для локальных переменных. Максимум: 2048 байт.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Ардуино - запись звука

Сообщение Dimon456 »

olegue, а вам в Атмегу8 надо?
Morroc
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Ардуино - запись звука

Сообщение Morroc »

Ага, атмегу8 надо. У нас без этого никак, создаем себе трудности стоимостью в бутылку пива и героически преодолеваем их всем форумом месяц, да и то писаниной только :)) Так и надо, чем еще в этой жизни заняться ?
[uquote="olegue",url="/forum/viewtopic.php?p=4242689#p4242689"]или сделать буфер не влияющим на размер Озу. - тоже годится.[/uquote]
Вам уже ответили - переходите на пк, это ведь тоже самое что ардуино, но озу там столько, что буфер в 512 байт исчезающе мал ) Поскольку буфер - это озу... ничего не выйдет )
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: Ардуино - запись звука

Сообщение olegue »

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;
  }
Проверил основательно. Все работает как надо! Буфер - 256 байт. Надо конечно еще погонять и послушать получившеееся, если что увеличу немую паузу с которой бились еще в самом начале и Morroc порешал
Morroc писал(а):У нас без этого никак, создаем себе трудности стоимостью в бутылку пива и героически преодолеваем их всем форумом месяц
Dimon456 писал(а):olegue, а вам в Атмегу8 надо?
После всего что было - уже нет. Немножко разобрался что к чему. cdfat я переписывать не буду. Мне файловая система нужна.
Morroc писал(а):Вам уже ответили - переходите на пк, это ведь тоже самое что ардуино, но озу там столько, что буфер в 512 байт исчезающе мал
я от ПК только отошел, а вы меня опять к нему. Сейчас ПК меня интересует только в контексте передачи готовых файлов по Wifi на ftp сервер. Или через sim800 сразу в WEB

но из первостепенных задач, счас растусую файлы по папкам по дате записи.

Памят
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

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

Morroc писал(а):Так и надо, чем еще в этой жизни заняться ?
ты купил за бутылку пива готовый процессор... Ардуину... или другую фигню))
ты залил готовый код... не понимая как он работает...
ты ничего нового в своей жизни не открыл ! ))
ты в пустую потратил свою жизнь !))
:))
[uquote="olegue",url="/forum/viewtopic.php?p=4242778#p4242778"]cdfat я переписывать не буду. Мне файловая система нужна.[/uquote]
напиши свою... это прям так трудно что ли... https://cxem.net/mc/mc435.php

блин... да это простой AVR )) и простая флешка... с двумя командами - чтение и запись))

уже бы написал бы всё своё... это не Windows написать... с гигабайтами файлов... и миллионами строк кода))
:)
Morroc
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Ардуино - запись звука

Сообщение Morroc »

[uquote="roman.com",url="/forum/viewtopic.php?p=4242795#p4242795"]ты ничего нового в своей жизни не открыл ! ))[/uquote]
(Как и 99.9% населения планетки.) С утра открыл пару новых файлов в Excel, бутылку колы и окно, окно правда старое, если это чем то отличается от написания кода диктофона на готовом языке программирования для готового мк с готовой системой команд, то три раза ха :)) надо начинать с каменного топора и выделки кожи.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: Ардуино - запись звука

Сообщение olegue »

roman.com писал(а):напиши свою... это прям так трудно что ли... https://cxem.net/mc/mc435.php
roman.com, я знаю на что я способен на что нет, берусь за те задачи которые по наитию кажутся мне по силам или с помощью людей здесь могут быть предположительно решены
если я продолжу вникать в то что вы пишите, то возможно через какое -то время и своя файловая сстема перестанен для меня проблемой. Но как вы понимаете любому человеку важнее результат сейчас даже без фундаментальных знаний чем через год с ними.

Добавлено after 6 minutes 43 seconds:
в этой теме я основательно вник и в данные и в заголовки , ну и много понял уже.

Добавлено after 54 minutes 47 seconds:
счас есть задумка перенести это все на esp8266, там готовый wifi есть , но с переносом алгоритма сэмплирования придется повозится.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Ардуино - запись звука

Сообщение Dimon456 »

olegue писал(а):cdfat я переписывать не буду.
А его и не надо переписывать, просто убрать лишнее, отказаться от поддержки ехFat Fat32, оставить только Fat16, минус сколько программного кода и т.д.
Еще не рассматривался вариант без буфера, сколько времени выполняется функция write, сам я не смотрел что туда пишется, ни кто здесь ни чего не сказал про это. Может, вечером в протеусе и гляну.
olegue писал(а):Проверил основательно.
С генератора подаешь синус (меандр, треугольник), а потом в hex смотришь что получилось в итоге.
olegue писал(а):счас есть задумка перенести это все на esp8266
Конкретнее, решите нужна вам атмега8 и на ардуино или нет?
Ответить

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