Question

Ce que je veux faire:Transformez le numéro 16 bits résultant (après avoir combiné les deux # 8 bits) en une chaîne à utiliser avec ma fonction d'envoi en série

Le problème:Lorsque vous utilisez ITOA, le résultat devient négatif une fois qu'il passe le point à mi-chemin (passant du 15e bit à 16e), il utilise donc essentiellement le 16e bit comme bit de signe (sans surprise) où mon numéro est censé être non signé. Sprintf fait également cela. Notez qu'Itoa (16) fonctionne parfaitement, comme il se doit.

Le matériel:Micro Processeur ATMEGA16 (AVR C) ADC externe 16 bits connecté via SPI Bus (envoie le résultat ADC comme deux numéros 8 bits)

Le code:

uint16_t ADC_result = ADC_data_LSB | (ADC_data_MSB<<8); // Combine both halves of the data
unsigned char *outString = "0123456789abcdef";
itoa(ADC_16_result, outString, 10);
send_A_String(outString);

Le résultat est qu'il imprime un 15 bits signé au lieu de l'uint16 d'origine. J'utilise ITOA pour imprimer les résultats de l'ADC interne à 10 bits, mais cela me tue que quelque chose de si simple me prend si longtemps.

J'apprécie vraiment votre temps.

Était-ce utile?

La solution

Si vous avez sprintf

char outString[10];
sprintf(outString, "%hu", ADC_result);

Ou, si vos INT sont 16 bits

sprintf(outString, "%u", ADC_result);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top