Re: 1-wire "správně"
Pavel Hudeček
edizon na seznam.cz
Středa Leden 10 23:44:54 CET 2024
Já bych teda řek, že když dám DS2482 pár cm od procesoru, tak nemusím
řešit žádné EMC složitosti s dlouhým vedením.
Samozřejmě je nejlepší použít HW I2C, které má hezky zakulacené hrany
atd. Ale když to náhodou nejde a nevede nikam daleko, tak to taky
nevadí. I2C, stejně jako SPI ,má velkou výhodu, že clocky dělá master a
pokud není maximální rychlost, můžou být i hodně nepravidelné. Takže se
dá pohodlně obsluhovat i softwarově a to aniž by se přitom zakazovalo
přerušení či dělaly jiné složitosti.
Párkrát jsem mezi hranama SCL čekal voláním cekej(0); což znamená, že se
projede pár ifů, jestli je potřeba přepočítat data od ADC, vyhodnotit
příkaz v bufferu od sériáku, vyhodnotit stisklá tlačítka, řídí se
nabíjení a podobně, takže to trvá většinou desítky, ale někdy taky
stovky µs. (cekej(10) počká 10 ms a při tom dokola dělá uvedené věci) A
uvažuju, že bych příště zkusil SW I2C udělané naopak, tedy že bude
jednou z těch věcí běžících v cekej:-)
Jinak je zajímavý, že když jsem zatoužil po vlastní implementaci 1wire,
tak mi připadalo, že jsou tam relativně vysoký frekvence a říkal jsem
si, že by to byl vopruz aby tak často chodilo přerušení od timeru a
vykašlal jsem se na to.
No a teď když jsem viděl ten AN o použití sériáku a pak se podíval do
dalších specifikací, ukázalo se, že perioda je min 65 µs, tedy 15,38
kHz, což je celkem v pohodě a je vlastně jedno, zda na to použiju timer,
sériák, I2C, nebo SPI. Navíc všechny pulzy zas zahajuje master, takže to
může bejt libovolně pomalejší. A to zase znamená, že by to mohl
realizovat třeba timer co používám na základní kHz přerušení. A v
bláznivějším případě by to moh řešit třeba stavovej automat v přerušení
od ADC.
No možná ty 1wire teploměry taky začnu používat:-)
PH
Dne 10.01.2024 v 13:59 Jan Waclawek napsal(a):
> [preposielam]
>
> Dobry den,
>
> ja by som sa skusil pozriet na tuto problematiku z trochu ineho
> pohladu. Ked som pri navrhu mojho teplomera nad 1_Wire trochu
> rozmyslal, tak som dospel ku nasledovnym problemom a otazkam.
>
> Prvy taky okruh otazok, ktory Vam cosi napovie ku realizacii 1_Wire
> radica v mikroprocesorovom systeme je otazka obsluzneho softwaru. Tuna
> treba zvazit to, ci uz mate vo firmware napisanu korektne zbernicu
> I2C, teda hlavne impulzne rusenie, pri dlhsich zberniciach. Pokial je
> odpoved ano, tak radic DS2482 moze byt dobrym riesenim. Ulahci
> vykonavanie jednotlivych taskov a prikazov, ktore po zbernici 1_Wire
> bezia. Pokial to I2C nemate vo firmware, tak si obsluhu musite
> naprogramovat sam. Tu vyvstane hlavne otazka kolizie medzi systemovym
> periodickym interruptom a citanim a zapisovanim na 1_Wire zbernici. Da
> sa to rozne obist, napr. spomenutym UARTom, ci pouzitim casovaca,
> ktory vie na i/o-pine "input capture" a "output compare", ako to mam
> navrhnute v teplomeri ja. Alebo pocas operacii na 1_Wire zablokujete
> systemovy periodicky interrupt. Aj tuna uz treba riesit trochu
> hardware mikroprocesoru, teda vybrat vhodne periferie.
>
> Druhy okruh otazok sa tyka pouziteho hardwaru. Kedze pri mcu aj pri
> radici DS2482 mate vzdy jeden i/o-pin, ktory musite riesit. Tu je to
> trochu komplikovanejsie ale, ako odbastlili ludia v konfere vratane
> mna, tak bez nejakej teorie sa nezaobidete.
>
> Prva otazka pri hardwarovej realizacii 1_Wire zbernice je
> prisposobenie vstupnej a vystupnej impedancie digitalnych driverov
> i/o-pinu v mcu a to iste so vstupom DQ 1_Wire cidla. Prisposobenie je
> potrebne realizovat medzi generatorom - io-pin, vedenim - pouzity
> kabel, a zatazou - 1_Wire cidlom. Tuna je asi najvacsi problem
> impedancia kabla. Podla toho, kedy ste skoncili skolu, tak to je bud
> 90, 100 alebo 120 Ohmov. Podla toho treba odbastlit ostatnu bizuteriu.
>
> Druha otazka je hardwarova ochrana i/o-pinu v mcu a pinu DQ pred
> roznymi zakmitmi a impulznym rusenim, ktore sa naidukuje do systemu
> budic-vedenie-prijimac. To su take tie rozne ESD, bursty a
> surge.Chranit musite ako i/o pin mikrokontrolera alebo i/o-pin radica
> DS2482, tak aj jednotlive i/o-piny DQ 1_Wire cidiel. Tuna skoncite pri
> vseobecnej viacstupnovej impulzovej ochrane, ktoru tu v roznych
> variaciach spominali viaceri diskutujuci. V podstate mate dve ochrany.
> Jeden typ ochrany mate na mcu, druhy typ ochrany na 1_Wire cidle. V
> podstate je to dosticka alebo fragment na plosnom spoji, kde mate SMD
> odpor, diody v SOT-23, SMD odpor, SMD zenerku a SMD kapacitu na
> napajani. Hodnoty a typy suciastok si musite odbastlit. Niekedy sa
> este v datasheetoch uvadza aj RC v napajani cidla, je to hlavne teda
> pri teplotnych cidlach PWM, ale ja si myslim, ze to nemoze byt na
> skodu. Je to len 1 odpor navyse.
>
> Tretia otazka je ako to navrhnut cele na plosaku. Tuna by som
> doporucil videa od p.Feranca. Su jasne a zretelne a vysvetlujuci
> p.profesor si dal naozaj zalezat aj na praktickych ukazkach. Takze
> odporucam si ich pozriet. Su na mcu.cz.
>
> Andrej
>
> > Zdravím,
>
> > příspěvek pana Hudečka o tom, že nemá rád 1-wire neb musí zakazovat
> > přerušení a své vlastní úvahy, nad spolehlivostí sběrnice s čidly,
> > která je přímo připojená na pin procesoru mě vedou k úvahám jak to
> > "dělat správně".
>
> > prošel jsem si na AnalogDevices obvody pro řízení 1-wire a víceméně
> > jeden z použitelných a dostupných je DS2482 převodník i2c na 1-wire.
> > Porozhlédl jsem se po netu a skoro to tak vypadá, že ho nikdo nepoužívá,
> > minimálně Arduino komunita ho skoro nezmiňuje.
>
> > nejběžnější knihovna pro obsluhu 1-wire: PaulStoffregen/OneWire ho
> > nijak nezmiňuje a pokud jsem něco nepřehlídl tak s ním nepočítá, Dále
> > jsem našel několik starších kníhoven (nevím jestli už nejsou opuštěné)
> > které by měly suplovat OneWire s komunikací přes i2c - například
> > cybergibbons/DS2482_OneWire. Jestli jsem to správně pochopil, tak by
> > měla fungovat i DallasTemperature, kterou masivně používám ve svých
> > projektech.
>
> > Jak to děláte vy?
>
> > Pokud máte rozsáhlejší topologii 1-wire, používáte nějaké budiče, nebo
> > to jedete "na surovo" jen z pinu CPU?
Další informace o konferenci Hw-list