roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 23:59

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Работа с sprintf
СообщениеДобавлено: 04 фев 2012, 19:24 
Не в сети

Зарегистрирован: 15 май 2011, 19:19
Сообщения: 239
Откуда: Ростов-на-Дону
Skype: levanchik322
прог. языки: WinAVR C, C#, HTML+СSS.
ФИО: Лёва
Добрый день мои друзья.
Столкнулся с такой проблемой: я собираю умный блок питания, получаю силу тока и напряжение и вывожу на LCD. Я считываю информацию по АЦП и перевожу их в вольты отлично, только есть проблема при выводе числа double на LCD. Использую библиотеку stdio.h функцию sprintf();
Для получения напряжения использую внутренний источник питания на 2.56В и умножаю значение АЦП на константу 1.15 (я её сам расчитал для своего резистового делителя), делаю все с учебника.
Я считываю данные отлично, но вывожу какую то чушь на LCD! Мне кажется я не правильно использую данную библиотеку. Библиотека LCD работает исправно!
Вот посмотрите как я использую функцию sprintf();
P.S. Пишу вне компилятора, т.к. программу писал на ноуте, а сейчас я сижу перед домашним ПК, поэтому я убрал ненужные мелочи.
Код:
#include <avr/interrupt.h>
#include <avr/stdio.h>
#include "lcdlib.h"
volatile double adcbuf, uin;
ISR(ADC_vect) { adcbuf = ADCW; uin = adcbuf * 1.15;} // в прерывании высчитали напряжения на акб
void adc_init (void) {/*Иницализация АЦП*/} // проинициализировали АЦП
int main void{
adc_init();
lcd_init();
sei();
char buffer[20]; //буфер для хранения значения напряжения
while(1) {
sprintf(buffer, "%.2f", uin) // переводим double -> char
lcdsym(buffer); // выводим.
         }
}

И выводит какую то чушь. Если в данном примере ошибок нет, то я перепроверю у себя АЦП конфигу и библиотеку LCD


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с sprintf
СообщениеДобавлено: 04 фев 2012, 23:54 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
у авр я бы вообще посоветовал не использовать числа с плавающей точкой ... уж больно они тяжелые для этого проца

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с sprintf
СообщениеДобавлено: 05 фев 2012, 10:49 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2010, 13:56
Сообщения: 995
Откуда: Нижний Новгород
прог. языки: С, С++, РНР
В CVAVR например в настройках компиляции указывается, поддерживает ли sprintf числа с плавающей точкой. Без нужной галки выводится фигня.

Для локализации проблемы упростите прогу.
uin = 1.2345678;
sprintf(buffer, "%.2f", uin)
вот до такого.
и если все нормально, наращивайте постепенно.

Romikgy писал(а):
у авр я бы вообще посоветовал не использовать числа с плавающей точкой ... уж больно они тяжелые для этого проца

Если проц почти ничего не делает, какой смысл не использовать простое решение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с sprintf
СообщениеДобавлено: 05 фев 2012, 14:16 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
ИМХО такие решения , будут проблемными в дальнейшем ....

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с sprintf
СообщениеДобавлено: 06 фев 2012, 01:28 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
В прерывании про плавающую точку забыть сразу. Учись программировать правильно. Просто сохрани в переменную целое число - и переключи на следующий канал, если их несколько.

Ну а дальше, можно и с плавающей точкой считать, если правда процу делать нечего. Найди, где в настройках среды или компилятора включить плавающую точку в printf. Потому что она 100% по умолчанию выключена, ее использование молча добавляет 2-3 килобайта в размер проги, естественно это мало кому нужно.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO