DS18B20 detekce presence pulzu
Michal Grunt
michal.grunt na vynet.cz
Čtvrtek Září 18 12:59:43 CEST 2014
Díky, už asi vím kde jsem dělal chybu. Hned mezi 2. a 3. řádkem. Na začátku reset pulzu by měla být kratší časová prodleva. Po otestování je 50us minumum, když nastavím méně už to nefunguje resp. funguje, ale mám tu inicializaci ve smyčce (s 1s pauzou), abych mohl různě testovat odpojování drátů od čidla a koukat co to bude dělat a první inicializace proběhne v pořádku (vrátí se 0), ale další už ne (vrátí 1). Pokud tam dám 50us prodlevu reaguje to v pořádku nejen na první spuštění inicializace, ale i na ty další.
Po otestování je i těch 50us také v některých případech málo (když jsem různě připojoval/odpojoval piny čidla), 100us už je jistota.
uint8_t init_1820()
{
uint8_t i1, i2;
DS18B20_PortOut();
GPIO_SetBits(DS18B20_PORT, DS18B20_PIN);
delay_us(100); // nutne !!! min. 50us spis vice
GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN);
delay_us(500); //min. 480us
DS18B20_PortIn();
delay_us(70);
i1 = GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN);
delay_us(400);
i2 = GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN);
DS18B20_PortOut();
//xprintf("%d,%d\n", i1,i2);
if ((i1 == 0) && (i2 == 1)) return 1; else return 0;
}
MG
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Cizek Milan
Sent: Thursday, September 18, 2014 12:08 PM
To: HW-news
Subject: Re: DS18B20 detekce presence pulzu
Ahoj,
nevím jestli ti to k něčemu bude, ale funguje mi
DS_INIT BANK1
bcf TRISB,0 ; DSWIRE jako výstup
BANK0
bsf LED2 ; rozsvítit LED2
clrf TMR0
bsf INTCON,T0IE ; aktivovat TMR0
bcf DSWIRE ; nastavíme Lo úroveň
WAIT .500 ; >480us (reset pulse)
bsf DSWIRE ; nastavíme Hi úroveň
BANK1
bsf TRISB,0 ; DSWIRE jako vstup
WAIT .70 ; zpoždění (15-60us)
BANK0
btfsc DSWIRE ; zjistíme úroveň
goto DS_MISSED
; máme Lo úroveň - něco nám odpovídá
WAIT .400 ; >400us stále odpověď
return
DS_MISSED ; máme Hi úroveň - sběrnice je mrtvá
WAIT .400 ; >400us stále odpověď
call SEND_NODS ; odpověď: žádná čidla
return
--
Milan Čížek
---------- Původní zpráva ----------
Od: Michal Grunt <michal.grunt na vynet.cz<mailto:michal.grunt na vynet.cz>>
Komu: HW-news (hw-list na list.hw.cz<mailto:hw-list na list.hw.cz>) <hw-list na list.hw.cz<mailto:hw-list na list.hw.cz>>
Datum: 18. 9. 2014 12:00:58
Předmět: DS18B20 detekce presence pulzu
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);
}
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz<http://www.HW.cz>
Hw-list na list.hw.cz<mailto:Hw-list na list.hw.cz>
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140918/ec4345cc/attachment.html>
Další informace o konferenci Hw-list