Stránka 1 z 1
1 wire a přerušení - dotaz
Napsal: 17 črc 2015, 12:46
od dracekvo
Ahoj,
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.
Napsal: 17 črc 2015, 12:58
od mikollar
Pocas tohto cakania zakaz prerusenia, po skonceni ich povol, pri PIC ak nejake prerusenie nastalo, tak po povoleni sa vykonaju vsetky ktore maju nastaveny priznak ze nastalalo preruenie
Napsal: 17 črc 2015, 13:03
od dracekvo
To vím, že se to tak řeší.
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.
Napsal: 17 črc 2015, 13:08
od mikollar
Je mozne este nastavit prerusenie na casovac, prvy cas na detekciu 0 a potom na cas 1. Ale toto som neskusal, pri tak kratkom cakani som nebol v casovej tiesni
ku komunikaci neviem povedat to cidlo som skusal viac ako pred rokom.
Napsal: 17 črc 2015, 22:17
od ZdenekHQ
No nevím, pokud je nutná SW emulace 1-wire, je potřeba si vybrat, co má procesor vlastně dělat. Nakonec i tahle komunikace může běžet v přerušení, jen musí mít nastavený nejvyšší prioritu, aby bylo "nepřerušitelný".
Napsal: 20 črc 2015, 08:52
od dracekvo
Já používám různé PIC řad 16Fxxxx Tam asi není možnost HW 1 wire, že?
Napsal: 21 črc 2015, 17:17
od ZdenekHQ
Dělají se převodníky třeba na I2C, ale z hlavy mě teď nic nenapadá.
Napsal: 21 črc 2015, 20:01
od Jeejda_teda_puvodne
Napsal: 22 črc 2015, 16:51
od ZdenekHQ
Já mám převodník USB/1-wire a samozřejmě Dallas dělá "redukce", třeba DS2482.