• Внешний USB-ЦАП-Аудиопроцессор CDD-010 можно купить

управление ADAU1701 с помощью RaspberryPi по i2c

Efremoff

New member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time
 
i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
 

igrushkin

Well-known member
один и тот же запрос регистра всегда выдаёт разные результаты.
на ардуине это означает, что нет связи. Никаикх ошибок не бует, просто фигня в "содержании" регистров
Возьмите ардуинокод AD и перепишите его под питон
 

alexander_v

Member
на ардуине это означает, что нет связи. Никаикх ошибок не бует, просто фигня в "содержании" регистров
Возьмите ардуинокод AD и перепишите его под питон
что вы имеете ввиду по AD переписать не сложно понять бы как отправлять и главное что.
 

alexander_v

Member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time

i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
File "test2.py", line 7
msg = smbus2.i2c_msg.write(0x3b, [0x00, 0x14, 0, 0, 0, 0])
^
IndentationError: unexpected indent

вот такую ошибку выдаёт питон. как понимаю ругается на msg
 

alexander_v

Member
на ардуине это означает, что нет связи. Никаикх ошибок не бует, просто фигня в "содержании" регистров
Возьмите ардуинокод AD и перепишите его под питон
Я на малине это делаю, и если поменять адрес устройства то тогда будет ошибка.
 

igrushkin

Well-known member
File "test2.py", line 7
msg = smbus2.i2c_msg.write(0x3b, [0x00, 0x14, 0, 0, 0, 0])
^
IndentationError: unexpected indent

вот такую ошибку выдаёт питон. как понимаю ругается на msg

слово indent как бы намекает, что проблема в отступе. Как вы знаете, они критически важны в Питоне.

вот мой код


Вам дали ключевую функцию на питоне, а регистры можно у меня глянуть. Адреса регистров динамические и меняются в каждом проекте. На гитхабе лежит и проект под СигмаСтудио и код для управления по i2c

ps папку PythonScript не трогайте, там питон, но не для управления, а для форматирования текста
 

alexander_v

Member
слово indent как бы намекает, что проблема в отступе. Как вы знаете, они критически важны в Питоне.

вот мой код


Вам дали ключевую функцию на питоне, а регистры можно у меня глянуть. Адреса регистров динамические и меняются в каждом проекте. На гитхабе лежит и проект под СигмаСтудио и код для управления по i2c

ps папку PythonScript не трогайте, там питон, но не для управления, а для форматирования текста

спасибо разобрался. работает


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

alexander_v

Member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time

i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)

Спасибо
 

igrushkin

Well-known member
спасибо разобрался. работает


Вопрос такой . можно ли из кода Питона загрузить то что лежит в энергонезависимой памяти, ? что бы из кода происходила загрузка первоначальной конфигурации
можно. Из Студии экспортируется проект и там есть все нужные байты, которые можно по i2с залить в виде начальной конфигурации.
или можно сделать дамп еепром и его заливать.
 

alexander_v

Member
можно. Из Студии экспортируется проект и там есть все нужные байты, которые можно по i2с залить в виде начальной конфигурации.
или можно сделать дамп еепром и его заливать.
Доброго дня могли бы вы подсказать как ? пример кода на питоне
 

alexander_v

Member
Ок. В данном примере я управляю включением-выключением светодиода, подключенного в GPIO адау. Управление осуществлялось через DC Source, и адрес управляющего элемента в адау был - 0x0014.

Block Write
Time: 12:36:40 - 251ms
IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01
Time: 12:36:40 - 251ms

IC: IC 1
Cell Name: DC1
Param Name: DCInpAlg145X1value
Param Address: 0x0014
Bytes: 4
Param Data:
0x00, 0x00, 0x00, 0x01

Данный пример включает и выключает DC-source (и соответсвенно светодиод подключенный к одной из ног MP) c интервалом раз в секунду.

i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0]) - где 0x38 - это адрес адау со смещением (в сигмастудии этот адрес виден как 0x70), и потом идет массив где первые два элемента это смещение (регистр) записанный в виде двух отдельных байтов, и потом 4 байта, которые отвечают за управление регистра. от младшего байта к старшему.

А читать я не пробовал, мне это не зачем.

Код:
import smbus2
import time

i2c=smbus2.SMBus(1)
while True:
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 0, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
    msg = smbus2.i2c_msg.write(0x38, [0x00, 0x14, 1, 0, 0, 0])
    i2c.i2c_rdwr(msg)
    time.sleep(1)
Подскажите пожалуйста как прочесть правильно если адрес Адау 0x3b а адрес в цепочке приборов 0x0479 как по такому адресу обращаться?
 

kiryan

Member
Пока не могу ответить на этот вопрос. Пробовал еще с библиотекой "bcm2835 by Mike McCauley" - та же ситуация, видит только память.
При этом наши контроллеры для ChipStudio работают с ADAU1701 по I2C как и с любым другим устройством. Не понятно.
Евгений, добрый день! Подскажите, есть ли похожая проблема с RDC PRO 2-0027 ?

К слову, с китайскими платами ADAU1701 из али все работает отлично по i2c. Пробовал с raspberry pi zero 2 W
 

Vitalii

Well-known member
Приветствую. RDC PRO 2-0027 с Raspberry Pi 4 /5 заводятся с пол оборота. А вот модули 1452 /1467 PRO пока не смог запустить. Пока мучаюсь с адресами. Как-то непонятно, что с этим делать.
 

Vitalii

Well-known member
Приветствую. RDC PRO 2-0027 с Raspberry Pi 4 /5 заводятся с пол оборота. А вот модули 1452 /1467 PRO пока не смог запустить. Пока мучаюсь с адресами. Как-то непонятно, что с этим делать.
Нет. Управлять не получается. Выскакивает ошибка.
Завтра посоветуюсь с программистом. Может подскажет что-то толковое.
 

kiryan

Member
Приветствую. RDC PRO 2-0027 с Raspberry Pi 4 /5 заводятся с пол оборота. А вот модули 1452 /1467 PRO пока не смог запустить. Пока мучаюсь с адресами. Как-то непонятно, что с этим делать.
Прочитал Ваше сообщение, поторопился и купил сегодня RDC PRO 2-0027. Напрасно, все так же определяется только 0x50 - адрес микросхемы памяти :(
Придется и дальше использовать плату из али :(
 

Vitalii

Well-known member
Прочитал Ваше сообщение, поторопился и купил сегодня RDC PRO 2-0027. Напрасно, все так же определяется только 0x50 - адрес микросхемы памяти :(
Придется и дальше использовать плату из али :(
Я тоже не могу управлять ею.
 

Vitalii

Well-known member
Просто, я пользовался инструкцией для подключения DSP Machine 1 к Raspberry. Возникла идея. А если удалить микросхему памяти с платы 1701, будет одрес 1701 виден?
 

kiryan

Member
Получилось поуправлять платкой RDC PRO 2-0027 из Raspberry Pi Zero 2W по i2c.
В общем то все оказалось просто - можно игнорировать то, что i2cdetect не находит устройство, и все равно слать команды.

Предыдущей платы от chipdip у меня уже нет, проверить не смогу, но вот на новой RDC PRO 2-0027 все работает :)

Вот так это выглядит в моем случае на python:

Python:
import smbus2

i2c=smbus2.SMBus(1)

# Переключение на цифровой вход:
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x25, 0, 0, 0, 0]))
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x26, 0, 0x80, 0, 0]))

# Переключение на аналоговый вход:
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x25, 0, 0x80, 0, 0]))
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x26, 0, 0, 0, 0]))

Проект в сигме:
Screenshot 2025-01-05 at 17.00.04.png
 

Vitalii

Well-known member
Получилось поуправлять платкой RDC PRO 2-0027 из Raspberry Pi Zero 2W по i2c.
В общем то все оказалось просто - можно игнорировать то, что i2cdetect не находит устройство, и все равно слать команды.

Предыдущей платы от chipdip у меня уже нет, проверить не смогу, но вот на новой RDC PRO 2-0027 все работает :)

Вот так это выглядит в моем случае на python:

Python:
import smbus2

i2c=smbus2.SMBus(1)

# Переключение на цифровой вход:
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x25, 0, 0, 0, 0]))
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x26, 0, 0x80, 0, 0]))

# Переключение на аналоговый вход:
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x25, 0, 0x80, 0, 0]))
i2c.i2c_rdwr(smbus2.i2c_msg.write(0x34, [0x00, 0x26, 0, 0, 0, 0]))

Проект в сигме:
Посмотреть вложение 6095
Приветствую. Все же не зря купили платку 1701 PRO 👍
 
Верх