DS3232 a vyčítání teploty

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

DS3232 a vyčítání teploty

Príspevok od používateľa jirka.jirka. » 24 Jún 2014, 10:18

Hoj Hoj Hoj,
včera mi přišel kouzelný obvod DS3232. Jedná se o RTC. Vše se mi pěkně daří, hodiny, datum,..... mám už vyčtené. Ale nedaří se mi vyčíst teplotu. Vytvořil jsem si funkci pro vyčtení celé a desetinné části zvlášť, ale nechce to fungovat:

Kód: Vybrať všetko

// cteni teploty a konverze na int
int8_t DS3232_get_temp(uint8_t poradi, int8_t teplota)
{
    uint8_t i, cele, data,frac;
 
    // pomocna promenna
    i=0;
 
    // Cteni prvni casti teploty
    DS3232_read(0x11, &data);	//Prvne MSB
    cele = data;
 
    // Cteni druhe casti tepltoy
    DS3232_read(0x12, &data);	//Podruhe LSB
    frac = data>>6;
 
    if(cele & (1<<7))
    {
        // xor with 0b11111111 to k domplneni a potom pridat 1
        cele ^= 0xFF;
        cele ++;
        // nastaveni promenne, jeli teplota zaporna
        i=1;
    }
 	
    // Make negative if needed
    if(i==1) cele *=-1;
 
    if (poradi == 1){
		teplota = cele;
		return teplota;
	}
	if (poradi == 2){
		teplota = frac;
		return teplota;
	}
}
V main potom volání této funce vypadá takto:

Kód: Vybrať všetko

        tepl_bez = DS3232_get_temp(1, &stupne);
	stupne = bcd2dec(tepl_bez);
	tepl_bez = DS3232_get_temp(2, &stupne);
	des_stupne = bcd2dec(tepl_bez);
Nehrál si někdo s tímto obvodem? Kde asi dělám chybu? Díky moc za jakoukoli radu.
0

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: DS3232 a vyčítání teploty

Príspevok od používateľa jaromir » 24 Jún 2014, 10:24

Mam modre auto s ciernymi kolesami a ked sedim za volantom tak nefunguje. Moze mi niekto poradit? :)

Co na tom kode nefunguje? Ake hodnoty to vracia? Odpoveda obvod ACK-om? Logicky analyzator alebo pamatovy osciloskop mas?
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: DS3232 a vyčítání teploty

Príspevok od používateľa jirka.jirka. » 24 Jún 2014, 10:45

No vrací to blbé hodnoty. Třeba naní mám v pokoji podle všeho 11°C. To se mi zdá jako hloupost, na to že je léto a jsem po střechou.

Komunikace funguje, čas a datum vrací v pořádku. Takže problém vidím v té funkci co jsem sem dal.
0

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: DS3232 a vyčítání teploty

Príspevok od používateľa jaromir » 24 Jún 2014, 11:12

Vracia to stale konstantne 11 stupnov? Meni sa udaj ked obvod zohrejes alebo ked ho strcis do chladnicky?
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: DS3232 a vyčítání teploty

Príspevok od používateľa jirka.jirka. » 24 Jún 2014, 11:25

ano hodnota na displeji se mění. Stačí mít na něm minutku prst a teplota se zvýší a po oddělání prstu teplota po chvíli spadne.
0

Používateľov profilový obrázok
dxr
Ultimate člen
Ultimate člen
Príspevky: 3968
Dátum registrácie: 05 Aug 2013, 20:21
Bydlisko: V strede nicoho
Kontaktovať používateľa:

Re: DS3232 a vyčítání teploty

Príspevok od používateľa dxr » 24 Jún 2014, 11:32

http://www.maximintegrated.com/en/desig ... ftware.txt

hladaj tam rd_temp() tam mas celu func ako to precitat a skonvertit.
ten origo zdrojak caka na ukoncenie konverzie u teba to nevidim cize mozes precitat nieco zle a oni tam
inak konvertia hodnoty na stupne celzia vyskusaj a daj vediet.

to ze je tam DS3231 si nevsimaj maxim to referuje aj pre DS3232 cize budu to mat asi rovnako
0
Naposledy upravil/-a dxr v 24 Jún 2014, 11:41, upravené celkom 1 krát.
Mahátma Ghándí: „Nejdřív tě budou ignorovat. Pak se ti budou smát. Pak proti tobě budou bojovat. Potom zvítězíš.“
čo viac dodať som taký a možeš to skúsiť vyhrať aj tak to vzdáš.. Obrázok
Arduino is popular becouse allow complex task with minimum investment

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Re: DS3232 a vyčítání teploty

Príspevok od používateľa jaromir » 24 Jún 2014, 11:40

Skus nechat vypisovat len hodnotu premennej cele

Kód: Vybrať všetko

    DS3232_read(0x11, &data);   //Prvne MSB
    cele = data;
Inak to vyzera ako chyba typu "shift o bit".
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1537
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: DS3232 a vyčítání teploty

Príspevok od používateľa jirka.jirka. » 25 Jún 2014, 18:53

No tak jsem napsal velmi jednoduchý kód:

Kód: Vybrať všetko

unsigned char byte[2];
DS3232_read(0x11, &data);
byte[0] = bcd2dec(data);
DS3232_read(0x12, &data);  
byte[1] = bcd2dec((data >> 6));
	
stupne = byte[0];
des_stupne = byte[1];
A jako zobrazovač používám sedmisegmentovky (xx.x°C), kde teplotu rozděluju na desítky, jednotky.

Kód: Vybrať všetko

desitky = byte[0]/10;
jednotky = byte[0]%10;
desetiny = byte[1]/10;

Do "Control Registra" (0x0E), na stránce 13, jsem nastavil vše do nuly. A nyní už to ukazuje teplotu, ale desetinnou část mám stále nula. Už jenom vyřešit tento problém a je to.
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok