DS18B20 detekce presence pulzu

Michal Grunt michal.grunt na vynet.cz
Čtvrtek Září 18 12:59:30 CEST 2014


To mě také napadlo, ale nechtělo se mi do toho - vyndat to z šuplíku, pustit software, nastavit, připojit, upravit kód pro pomocný pin... :-) Nicméně už je to asi vyřešeno (pro jistotu to log. analyzátorem přeci jenom zkontroluji).

MG

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Hynek Sladky
Sent: Thursday, September 18, 2014 12:43 PM
To: HW-news
Subject: Re: DS18B20 detekce presence pulzu

Co takhle osciloskop a dalsi pin, na kterem se bude trasovat, kde zrovna se program nachazi?
Takhle to sice muze vypadat celkem spravne, ale jde o skutecny signal, ktery muze byt ovlivneny necim dalsim (HW, SW)...
Sam jsem s timto pulsem nikdy nebojoval, vzdy to fungovalo dle predpokladu - ale samozrejme az pote, kdyz jsem to odladil - i s pomoci osciloskopu :-)

Hynek Sladky


Dne 18.9.2014 12:00, Michal Grunt napsal(a):

Už jsem trochu bezradný. Nějak se mi nedaří detekovat presence pulz DS18B20... Když inicializaci DS18B20 nastavím natvrdo tak je to OK a čidlo funguje, ale potřebuji zdetekovat presence pulz jestli je čidlo připojeno, aby mi funkce pro čtení teploty nevyhazovala nějaký hausnumera.



uint8_t i1;



DS18B20_PortOut();

GPIO_SetBits(DS18B20_PORT, DS18B20_PIN);

GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN);

delay_us(500);           //min. 480us

DS18B20_PortIn();

while(GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN) != 1);

delay_us(150); //15us - 60us by měla být 1  a pro dalších 60us-240us 0 takže těch 150us by mělo zasahovat někam mezi 60-240...

i1 = GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN);

xprintf("%d\n", i1);



Pořád mi to vyhazuje 1, ale měla by se mi vrátit 0 i to while jsem si rozepsal... Kde dělám chybu?



MG



-----

void DS18B20_PortOut(void) {

  GPIO_StructInit(&GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

  GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);

}



void DS18B20_PortIn(void) {

  GPIO_StructInit(&GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

  GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);

}



------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140918/ebe2f9be/attachment.html>


Další informace o konferenci Hw-list