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.

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top