zdravim potřeboval bych radu dělam voltmeter a zobrazovač teplot s atmegou,teploty mi fungují ale mám problém s napětímkdyž chci zobrazit desetiné místo pomocí floatu tak mi to zobrazí pouze 0.00,ale když dam celé číslo tak je to OK
je to psané v code blocks tak nevím jestli v něm třeba nemám jen neco blbe nastaveného
#include <avr/io.h>
#include <util/delay.h>
#include "ds18b20.h"
#include "lcd.h"
#include <stdio.h>
#include <stdlib.h>
void init_ADC() {
ADMUX=(1<<REFS0);
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}
//cteni z adc
unsigned int read_ADC(unsigned char kanal) {
ADC=0;
kanal=kanal&0b11100000;
ADCSRA|=(1<<ADSC);
while(!(ADCSRA & (1<<ADIF)));
ADCSRA|=(1<<ADIF);
kanal=0;
return ADC;
}
int main(void)
{
unsigned int decimal;
unsigned int integer;
unsigned int adc;
unsigned int u;
//long u;
char text[17];
char text2[32];
lcd_init();
lcd_position(1,5);
lcd_puts("Autometer");
lcd_position(2,6);
lcd_puts("Ver.1.0");
_delay_ms(5000);
lcd_clear();
while(1)
{
//venkovní teplota
OUT_TEMP_get_temp(text);
lcd_position(1,1);
lcd_puts(text);
_delay_ms(300);
//vnitřní teplota
ds18b20_get_temp(text);
lcd_position(1,6);
lcd_puts(text);
_delay_ms(300);
//měření napětí
init_ADC(); //inicializace AD
adc=read_ADC(5); //merime na kanalu 5 (ADC5)
u = ((long)adc*0.1);
// sprintf(text2,"U:%ldV",u); // bez des.mist
sprintf(text2,"%3.2f",u);
lcd_position(2,1);
lcd_puts (text2);
_delay_ms(400);
}
}
nebo jestli neco delám jinde špatně,zde pouze část programu s měřením napětí a je tam LCD 16*2…