Страница 1 из 1

Как передать float по usart в avr studio

Добавлено: Вс апр 09, 2017 14:30:43
DenChik87
Подскажите в том коде что я написал значение float передано правильно? Протеус выдает значение C3 F5 48 40, это и есть значение 3,14 в виде 4х байт? И как сделать чтобы терминал протеуса интерпретировал значение 4х байт, как число с плавующей точкой?
Еще пробовал так(этот пример нашел на сайте):

void tx_float(float a)
{
unsigned char *ad,i;
ad=(unsigned char*)&a;
for(i=0;i<4;i++)
{
delay_ms(1);
putchar(*(ad++));
}
}
Но в этом случае в терменале протеуса пусто. Вообще если пихаю в putchar байт, терминал протеуса его не выводит

Re: Как передать float по usart в avr studio

Добавлено: Вс апр 09, 2017 15:48:40
Аlex
Если хотите видеть число в терминале, то и передавайте его как строку. Зачем делить на байты ? :dont_know:
DenChik87 писал(а):Вообще если пихаю в putchar байт, терминал протеуса его не выводит
Вообще, терминал выводит текст, а не значений байтов. По этому, пихать нужно символ, а не что-то там...

Re: Как передать float по usart в avr studio

Добавлено: Вс апр 09, 2017 16:42:53
DenChik87
Аlex писал(а):Если хотите видеть число в терминале, то и передавайте его как строку. Зачем делить на байты ? :dont_know:
А как это сделать, функцией printf? Я пробовал ее использовать - не работает. Для примера на atmega 328p код накидал, но в терминале пустота. Библиотеку libprintf_flt добавил. Можете пример кода привести?

Re: Как передать float по usart в avr studio

Добавлено: Вс апр 09, 2017 17:22:50
Аlex
Не во всех компиляторах по-умолчанию включен вывод float в sprintf. Поковыряйтесь в настройках.