Тут уже всё решилось, но я хочу кое-что пояснить.
Цитата(MrYuran @ Apr 28 2008, 13:18)

по-моему, с ключом %f надо выводить флоты, а не даблы
С форматом %f и остальными "плавающими" форматами, насколько я помню, всегда *printf-ом
выводилось double, модификатор l (%lf и т.д.) при віводе игнорируется.
А вот *scanf-ом
вводилось float по %f и double %lf.
Сейчас ещё *printf-ом по %Lf выводится long double (обратите внимание на то, что тут L большая)
Насколько я помню, для *printf при выводе float преобразовывать его вручную не нужно, так же, как не нужно вручную преобразовывать char/short к int, это делается автоматически согласно default argument promotions.
По крайней мере я никогда не преобразовывал для вывода signed/unsigned char/short к int
Ну а у AVR, как уже было сказано, float и double совпадают, поэтому это место точно не могло быть причиной.
Цитата(MrYuran @ Apr 28 2008, 13:38)

Ну не знаю... по крайней мере однажды у меня тоже такая галиматья выводилась, и связано это было именно с несоответствием типов выводимых переменных с ключами вывода
Ну не знаю... Если вместо int подсунуть long или float - да, будет галиматья. По цепочке от char до int и float вместо double должно всё быть нормально.