<html><body><p>Ahoj,</p><p><br></p><p>nevím jestli ti to k něčemu bude, ale funguje mi</p><p><br></p><p>DS_INIT  BANK1<br>   bcf  TRISB,0    ; DSWIRE jako výstup</p><p>   BANK0<br>   bsf  LED2    ; rozsvítit LED2<br>   clrf TMR0<br>   bsf  INTCON,T0IE   ; aktivovat TMR0</p><p>   bcf  DSWIRE    ; nastavíme Lo úroveň<br>   WAIT .500    ; >480us (reset pulse)<br>   bsf  DSWIRE    ; nastavíme Hi úroveň</p><p>   BANK1<br>   bsf  TRISB,0    ; DSWIRE jako vstup<br>   WAIT .70     ; zpoždění (15-60us)</p><p>   BANK0<br>   btfsc DSWIRE    ; zjistíme úroveň<br>   goto DS_MISSED</p><p>   ; máme Lo úroveň - něco nám odpovídá<br>   WAIT .400    ; >400us stále odpověď<br>   return</p><p>DS_MISSED ; máme Hi úroveň - sběrnice je mrtvá<br>   WAIT .400    ; >400us stále odpověď<br>   call SEND_NODS   ; odpověď: žádná čidla<br>   return</p><p><br>-- <br>Milan Čížek<br><br></p><p>---------- Původní zpráva ----------<br>Od: Michal Grunt <michal.grunt@vynet.cz><br>Komu: HW-news (hw-list@list.hw.cz) <hw-list@list.hw.cz><br>Datum: 18. 9. 2014 12:00:58<br>Předmět: DS18B20 detekce presence pulzu</p><br><blockquote>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.<br><br>uint8_t i1;<br><br>DS18B20_PortOut();<br>GPIO_SetBits(DS18B20_PORT, DS18B20_PIN);<br>GPIO_ResetBits(DS18B20_PORT, DS18B20_PIN);<br>delay_us(500);         //min. 480us<br>DS18B20_PortIn();<br>while(GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN) != 1);<br>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...<br>i1 = GPIO_ReadInputDataBit(DS18B20_PORT, DS18B20_PIN);<br>xprintf("%d\n", i1);<br><br>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?<br><br>MG<br><br>-----<br>void DS18B20_PortOut(void) {<br>       GPIO_StructInit(&GPIO_InitStructure);<br>     GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;<br>    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;<br>     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;<br> GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;<br>        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;<br>      GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);<br>}<br><br>void DS18B20_PortIn(void) {<br>   GPIO_StructInit(&GPIO_InitStructure);<br>     GPIO_InitStructure.GPIO_Pin = DS18B20_PIN;<br>    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;<br>     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;<br>  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;<br>        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;<br>      GPIO_Init(DS18B20_PORT, &GPIO_InitStructure);<br>}<br>_______________________________________________<br>HW-list mailing list  -  sponsored by www.HW.cz<br>Hw-list@list.hw.cz<br>http://list.hw.cz/mailman/listinfo/hw-list</blockquote></body></html>