Столкнулся с такой проблемой: я собираю умный блок питания, получаю силу тока и напряжение и вывожу на 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