Bonjour tout le monde,
Je teste un ADC MCP3208 avec la fct suivante :
uint16_t litADC3208(SPIClass *spi, const int pin, byte voie){
uint16_t lecture = 0;
uint16_t dataIn = 0, dataIn1 = 0;
spi->beginTransaction(SPISettings(ADC_CLK, MSBFIRST, SPI_MODE0));
digitalWrite(pin, LOW);
uint8_t dataOut = 0b00000100 | voie >> 3; // envoi le bit de start, single et non différentiel et le MSB du num de la voie
dataIn = spi->transfer(dataOut); // et recoit 8 bits non significatif
dataOut = 0b00000000 | (voie & 0b00000011) << 6; // envoi les 2 LSB du numéro de la voie
dataIn = spi->transfer(dataOut); // et recoit 4 MSB dans les 4 LSB
dataIn1 = spi->transfer(0x00); // envoi 0 et reçoit les 8 bits restant
lecture = dataIn & 0x0F; // les filtre
lecture = lecture << 4; // les positionne en poids forts
lecture = lecture | dataIn1; // ajoute les 8 bits de poids faible
digitalWrite(pin, HIGH);
spi->endTransaction();
Serial.print("Reçu:"); Serial.print(dataIn, HEX);
Serial.print("\t"); Serial.print(dataIn1, HEX);
Serial.print("\t Lecture="); Serial.println(lecture, HEX);
return lecture; // adc.toAnalog(lecture);
}
J'obtiens l'affichage suivant :
Reçu:EF C0 Lecture=F0
J'ai l'impression qu'il me manque 8 bits à l'affichage.
Merci pour votre aide
Exact, merci.
Par contre j'aimerais qu'il m'affiche mes 16 bits même s'ils sont à 0.
et je m'en serai aperçu
La solution la plus simple, je pense, est avec sprinf :
char buffer[8];
sprintf(buffer, "0x%04X", value);
Serial.println(buffer);
Certains processeurs (comme les ESP32) semblent accepter
Serial.printf("value is %.*s\n", n, value); //ESP32
(Voir Sprintf - conversion specifications (%n$) )
dfgh
June 17, 2024, 5:01pm
5
hello, à tester
long valeur = 0x0F0CF0A0;
void setup() {
Serial.begin(115200);
Serial.println(" ");
print_binaire(valeur);
}
void loop() {
// put your main code here, to run repeatedly:
}
void print_binaire(long val)
{
for (int S = sizeof(val); S > 0; S--)
{
for (int f = ((8 * S) - 1); f >= ((8 * (S - 1))); f--)
{
if (bitRead(val, f) == 0) {
Serial.print("0");
} else {
Serial.print("1");
}
}
Serial.print(" ");
}
}
@Etienne_74 : j'ai testé ton code, mais il affiche la valeur en HEXA
Je pense que c'est ce que veut Mg31416 mais il suffit de remplacer le (dernier) X de "0x%04X" par 'd' pour afficher en décimal.
Comme dans ce tuto
EDIT : il faut plutôt remplacer "0x%04X" par "%05u" car c'est une valeur non signée 16 bit donc sur 5 digits mais pas précédée de 0x bien sûr...
EDIT2 : @dfgh : Je viens de lire ton code et de comprendre que tu voulais afficher en binaire : pas de solution toute faite pour le binaire à ma connaissance... donc, oui, il faut le faire "à la main"
Merci à vous deux pour vos conseils éclairés, je vais essayer demain