Цитата(skripach @ Jul 3 2011, 17:08)

printf("F = %06f Hz\n", value); Не?
Не.
Цитата(Dnepr33 @ Jul 3 2011, 21:46)

не уверен за WinAVR - но по крайней мере в стандарте С можно извернуться так
1. использовать sprintf - пишем в память
2. из памяти выводим любым удобным способом - даже посимвольно, как из массива.
Ну где-то так оно и делается. fprintf не догма. можно и другую функцию, лишь бы выводить удобно было.
Цитата(sergeeff @ Jul 3 2011, 21:37)

А в printf включена поддержка float?
А как узнать? Как я понял там аргумент double.
Цитата(ReAl @ Jul 3 2011, 20:06)

Точно, не получается :-(
Таки не всё поддерживает, а жаль.
Ну тогда так
Код
fprintf_P(fconsole
, value < 10 ? PSTR("F = %6.4f Hz\n") : value < 100 ? PSTR("F = %6.3f Hz\n") : PSTR("F = %6.2f Hz\n")
, value);
Так как миленькое работает, просто гробовато выглядит.
Значение не отображает. Знак вопроса выводит. Текст выводит правильно.
Вот собственно тестовый код, куда и надо вставить строчку с выводом:
Код
#define F_CPU 8000000UL // 16.0 MHz
#include <util/delay.h>
#include "defines.h"
#include <ctype.h>
#include <stdint.h>
#include <stdio.h>
#include <avr/pgmspace.h>
#include "lcd.h"
volatile unsigned char q;
volatile unsigned int f=0xF;
volatile double frq;
double fp = 1;
FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);
ISR(TIMER0_OVF_vect)
{
++q;
if(q==1)
{
PORTA ^= (1<<7);
q=0;
}
}
int main(void)
{
DDRA = 0b10000000;
PORTB = 0b00000000;
DDRB = 0b10111111;
TCCR0A = 0b10000000;
TCCR0B = 0b00000110;
TIMSK = 0b00000010;
frq=123;
lcd_init();
stderr = &lcd_str;
fprintf_P(stderr, PSTR("F = %6.4f Hz\n"), frq);
/*value < 10 ? PSTR("F = %6.4f Hz\n") : value < 100 ? PSTR("F = %6.3f Hz\n") : PSTR("F = %6.2f Hz\n")*/
asm("sei");
while(1)
{
asm("nop");
}
return 0;
}