1-wire slave pro AVR

Aleš Povalač konf@alpov.net
Neděle Únor 15 17:05:23 CET 2009


Dobry den,

k tomu co uz zaznelo bych snad jen dodal, ze "kriticnost" 1-wire slave
implementace hodne zalezi na tom, zda to ma fungovat za vsech okolnosti
i v cizich aplikacich (tj. napriklad emulace serioveho cisla) nebo zda
mate sveho mastera se znamym casovanim. Nejhorsi je operace cteni nuly,
kdy by slave mel hned po sestupne hrane stahnout sbernici na nulu -
vzhledem k rychlosti a nutnosti rozhodovani se to podari spis az za par
mikrosekund. Pokud mate mastera sveho, muzete si byt jisty, kdy presne
cteni provede, a nemusite s tahanim na nulu tak spechat.

> Neco takoveho, no flame, proste si _myslim_, ze v tomto pripade je
> asm zbytecne.

Implementovat mastera v C je hracka, nebot se staci drzet doporuceni a
definovane doby _cekat_. Naproti tomu slave musi _detekovat_ ruzne
dlouhe doby a podle toho reagovat. Nicmene s vami souhlasim, ze mnohem
elegantnejsi je vyuzit rychle obsluhy v assembleru a omacku napsat v C,
otazkou je, zda to ma cenu, pokud planovanou nejslozitejsi operaci bude
vysypat bajt precteny ze sbernice na port.

> Navic se mi na implementaci pana Povalace neco nelibilo s casovacem
> (tusim, ze nejake prapodivne skakani nekam pryc - uz je to dlouho co
> jsem studoval zdrojove kody).

Ano, je to prasarna :-) - v casovaci se kontroluje doba a pokud se
presvihne hodnota pro reset puls, udela se "softwarovy reset" - jump
primo z ISR, vynulovat zasobnik, povolit preruseni a jede se dal
generovanim presence pulsu, zadne reti se nekona. Dnes bych to napsal
elegantneji a take bych se pokusil o castecne C, jenze tohle byl jeden z
projektu, u kterych jsem prechazel z 51 na AVR a s C teprve zacinal,
takze podle toho vypada.

> Predpokladam ze ty AVRka pak mohu povesit primo na tu sbernici
> (+napajeni) bez jakekoliv vetsi bizuterie kolem - pokud si to myslim
> spatne tak mne prosim opravte.

Opatrne, prave emulovany slave bude mit mensi toleranci k casovani nez
originaly, takze pokud budete mit sbernici rozsahlejsi (desitky metru),
muzete se propadnout do neprijemne magie spocivajici v upravach casovani
mastera, "aktivnich pull-upech" apod. Ja tu mou implementaci take
puvodne chtel povesit na spolecnou sbernici s teplotnimi cidly
roztazenou po baraku, ale nakonec jsem od toho upustil s tim, ze cidla
necham na 1-wire a do stejneho UTP radeji pridam jeste RS485 pro ostatni
komunikaci. Ne ze bych to z casovych duvodu nekdy dokoncil... :-)

S pozdravem
--
Ales Povalac
http://www.alpov.net/
http://blog.alpov.net/


Jan 'yanek' Bortl napsal(a):
> Zdravim,
> 
> uz par dni marne shanim po vsech certech nejake zdrojaky v jazyku C
> pro 1-wire slave pro procesory AVR (tiny13, mega8+). Povedlo se mi
> najit pouze pro ASM [1,2].
> 
> Nemate nekdo neco takoveho uz napsaneho, at nevymyslim kolo? Vim, ze
> samotny dallas/maxim se k tomuto moc nehlasi, nicmene hledam nejake
> reseni, jak se bavit s mnoha brouky na teto sbernici, kdyz uz tam mam
> resp. budu mit teplomery.
> 
> Predpokladam ze ty AVRka pak mohu povesit primo na tu sbernici
> (+napajeni) bez jakekoliv vetsi bizuterie kolem - pokud si to myslim
> spatne tak mne prosim opravte.
> 
> Inspiroval jsem se zde oblibenym tematem domaci automatizace,
> konkretne projektu od pana Louly [3], nicmene pouzite slave primo od
> maximu se mi jevi jako neperspektivni vzhledem k moznostem AVR :-)
> 
> Diky za pomoc
> 
> 1. http://www.alpov.net/elektronika/owslave.html 2.
> http://idom.wizzard.one.pl/ 3. http://quattro.haje.cz/
> 



Další informace o konferenci Hw-list