![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
MementoMori
Свой-
Постов
1 340 -
Зарегистрирован
-
Посещение
Весь контент MementoMori
-
Ах вот оно что.... Ладно... но и напряжение почему-то не выставляется.... буду копать...
-
Спасибо, получилось, чтение и запись работают. Но.... не во все регистры пишется. Что я сделал - я тупо пишу 0xFFFF во все регистры. Номер регистра это Conand_byte. По идее я должен прочесть из них те же 0xFFFF, за минусом тех бит, которые Readonly или "Don't care" Command_byte = 0x01; DAC_REGISTER=0XFFFF; LSDB=DAC_REGISTER>>8; MSDB=DAC_REGISTER&0xFF; aTxBuffer[0] = Command_byte; aTxBuffer[1] = MSDB; aTxBuffer[2] = LSDB; HAL_I2C_Master_Transmit(&hi2c1, DevAddress, aTxBuffer, 3, 100); Command_byte = 0x01; aTxBuffer[0] = Command_byte; RESULT=HAL_I2C_Master_Transmit(&hi2c1, DevAddress, aTxBuffer, 1, 100); RESULT2=HAL_I2C_Master_Receive(&hi2c1, DevAddress, aRxBuffer, 2, 100); К примеру Запись в этот регистр 0xFFFF при чтении дает 0x0FFF. Отлично, идем дальше Запись в этот регистр 0xFFFF при чтении дает 0x0500 (в серединке читается DEVICE_ID, который в бинарном формате 010100). А вот регистры каналов Что бы я ни записал - читаются нули.... что может быть не так?
-
Да картинка мне понятна, не совсем понятно, как функциями это реализлвывать Это ясно, HAL_I2C_Master_Transmit() и буфер размером в 1 байт. Посылаю как? Ещё одна функция transmit()? Или HAL_I2C_Master_Receive(), а она сама пошлёт байт адреса? В этой функции в качестве параметра есть rxBuffer. Его элементам ничего присваивать не надо, функция сама его заполнит? Так? Неправда ваша. Каждый из указанных регистров двухбайтный и читается по отдельности.
-
Без ошибок. судя по исходному коду функции Receive, она сама туда пишет. Вот черт, я ведь так и подумал в начале. Даже на форуме написал, а потом решил, что это глупость, и стер. Я решил, что функция HAL_I2C_Mem_Read делает все сама. Так в Transmit в поле address_byte указывать адрес устройства, а в Recieve в поле address_byte указывать адрес регистра? Я правильно понял?
-
Я любитель и STM мне за глаза. uint8_t MemAddress=0x02; uint8_t MemAddressSize=2; HAL_I2C_Mem_Read(&hi2c1, DevAddress, MemAddress,MemAddressSize, aRxBuffer, 2, 100); И вот так тоже нули...
-
Спасибо, Теперь пытаюсь читать: Хочу прочитать STATUS_REGISTER, для его чтения COMMAND_BYTE должен быть равен 0x02 Читаю uint8_t aRxBuffer[3]; Command_byte = 0x02; aRxBuffer[0] = Command_byte; HAL_I2C_Master_Receive(&hi2c1, DevAddress, aRxBuffer, 3, 100); Пoлучаю aRxBuffer 0x00,0x00,0xFF Лажа какая-то.
-
Спасибо!
-
То есть по адресу 0х48 микросхем пересылается её же адрес? Извините, может я неправильно понимаю процесс. Мастер шлёт в сеть адрес, микросхема откликается ACK, это значит, что следующая посылка будет воспринять ей как руководство к действию, а остальные микросхемы, не распознавшие свой адрес, будут спать. Если я вызову вышеуказанную функцию отправки, получится, что она пошлёт следующую посылку Адрес Адрес Байт1 Байт2 Байт3? Или же мне нужно отправить буфер из 2,3,4 байт, а в первый будет поставлен DevAddress? Не сочтите за наглость, вас не затруднит показать, как вызывать функцию и как будет выглядеть посылка?
-
Помогите разобраться с i2c микросхемой.
MementoMori опубликовал тема в В помощь начинающему
Вот такой вот i2C ЦАП https://www.ti.com/lit/ds/symlink/dac43608.pdf Вот что в даташите про протокол написано То есть, шлем адрес, дальше тип команды (например номер канала), дальше данные (например значение напряжения на канале). И вот функция, которую предоставляет куб HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) Я не совсем пойму. Как в этом случае будет выглядеть протокол обмена? Вот так что ли? ADDRES BYTE ACK байт в pData ..... Получается что этой функцией можно только чередовать адрес и данные в посылке, а у меня адрес->команда->данные. Подскажите, как организовать обмен с этой микросхемой посредством HAL? Может я не ту функцию выбрал? -
Мне нужен один канал для звука и 6 для управления некоторыми потребителями. внешний цап 8 канальный, можно бы и оставшиеся два для звука использовать, но я не хочу - куда проще рулить регистром, да и внешний цап медленный. В общем куча компромисов. P.S. Скоро наверное тему про ЦАП на i2c создам, че-то не могу разобраться. Кто нить работал с DAC43608?
-
Есть у меня такая. Она отделена от остальной земли, и через VIA сразу ныряет в слой PLANE. Ха... только сейчас обратил внимание - с LDO то же сто и без него (может я конечно путаю шумы и пульсации). Но.. пусть лучше будет. Я вот думаю, может и правда AVDD и AREF+ отсоединить и запитать от того же LDO?
-
Так это уже другое измерение другой цепи при других настройках осциллографа.
-
Да, кстати, хотелось бы услышать мнение о чистоте линии питания и эффективности фильтров. Вот моя схема Бусины вот такие https://datasheet.lcsc.com/szlcsc/1810311113_Murata-Electronics-BLM18AG121SN1D_C76892.pdf На линии VCC_3V3 вот такая картина По горизонтали деление равно 20 наносекунд. фоновый шум 14 мВ, всплески до 35-47 мВ. Бусины ничуть на амплитуду не влияют.
-
Нет, я, как и планировал выше, посмотрел осциллом питание - там конечно есть иголки, но картина в целом схожа с тем, что на линии 3.3 вольт. На выходе ЦАПа картина была специфическая. Отличная идея, думаю позволит окончательно решить вопрос. Я имел в виду, нормально ли это при близком расположении агрессора и жертвы? Вас ведь удивил не сам факт наведения помех, а их амплитуда. Вот я и спросил - при подобных ошибках наведение около 0.2 Вольт, это нормально?
-
ЧТо бинго? Эта линия через упомянутый VIA уходит во внутренний слой, защищенный сверху и снизу земельными слоями. Более того, я предусмотрительно эту линию и в самом внутренннем слое окружил землей. Она закрыта землей с 4-х сторон. Сомневаюсь я, что именно USB3300 наводит на нее помехи.
-
Непарвильно вы поняли. Не точка, к квадрат = 1 вольт. То есть, между двумя точками 0.2 вольт. Получается, если пики-иголочки, не брать во внимание, то чуть меньше 0.2 вольт. Это нормально? Есть конечно предположение, что при отпаянном кварце просто не работает usb3300, которая где-то еще наводит помеху.... Но помеха генерируется даже когда контроллер не стартовал. Может быть USB3300 живет своей жизнью, не знаю. ПОсмотрел только что - линия эта проходит под D+ и D-, но между ними слой земли. Не знаю, уберу ее подальше куда-нибудь.
-
Вы наверное не прочли последний пост... ну ладно, отвечу. Частота меандра 250 Герц. Осциллограф - Hantek 250 Мгц Описанные вами эксперименты с землей проводил. Причина уже выяснена, см. выше. Самое интересное - первый же каскад RC- фильтра сводит эту помеху на нет. И по этой причине я даже хотел было забить на поиски источника шума, но хорошо, что я этого не сделал - получил ценный для меня опыт. Ну а располагать так дорожку было конечно глупо.
-
В общем, отключил я DAC. Вообще отключил все, первая же строка кода - это настройка пина (на котором был DAC) на вход без подтяжки. Получаю следующую осциллограмму По горизонтали 1 мсек, по вертикали 1 вольт. Контроллер отладчиком остановлен полностью. И, кажется, причина ясна. площадки 1,2,3,4 - кварц от USB3300, вертикальная дорожка идущая от нижнего края картинки и заканчивающаяся VIA - это и есть искомая линия. Что творится на NetC81_2 (площадка 2 ), то есть источник шума, вы можете видеть на осциллограмме Отпаиваем кварц, запускаем ЦАП снова и видим вот такую осциллограмму на его выходе Немножко удивляет покатый конец фронта и "глиссада" в конце спада, но в верхнем и нижнем состояниях сигнал ровны (за исключением иголок)
-
Вот уж не знаю...
-
В том, что из 4096 вычитаетсч именно 128, есть сакральный смысл?
-
Если я меряю прямо на пине контроллера, то значит тактовая Пролазит в сам контроллер? Можно посмотреть что творится на avdd, правильно? Как я меандр создаю? Пишу в цап 0 и 4095 поочерёдно Я, кстати, много чего смотрел на плате осциллографом, такой шум только на цапе Что я могу сказать в оправдание щупа - смотрел при помощи пружинки Насчёт сколько бит шумит - не понял.
-
Если я в двухканального режиме посмотрю осциллографом цап и кварц, и будет не совпадение по частоте или по фазе, это исключить ваше предположение? ????????
-
Странно было слышать про синус и про звонкий меандр. Синус покажет ступеньки при смене значений. А у меня пульсация при постоянных значениях. Что касается звона - как раз его и нет, посмотрите на переход фронта в стабильное состояние. Зато на протяжении всего плато эти пульсация присутствуют. Вечерком гляну, что у меня на avdd и aref. P. S. Все же удивляет "цифровой" вид пульсаций, какой-то правильный, упорядоченный, "пиксельный".
-
Во время обсуждения я еще подумал - а может фильтр сделать, но всего 1-каскадный? Так и оказалось. Сделал я генерацию звука на DAC простым включением и выключением. То есть резко меняю уровень с 0 до 4095 Смотрите осциллограммы. До фильтра: После первого каскада: После второго каскада После третьего каскада Как видите, без фильтра сигнал с пульсациями, после первого фильтра - картина радикально меняется, после остальных - никак не меняется. Смущает только одно - уж больно какой-то "цифровой" шум получился, как будто цап меняет свои значения..... Вот этот шум крупным планом ТАкой шум это норма? А если мне понадобится DAC не для звука, а для генерации напряжения? С шумом можно что-нибудь сделать?
-
STM32H743 и USB_HS
MementoMori ответил MementoMori тема в STM
Не имею опыта работы с RTOS. Ещё с её глюка и разбираться, своих хватает. В крайнем случае, выкину КалоКод Калокуба и ручками, на регистрах. Но в целом и с кубом все работает.