Hallo zusammen
Ich komme nicht mehr weiter beim auslesen eines ADC AD7924 (link) an einem MEGA2560.
Ich kann zwar die 4 Kanäle auslesen, aber das Resultat im Serialmonitor kann ja kaum stimmen:
Serialmonitor, alle Eingänge 2.5V (max):
Ch.0 = 4094
Ch.1 = 8191
Ch.2 = 12286
Ch.3 = 16383
0V:
Ch.0 = 16
Ch.1 = 4112
Ch.2 = 8206
Ch.3 = 12304
Der Code dazu ist im Anhang. Ebenso ein paar Printscreens vom Logic-Analyzer.
#include <SPI.h>
long result0;
long result1;
long result2;
long result3;
long msb0;
long lsb0;
long msb1;
long lsb1;
long msb2;
long lsb2;
long msb3;
long lsb3;
void setup() {
Serial.begin(115200);
pinMode(SS,OUTPUT);
digitalWrite(SS,HIGH);
SPI.begin();
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE2));
}
//83 Ch0, 87 Ch1, 8B CH2, 8F CH3
void loop() {
digitalWrite(SS,LOW);
SPI.transfer(0x83);
SPI.transfer(0x30);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
msb0 = SPI.transfer(0x0);
lsb0 = SPI.transfer(0x0);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
SPI.transfer(0x87);
SPI.transfer(0x30);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
msb1 = SPI.transfer(0x0);
lsb1 = SPI.transfer(0x0);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
SPI.transfer(0x8B);
SPI.transfer(0x30);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
msb2 = SPI.transfer(0x0);
lsb2 = SPI.transfer(0x0);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
SPI.transfer(0x8F);
SPI.transfer(0x30);
digitalWrite(SS,HIGH);
digitalWrite(SS,LOW);
msb3 = SPI.transfer(0x0);
lsb3 = SPI.transfer(0x0);
digitalWrite(SS,HIGH);
result0=msb0<<8|lsb0;
Serial.print("Ch.0 = ");
Serial.println(result0);
result1=msb1<<8|lsb1;
Serial.print("Ch.1 = ");
Serial.println(result1);
result2=msb2<<8|lsb2;
Serial.print("Ch.2 = ");
Serial.println(result2);
result3=msb3<<8|lsb3;
Serial.print("Ch.3 = ");
Serial.println(result3);
Serial.println();
delay(500);
}
Wie man sieht stimmt der Ch.0, aber bei allen anderen wird immer ca. 4095 dazu gezählt.
Die beiden Control-Bytes sind msb = 1000 0011, lsb = 0011 0000
lsb ändert nicht, msb nur die Bits 3 + 4 (Adresse Ch.)
Irgendwo mache ich einen Fehler, aber wo?
Bitte um Hilfe
Gruss
Franz
AD7924-5_MEGA.ino (1.57 KB)
ad7924.pdf (854 KB)