Ви не увійшли.
Сторінки 1
Делаю даталогер для научки. Два устройства на SPI - АЦП(ADS1220) и карта памяти на arduino UNO. CS Ноги разные. Все делаю вроде правильно и по отдельности работает. Если сначала делаю замер, а потом сбрасываю на карту флеш, то первый замер правильный. Дальше замеры черт и что. Если ничего не сбрасываю периодически на карту, то замеряет правильно. Пробовал каждый раз инициализировать АЦП поле каждого сбрасывания на карту - помогает, но мне не нравятся эти костыли. Карта работает во всех случаях правильно. Видно надо глубже копать, что там происходит. Подскажите пожалуйста как выйти из ситуации.
Остання редакція Ігор59 (2020-10-01 15:03:07)
Неактивний
Т.е. при обращении к ADC устанавливается CS_ADC=LOW, CS_FLASH=HIGH, а при обращении к флеш - CS_ADC=HIGH, CS_FLASH=LOW ? И во втором случае ADC воспринимает данные, предаваемые по SPI и как-то меняет свои настройки? Или у Вас CS_ADC не равно HIGH (подтяжка есть?), или в ADC бага. Попробуйте представить, что в ADC реально есть бага и Вам это необходимо показать производителю ADC - напишите минимальную программу только с МК и ADC, где бага четко проявляется. По мере написания придет более глубокое понимание, Вы скорее всего найдете ошибку в своей программе. Но не исключено, что докажете багу. Я обычно поступаю по такому алгоритму, так интереснее)
Неактивний
Т.е. при обращении к ADC устанавливается CS_ADC=LOW, CS_FLASH=HIGH, а при обращении к флеш - CS_ADC=HIGH, CS_FLASH=LOW ? И во втором случае ADC воспринимает данные, предаваемые по SPI и как-то меняет свои настройки?
На костылях прекрасно работает без всяких там изменений LOW/HIGH перед опросом устройства, вообще не использую. При периодической инициализации АЦП видно оно настраивается само правильно после FLASH и при этом не мешает карте. Я пользуюсь стандартными библиотеками, которые есть в стандартном наборе ардуино, LOW/HIGH видимо самими функциями библиотек устанавливается. Все время, где бы я не проверял в программе digitalRead(ADS1220_CS_PIN) и digitalRead(SD_CS_PIN) = 1.
Пока лень копаться в регистрах, пользуюсь библиотеками.
Может проблема в том что я сохраняю все время файл открытым и только сбрасываю периодически данные.
Или у Вас CS_ADC не равно HIGH (подтяжка есть?),
А отсюда, пожалуйста по подробнее. Как там подтяжку организовать
Неактивний
Пин в AVR может быть в четырех состояниях:
1. на вход, без подтяжки - если он подключен к входам других устройств, где тоже нет подтяжки, то он будет как антенна ловить случайные состояния
2. на вход, с подтяжкой - подключается резистор между пином и питанием, делает его состоянием "по умолчанию" лог. 1
3. на выход, логический 0
4. на выход, логическая 1
Изучите библиотечные функции, как там меняется состояние пина ADS1220_CS_PIN и какое остается после выхода из функции.
Неактивний
Сторінки 1