Az 1. ábra a PIC18 Explorer kártyával és az AC164147 SPI RTCC PICtail társkártyával felépített referenciarendszert mutatja.
A folyadékkristályos kijelző lehető legkisebb kivezetőszámot igénylő hozzáférése az MSSP1 modul SPI és az MCP23S17 16 bites I/O bővítő SPI interfészének illesztésével valósítható meg. A két nyomógombot S1 és S2 jelölésű kapcsoló realizálja, amelyek az RB0 és RA5 általános célú I/O portokra (GPIO) csatlakoznak. Az SPI RTCC a PICtail fejlesztőkártya része, és közvetlenül csatlakozik a mikrovezérlő MSSP1 moduljához.
További illesztést szükséges létesíteni az RTCC kimeneti CLKOUT jele és a TMR0 órajelbemenete, az RA4 között. Az RTCC a CLKOUT kimeneten 1 Hz frekvenciájú négyszögjelet biztosít, TMR0 számlálóként kerül felprogramozásra, a 0xFFFF inicializálási értéke minden másodpercben szoftveres megszakítást generál. Az SPI RTCC és a mikrokontroller közötti SPI buszos kapcsolat nem open-draines, ennek megfelelően felhúzó ellenállásokat sem alkalmaz. A másodlagos csatlakozások viszont open-draines bemenetek és kimenetek, ezért felhúzó ellenállásokra ezeknél szükség van. A CLKOUT kimeneti jel az RA4/T0CKI bemenetre felhúzó ellenállás nélkül kerül rá, és programozható 1 Hz, 4 kHz, 16 kHz vagy 32 kHz frekvenciájú lehet.
A 8F87J11 mikrokontroller kompatibilis a PIC18 Explorer fejlesztőkártyával. A meghajtóprogramok és a fő függvény C nyelven leprogramozhatók az MPLAB X 2.10 fejlesztőkörnyezetben és az XC8 1.34 fordítóval.
Ezzel az implementációval olyan elektronikus óra valósítható meg, amely a fejlesztőkártyán elhelyezett LCD-n a hat alapvető idő- és dátumváltozó (év, hónap, nap, óra, perc, másodperc) megjelenítésére alkalmas. Az implementáció tartalmaz beállítási szekvenciát, amely a két nyomógomb segítségével lehetővé teszi a hat idő- és dátumváltozó értékének beállítását a fejlesztőkártyáról. Ebben az esetben S1 a menüválasztás, S2 pedig az inkrementálógomb szerepét tölti be. A programkód megmutatja a felhasználó számára, hogyan kell az időtároló regisztereket konfigurálni és használni.
A működés részletesen
Az MCP795WXX egy SPI buszos szolgaeszköz, amely a mikrokontroller SPI interfészére csatlakozik. Az RTCC chipkiválasztó bemenetét a GPO vezérli. Az alkatrész a CS bemenet logikai alacsony szintre húzásával engedélyezhető, ezután a 8 bites olvasási utasítás az MCP795WXX-re továbbításra kerül, amelyet a 8 bites cím követ. Miután a helyes olvasási utasítás és a cím elküldésre került, a kiválasztott címen a memóriában tárolt adat az SO kivezetésen keresztül kiléptetésre kerül. Az órajelimpulzusok folyamatos továbbítása esetén a memóriában a következő címeken tárolt adatok szekvenciálisan kiolvasásra kerülnek. A belső címpointert a rendszer automatikusan inkrementálja a következő, eggyel magasabb címre, miután az adott adatbájt kiléptetésre került.
Mivel az RTCC regiszterek a SRAM tömbtől külön vannak, az RTCC regiszterkészlet kiolvasásakor a cím az RTCC regiszterek elejére kerül vissza. Ehhez hasonlóan, ha egy cím a SRAM tömbből kerül betöltésre, a belső címpointer a műveletet követően a SRAM tömb elejére kerül vissza. Az olvasási művelettel a tömbök kiolvasása végtelen hosszan folytatható az eszköz órajellel táplálásával. Az olvasási műveletet a CS engedélyezőbemenet magas szintre húzása szakítja meg. A működési szekvenciát a 2. ábra mutatja.
Mivel az RTCC és SRAM regisztereknél az EEPROM-tól eltérően nincs szükség az írást engedélyező WREN szekvencia lefuttatására, az írás a CS engedélyezőbemenet alacsony szintre húzásával, az írási utasítás, majd a cím és az írandó adat kiküldésével történik. Mivel írási ciklusra az RTCC és SRAM regisztereknél nincs szükség, a teljes tömb akár egyetlen paranccsal írható. Az adat tömbbe írásához a CS engedélyezőbemenetet magas szintre kell visszahúzni, miután egy teljes bájt bekapuzásra került. Ha CS engedélyezőbemenetet bármely más időpillanatban húzzák magas szintre, a legutolsó bájt nem kerül beírásra. A 3. ábra mutatja az írás működési szekvenciáját.
Az elektronikus óra két fő funkciója a hat idő- és dátumadat megjelenítése a mikrokontroller megszakításai alapján, illetve az idő- és dátumváltozók beállítása a két integrált nyomógomb segítségével. A kijelzést az integrált LCD látja el, 24 órás időformátumban. A változók valósidejű megjelenítése mindaddig folyamatosan történik, amíg a menükiválasztó gomb megnyomásra nem kerül. Az inkrementálógomb megnyomása az időkijelzésre nincs hatással.
A menükiválasztó gomb megnyomásával betöltésre kerül a beállítási menü, a megszakítások pedig letiltódnak. A menüelemek sorrendje: év, hónap, nap, óra, perc, másodperc. Egyik változóról a másikra a menükiválasztó gomb megnyomásával lehet eljutni, a változó inkrementálását pedig természetesen az erre dedikált inkrementálóbillentyű látja el. A menükiválasztó gomb utolsónak a menüből való kilépést hajtja végre.
A beállítási menübe belépés az RTCC oszcillátorának nem tiltja le a működését. A beállítás befejezésekor az idő- és dátumváltozók frissítésre kerülnek. Ha a felhasználó belép a beállítási menübe, a szekvencia végén az RTCC változói frissítésre kerülnek, még akkor is, ha konkrét változtatás nem történt. Ebben az utóbbi esetben az óra a számlálást onnan folytatja, ahonnan a felhasználó a beállítási menübe belépett.
Késleltetések és meghajtók
Mivel az LCD vezérlője a parancsokat némi késleltetéssel dolgozza fel, néhány kiegészítő késleltetés létrehozására került sor. A billentyűk pergésének kompenzálására hosszú, általános célú késleltetés szolgál. Az LCD-meghajtó adatok, parancsok és karakterláncok kezelését végzi az LCD-re írás esetén, a magas szintű LCD-kezelő függvények a dátumot és időt inicializálják vagy jelenítik meg a kijelzőn. A könyvtár tartalmazza az idő- és dátumváltozókat is.
Az RTCC meghajtók a PIC18 mikrovezérlő MSSP1 modulja és az RTCC SPI közötti, közepes szintű kommunikációért felelősek. Az ide tartozó függvények az SPI meghajtókat hívják meg, a könyvtár minden szükséges állandó definícióját tartalmazza regiszterként, címként és maszkként. Az SPI meghajtók az alacsony szintű SPI kommunikációt az RTCC-vel szolgáltatják, függvényeit az SPI RTCC meghajtók hívják meg.
A billentyűmeghajtóknak egyetlen funkciója van, amely a várakozás és eseménykezelés a két billentyű megnyomását illetően. Miután a gombnyomás megtörtént, a firmware frissíti a megnyomott billentyű kódját. A függvényből való kilépéskor az érték visszaadásra kerül, a függvény pedig a billentyű pergésének kompenzálása okán kétszer 100 ms időnek megfelelő késleltetést hajt végre. A függvény csak akkor lép ki, ha a megnyomott gombot a felhasználó felengedte.
A megszakításokat a 0xFFFF-értéken inicializált, számlálóként működő TMR0 időzítő túlcsordulása generálja. A TMR0-t másodpercenként egyszer inkrementálja az RTCC-ből érkező CLKOUT jel. A megszakításkezelő függvény meghívja az időkijelző függvényt, amely kiolvassa az RTCC-ből a hat érintett regiszter tartalmát, feltöltve vele az idő- és dátumadatokat tároló, hat globális változót (év, hónap, nap, óra, perc, másodperc). A randombájtos hozzáférési mód az alkalmazás egyik fajtáját jelenti, és a hat változó csupán egy részéhez enged hozzáférést.
Végezetül a megszakításkezelő függvény a hat változó LCD-n való kijelzését is elvégzi.
Konfiguráció
Az RTCC konfigurációja két fázisból áll: az RTCC inicializálásából és az időadat-tároló regiszterek beállításából. Az SPI RTCC inicializálásához a meghajtó fejrésze két inicializálási függvény definícióját tartalmazza. Az első célja az elem engedélyezése a nap-regiszterben tárolt VBATEN bit segítségével, illetve a vezérlőregiszter konfigurációja a riasztások letiltására és az MFP kivezetésen 1 Hz frekvenciájú négyszögjel generálására.
A második függvény a nap-regiszterben tárolt OSCON bitet teszteli oly módon, hogy ha az oszcillátor már fut, nem kerül sor műveletvégzésre, viszont ha nem fut, az idő és dátum egyedi értékre kerül beállításra, majd az oszcillátor elindul.
Az időtároló regiszterek beállítását végző szekvencia a főprogram végén található, funkcióját tekintve pedig a hat idő- és dátumtároló regisztert a hat idő- és dátumváltozó értékével frissíti.
Az időtároló regiszterek rendeltetése a kiolvasás és az értékek LCD-n való megjelenítése. Ezt a két műveletet másodpercenként egyszer, a megszakítások alkalmával az időmegjelenítő függvény végzi.
Az RTCC regiszterek hozzáférését 2 db, egy írást és egy olvasást végző alapfüggvény valósítja meg. Mindkettő regisztercímeket használ az SPI RTCC SRAM területén belül. A címek szerint az alapolvasó és -író függvényekben csak a regiszter címe tér el. Az olvasást a megszakítófüggvény használja, míg az írást az inicializáló és a beállítószekvencia alkalmazza.
Összefoglalás
Cikkünkben bemutattuk, hogyan lehet egy elekronikus órát kialakítani, vezérelni és konfigurálni a Microchip MCP795WXX SPI RTCC áramkörével. A projektet a cég saját PIC18 Explorer demókártyájával és annak integrált eszközeivel valósítottuk meg, amelyhez a programkódot C nyelven írtuk a PIC18F87J11 mikrokontrollerhez.