Перейти к содержанию
    

Halfback

Участник
  • Постов

    424
  • Зарегистрирован

  • Посещение

Весь контент Halfback


  1. Вот так спасибо. Привел CPHA (2 EDGE) и CPOL (High) в соответствие и всё заработало как надо. Ура!
  2. AD779X_Reset(); -> это выплевывание из МК в АЦП 4 раза 0xFF AD779X_HWDetect(); -> это выплевывание из МК в АЦП 0x60 и потом 0x00, где АЦП должен выплюнуть байт с идентификатором.
  3. Хорошо. ВОт осциллограммы SPI Соответствуют коду rrr=AD779X_HWDetect(); rrr=AD779X_HWDetect(); Другими словами первая строчка работает, ответ есть. Вторая не работает, ответ всегда 0. Вот это осциллорамма SCK и SDO Вот это осциллорамма SCK и CS Вот это более подробная осциллорамма SCK и SDO когда данные с АЦП выплевываются. ВОт осциллограммы SPI Соответствуют коду rrr=AD779X_HWDetect(); AD779X_Reset(); rrr=AD779X_HWDetect(); Первая и третья строчка работает если между ними ставить сброс. Осциллорамма SCK и SDO Осциллорамма SCK и CS
  4. Изначально либу на гитхабе писал не индус, я её во многом переработал. Если топик надо перенести в другое место - я не против. Просто в этом же разделе было обсуждение АЦП 7792 но на дркгкю тему, вот и решил разместить тут же.
  5. Всем доброго времени суток! Ситуация такая: подаю питание на АЦП, выдаю софтовый сброс с чипселектом 32 единицы, читаю ID - всё нормально, возвращает 0x4A (с маской 0xF интересно что это именно А) а далее всё, кранты. Допустим читаю это же регистр или другие регистры - возвращает в основном нули. Если перед каждым чтением регистра выдавать софтовый сброс то всё хорошо, все регистры по умолчанию читаются в соответствии с даташитом. Вопрос - что я не так делаю? Т.е. вот так работает, rrr = 0x4A: volatile unsigned short rrr; AD779X_Reset(); HAL_Delay(1); rrr=AD779X_HWDetect(); AD779X_Reset(); HAL_Delay(1); rrr=AD779X_HWDetect(); вот так не работает volatile unsigned short rrr; rrr=AD779X_HWDetect(); HAL_Delay(1); rrr=AD779X_HWDetect(); unsigned char AD779X_HWDetect() { unsigned char result; ADCDevice.CSControl(cssEnable); ADCDevice.TxByte(AD779X_RDR_ID); /* send cmd: read ID register */ m_adc_model = ADCDevice.RxByte(); /* get ID */ ADCDevice.CSControl(cssDisable); return (m_adc_model); } ВТорой день туплю, не понимаю почему так происходит. Что АЦП не нравиться? Почему сброса требует? На осциллографе вроде всё нормально. Когда не работает, SDO АЦП действительно не отвечает.
  6. Спасибо, совет хороший, но в моем случае не применим т.к. в структуре ADCDevice будут поля которые могут меняться.
  7. Вы даже не удосужились понять суть моего вопроса и начали давать "ценные" советы как по SPI работать с АЦП. А если бы это был не АЦП а другое устройство? И не SPI ? Суть вопроса данного топика от этого не поменялась бы никак. Надеюсь понятно пояснил.
  8. В общем всем спасибо за потраченное время. А ларчик то открывался просто. Ведь было же в "ADC.h" объявлено extern tADС_Device ADCDevice; это значит что в main.c можно написать так tAD779X_Device ADCDevice = { .TxByte = SPI_TxByte, .RxByte = SPI_RxByte }; и причем тут потуги на тему как надо работать с АЦП, что необходимость DMA (хотя кто сказал что это какой-нибудь STM32 а не AVR/PIC) и т.д. и т.п.??? совершенно непонятно зачем некоторые товарищи пытались уводить тело вопроса в сторону.
  9. в АЦП есть регистры для конфигурации усиления входа, смещений и т.п. На счет разрядности обращения к АЦП - к сути вопроса это отношения не имеет. при обращении ADCDevice.TxByte(0xA0) реально должна вызываться SPI_TxByte(0xA0) в "ADC.h" объявлен тип tADC_TxByte как указатель на функцию, принимающая в качестве аргумента unsigned char и ничего не возвращающая. Но вот меня клинит на том, где правильно написать что tADC_TxByte = SPI_RxByte;
  10. всем доброго времени суток. с проектом непонятки следующие: 1. Есть АЦП. В него отправляют байты по SPI и также получают. В соответствующем для АЦП h-файле есть записи typedef void (* tADC_TxByte)(unsigned char Data); typedef unsigned char (* tADC_RxByte)(void); typedef struct { tADC_TxByte TxByte; tADC_RxByte RxByte; } tADC_Device; extern tADС_Device ADCDevice; 2. Есть для микроконтроллера файлы SPI.c и SPI.h где определены соответствующие функции для работы с SPI void SPI_TxByte(unsigned char Data); unsigned char SPI_RxByte(void); Так вопрос вот в чем - как правильно привязать обращения типа data[0] = ADCDevice.RxByte() к SPI_RxByte(void); и соответственно ADCDevice.TxByte(0xA0) к SPI_TxByte(0xA0); ??? Есть ли способ увязать не корректируя файлы "ADC.c" и "ADC.h"? Например создать файлик "ext_SPI.h" и правильно его инклудить. Прошу ногами сильно не пинать. Наверное это предновогодний ступор.
  11. потенциал мерить нужно относительно электрода сравнения. Рассматривается AgCl Например в стеклянной или пластиковой емкости с соленой/пресной водой, где рядом погружен электрод сравнения, надо штырем из нержавейки ткнуться в цинковую пластину, расположенную на дне. И померить разность потенциалов с точностью до 1мВ. На первом рисунке, электрод подключается к неинвертирующему входу ОУ. На сколько я понял там нужно применить что-то вроде коаксиала и оплетку коаксиала подключить ко выводу 2 ОУ, центральную жилу к 3 ноге ОУ. Предполагается, для того чтобы эта система работала, в жидкости с электродом оплетка д.б. оголена? Или как это работает? На второй картинке (FIGURE 3) мне не известный электрод сравнения, у которого судя по рисунку 2 вывода. Я ориентируюсь на электрод сравнения ЭСр-10111, у которого 1 вывод.
  12. мысль понятная, только вот я PH не мерю, у которой есть зависимость от температуры жижи. Мне нужна только разность потенциалов между электродами. Кстати, если только к одному электроду подключить Vref через 10 МОм то по идее в соленой и пресной воде потенциалы относительно Vref должны выровняться. И тогда потенциал с электродов спокойно можно подавать на гигаомные/тераомные входы буфера на ОУ, питание которого привязано к общему Vref. Расстояние между электродами всегда постоянно. Что скажете?
  13. если выбирать между наводками и искажением напряжения (разности потенциалов между электродами) то выбираю бороться с наводками, например между инструментальником и АПЦ поставить ФНЧ с постоянной времени сотни миллисекунд. балансировка "нуля" вольтметра планируется при старте девайса, переключением цепей электродов в цепь КЗ. Да и 3-й электрод очень не хотелось бы внедрять хотя бы с конструктивной точки зрения.
  14. технически не понятно. На электрод сравнения предлагается подавать Vref ? Или Vref опускать в воду считай третьим электродом, рядом с двумя другими электродами?
  15. Потенциал относительно ОУ не знаю. Ёмкость большая стекло. К сожалению не металл. Кстати ОУ с изолированеыми FET подобные вопросы не решают, без введения выравнивающего потенциала схемы?
  16. Всем доброго времени суток! Надо в жидкости померить и оцифровать разность потенциалов, типа электрохимии. Нужно максимально большое входное сопротивление. Хотябы Гигаом. Вижу есть ОУ с CMOS, у которых входной ток в НКУ 1пА С реализацией схемы есть вопросы. На сколько я понимаю такая схема будет работать когда напряжения V1 и V2 на входу относительно нуля должны находиться в диапазоне питания ОУ. А в моем случае потенциалы в жидкости никак не связаны с питанием ОУ, и подтяжки по входам не поставить ввиду обеспечения требованиям ГОм на входе, то будет ли такая схема работать? ОУ к примеру MCP601 или инструментальник типа AD8236
  17. AE857 по сабжу ОК но, к сожалению, не подходит по двум причинам: - входное сопротивление - совсем низкое, на интересующем самом низком диапазоне 10В(5В) всего то 180кОм. Хотелось бы единицы а то и десятки МОм. - по метрологии характеристики весьма посредственные. Пределы допускаемой основной абсолютной погрешности измерений на диапазоне 5В -> 0,002*5+0,0016*5 = +/- 18мВ. Многовато. Хотелось бы раза в 3 поменьше. ПЛК, я так понимаю, наверное не подразумевают более-менее точные измерения. Это ж комбайн а не точное СИ.
  18. Дорого времени суток. Компактный вольтметр DC без индикации с RS485 или 232 с сертификатом Госреестра РФ - такие у нас вообще бывают? Искал - не нашел. Заранее спасибо за наводку!
  19. тактирую от внешнего кварцевого резонатора на 32768 https://www.chipdip.ru/product0/8001797043 у него 20ppm, мой уход больше этой цифры. Частотомера хорошего у меня нет но осцилл RIGOL показал с предварительно настроенного выхода MCO импульсы частотой 32765...32771 Гц (в течение часа). STM пишет в том ключе, что мол подавая более высокую частоту аля HSE и считая кол-во импульсов LSE за определенную длительность в секундах, можно понять смещение LSE от нужной 32768. Ну о потом это смещение в регистре RTC_CALR учесть. Но до конца в этот процесс не смог вникнуть.
  20. STM32 калибровка RTC

    всем доброго времени суток. Есть непонятки как реализовать калибровку RTC, конкретно у меня за 1 час время уходит на 1-2 минуты. в МК есть регистр RTC calibration register (RTC_CALR) где есть возможность добавить тиков или пропустить. В кубике на это счет даже есть функция HAL_RTCEx_SetCalibrationOutPut(...). Вопрос вот в чем - как понять сколько тиков надо добавить или пропустить? Нигде не могу найти соотв. exampe как всем этим механизмом пользоваться. Хочется иметь возможность подстраивать RTC без внешнего участия и подключений частотомеров. MK семейства F4 и L4
  21. так а есть в каких-нибудь даташитах или стандартах фразы, говорящие о то что подобный трюк допустим? Лично по моим ощущениям, в приемном и передающем каналах трансформаторы и симфазные фильтры скорее всего одинаковые, но напрягает, что в даташитах, причем на разные аналогичного применения трансформаторы (в т.ч. отечественные), четко разделяют каналы на прием и передачу. Поэтому допускаю подвох.
  22. всем доброго времени суток. вопрос сопряжения м/с LAN8720AI и трансформатора HX1188NL: по трассировке если следовать документации то получается проводники RX TX между м/с и трансформатором будут крест/накрест. Можно ли изменить связи таким образом, что в трансрфматоре канал который обозначен как Tranceiver использовать как Receiver и наоборот? Тогда по трассировке получиться всё четко.
  23. реле стоит в гальванически изолированной зоне, а для применения подобных электронных ключей придется отдельно подводить изолированное питание и т.п. В конкретной задаче такой путь не приемлем.
×
×
  • Создать...