Взаимодействие ADS8319 с Arduino UNO
Я использую Arduino UNO и пытаюсь подключить к нему 2 16-битных АЦП ADS8319 через интерфейс SPI.
Я связал 2 АЦП с микроконтроллером, используя "4-проводной режим CS без индикатора занятости" (страница 15 технического паспорта).
Я использую следующий код для получения значений из АЦП.
#include <SPI.h>
#define CONVPIN 7
#define SELPIN 8
#define SELPIN2 4
#define MISOPIN 12
#define SCLKPIN 13
int adcvalue;
byte byte1; byte byte2;
const float aRefVoltage = 5;
float volts = 0;
void setup() {
// поместите свой установочный код здесь, чтобы запустить один раз:
pinMode(SELPIN, OUTPUT); // PIN выбора АЦП
pinMode(SELPIN2, OUTPUT); // 2-й PIN выбора АЦП
pinMode(CONVPIN, OUTPUT); // PIN преобразования АЦП
pinMode(SCLKPIN, OUTPUT); // PIN тактового вывода АЦП
pinMode(MISOPIN, INPUT); // Выход данных АЦП
SPI.begin();
Serial.begin(9600);
}
void loop() {
// поместите свой основной код здесь, чтобы запускать его повторно:
digitalWrite(CONVPIN, LOW);
digitalWrite(SELPIN, HIGH);
digitalWrite(SELPIN2, HIGH);
digitalWrite(CONVPIN, HIGH);
digitalWrite(SELPIN, LOW);
delay(1000);
byte1 = SPI.transfer(0x00); //передача (считывание) 8 бит с микросхемы АЦП D15-8
byte2 = SPI.transfer(0x00); //передача (чтение) вторых 8 бит. D7-0
adcvalue = (byte1 <<8) | (byte2 & 0xff); // объедините 2 байта, чтобы сделать наше 16-битное слово
Serial.print("Voltage Value: ");
Serial.println(adcvalue,BIN);
volts = (adcvalue*aRefVoltage/65535);
Serial.print(" Sensor Volts: ");
Serial.println(volts,5);
delay(1000);
}
Однако я не получаю правильных значений. АЦП, который я выбрал с помощью "digitalWrite(SELPIN, LOW);", должен выдавать 1В, тогда как значения продолжают меняться в диапазоне от 0 до 2,2 В.Я не уверен, правильный ли мой код или нет. Не могли бы вы проверить код, чтобы я знал, в чем проблема-в моем оборудовании или в коде.
Ниже приведен скриншот моей схемы :
Ваши полезные предложения и комментарии будут оценены по достоинству ! Спасибо.
@yiipmann, 👍1
Обсуждение1 ответ
Лучший ответ:
После множества изменений значений резисторов и конденсаторов и проверки соединений я обнаружил, что заземление моего микроконтроллера находится не на том же уровне, что и АЦП ( я уже соединил его заземление с заземлением моей печатной платы, но возникла какая-то проблема ). Когда я припаял заземление контроллеров как раз рядом с заземлением АЦП, оба АЦП начали работать нормально.
- Использование Arduino для записи аналоговых сигналов с помощью SPI ADC + проблема с частотой дискретизации
- Получение неправильного вывода от АЦП через SPI в Arduino Uno
- Библиотека AD7768-1 "Ардуино"
- Как использовать SPI на Arduino?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Программирование ведомого SPI для Arduino
Спасибо за скетч, он помог написать [один для ADS8830](https://gist.github.com/aleksas/b743c11e98656aee1d572aba73c9bf65)., @alex
Можете ли вы поделиться полной схемой, я хочу сделать работу над аналогичным проектом, но с другим АЦП, @shreyash