1 wire a přerušení - dotaz
Moderátor: Moderátoři
1 wire a přerušení - dotaz
mám dotaz ohledně řešení 1 wire komunikace třeba s teplotním čidlem DS18B20 a přerušením procesoru.
Trošku mi vrtá hlavou situace, kdy se pomocí delay čeká na vrácení hodnoty z čidla a log 0 a 1 se detekuje pomocí zpoždení 60us.
Když se mi v době čekání aktivuje přerušení a měl bych tam něco složitějšího, může mi to ovlivnit vyhodnocení přijatého stavu?
Protože programuju v C, nejsem moc chopen odhadnout jak dlouho mi obsluha přerušení trvá. Tak si myslím, že bych mohl zmeškat dobu po kterou mi čidlo vrací na zběrnici hodnotu.
A jiná možnost není, jak to skloubit dohromady bez toho aby se muselo zakazovat přerušení?
Taky bych měl dotaz. Koukám do svého kódu který sem stáhl někde na netu a nezdá se mi ta část čtení.
Kód: Vybrat vše
unsigned char read()
{
char i,result = 0;
ds_port_M = 1; // TRIS is input(1)
for(i = 0; i < 8; i++)
{
ds_port_M = 0; // TRIS is output(0)
ds_data = 0; // genarate low pluse for 2us
__delay_us(DS18B20_PULLUP_TIME);
ds_port_M = 1; // TRIS is input(1) release the bus
if(ds_data != 0) {
result |= 1<<i;
}
__delay_us(DS18B20_WAIT_TIME); // wait for recovery time
}
return result;
}dle popisu na http://www.hw.cz/navrh-obvodu/rozhrani/ ... iretm.html
by se mělo po stažení sbernice na 1us (v mém případě na 2us)
čekat 15us před zahájením čtení.
Ale tady koukám se ihned čtou data z čidla a potom se čeká 60us. Nemám tam dát před čtením spoždění 15us a potom čekání (DS18B20_WAIT_TIME)zkrátit na 45us?
tohle možná bude i ten problém proč mi čidlo nechtělo fungovat na parazitním napájení při 4k7 odporu a musel sem ho snižovat.
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
- Jeejda_teda_puvodne
- Příspěvky: 142
- Registrován: 08 dub 2012, 00:00