Hogyan csatlakozhat egy könyvtárhoz egy projekthez?
- az OWIPolled.h fájl konfigurálása
- válassza ki a OneWire interfész-szoftver implementációját
- állítsa be a mikrokontroller órajelét
#define CPU_FREQUENCY 16.000
- állítsa be azt a portot, amelyhez a OneWire busz csatlakoztatva van
#define OWI_PORT PORTD //! 60 μs, és a szünet> 1 μs közötti időrések között.
A nulla átvitel érdekében a mikrokontroller 60-120 μs időtartamra "meghibásodik" az 1 vezetékes buszon. Ezután "felszabadítja" és 1 másodpercig szünetel a következő bit írása előtt.
A készülék átviteléhez a mikrokontroller 1-től 15 mikrométeres időtartamig "meghibásodik" az 1 vezetékes busz, "felengedi" és megáll. A szünetnek olyannak kell lennie, hogy az időrés időtartama> 60 + 1 μs legyen.
Az adatok olvasása 1-vezetékes buszon
DS18B20 egy kiszolgáló eszköz, és továbbítja az adatokat, ha a mikrokontroller generál 1-Wire busz olvasás időrésben. A formáció időrés olvasó mikrovezérlő „nem” 1-vezetékes busz egy ideig 1-15 mikroszekundum, majd a „kiadások” azt, átadó kontroll állapotban 1-vezetékes busz DS18B20 érzékelőt. Ha DS18B20 halad nulla, ez tartja a busz a „Sikertelen” állapot (a logikai nulla), hogy a végén az időrés. Ha 1-et továbbít, akkor a busz "szűk" állapotban marad.
A mikrokontroller képes olvasni a DS18B20 szenzoradatait 15 μs-ban az olvasás időrésének kezdete után.
Tehát, van egy alapvető megértése adatokat cseréltek egy 1-Wire busz, és akkor lépni a következő része -, hogy hogyan kezeljék a DS18B20, hogyan kell kezdeni a folyamatot hőmérséklet átalakulását az érzékelő olvasni egy hőmérséklet beállított hőmérséklet felbontás, stb .D.
A DS18B20 eléréséhez szükséges műveletek sorrendje a következő:
2. A ROM parancs benyújtása
3. A DS18B20 funkcionális parancs benyújtása
ROM parancsokat
Az inicializálással minden világos. A mikrokontroller meghibásodik a buszon, felszabadítja és megvárja a slave válaszát. Ha legalább egy DS18B20 hibás érzékelő van a buszhoz csatlakoztatva, akkor a jelenlét-impulzus válaszol.
A jelenlét-impulzust kapott, a mikrokontrollernek 1-vezetékes ROM parancsot kell küldenie. Öt ilyen csapat van.
keresés rom (0xF0 parancskód)
Ez a parancs lehetővé teszi a mikrokontroller számára, hogy elolvassa a 64 bites slave kódot. A parancs akkor használható, ha csak egy 1 vezetékes eszköz csatlakozik a buszhoz.
A mikrokontroller kiadja a rom parancsot
A mikrokontroller a slave kód 8 bájtját kapja
A buszra csatlakoztatott összes 1-vezetékes eszköz eléréséhez használja a skip rom parancsot. Például ez a parancs használható az összes DS18B20 érzékelő hőmérséklet-átalakítására egyszerre.
A mikrokontroller kiadja a parancsot
A mikrokontroller kiadja a convert t parancsot
A mikrokontroller adja ki a match rom parancsot
A mikrokontroller a slave kód 8 bájtját adja ki
A mikrokontroller funkcionális parancsot ad ki.
riasztáskeresés (0xEC)
Ennek a parancsnak a hatása megegyezik a search rom parancs hatásával, csak az alárendelt eszközök jeleznek egy riasztási jelzővel. A riasztásjelzőt a DS18B20-ban állítják be, ha meghaladják a Tl és Th regiszter által meghatározott hőmérsékleti küszöbértékeket.
Funkcionális parancsok
Belső memória
A DS18B20 hőmérő 8 bájtnyi RAM-mal (karcoláspad és további RAM) és 3 bájt EEPROM-ot tartalmaz.
A 0 és 1 bájt a mért hőmérséklet. A hőmérséklet kezdeti értéke (áramellátásnál) +85 fok. A regiszterek formátuma:
ahol S - a hőmérséklet jele (0 - pozitív hőmérséklet 1 - negatív), BIT10-Bit4 - egész része a hőmérséklet, bit3-BIT0 - törtrész.
A negatív hőmérsékletet a kiegészítő kód tartalmazza. A nyilvántartások tartalmának érthetőbb formában történő fordítását a következő részben ismertetjük.
Bytes 2 és 3 - felső és alsó hőmérséklet küszöbértékek. Ezeknek a bájtoknak az értékeit a felhasználó határozza meg. E bájtok kezdeti értéke az EEPROM memória tartalmától függ. Mindkét regiszter formátuma:
ahol S a hőmérséklet jele (0 pozitív hőmérséklet, 1 negatív), a BIT6-BIT0 a hőmérséklet küszöbértékének teljes része.
4. bájt - a konfigurációs nyilvántartás. Meghatározza a DS18B20 hőmérséklet-felbontását. A regiszter kezdeti értéke az EEPROM memória tartalmától függ. Az új DS18B20 érzékelő alapértelmezett 12 bites felbontású. A konfigurációs nyilvántartás formátuma:
ahol R1, R0 a hőmérő hőmérséklet-felbontását meghatározó bitek.
Amint az táblázatból látható, a konverziós idő függ az adott hőmérséklet-felbontástól.
Az 5-től 7-ig terjedő bájtok le vannak foglalva és nem használatosak
A 8 byte egy CRC (ciklikus redundancia kód). A CRC érték a fogadott adatok ellenőrzésére szolgál.
Most a funkcionális parancsokról.
Ez a parancs elindítja a DS18B20 hőmérséklet-átalakítási folyamatot. A hőmérséklet értékét 0 és 1 bájt RAM érzékelő tárolja. Az átalakítás végrehajtási ideje a konfigurációs nyilvántartásban beállított felbontástól függ.
Ha a DS18B20 parazitikus üzemmódban működik, akkor a konvertáló parancs kiadása után a mikrokontrollernek az 1-vezetékes buszot az átalakítási idő tápfeszültségéhez kell csatlakoztatnia (lásd a diagramot).
Ha a DS18B20 tápellátását külső áramforrás táplálja, akkor a hőmérséklet-átalakítás indításakor figyelemmel kísérheti a végrehajtást. Ehhez a mikrokontrollernek létre kell hoznia olvasónyílásait a buszon és várnia kell az érzékelőre, hogy reagáljon egy egységgel.
Működési sorrend egy érzékelő esetén:
A mikrokontroller kiadja a parancsot
A mikrokontroller kiadja a convert t parancsot
A mikrokontroller időrést képez, és egy egységet vár
írja a karcolódást (0x4E)
Ez a parancs lehetővé teszi a mikrokontroller számára, hogy a DS18B20 érzékelő RAM-ban három byte - Th, Tl és a konfigurációs regisztert (2, 3, 4 byte RAM) írjon.
Működési sorrend egy érzékelő esetén:
A mikrokontroller kiadja a parancsot
A mikrokontroller kiadja a parancs írási regisztert
A mikrokontroller 3 bájt - Th, Tl és a konfigurációs regisztert adja át
olvasható karcoláspad (0xBE)
Ez a parancs lehetővé teszi a mikrokontroller számára, hogy elolvassa a DS18B20 érzékelő RAM tartalmát. Az adatokat a kis sorrendű bit továbbítja a nulláról a nyolcadik bájtra. A mikrokontroller bármikor küldhet visszaállító jelet az 1 vezetékes buszra, és megszakíthatja az adatok fogadását. Például, ha csak az első két byte RAM szükséges.
Működési sorrend egy érzékelő esetén:
A mikrokontroller kiadja a parancsot
A mikrokontroller kiadja a parancsot a karcolódobozról
A mikrokontroller 9 bájtnyi érzékelő RAM-ot fogad el
Működési sorrend egy érzékelő esetén:
A mikrokontroller kiadja a parancsot
Ezzel a parancssal a DS18B20 felülírja a RAM 2, 3 és 4 bájtjait (Tl, Th és a konfigurációs regiszter) az EEPROM-ban tárolt értékekkel.
A mikrokontroller képes figyelemmel kísérni a művelet elvégzését azáltal, hogy az 1-huzalos buszon az olvasási időkereteket képezi. A művelet végrehajtása közben a busz logikai zérus lesz, amikor a művelet befejeződik - egy logikai egység.
A visszahívás E 2 művelet automatikusan végrehajtódik, ha az érzékelő bekapcsolt állapotban van.
Működési sorrend egy érzékelő esetén:
A mikrokontroller kiadja a parancsot
A mikrokontroller kiadja az E2 parancsot
A mikrokontroller egy időrést képez az 1 vezetékes busz állapotának olvasásához és olvasásához
olvassa el a tápegységet (0xB4)
Elküldésével ezt a parancsot és után kialakult olvasási időrés mikrokontroller tudja határozni, hogy DS18B20 Melyik érzékelők. Ha be vannak a vonal (parazita teljesítmény mód) alatt az időrés olvassa el a 1-Wire busz tartják nulla használata esetén külső tápegységet, a busz szigorítani fogják a készüléket.
Működési sorrend egy érzékelő esetén:
A mikrokontroller kiadja a parancsot
A mikrokontroller kiadja a parancs olvasó tápellátását
A mikrokontroller egy időrést képez az 1 vezetékes busz állapotának olvasásához és olvasásához
Ez arra a következtetésre jut, hogy rövid utat adok az unalmas elméletnek. A következő részben továbbhaladunk az 1-vezetékes C könyvtárba, és elemezzük a projekt kódját.
Elmegyünk az elméletből a gyakorlatba. Feladatunk, hogy megkapjuk az aktuális hőmérséklet értékét a DS18B20 érzékelőtől, és kiadjuk a szimbolikus LCD kijelzőre.
Leírás 1-Wire könyvtár
A DS18B20 használatához egy kicsit hangolt 1 Wire könyvtárat használunk az AVR318 alkalmazásból. Ez a könyvtár érdekes abban, hogy nem "élesített" a konkrét egyvezetékes készülékek számára, és két lehetőséget kínál a felhasználónak az 1 vezetékes protokoll - szoftver és hardver megvalósítására. A szoftvertelepítés bármely mikrokontrollerrel együtt használható, a hardver végrehajtása csak az UART / USART modullal. Ez a cikk az 1-vezetékes protokoll szoftvertelepítésével foglalkozik.
Vessünk egy pillantást az 1 Wire könyvtár szerkezetére.
OWISWBitFunction.h, OWISWBitFunction.c, OWIUARTBitFunction.c - ezekben a modulok leírása alacsony szintű funkciók - inicializálási funkciót, a felvételi funkció 0 és 1, a funkció az olvasás 1-vezetékes busz és a funkciója válaszának érzékelése 1-Wire eszközök.
A fejlécfájl egy, a sish fájl két - egy a szoftverhez, a másik pedig a protokoll hardver végrehajtásához.
OWIHighLevelFunction.h, OWIHighLevelFunction.s - Ez a modul az a magasabb szintű funkciókat (ez nyilvánvaló a neve) - parancsok a felvétel funkciót, a funkció a leolvasási adatok függvényében keresi a 1-Wire eszköz a buszon.
Az OWIPolled.h az 1 Wire könyvtár-konfigurációs fájl. Meghatározza a protokoll végrehajtását, a mikrokontroller órajelét, az a portot, amelyhez az 1 vezetékes busz csatlakoztatva van, valamint az UART / USART modul beállításai.
A compilers.h olyan fájl, amely kompatibilis a könyvtárral a három fordító bármelyikével: IAR AVR, GNU GCC (WinAVR), CodeVision AVR.
OWIdefs.h - mindkét megvalósításban használt közös definíciók. A kódfüggvényekkel és az UART / USART mintákkal visszaadott ROM parancsok meghatározása.
OWIdevicespecific.h - konkrét definíciók a hardver végrehajtásához. A mikrokontrollerek UART / USART AVR moduljainak bitjei és regiszterei.
OWIcrc.h, az OWIcrc.c a modul, amely a ciklikus redundancia kód kiszámításának funkcióit tartalmazza.
1-huzalos könyvtár csatlakoztatása
Annak érdekében, hogy használhassuk az 1 Wire könyvtárat, meg kell kapcsolódnunk a projekthez és konfigurálni kell. A könyvtár csatlakoztatása az IAR projekthez a következő lépésekből áll:
1. Írja át az összes könyvtár fájlt a projekt mappájába
2. Csatlakoztassa a sish fájlokat a projekthez
3. Vegye fel a header fájlokat a main.c fájlba