Holtek HT1380/1381

Prisilupau čia iš kažkokių ruterių ar modemų laikrodinių mikroschemų (RTC). Tačiau tokių prastokų… Holtek 1381. Iš pirmo žvilgsnio pamaniau kad tai bus I2C tipo čipas, tačiau pasirodo, kad ne. Tai kažkoks supaprastintas nuoseklusis interfeisas. Todėl teko su mikroschema šnekėtis “bit bang" metodu.

Holtek HT1381 ar HT1380

Dokumentacija rašė tikras kinas, todėl ja suprasti galima tik prisiliurlinus tiek, kad susiaurėtu akys. Internete apie šio čipo valdymą su AVR mikroschema ir dar C kalboje info kogero nėra. Todėl nutariau pasidalinti savo suprasta informacija ir pastebėjimais.

Hardwariškai tai RTC su vienu maitinimo įėjimu. Todėl jums reikės batareikos ir dviejų diodų arba vieno diodo ir jonistoriaus (akumo). Aišku reikia laikrodinio kristalo (to kur 32kHz su uodegyte), galbūt poros kondikų. Kad valdyti mikroschemą reikia trijų laidų. Būtent triju, nes chip select arba RESET koja aktyviai dalyvauja nuosekliam duomenų perdavime.

Mikroschema turi 3 duomenų perdavimo režimus: 1) baito įrašymas; 2) baito nuskaitymas; 3) visko nuskaitymas (burst).

Baito rašymas į mikroschemą

Pradedam nuo baito įrašymo, nes “naujai" pajugta mikroschema nenori veikti ir generatorius neveikia. Kad paleisti generatorių reikia supumpuoti 16 bitų: 8 bitai registro numeris ir panašiai, kiti 8- duomenys. Tačiau kad ką nors įrašyti, reikia nuimti įrašymo apsaugą. Šiaip tai reikia pakeisti vieną bitą (7, patį MSB) į 0.
O žmoniškai ir suprantamai šnekant, į mikroschema reikia pirmą supumpuoti 0×8E ir poto 0×00. Beja, į mikroschema pumpuojama nuo LSB (mažiausio bito). Taigi pumpuokit tokią seka:
01110001 ir 00000000, kiekvieną bituką pažymėkite LH pokyčiu clock grandinėje.

Dabar mikroschema atrakinta ir galima į nulinį registrą, kur sėdi sekundės rašyti duomenis. Tačiau sekundžių registras turi ne tik sekundes, bet pats pats MSB bitas (7) yra vadinamas CH. Kai tas CH yra 0, tai paleidžiamas generatorius.

HT1381 write cycle
Čia į “nulinį", sekundžių registrą rašom 0×1B arba DEC27. Tai aišku kvailas skaičius, nes tokių sekundžių nebūna- laikrodis eina taip vadinamu HEX-DEC režimu, tai yra po 0×09 eina ne 0×0A, o paprasčiausias 0×10. Taip paprasčiausiai lengviau konvertuoti po 4 bitus laiko į vienetus ir dešimtys.

Kodėl tokia bitų seka? O todėl, kad pirmas baitas susideda iš: R/W A0 A1 A2 0 0 0 1. Pirmas (LSB) bitas yra Read/Write žymė. Jei 0, tai rašom. Poto A0-A2 tai “registro" adresas. Toliau taip turi būti ir visada baigiasi “1″ (MSB). Čia rašom ir tik į nulinį registrą, tai lieka tik privalomas vienas bitas.

O čia vieno baito skaitymas

HT1381 byte read
Pradžia visiškai tokia pati kaip ir skaityme, nu tik skiriasi W/R bito reikšmė. Dabar LSB=0. Tačiau ten, kur pažymėta žalia rodykle, AVR mikroschemos (šiuo atveju ATMEGA32) koja skirta duomenų perdavimui perprogramuojama priėmimui. Todėl kiek pakito oscilogramos lygis (gi RTC maitinama per diodą).
Teoriškai, mikroschema duomenis atiduoda CLK persijungime HL, tačiau duomenys išlieka ir po LH persijungimo. Toje vietoje ir nusiskaitom. Kadangi LOW CLK metu nieko nedarom, todėl ir gavosi toks mažas pypsiukas. Čia jau žiūrėkit kiek voltų maitinama mikroschema, nes kuo mažesnė įtampa, tuo lėčiau ji veikia. Taičiau prie 3V maitinimo ir 12MHz ATMEGOS nereikia jokių užvėlinimų. CLK paliktas HI, nes ten jis visiškai nesvarbu.
Beja tie “ramp'ai" tai paprasčiausiai gaunasi, kai tiek ATMEGA, tiek Holtekas atsijungia nuo šynos ir parazitinė talpa užsikrauna nuo mažų pull-upų.

Kaip matom čia seka:
10000001 pereinam į skaitymą ir nuskaitom 11100100. Pirmo baito LSB 1 tai skaitymas, toliau viskas 0, nes sekundžių registras, privalomas MSB vienetas. O nuskaitytas rezultatas: 0×27. T.y. 27 sekundės.

BURST duomenų skaitymas
Tas pats kaip paprastas baito skaitymas, tik reikia pirmą baita daryti tokį:

Skaitymui: 11111101 ir toliau 64 clock bitai skaitymo režime.
Rašymui: 01111101 ir toliau 8 baitai su 64 clock impulsais.

Softe ši funkcija neparašyta- tingėjau.

Triukai ir paslaptis

O dabar gudrybė, kuri man kainavo du vakarus laiko. Mano mikroschema prijungta prie to pačio porto kur ir turi stovėti I2C. Pas I2C kaip ir reikalingas pull-up. Ir aš kažkaip pagalvojau, kad CLK gali būti HI kai pasirenkam CS/RESET laidą. Ot ir ne, дудки, pasirodo, kad jei CS/RESET pajungiamas (HI) ir tuo metu CLK irgi HI, tai nifiga niekas neveikia. Kad mikroschema priimtu duomenis, reikia pirmiausia CLK padaryti LOW, poto tik CS/RESET padaryti HI ir toliau viskas pagal dokumentaciją. Jei bus CLK-HI, poto CS/RESET-HI, poto CLK-LO ir toliau pagal dašytą, tai neveikia :)

Po skaitymo butinai padaryti CS/RESET LOW!

O jei nifiga nesupratot, va jums C kalbos source kodas: HT1381 AVR source code C

2 Responses to “Holtek HT1380/1381”

  1. Vytautas Says:

    Bet ir sudėtingas valdymas:). Nebent mokymosi tikslais tokį naudot. Maxim neblogus RTC gamina ir samplus nemokamai siunčia.
    http://www.maxim-ic.com/products/timers/ds3234.cfm
    Ne tik, kad kristalas integruotas ir turi I2C bei SPI versijas, bet viduje yra kalendorius ir žadintuvas, tai reiškia, kad konstruojant kokį nors mandrą laikrodį didžioji dalis softo jau padaryta, belieka nusiųst nustatymus ir nuskaityt laiką:).

    Nors naudojant naujasnį mikrokontrolerį RTC integruotas būna paprastai. Panašu, kad Atmega’s į vietą ARM'ai pastatys - va, naujas Cortex M0 - pigesnis, greitesnis, daugiau funkcijų. Dev-board'as tik 25Lt http://lt.farnell.com/stmicroelectronics/stm32f0discovery/eval-board-cortex-m0-stm32f0/dp/2096251

  2. Administrator Says:

    Taip, esu naudojęs ir “normalius" RTC (ir maximo ir rodos intersilo). Kur turi kalendorius, žadintuvus ir šiaip navarotus. Aišku su jais paprasčiau (yra rodos sudėtas šiame bloge softas). Bet kad toks papuolė po ranka :)

    O dėl ARM, tai sutinku kad jis gėris. Bet per daug variantų ir gamintoju nėra gerai.. ir dar tingisi mokintis.
    Dar pvz. labai subiesino Freescale kontroleriukai. Rodos visai nieko, bet softas gaidiškai, IDE dar baisesis. O ir programatorius kažkoks “slaptas" ir tik originalus. Guli devboardas kažkur, bet nafig… TI irgi kažka davė, bet irgi reikia vargti su IDE ir t.t. Irgi numečiau.
    Samsungo ARMo gigantas su androidu… nu ble perdidelis. Ir dar BGA.

Leave a Reply

Bot-Check (Jei ne skaičiai spauskit refresh. Tik oranžinius naudoti.)

Unhappy Tikbalang