Какую команду использовать для чтения и записи через команду spi.transfer
#include<spi.h>
byte val; // переменная для хранения временных данных
#define PIN_SPI_SS (9)
#define PIN_SPI_MOSI (10)
#define PIN_SPI_MISO (11)
#define PIN_SPI_SCK (12)
void setup();
pinMode(SS,output);
pinMode(SCLK,output);
pinMode(MOSI,output);
spi.setBitorder(MSBFIRST);
SPI.setDataMode(SPI_MODE3);
serial.begin(9600);
spi.begin();
void loop();
digitalWrite(SS,LOW);
uint8_t b1 = SPI.transfer(0x00);
uint8_t b2 = SPI.transfer(0x00);
uint8_t b3 = SPI.transfer(0xFF);
digitalWrite(SS,HIGH);
int16_t val = b1 | b2 ;
serial.print("val=");
serial.println(val,DEC);
обратитесь за ДАННЫМИ SHEET//https://www.ti.com/lit/ds/symlink/lm74.pdf?ts=1591436049550&ref_url=https://www.ti.com/product/LM74 моя проблема в том, что я не могу знать, какую команду я должен использовать в SPI.передаточная функция для записи и чтения данных о температуре здесь я использую 0x00 для чтения 16-битных данных регистра температуры, но как насчет записи в регистр конфигурации, LM74 использует команду 0xFF для режима выключения, но как мы узнали этот 0xFF относится только к регистру конфигурации.
1 ответ
В LM74 третий байт, который вы отправляете (или, более конкретно, последние 8 бит до 32 бит после 16-го бита, который вы отправляете), считывается и используется в качестве параметра регистра конфигурации.
Поскольку регистр конфигурации имеет только два состояния, 0xFF
- это переход в спящий режим, а 0x00
- это выполнение преобразований (как показано в таблице 1 таблицы данных).
Итак:
0x00 0x00 0xFF
означает получить один результат, а затем ложиться спать.
0x00 0x00 0x00
означает получить один результат и оставаться бодрствующим.
Если LM74 в данный момент находится в спящем режиме из последовательности 0x00 0x00 0xFF
, возвращаемый результат - это не температура, а идентификатор производителя чипа.
Это не очевидный метод управления чипом, и на самом деле он довольно плохо описан в этом техническом описании, так что не расстраивайтесь из-за того, что вы его не понимаете, мне потребовалось несколько минут, чтобы понять это.
- Как использовать SPI на Arduino?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- Программирование ведомого SPI для Arduino
- BMP280 возвращает 0