• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

JL SoC

andrey24

New member
Здравствуйте. Принесли на ремонт наушники Perfeo sharm. Не работал один канал. Решил перепаять чип с модулей. Но безуспешно. Впаял старый чип, но он не запустился. Позже заметил, что один вывод оторвался под гнездом на наушники. Возможно при демонтаже что-то повредил или коротнул (был подключен АКБ).
Маркировка чипа AS20BP02720-25F4. Подскажите пожалуйста с какого устройства можно заменить данный чип? Или может кто подскажет в чем может быть причина незапуска. Сопротивление килоомы по питанию. Напряжение 3.3.в есть. Кз не нашел
 

Вложения

priradio585

New member
На Кварце что происходит,генерация есть? И напряжение там какое?
А то что чипы по маркировки одинаковые,это не чего не значит,прошивки в них могут быть разные.
Кто нибудь знает как слить с чипа прошивку?
Для экспериментов.
 

Alcest

Member
Как отключить микрофонный вход на PA0? Совсем, чтобы микрофонный вход не был подключен к этой ноге чипа.

Мне нужно подать сигнал на DAC_AMUX0_L (вывод 14 AC6925A). При активации этого входа появляется рокот в наушниках. В файле sdk_cfg.h отмечено, что нельзя производить запись одновременно с linein и mic. Наверное из-за этого рокочет.

microphone_close(); и ladc_ch_close(LADC_MIC_CHANNEL); пробовал, не помогает. Микрофонный вход не отключается, звук с него воспроизводится в наушниках, рокочущий звук не пропадает.

Как оключить mic?
 

Alcest

Member
Вставил microphone_close(); в другое место в своем коде, звук с микрофонного входа отключился... вместе с входом AMUX0_L... Что за дела?
 

nikolz

Well-known member
Ищу даташит чипа DY1703A и все о нем.
Кто знает его, отзовитесь.
 

Alcest

Member
Не было печали, но понадобились внешние прерывания... Как здесь настраиваются и обрабатываются прерывания с портов ввода-вывода? Мне бы примерчик попроще, впроде нажали кнопку - зажегся светодиод.
 

Alcest

Member
Разобрался немного, научился получать прерывания от портов. Как оказалось, нужно в регистре wakeup con0 включить реакцию нужного порта на события, а нужный порт должен быть настроен как вход. Теперь еще понять бы, как определить какой из портов вызвал прерывание?
 

Alcest

Member
А они не говорили, что RM на чип урезан до неприличия? Наверное не читали.
 

Alcest

Member
Ну вот же, AC6925A с FM радио. AC6925C без радио. А чтение и воспроизведение музыки с флешки они почти все умеют.
 

Alcest

Member
Обнаружил одну неприятную особенность. Из циклов while() и for() программа в прерывание от порта не хочет уходить от слова совсем. Заволатилил все что было можно, оптимизацию компилятора отключил, но результат все тот же - бесконечно крутится в цикле, не заходя в обработчик прерывания где прописано условие для завершения цикла.

Должен заметить, что такая же фигня у меня была с PIC16, STM8 и STM32. Если прога попала в цикл, то на аппаратные прерывания от входов уже не реагировала.
 

CodeNameHawk

Moderator
Команда форума
Должен заметить, что такая же фигня у меня была с PIC16, STM8 и STM32. Если прога попала в цикл, то на аппаратные прерывания от входов уже не реагировала.
Чудеса.
Чудо обычно бывает или в неправильной конфигурации железа, или оптимизации, нп. volatile забыли.
Из циклов while() и for() программа в прерывание от порта не хочет уходить от слова совсем.
Если так подумать, то в программе всегда есть хотя бы один цикл и по вашей писанине получается прерывания от порта вообще не работают.
 
Последнее редактирование:

Alcest

Member
или оптимизации, нп. volatile забыли
Ну так:
Заволатилил все что было можно, оптимизацию компилятора отключил
Грешу на приоритетность прерываний, но у прерываний PORT как будто по умолчанию самый высокий приоритет IP0.
К тому же в PIC16 приоритеты не выставляются вообще никак кроме как ручками в обработчике прерываний. Но тем не менее и с PIC16 у меня была такая же ерунда, что прога заходила в цикл и никак не попадала из нее в обработчик прерываний.

Попробовал вместо задержки использовать условие if, по которому выполняющийся по прерыванию код просто игнорируется до возникновения события прерывания. Прога крутится в главном цикле пропуская часть кода, который выполняется только по изменению условия. Тут все нормально. Дело все же в циклах while и for. По-видимому, есть в них что-то особенное, чего я не знаю. Или они проц грузят до такой степени, что он на прерывания не успевает реагировать. Но я даже задержки пробовал делать в теле while и for, не помогло...
 

Alcest

Member
Решив, что компилятор все же где-то и что-то оптимизирует, сделал цикл while со счетчиком, в котором переменная из его условия увеличивается с каждой итерацией, и по достижению некоторого значения цикл завершается. Чтобы не было переменных которые компилятор может счесть бесполезными. Ту же переменную решил обнулять в обработчике прерываний, чтобы досрочно выходить из цикла. Ну так цикл по счетчику завершается, а в обработчик прерывания все равно программа не переходит.
 

Alcest

Member
Как вариант одно прерывание постоянно перекрывает другое.
Вполне вероятный вариант. Только почему именно в циклах?

то в программе всегда есть хотя бы один цикл
И даже не один. Вот тут подумалось - а нет ли ограничений на вложенность циклов?

P. S. не у меня одного такие косяки. Гуглил-яндексил, и вижу что с такой фигней многие сталкивались. И решения так и не нашли.
 

CodeNameHawk

Moderator
Команда форума
Еще раз повторю, обычно программа крутится в цикле while и ясное дело прерывания работают.
 
Сверху Снизу