Se você tem sprintf
char outString[10];
sprintf(outString, "%hu", ADC_result);
Ou, se suas ints forem 16 bits
sprintf(outString, "%u", ADC_result);
Pergunta
O que eu quero fazer:Transforme o número de 16 bits resultante (depois de combinar os dois #s de 8 bits) em uma string para usar com minha função de envio serial
O problema:Ao usar o ITOA, o resultado se torna negativo quando passa no ponto de meio caminho (passando do 15º bit para o 16º), por isso está essencialmente usando o 16º bit como bit de sinal (sem surpresa), onde meu número deve não ser assinado. A Sprintf também faz isso. Observe que o ITOA (16) funciona perfeitamente, como deveria.
O hardware:Micro Processador ATMEGA16 (AVR C) ADC externo de 16 bits conectado via barramento SPI (envia o resultado do ADC como dois números de 8 bits)
O código:
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);
O resultado disso é que ele imprime um 15 bits assinado em vez do UINT16 original. Eu tenho usado o ITOA para imprimir os resultados do ADC interno de 10 bits, mas está me matando que algo tão simples está me levando tanto tempo.
Eu realmente aprecio o seu tempo.
Solução
Se você tem sprintf
char outString[10];
sprintf(outString, "%hu", ADC_result);
Ou, se suas ints forem 16 bits
sprintf(outString, "%u", ADC_result);