Halfback
Участник-
Постов
425 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Halfback
-
Звание
Местный
Контакты
-
Сайт
Array
-
ICQ
Array
Посетители профиля
4 435 просмотров профиля
-
Всем доброго дня. Тоже развлекаюсь с E77 на 868 МГц Пока есть хотелка увеличить дальность, путем сужения BW полосы чирпа. В библиотеке почему-то гвоздями прибиты только 125 250 и 500КГц. Никто не знает почему так? Если либу сильно не ковырять то можно повысить дальность выкрутив в минимум spreading factor (преамбулу = 12 либа сама выставит). Есть еще способ увеличить дальность?
-
Вот так спасибо. Привел CPHA (2 EDGE) и CPOL (High) в соответствие и всё заработало как надо. Ура!
-
AD779X_Reset(); -> это выплевывание из МК в АЦП 4 раза 0xFF AD779X_HWDetect(); -> это выплевывание из МК в АЦП 0x60 и потом 0x00, где АЦП должен выплюнуть байт с идентификатором.
-
Хорошо. ВОт осциллограммы 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
-
Изначально либу на гитхабе писал не индус, я её во многом переработал. Если топик надо перенести в другое место - я не против. Просто в этом же разделе было обсуждение АЦП 7792 но на дркгкю тему, вот и решил разместить тут же.
-
Всем доброго времени суток! Ситуация такая: подаю питание на АЦП, выдаю софтовый сброс с чипселектом 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 АЦП действительно не отвечает.
-
Помогите с указателями на функции Си
Halfback ответил Halfback тема в Программирование
Спасибо, совет хороший, но в моем случае не применим т.к. в структуре ADCDevice будут поля которые могут меняться. -
Помогите с указателями на функции Си
Halfback ответил Halfback тема в Программирование
Вы даже не удосужились понять суть моего вопроса и начали давать "ценные" советы как по SPI работать с АЦП. А если бы это был не АЦП а другое устройство? И не SPI ? Суть вопроса данного топика от этого не поменялась бы никак. Надеюсь понятно пояснил. -
Помогите с указателями на функции Си
Halfback ответил Halfback тема в Программирование
В общем всем спасибо за потраченное время. А ларчик то открывался просто. Ведь было же в "ADC.h" объявлено extern tADС_Device ADCDevice; это значит что в main.c можно написать так tAD779X_Device ADCDevice = { .TxByte = SPI_TxByte, .RxByte = SPI_RxByte }; и причем тут потуги на тему как надо работать с АЦП, что необходимость DMA (хотя кто сказал что это какой-нибудь STM32 а не AVR/PIC) и т.д. и т.п.??? совершенно непонятно зачем некоторые товарищи пытались уводить тело вопроса в сторону. -
Помогите с указателями на функции Си
Halfback ответил Halfback тема в Программирование
в АЦП есть регистры для конфигурации усиления входа, смещений и т.п. На счет разрядности обращения к АЦП - к сути вопроса это отношения не имеет. при обращении ADCDevice.TxByte(0xA0) реально должна вызываться SPI_TxByte(0xA0) в "ADC.h" объявлен тип tADC_TxByte как указатель на функцию, принимающая в качестве аргумента unsigned char и ничего не возвращающая. Но вот меня клинит на том, где правильно написать что tADC_TxByte = SPI_RxByte; -
Помогите с указателями на функции Си
Halfback опубликовал тема в Программирование
всем доброго времени суток. с проектом непонятки следующие: 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" и правильно его инклудить. Прошу ногами сильно не пинать. Наверное это предновогодний ступор. -
потенциал мерить нужно относительно электрода сравнения. Рассматривается AgCl Например в стеклянной или пластиковой емкости с соленой/пресной водой, где рядом погружен электрод сравнения, надо штырем из нержавейки ткнуться в цинковую пластину, расположенную на дне. И померить разность потенциалов с точностью до 1мВ. На первом рисунке, электрод подключается к неинвертирующему входу ОУ. На сколько я понял там нужно применить что-то вроде коаксиала и оплетку коаксиала подключить ко выводу 2 ОУ, центральную жилу к 3 ноге ОУ. Предполагается, для того чтобы эта система работала, в жидкости с электродом оплетка д.б. оголена? Или как это работает? На второй картинке (FIGURE 3) мне не известный электрод сравнения, у которого судя по рисунку 2 вывода. Я ориентируюсь на электрод сравнения ЭСр-10111, у которого 1 вывод.
-
мысль понятная, только вот я PH не мерю, у которой есть зависимость от температуры жижи. Мне нужна только разность потенциалов между электродами. Кстати, если только к одному электроду подключить Vref через 10 МОм то по идее в соленой и пресной воде потенциалы относительно Vref должны выровняться. И тогда потенциал с электродов спокойно можно подавать на гигаомные/тераомные входы буфера на ОУ, питание которого привязано к общему Vref. Расстояние между электродами всегда постоянно. Что скажете?
-
если выбирать между наводками и искажением напряжения (разности потенциалов между электродами) то выбираю бороться с наводками, например между инструментальником и АПЦ поставить ФНЧ с постоянной времени сотни миллисекунд. балансировка "нуля" вольтметра планируется при старте девайса, переключением цепей электродов в цепь КЗ. Да и 3-й электрод очень не хотелось бы внедрять хотя бы с конструктивной точки зрения.
-
технически не понятно. На электрод сравнения предлагается подавать Vref ? Или Vref опускать в воду считай третьим электродом, рядом с двумя другими электродами?