Hola buenas estoy realizando un proyecto en el que estoy usando como host controlador un Arduino Nano ATMega 368 y un integrado MAX35101 que sera el esclavo para la conexion SPI.
Lo que quiero es sencillo (en teoría) es tomar el tiempo de vuelo (time of flight)… pero bueno primeramente quiero comprobar que la comunicación SPI funciona correctamente.
Viendo muchos tutoriales y ejemplos y basandome en general de estos:
He conseguido hacer mi programa, pero el problema es que no me funciona y no se si estoy haciendo algo mal en la parte de programar Arduino o tengo algo mal en la parte de Hardware.
Os dejo los datos que tengo:
CODIGO:
/*
Circuit:
MAX35101
RST: pin 8 (should be (HIGH) to operate correctly and high to reset the value should be (low) )
INT: pin 9 (is disbled (low) when the data is ready)
CE: pin 10 (in order to select the max we have to put this pin low)
These pins are controlled by arduino
MOSI: pin 11
MISO: pin 12
SCK: pin 13
created 22 February 20
by Jose Reinoso Andrade
*/
// the sensor communicates using SPI, so include the library:
#include <SPI.h>
// pins used for the connection with the sensor
// the other you need are controlled by the SPI library):
const int RST= 8;
const int INT = 9;
const int CE = 10;
void setup() {
Serial.begin(9600);
//Start the SPI library:
//Set the settings
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
// initalize the data ready and chip select pins:
pinMode(INT, INPUT);
pinMode(CE, OUTPUT);
pinMode(RST, OUTPUT);
digitalWrite(RST,HIGH);
delay(100);
}
void loop() {
byte dato=0;
byte dato2=0;
delay(100);
digitalWrite(CE,LOW);
//Leemos los registros de control con READ OP CODE 0XC2
dato=SPI.transfer(0b11000010);
//dato=SPI.transfer(0);
dato2=SPI.transfer(0);
digitalWrite(CE,HIGH);
delay(100);
Serial.print("Primera pasada:" );
Serial.print(dato);
Serial.println(dato2);
//Ahora vamos a escribir en estos registros de control la configuracion que deseamos 0x0235
digitalWrite(CE,LOW);
//Escribimos los registros de control con el opcode 0x42 y el valor 0x0235
SPI.transfer(0x42);
SPI.transfer16(0x0235);
//SPI.transfer(0x02);
//SPI.transfer(0x35);
digitalWrite(CE,HIGH);
delay(100);
//Comprobamos que se haya echo bien
digitalWrite(CE,LOW);
//Leemos los registros de control con READ OP CODE 0XC2
SPI.transfer(0b11000010);
dato=SPI.transfer(0);
dato2=SPI.transfer(0);
digitalWrite(CE,HIGH);
delay(100);
Serial.print("Segunda pasada:" );
Serial.print(dato);
Serial.println(dato2);
Serial.print("Deberia Salir el resultado: ");
Serial.print(0x02);
Serial.println(0x35);
delay(3000);
}
Resultados:
Primera pasada:00
Segunda pasada:00
Deberia Salir el resultado: 253
Primera pasada:00
Segunda pasada:00
Deberia Salir el resultado: 253
Primera pasada:00
Segunda pasada:00
Deberia Salir el resultado: 253
Primera pasada:00
Segunda pasada:00
Deberia Salir el resultado: 253
Os dejo la documentacion del MAX35101:
De antemano muchísimas gracias por vuestro tiempo.