Pokud by někdo potřeboval v asm komunikovat 8bitovým PICem 16F8** s více DS18B20 teploměry na 1Wire ( v zapojení s parazitním napájením ), přikládám schéma, kód a ukázku jak jsem to řešil.
Na tohle téma je docela těžké najít nějaké ucelené ukázky kódů, jak řešit např. přepočet teploty na mantisu a desetiny, přepočet záporných hodnot, CRC kontrolu, vyčítání ROM ID, a tak.
Archivuju si to sem s nadějí že tenhle web ještě nějakou dobu poběží a až to budu potřebovat, tak to tu zase najdu. Zároveň to snad pomůže i některým ostatním badatelům, co to namísto v C raději píšou v asm. 16F876A_DS18B20.zip (2.59 MB)
Parazitní napájení funguje tak, že po odeslání požadavku na měření je třeba na PICu počkat (cca 750ms pro 12bit přesnost) s otevřeným portem (ve vstupním režimu), aby se kondenzátor uvnitř čidla mohl po datové lince nabít (přes pull-up rezistor na DQ pinu). Tím získá dostatek energie na vyslání odpovědi.
Je to přesně jak píšeš. V první řadě jsem se soustředil na časování komunikace pro teploměr, displej jsem zas tak moc neřešil.
Správnější je namísto nulování TMR0 nulovat v INTCON registru T0IE bit ( TMR0 Overflow Interrupt Enable bit ) po dobu, kdy se děje časově citlivá operace, a pak ho zase nahodit.
Upravil jsem pár míst, s kódem co je v příloze už to ukazuje LED segmenty stabilně. 16F876A_DS18B20.asm (45.8 KB)
Spojky propojuju klasickým RJ11 telefonním kabelem, a měřím s tím teplotu za severním oknem, v obýváku a za jižním oknem. Celé mi to vychází na cca 6-8m.
Na dlouhé vzdálenosti je třeba věnovat velkou pozornost kabelu. Zkušenosti na joysfera.blogspot.cz/2013/05/vel … cidly.html můžu potvrdit, kroucené páry v UTP/STP nejsou pro 1-wire úplně výhra. Už jedno čidlo za 1.5m UTP kabelu se mi nechytalo.
Naopak stará dráťáková dvoulinka, která má v ploché bužírce 2 žíly cca 5mm od sebe, je naprosto bez problémů.
Pokud je pravda že je třeba minimalizovat kapacitu vedení, potom je možné namísto ploché telefonní dvoulinky vzít plochou telefonní čtyřlinku a zkusit použít nejvzdálenější krajní žíly kabelu.
50-100 metrů je pro parasite power docela výzva, v tom případě to spíš vidím na zapojení s klasickým napájením. Ale budu rád, když pak napíšeš, jak se ti vedlo.
Tady diy-zoning.sourceforge.net/Advanced/app108.pdf jsem našel pojednání o dalekonosných 1-Wire vedeních. Podle Dallas Semiconductors je možné jít i nad 300m, ale je třeba nahradit připojení pull-up rezistoru za pull-up obvod s mosfet tranzistorem.
Navíc na tu dálku doporučujou Cat5 twistedpair telefonní kabel, což jde proti mým zkušenostem s PC kabelem. Možná to funguje líp v neparazitním napájení.
administrator: přiloženy externí soubory app108.pdf (15.9 KB)