Jak na PIC 16F876A s více DS18B20 teploměry ( v asm )

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)

Proč to má parazitní napájení když tam 5V stejně je?

Ušetřím tím jeden vodič, teploměry pak připojuji paralelně na obyčejnou dvoulinku.

mel sem predstavu ze parazitni napajeni funguje jinak …, gnd a vdd spojeny ?

Ano, podle datasheeetu na datasheets.maximintegrated.com/en/ds/DS18B20.pdf to má být spojené ( pravda je, že na desce mám fous Vdd odpojen a funguje to taky ).

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.

aha, diky

Občas některé znaky (segmenty) svítí mnohem jasněji, i na Tvém videu jsou zřetelné “záblesky”.
Není to tím, že nuluješ TMR0 abys oddálil přerušení?

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)

Na jakou vzdálenost to máš vyzkoušené po té dvojlince, potřeboval bych měřit tak na 50 až 100 metrů.

Teploměry mám vestavěné uvnitř těchhle spojek: ges.cz/cz/wb-2x8-8bi-GES06614004.html

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í.

:arrow_right: administrator: přiloženy externí soubory
app108.pdf (15.9 KB)

Na 200 m to spolehlivě chodí. Mezi 2 a 3 je třeba dát diodu a to katodou k 3. Třeba 1N4148. Dále mezi 3 a 1 100n keramiku. Pak 2 je data+ a 1 GND.

Tak jsem to zakreslil do schématu. Až to někdo vyzkouší, bude fajn když sem potvrdí jak mu to funguje.

edit: Nefunguje, přílohu odsud mažu. Schéma s opravou je v mém dalším příspěvku.

Pri tej IC3 nie je náhodou zle zapojený C3? V tomto prípade, ako to je tam nakreslené vlastne IC4 nimá priame napojenie na GND, len cez C3…

Jo, to dává smysl… Oprava, co teď?
16F876A_DS18B20_LD2.pdf (22.1 KB)

Myslím, že teraz je to tak, ako to písal Ron, ale nech na to kukne, či mal na mysli presne takéto zapojenie…