Chat freely about anything...

User avatar
By dgbat2
#70414 I've almost got the above working, but getting strange readings.
Here's the code
Code: Select all#include <SPI.h>

#define CS_PIN 15 // Use 10 when compiling for Arduino



int adcRead(int channel) {
  if ((channel > 7) || (channel < 0)) {
    return -1;
  }

  digitalWrite(CS_PIN, LOW);

  SPI.transfer(1);
  uint8_t r1 = SPI.transfer((channel + 8) << 4);
  uint8_t r2 = SPI.transfer(0);

  digitalWrite(CS_PIN, HIGH);

  return ((r1 & 3) << 8) + r2;
}

void setup() {

  pinMode(CS_PIN, OUTPUT);
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setFrequency(10000); // 1 MHz -- remove line when running on Arduino UNO
  Serial.begin(9600);
  digitalWrite(CS_PIN, HIGH);
}

void loop() {
  Serial.print(adcRead(0));
  Serial.print(",");
  Serial.println(adcRead(1));
  delay(50);
}


I'm getting readings of around 1023,1023 where it should be more like 4080 for this 12 bit 2 channel device.

The wiring I'm using from MCP3202 to NodeMCU are;

CLK > D5
Dout > D6
Din > D7
CS > D8

Any guidance much appreciated as I'm new to SPI!
User avatar
By dgbat2
#70529
Code: Select all#include <SPI.h>

#define CS_3202 15

void setup()
{
  Serial.begin(57600);
  pinMode(CS_3202,OUTPUT);
  digitalWrite(CS_3202,HIGH);
  SPI.begin();
  SPI.setClockDivider(SPI_CLOCK_DIV8);
}

void loop()
{
  Serial.print("CH0 =");
  Serial.println(Read3202(0,CS_3202));   
  Serial.print("CH1 =");
  Serial.println(Read3202(1,CS_3202));   
  delay(300);
}

int Read3202(int CHANNEL, int CS){
  int msb;
  int lsb;
  int commandBytes = B10100000 ;              // channel 0          
  if (CHANNEL==1) commandBytes = B11100000 ;  // channel 1
  digitalWrite(CS, LOW);
  SPI.transfer (B00000001);                   // Start bit
  msb = SPI.transfer(commandBytes) ;
  msb = msb & B00001111;
  lsb = SPI.transfer(0x00);
  digitalWrite(CS, HIGH);
  return ((int) msb) <<8 | lsb;