1 wire a přerušení - dotaz

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
dracekvo
Příspěvky: 712
Registrován: 10 úno 2009, 00:00

1 wire a přerušení - dotaz

#1 Příspěvek 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.
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#2 Příspěvek 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
Uživatelský avatar
dracekvo
Příspěvky: 712
Registrován: 10 úno 2009, 00:00

#3 Příspěvek 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.
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#4 Příspěvek 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.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#5 Příspěvek 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ý".
Pro moje oslovení klidně použijte jméno Zdeněk
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[?
]
Uživatelský avatar
dracekvo
Příspěvky: 712
Registrován: 10 úno 2009, 00:00

#6 Příspěvek od dracekvo »

Já používám různé PIC řad 16Fxxxx Tam asi není možnost HW 1 wire, že?
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#7 Příspěvek od ZdenekHQ »

Dělají se převodníky třeba na I2C, ale z hlavy mě teď nic nenapadá.
Pro moje oslovení klidně použijte jméno Zdeněk
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[?
]
Uživatelský avatar
Jeejda_teda_puvodne
Příspěvky: 142
Registrován: 08 dub 2012, 00:00

#8 Příspěvek od Jeejda_teda_puvodne »

Naposledy upravil(a) Jeejda_teda_puvodne dne 25 říj 2016, 20:12, celkem upraveno 1 x.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#9 Příspěvek od ZdenekHQ »

Já mám převodník USB/1-wire a samozřejmě Dallas dělá "redukce", třeba DS2482.
Pro moje oslovení klidně použijte jméno Zdeněk
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[?
]
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“