forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
ATMEGA32 a float

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR
 
mira109
Nováček
Nováček


Založen: 9.10.2013
Příspěvky: 7

PříspěvekZaslal: 18 duben 2016, 23:08    Předmět: ATMEGA32 a float Citovat

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

kód:


#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..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
mira109
Nováček
Nováček


Založen: 9.10.2013
Příspěvky: 7

PříspěvekZaslal: 18 duben 2016, 23:41    Předmět: Citovat

jupí už jsem na to došel..asi sem byl celou dobu slepej Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Martin
ATmega pouzivatel
ATmega pouzivatel


Založen: 5.1.2008
Příspěvky: 1449

PříspěvekZaslal: 21 duben 2016, 19:29    Předmět: Citovat

A o čo vôbec šlo?

Nejak nevidím, čo je na hodnote "0.00" zlého Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> AVR Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)