DS18B20 detekce presence pulzu

Cizek Milan Cizek.Milan na seznam.cz
Čtvrtek Září 18 12:07:55 CEST 2014


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>
Komu: HW-news (hw-list na list.hw.cz) <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 DS18B
20... 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
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/7ec059e7/attachment.html>


Další informace o konferenci Hw-list