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.