Sistemelor Cu Microcontroler in Dispozitive de Pozitionare in Spatiu

Embed Size (px)

DESCRIPTION

Circumstanţele în care ne găsim astăzi în domeniul microcontrolerelor şi-au avut începuturile în dezvoltarea tehnologiei circuitelor integrate. Această dezvoltare a făcut posibilă înmagazinarea a sute de mii de tranzistoare într-un singur cip. Aceasta a fost o premiză pentru producţia de microprocesoare, şi primele calculatoare au fost făcute prin adăugarea perifericelor ca memorie, linii intrare-ieşire, timer-ii şi altele. Următoarea creştere a volumului capsulei a dus la crearea circuitelor integrate. Aceste circuite integrate conţin atât procesorul cât şi perifericele. Aşa s-a întâmplat cu primul cip conţinând un microcalculator, sau ce va deveni cunoscut mai târziu ca microcontroler a luat fiinţă.

Citation preview

Implementarea Sistemelor cu Microcontroler in Dispozitive de Pozitionare in Spatiu

Introducere

Circumstanele n care ne gsim astzi n domeniul microcontrolerelor i-au avut nceputurile n dezvoltarea tehnologiei circuitelor integrate. Aceast dezvoltare a fcut posibil nmagazinarea a sute de mii de tranzistoare ntr-un singur cip. Aceasta a fost o premiz pentru producia de microprocesoare, i primele calculatoare au fost fcute prin adugarea perifericelor ca memorie, linii intrare-ieire, timer-ii i altele. Urmtoarea cretere a volumului capsuleia dus la crearea circuitelor integrate. Aceste circuite integrate conin att procesorul ct i perifericele. Aa s-a ntmplat cu primul cip coninnd un microcalculator, sau ce va deveni cunoscut mai trziu ca microcontroler a luat fiin.

Un microcontroler este un calculator pe un chip. Cuvantul micro sugereaz mrimea redus a dispozitivului iar controler ne spune c dispozitivul poate fi folosit pentru a controla obicte, procese sau evenimente.

Microcontrolerele pot fi gsite n componena oricarui tip de aparat. Orice aparat care msoar, stocheaz, comand, calculeaz sau afieaz informaii este o potenial gazd pentru un microcontroler. De exemplu orice automobil fabricat astzi este echipat cu cel putin un microcontroler care comand motorul mainii i adesea chiar cu mai multe pentru comanda sistemelor adiionale din automobil. n calculatoare de birou (PC) se pot gsii microcontrolere n tastatur, modemuri, imprimante i alte periferice. n echipamentele de testare fac posibil adugarea unor facilitai ca de exemplu memorarea rezultatelor masurrii, afiarea mesajelor i formelor de und. Produsele de larg consum care includ microcontrolere sunt camerele video, video recorderele, compact-disk (CD) playere i altele. Un microcontroler este similar unui microprocesor. Ambele conin o unitate centrala de prelucrare sau UCP (cenral processing unit). CPU execut instruciuni care ndeplinesc operaiile de baz logice, matematice i de curgere a informaiei.

Pentru a construi un calculator complet, microprocesorul necesit memorie pentru pstrarea datelor i programelor, interfee de intrare-ieire (I/O) pentru conectarea dispozitivelor externe cum ar fi tastatura sau monitorul. Spre diferent de microprocesor, microcontrolerul este un calculator pe un chip deorece el conine i memorie i interfete de intrare-ieire pe langa CPU. Deoarece memoria i interfetele care ncap pe un chip sunt limitate, microcontrolerele tind s fie utilizate n sisteme mai mici care necesit doar un microcontroleri cteva elemente adiionale.

Lucrarea de fa i propune s prezinte Implementarea sistemelor cu microcontroler n dispozitive de poziionare n spaiu. Aplicaia practic fiind realizarea unui aparat de msur a distanei cu ajutorul ultrasunetelor. Este alctuit din trei capitole, primul capitol face o scurt prezentare a ultrasunetelor, capitolul al doilea realizeaz a prezentare ampl a microcontrolerului PIC16F873 care prin prelucrarea semnalului primit de la senzorul cu ultrasunete realizeaz afiarea distanei, n capitolul al treilea se prezint aplicaia practic iar n final sunt prezentate cteva exemple n care sunt folosii senzorii cu ultrasunete.Capitolul I Ultrasunelete

Dintre vibraiile sonore care ies din limitele de audibilitate ale urechii omeneti, de un mare interes, din punct de vedere practic, sunt ultrasunetele, adic sunetele a cror frecven este mai mare de 20 000 Hz.

Orientarea liliecilor, spre exemplu, se bazeaz pe faptul c acetia emit semnale ultrasonore scurte de frecvene ntre 30 60 kHz. Liliacul n zbor emite n medie cca. 30 semnale pe secund. O parte din acestea sunt recepionate de urechile mari ale liliacului sub form de semnale ecou, dup un timp cu att mai scurt cu ct obstacolul este mai aproape. Pe msura apropierii de obstacol liliacul emite din ce n ce mai multe semnale ntr-o secund ajungnd ca de exemplu la un metru de obstacol s emit pn la 60 semnale pe secund. Aceasta permite liliacului s simt precis poziia sa fa de obstacole.

Importana practic a ultrasunetelor este legat de lungimea de und mic a acestora. Din aceast cauz, de exemplu, ultrasunetele pot fi emise i se propag ca i razele de lumin sub form de fascicule, spre deosebire de sunetele obinuite care se mprtie n toate direciile. Astfel se constat experimental c dac lungimea undei emise este mai mic dect dimensiunile liniare ale sursei unda se va propaga n linie dreapt sub form de fascicul. n afar de aceasta, datorit lungimii de und mici, fenomenul de difracie (ocolirea obstacolelor) nu apare dect pentru obstacolele de dimensiuni foarte mici n timp ce sunetele obinuite ocolesc practic aproape orice obstacol ntlnit n cale.

Ultrasunetele sufer reflexia i refracia la suprafaa de separare a dou medii diferite la fel ca undele luminoase. Folosind acest fenomen au fost construite oglinzi concave sau lentile speciale care s concentreze ntr-un punct fascicule de ultrasunete.

Deoarece intensitatea undelor sonore este proporional cu ptratul frecvenei, energia transportat de ultrasunete este mult mai mare dect energia sunetelor de aceeai amplitudine. Pe de alt parte n cazul ultrasunetelor fenomenul de absorbie care apare la propagarea tuturor oscilaiilor elastice devine foarte important. Intensitatea undei elastice scade cu distana de la surs dup o lege exponenial I = I0 e-kr. Se poate arta att teoretic ct i experimental c k depinde att de caracteristicile mediului (densitate, vscozitate, cldur specific etc.) ct i de frecvena undei care se propag crescnd cu ptratul frecvenei. Din aceast cauz practic nu putem obine propagarea ultrasunetelor, de exemplu n aer, la o distan mai mare de un kilometru.

Mai mult, un ultrasunet de o frecven de cca. 3000 kHz este practic absorbit complet, la o distan de cca. 0,6 cm. n lichide coeficientul de absorbie este de 2-3 ordine de mrime mai mic dect n aer, iar n solide i mai mic, intensitatea ultrasunetelor fiind mult mai puin atenuat.

Un fenomen interesant care apare la propagarea ultrasunetelor n lichide este fenomenul de cavitaie care const n apariia unor bule care se ridic la suprafa i se sparg. Aceasta se explic prin faptul c dilatrile i comprimrile extrem de rapide care se succed n lichid duc la apariia unor mari tensiuni n anumite zone care fac s se rup moleculele de lichid. Astfel iau natere bulele care conin vaporii i gazele dizolvate n lichid. Bulele mici se contopesc n bule mai mari care ncep s vibreze i apoi se sparg dnd natere unor presiuni locale foarte mari care se manifest sub form de ocuri hidraulice n volume foarte mici. Deteriorarea paletelor turbinelor i a elicelor vapoarelor se explic prin fenomenul de cavitaie produs de ultrasunetele generate de vibraiilor mainilor.

1.1. Generarea ultrasunetelor

nainte de a discuta cteva din aplicaiile practice ale ultrasunetelor s vedem cum pot fi produse. Vom trece peste procedeele mecanice (fluier ultrasonor, sirena ultrasonor) i termice (cu ajutorul vibraiilor unui arc electric) deoarece ultrasunetele produse de acestea au n genere amplitudini mici i sunt mai puin importante practic. S analizm generatorul piezoelectric. Efectul piezoelectric const n faptul c supunnd un cristal la deformri de traciune sau comprimare dup anumite direcii, pe feele sale apar sarcini electrice egale de semne contrare care i schimb rolul dac nlocuim traciunea prin comprimare i invers. Exist i efectul piezoelectric invers sau electrostriciunea, pe care se bazeaz producerea ultrasunetelor, care const n dilatri i comprimri succesive ale cristalului sub aciunea unui cmp electric alternativ.Partea esenial a generatorului const dintr-o lam piezoelectric de obicei de cuar pe feele creia sunt aplicai doi electrozi, sub forma unor straturi subiri metalice, legai la o surs de tensiune alternativ. Sub aciunea cmpului electric alternativ lama ncepe s vibreze cu o frecven egal cu cea a tensiunii aplicate. Vibraiile lamei sunt transmise n mediul nconjurtor sub form de ultrasunete. Cu astfel de generatori se poate ajunge pn la frecvene de cca. 150 000 kHz i la intensiti ale radiaiei ultrasonore de la cteva zeci de wai pe cm2 pn la cteva sute de wai pe cm2.

Se pot produce ultrasunete i cu ajutorul efectului magnetostrictiv care const n deformarea corpurilor feromagnetice (fier, nichel, cobalt) sub aciunea unui cmp magnetic. Introducnd o bar dintr-un astfel de material (Ni) ntr-un cmp magnetic, paralel cu lungimea ei (produs de exemplu de o bobin n care e introdus bara), aceasta se scurteaz. Cnd cmpul magnetic variaz periodic (curentul care strbate bobina este periodic) bara se va scurta periodic. n cazul unor frecvene mari ale cmpului alternativ vibraiile capetelor barei dau natere la unde ultrasonore. Pentru a obine amplitudini mari se aleg dimensiunile barei astfel ca s avem rezonant ntre vibraiile elastice proprii i frecvena curentului alternativ excitator. Generatorul magnetostrictiv este avantajos pentru producerea ultrasunetelor de frecven joas (de la 20 60 kHz) i energii considerabile.1.2. Aplicatii ale ultrasunetelor

Datorit frecvenei mari i a energiei mari pe care o transport, ultrasunetele produc o serie de efecte fizico-chimice dintre care menionm : distrugerea strilor labile de echilibru; nclzirea mediului; formarea de sisteme disperse (emulsii i suspensii) i distrugerea de astfel de sisteme (coagulri); influenarea potenialelor electrochimice i a pasivitii metalelor; voalarea plcilor fotografice; creterea vitezei unor reacii chimice; explozia substanelor puin stabile (de exemplu iodura de azot) etc.

Proprietile ultrasunetelor permit folosirea lor ntr-o mare varietate de aplicaii practice.

Ultrasunetele produc nclzirea i redistribuirea substanei din celulele vii ceea ce duce la folosirea lor n terapeutic (nclzirea anumitor esuturi i masaje adnci) precum i la conservarea alimentelor (prin folosirea unor ultrasunete de frecven i intensitate potrivit care distrug microorganismele).

O alt aplicaie a ultrasunetelor este legat de msurarea adncimii mrilor. n esen procedeul este acelai ca i n cazul folosirii sunetelor obinuite, prezentnd ns avantajul fasciculelor dirijate. De asemenea se pot produce semnale foarte scurte ceea ce mrete precizia msurrii intervalului de timp dintre producerea semnalului direct i nregistrarea celui reflectat.

Ultrasunetele se folosesc n diferite procese tehnologice cum ar fi : splarea, curarea, uscarea sau sudarea unor corpuri i de asemenea pentru prelucrarea unor piese. n principiu, prelucrarea cu ajutorul ultrasunetelor const n urmtoarele : se introduce piesa (sau poriunea de pies) care trebuie prelucrat ntr-un lichid n care se gsesc n suspensie particule de praf abraziv dur. Sub aciunea unei surse de ultrasunete n lichid apare fenomenul de cavitaie. Datorit ocurilor hidraulice particulele de abraziv sunt lovite cu putere de suprafaa piesei smulgnd achii din aceasta. Pe acest principiu se bazeaz construirea unor maini unelte care s taie filetele i dinii pinioanelor fine, care rectific piese complicate, taie i guresc plci etc.

Dintre numeroasele aplicaii ale ultrasunetelor nu vom mai meniona dect defectoscopia ultrasonor. Controlul ultrasonor permite stabilirea existenei unor defecte (fisuri, goluri) n interiorul unor piese metalice masive. Principalele tipuri de defectoscoape ultrasonore utilizeaz transmisia sau reflexia.Fig. 1.1.:

n defectoscopul prin transmisie emitorul i receptorul de ultrasunete sunt situate de o parte i de alta a piesei de cercetat (Fig 1.1.). Dac ntre emitor i receptor nu exist nici un defect (de exemplu ntre sursa S1 i receptorul R1) semnalul ultrasonor transmis va trece neatenuat producnd o anumit deviaie a acului aparatului de nregistrare (A1). n cazul n care ntlnete un gol (D) o parte a semnalului ultrasonor este reflectat pe suprafaa de separare dintre metal i aerul din golul respectiv i semnalul este mult atenuat ceea ce se va observe la aparatul indicator (A2). Dispozitivul folosit practic are o singur pereche emitor-receptor care este plimbat n lungul piesei de cercetat. Aceast metod are dou incoveniente : n primul rnd ultrasunetele propagndu-se prin pies se reflect pe feele opuse ale acesteia ngreunnd observarea defectelor; n al doilea rnd acest procedeu nu permite stabilirea adncimii la care se gsesc defectele.

Fig. 1.2.a) Fig. 1.2.b)

Aceste incoveniente sunt n bun msur eliminate de defectoscoapele prin reflexie (sau n impulsuri). La acestea emitorul i receptorul sunt situate de aceeai parte a piesei unul lng altul (Fig. 1.2.a). Ultrasunetele se propag prin pies, ajung la faa opus unde sunt reflectate i apoi revin la receptor. Dac n pies exist un defect, semnalul ultrasonor se va reflecta de acesta i va ajunge mai devreme la receptor dect cel reflectat de faa opus. Emitorul genereaz impulsuri scurte la intervale lungi constante care mpreun cu semnalul reflectat sunt marcate pe ecranul unui oscilograf. n Fig. 1.2.b prin 1 i 3 am indicat locurile unde spotul luminos are devieri brute care marcheaz momentele n care a fost emis semnalul ultrasonor i respectiv n care a fost receptat semnalul reflectat de faa opus. Prin 2 am indicat locul unde este indicat primirea unui semnal reflectat de un defect. Poziia relativ a acestuia n raport cu 1 i 3 ne permite s determinm adncimea la care se gsete defectul.Capitolul II Microcontrolerul PIC16F873

Fig. 2.1.CARACTERISTICI:

are 28 de pini

4 k memorie program flash (14-bit words)

frecvena de operare: 20MHz

reset (i delays): POR, BOR (PWRT, OST)

192 bytes memorie de date

128 bytes memorie de date EEPROM

13 ntreruperi

Porturi I/O:

port A 6 pini

port B 8 pini

port C 8 pini

Timer-e: 3

Module PWM: 2

Comunicaii seriale: MSSP, USART

Comunicatii paralele nu are.

Modul analog digital pe 10 bii cu 5 canale de intrare.Are 35 de instruciuni.2.1. Diagrama Bloc pentru PIC16F873

Fig. 2.2.Descrierea pinilor

Numele pinuluiNr. PinTipul I/O/PTip bufferDescriere

OSC1/CLKIN9IST/CMOSOscilator cristal la intrare / surs ceas extern intrare

OSC2/CLKOUT10O-Oscilator cristal ieire. n modul RC, pinul de ieire OSC2 CLKOUT are din frecvena lui OSC1, i indic rata ciclului de instruciuni.

/VPP1I/PSTMaster clear reset sau intrarea tensiunii programate.

RA0/AN02I/OTTLPin al portului bi-direcional I/O PORTA; analog input0

RA1/AN13I/OTTLPin al portului bi-direcional I/O PORTA; analog input1

RA2/AN2/VREF-4I/OTTLPin al portului bi-direcional I/O PORTA; analog input2 sau tensiune de referin analog negativ

RA3/AN3/VREF+5I/OTTLPin al portului bi-direcional I/O PORTA; analog input3 sau tensiune de referin analog pozitiv

RA4/T0CKI6I/OSTPin al portului bi-direcional I/O PORTA; Poate fi ceas de intrare pentru modulul Timer0.

RA5/ /AN47I/OTTLPin al portului bi-direcional I/O PORTA; analog input4 sau slave select pentru portul serial sincronic

RB0/INT21TTL/STPin al portului bi-direcional I/O PORTB; intrerupere extern

RB122I/OTTLPin al portului bi-direcional I/O PORTB;

RB223I/OTTLPin al portului bi-direcional I/O PORTB;

RB3/PGM24I/OTTLPin al portului bi-direcional I/O PORTB; Pin de intrare a tensiunii reduse

RB425I/OTTLPin al portului bi-direcional I/O PORTB; Intrerupere

RB526I/OTTLPin al portului bi-direcional I/O PORTB; Intrerupere

RB6/PGC27I/OTTL/STPin al portului bi-direcional I/O PORTB; Intrerupere;clock programat serial

RB7/PGD28I/OTTL/STPin al portului bi-direcional I/O PORTB; Intrerupere; date programate serial

RC0/T1OSO/T1CKI11I/OSTPin al portului bi-direcional I/O PORTC; timer1 oscilator ieire i timer1 ceas intrare

RC1/T1OSO/CCP212I/OSTPin al portului bi-direcional I/O PORTC; capture2input/compare2 output/ PWM2 output

RC2/CCP113I/OSTPin al portului bi-direcional I/O PORTC; Timer1 oscilator input sau capture1 input/compare1 output/ PWM1output

RC3/SCK/SCL14I/OSTPin al portului bi-directional I/O PORTC; Ceas serial sincron I/O pentru modurile SPI i I2C

RC4/SDI/SDA15I/OSTPin al portului bi-direcional I/O PORTC; Poate fi SPI Data In sau Data I/O

RC5/SDO16I/OSTPin al portului bi-direcional I/O PORTC; poate fi SPI data out

RC6/TX/CK17I/OSTPin al portului bi-direcional I/O PORTC; poate fi transmitorul asincron USART sau ceas sincron

RC7/RX/DT18I/OSTPin al portului bi-direcional I/O PORTC; poate fi receptorul asincron USART sau date sincron

VSS8,19P-Alimentare de joas tensiune pentru pinii logici i de I/O

VDD20P-Alimentarea pozitiv pentru pinii logici i de I/O

Tabel 2.1.2.2. Organizarea memorieiExista trei blocuri de memorie: memoria program, memoria de date si memoria de date EEPROM.

Organizarea memoriei program:

Pic16F873 are un contor de 13 bii, capabil sa adreseze 8k x 14 spaiu de memorie programabil.

Vectorul reset se afl la adresa 0000h i vectorul intrerupere la adresa 0004h.

Schema memoriei program:

Fig. 2.3.Organizarea memoriei de date:

Memoria de date este mprit n mai multe bank-uri ce conin regitrii cu scopuri generale (GPR) i regitrii cu funcii speciale (SFR). Biii RP1 (STATUS ) i RP0 (STATUS ) sunt biii selectai ai bank-ului.Tabel 2.2.Fiecare bank se ntinde pn la 7Fh (128 de bytes). Locaia cea mai joas a fiecrui bank este rezervat pentru regitrii cu funcii speciale. Deasupra acestor regitrii se gsesc regitrii cu scopuri generale, implementai ca RAM static. Toate bank-urile implementate conin regitrii cu funcii speciale. Cei mai frecvent folosii registrii cu funcii speciale se regsesc sub acelai nume i n cel de-al doilea bank.

Fiierul regitrilor cu funcii speciale

Acest fiier poate fi accesat direct sau indirect prin FSR.

Tabel 2.3.Registrii cu funcii speciale

Registrii cu functii speciale sunt registrii folositi de CPU si modulele periferice pentru controlul operatiilor dorite ale dispozitivului. Acesti registrii sunt implementati ca RAM static.

Acesti registrii sunt dati in tabelul de mai jos:

Tabel 2.4.

Registrii cu funcii speciale pot fi clasificai n dou categorii: interni (CPU) i externi.

Registrul STATUS

Acest registru conine situaia aritmetic a unitii logico aritmetice (ALU), starea de reset i biii selectai ai bank-ului pentru memoria de date.

Registrul STATUS poate fi destinaie pentru orice intruciune, la fel ca orice alt registru. Dac registrul STATUS este destinaie pentru o instruciune ce afecteaz biii Z, DC sau C, atunci scrierea pe aceti trei bii este invalid. Aceti bii sunt setai sau teri n funcie de dispozitivul logic. Mai mult, biii i nu pot fi scrisi, de aceea, rezultatul unei instruciuni cu registrul STATUS ca destinaie poate fi diferit dect ne ateptam. De exemplu, CLRF STATUS va sterge cei trei bii superiori i va seta bitul Z. Acest lucru las registrul STATUS ca 000u u1uu ( unde u= neschimbat).

Este recomandat, de aceea, ca doar instruciunile BCF, BSF, SWAPF i MOVWF s fie folosite pentru scrierea registrului STATUS, pentru c aceste instruciuni nu afecteaz biii Z, C sau DC din registrul STATUS.

IRP Register Bank Select bit (folosit pentru adresarea indirect)

RP1 i RP0 - Register Bank Select bits (folosii pentru adresarea direct)

- bitul time-out

- bitul power-down

Z- bitul zero

DC bitul digit de transport / mprumut (instruciuni: ADDWF, ADDLW, SUBLW, SUBWF)

C - bitul transport/ mprumut (instruciuni: ADDWF, ADDLW, SUBLW, SUBWF)

Registrul OPTION_REG

Registrul OPTION_REG poate fi scris i citit, i conine numeroi bii de control pentru a configura TMR0 prescaler / WDT postscaler, ntreruperile exterioare INT, TMR0.

Registrul INTCON

Acest registru poate fi scris i citit.

Registrul PIE1

Acest registru conine bii individuali ce sunt permii pentru ntreruperile externe.

Registrul PIR1

Acest registru conine biii flag-urilor individuale pentru ntreruperile exterioare.

Registrul PIE2

Acest registru conine biii individuali ce sunt permii pentru ntreruperile externe CCP2, ntreruperile SSP i ntreruperile operaiei de scriere a EEPROM.

Registrul PIR2

Acest registru conine bitii flag-urilor pentru ntreruperile CCP2, SSP i ntreruperile operaiei de scriere EEPROM.

Registrul PCON

Registrul power control permite o diferentiere ntre Power on Reset (POR), Brown out Reset, Watchdog Reset (WDT) i un Reset extern.

PCL i PCLATH

Contorul program (PC) are o laime de 13 bii. Bitul de jos vine de la registrul PCL, care este un registru ce poate fi scris. Biii superiori (PC) nu pot fi citii, dar pot fi scrisi indirect prin registrul PCLATH. Pe orice RESET, biii superiori ai PC-ului vor fi teri. Figura 2-5 arat dou situaii de ncarcare a PC-ului. Primul exemplu din figur (cel de sus) arat cum PC-ul este ncrcat la scriere de PCL. Exemplu de jos arat cum contorul program este ncarcat n timpul unei instruciuni de tipul CALL sau GOTO.Fig. 2.4.Instruciunea GOTO

Aceast instruciune este realizat prin adugarea unui ofset contorului unui program (ADDWF PCL). Cnd se face o citire de tabel folosind metoda instruciunii GOTO, are grij s exerseze dac locaia tabelei se ntretaie cu grania memoriei PCL (fiecare bloc are 256 byte).

Stiva

Familia picurilor 16f87x are o stiv formata pe 8 nivele i o lime de 13 bii. Spaiul stivei nu face parte din program sau din spaiul de date i pointerul stivei nu poate fi citit sau scris. Contorul program este mpins spre rezultatul executrii instruciunii RETURN, RETLW sau RETFIE. PCLATH nu este afectat de operaiile PUSH sau POP.

Stiva se desfoar ca un buffer circular. Acest lucru nseamn c dup ce stiva a fost supus aciunii PUSH de 8 ori, a noua oar rescrie valoarea ce a fost stocat de prima mpingere (push). A 10-a impingere rescrie valoarea celei de-a doua operaii de mpingere i aa mai departe.

Paginarea memoriei program

Toate dispozitivele pic16f87x sunt capabile s adreseze un bloc de cuvinte de 8K de memorie program. Instruciunile CALL i GOTO necesit doar 11 bii de adres pentru a permite ramificarea pan la 2K de memorie program. La executarea instruciunilor CALL sau GOTO, cei mai de sus 2 bii ai adresei sunt prevzui de PCLATH. La execuia instruciunilor CALL i GOTO, utilizatorul trebuie s se asigure c pagina cu biii selectai sunt programati astfel nct pagina memoriei program dorit este adresat. Dac o ntoarcere dintr-o instruciune CALL (sau ntrerupere) este executat, toi ce 13 bii ai contorului program sunt mpini n afara stivei. Pentru aceasta, manipularea biilor PCLATH nu este indicat pentru instruciunile de ntoarcere.

Exemplul 2-1arat apelarea unei subrutine n pagina 1 a memoriei program. Acest exemplu presupune c PCLATH este salvat i reconstituit de rutina nterrupt Service (dac ntreruperile sunt folosite).

Tabel 2.5.Adresarea indirect, regitrii INDF i FSR

Registrul INDF nu este un registru fizic. Adresarea registrului INDF reprezint adresarea indirect.

Adresarea indirect este posibil folosind registrul INDF. Orice instruciune folosit de acest registru acceseaz registrul aratat de FSR. Dac acest registru se citete singur, indirect FSR=0 va citi 00h. Scrierea indirect n acest registru nu are drept rezultat nicio operaie (dar biii status vor fi afectai). O adres efectiv de 9 bii este obinut prin concatenarea registrului FSR de 8 bii i de bitul IRP (STATUS), cum se arata n figur.Fig. 2.5.Urmatoarea secven reprezint un simplu program de stergere a locaiilor RAM (20h 2Fh) folosind adresarea indirect.

Tabel 2.6.2.3. Porturile I/OUnii pini destinai ca porturi I/O mai au i unele funcii suplimentare. n general, cnd un periferic este pornit, acel pin nu poate fi folosit ca pin de I/O.

Registrul PORTA i TRISA

PORTA are o lime de 6 bii i este un port bi-direcional. Registrul direcional de date corespondent este TRISA. Setarea unui bit din TRISA (=1) va face ca pinul corespondent din PORTA s fie intrare. tergerea unui bit din TRISA (=0) va face ca pinul corespondent din PORTA s fie ieire.

Citind registrul PORTA citim starea pinilor, n timp ce scrierea n el se face prin port latch. Toate operaiile de scriere sunt operaii citire-modificare-scriere. Pentru aceasta, o scriere ntr-un port implic faptul c pinii portului sunt citii, valoarea este modificat i apoi se scrie n portul data latch.

Pinul RA4 are i o funcie adiional TOCKI. Acest pin este o intrare Schmitt Trigger i o ieire open drain. Toi ceilali pini ai PORTA au nivele de intrare TTL i mai multe dispozitive de ieire CMOS.

Ali pini din PORTA au funcii adiionale de intrri analogice i intrri analogice VREF. Operaia fiecrui pin este selectat prin tergerea/setarea biilor de control din registrul ADCON1.

Registrul TRISA controoleaz direcia pinilor RA, chiar i atunci cnd ei sunt folosii ca intrri analogice. Utilizatorul trebuie s se asigure ca biii din registrul TRISA sunt meninuti setai cnd i folosim ca intrri analogice.Tabel 2.7.Registrii PORTB i TRISB

PORTB are o laime de 8 bii i este un port bidirecional. Registrul direcional de date corespondent este TRISB. Setarea unui bit din TRISB (=1) va face ca pinul corespondent din PORTB s fie intrare. tergerea unui bit din TRISB (=0) va face ca pinul corespondent din PORTB s fie ieire.

Trei pini ai PORTB au funcii adiionale: RB3/PGM, RB6/PGC i RB7/PGD. Patru dintre pinii PORTB, RB7:RB4 au funcii de ntreruperi. Doar pinii configurai ca intrri pot produce aceste ntreruperi. Pinii de intrare sunt comparati cu vechile valori nregistrate la ultima citire a PORTB.

Regitrii asociai cu PORTB

Tabel 2.8.Registrul PORTC i TRISC

PORTC este un port bi-direcional cu o laime de 8 bii. Registrul direcional de date corespondent este TRISC. Setarea bitului TRISC(=1) va face ca corespondentul pinului din PORTC s fie intrare. tergerea unui bit din TRISC (=0) va face corespondentul pinului din PORTC s fie ieire.

PORTC mai are i cteva funcii externe. Pinii PORTC au buffere de intrare Schmitt Trigger.

Cand modulul I2C este activat, pinii PORTC pot fi configurai cu nivele normale I2C, sau cu nivele SMB folosind bitul CKE (SSPSTAT).

Cnd funciile externe sunt activate, trebuie s se aibe grij n definirea biilor TRISC pentru fiecare pin din PORTC. Unele din aceste funcii nu in seama de bitul din TRISC i fac pinul ieire, n timp ce alte funcii in seama de bitul din TRISC i fac pinul intrare.

Regitrii asociati cu PORTC

Tabel 2.9.Registrii PORTD i TRISD

PORTD i TRISD nu sunt implementai.

PORTD este un port pe 8 bii cu buffere de intrare Schimitt Trigger. Fiecare pin este configurat individual ca intrare sau ieire.

PORTD poate fi configurat ca un port de microprocesor cu o lime de 8 bii (portul slave paralel) prin setarea bitului de control PSPMODE (TRISE). n acest mod, bufferii de intrare sunt TTL.

Funciile PORTD

Tabe. 2.10.Regitrii asociai cu PORTD

Tabel 2.11.Regitrii PORTE si TRISE

PORTE i TRISE nu sunt implementai.

PORTE are trei pini (RE0//AN5, RE1//AN6 i RE2//AN7) care sunt configurai individual ca intrri sau ieiri. Aceti pini au bufferi de intrare Schmitt Trigger.

Pinii PORTE devin intrri de control I/O pentru port cnd PSMODE (TRISE) este setat. n acest mod, utilizatorul trebuie s fie sigur c biii TRISE sunt setai i acei pini s fie configurai ca intrri digitale. De asemenea, trebuie s se asigure c ADCON1 este setat ca I/O. n acest mod, bufferii de intrare sunt TLL.

Registrul TRISE controleaz de asemenea operaiile portului slave paralel.

Pinii PORTE au intrri analogice. Cnd aceti pini au fost selectai ca intrri analogice, ei vor fi citii ca 0.

TRISE deine controlul pinilor RE, chiar i atunci cnd ei au fost folosii ca intrri analogice. Utilizatorul trebuie s pstreze pinii configurai ca intrri atunci cnd sunt folosii ca intrri analogice.

Regitrii asociai PORTE

Tabel 2.12.Registrul TRISE

Tabel 2.13.Portul slave paralel

Portul slave paralel (PSP) nu este implemetat.

POTRD lucreaz ca port slave paralel cu o laime de 8 bii sau ca port al microprocesorului, cnd bitul de control PSPMODE (TRISE) este setat. n modul slave, scrierea i citirea nu este sincronizat i este facut de pinii de intrare de control , RE0/ i .

Portul slave paralel poate lucra cu magistrala de date a microprocesorului de 8 bii. Microprocesorul extern poate citi sau scrie latch-ul PORTD ca un latch de 8 bii. Setarea bitului PSPMODE activeaz pinii portului RE0/ s fie intrare , RE1/ s fie intrare i RE2/ s fie intrri (chip select). Pentru aceste funcionaliti, biii direcionali de date corespunztori registrului TRISE (TRISE) trebuie s fie setai ca ieiri. Biii de configurare ai portului A/D PCFG3:PCFG0 (ADCON!) trebuie s configureze pinii RE2:RE0 ca pini digitali I/O.

Exist dou latch-uri de 8 bii: unul pentru ieirile datelor i altul pentru intrrile datelor. Utilizatorul trebuie s scrie cei 8 bii de date ai latch-ului din PORTD i s citeasc datele din pinul portului (dac au aceeai adres). n acest mod, registrul TRISD este ignorat, pn cnd dispozitivul extern controleaza direcia rezultatelor datelor.

Scrierea portului slave paralel se face cnd ambele linii i sunt prima dat detectate ca nivel low. Cnd una din liniile i devin linii de nivel nalt bitul IBF (Input Buffer Full) este setat de ciclul ceasului Q4, ce urmeaz dup ciclul Q2, pentru a semnaliza scrierea complet. OBF rmne de nivel low pn cnd datele sunt scrise n PORTD de utilizator.

Cnd nu mai suntem n modul PSP, biii IBF i OBF sunt teri. Oricum, dac bitul de flag IBOV a fost setat mai nainte, va fi ters n firmware.

O intrerupere este generat i stocat n bitul PSPIF cnd o operaie de scriere sau citire a fost efectuat complet. PSPIF trebuie s fie ters de utilizator n firmware i ntreruperea poate fi dezactivat prin tergerea bitului de ntrerupere activat PSPIE (PIE1).

Regitrii asociai cu portul slave paralel

Tabel 2.14.2.4. Memoria EEPROM i memoria program FlashMemoria EEPROM i memoria program Flash poate fi citit i scrisa n timpul unei operaii normale pe ntreaga raz de aciune a VDD. Aceste operaii iau locul unui singur byte din memoria EEPROM i un singur cuvnt pentru memoria program. O operaie de scriere provoac o operaie de tipul tergere-apoi-scriere i ia locul unui byte sau cuvnt oarecare. Mai multe operaii de tergere nu pot fi fcute n codul utilizatorului.

Accesarea memoriei program ti permite s verifici mrimea acestora. Valorile scrise in memoria program nu trebuie s fie instruciuni valide. Altfel, mai multe numere de 14 bii pot fi scrise n memorie pentru folosirea lor ca parametrii de calibrare, numere seriale, etc. Executarea locaiei memoriei program ce conine date dintr-o instruciune invalid rezult din execuia instruciunii NOP.

Memoria de date EEPROM este evaluat pentru ciclurile de tergere/scriere. Memoria program FLASH este evaluat i mai jos deoarece memoria EEPROM poate fi folosit pentru a stoca frecvent valorile evaluate. Timerul unui chip controloaz timpul de scriere i va varia n funcie de tensiune i temperatur, variind de la chip la chip.

Scrierea unui byte sau un cuvnt va sterge automat locaia i va scrie nou valoare (tergere nainte de scriere). Scrierea n memoria EEPROM nu are nici o influen asupra operaiei procedeului. Scrierea n memoria program va nceta execuia instruciunilor pn cnd scrierea este complet. Memoria program nu poate fi accesat n timpul scrierii. n timpul operaiei de scriere, oscilatorul continu s ruleze, echipamentele periferice continu s funcioneze i rezultatele ntreruperilor i principalele aciuni ce vor fi executate vor fi detectate pn cnd scrierea este complet. Cnd scrierea a fost fcut, urmtoarea instruciune din pipeline este executat i ramura din vectorul de ntreruperi i va lua locul, dac ntreruperea este activat i va fi executat n timpul scrierii.

Accesul citirii i scrierii la ambele memorii va avea loc indirect printr-un set de regitrii cu funcii speciale. Cei ase regitrii cu funcii speciale sunt:

EEDATA

EEDATH

EEADR

EEADRH

EECON!

EECON2

Memoria EEPROM permite citirea byte-ilor i operaiile de scriere fr a se interfera cu operaia normal a microcontrolerului. Cnd se interfereaz cu memoria de date EEPROM, registrul EEADR nregistreaz adresa pentru a fi accesat. n funcie de operaie, registrul EEDATA reine datele pentru a fi scrise, sau citite, la adresa din registrul EEADR. Dispozitivul PIC16F873 are 128 bytes de memorie de date EEPROM i de aceea, necesit ca MSb din registrul EEADR s rmn ters.

Memoria program FLASH permite accesul la citire non-intrusiv, dar operaiile de scriere face ca dispozitivul s se opreasc din executarea instruciunilor, pn cnd scrierea este complet.

Atunci cnd interfereaz cu memoria program, regitrii EEADRH:EEADR formeaz un cuvnt de 2 bytes, care nregistreaz al 13lea bit de adres a locaiei de memorie ce va fi accesat. Registrul ce se formeaz din combinaia celor doi reine al 14-lea bit de date pentru scriere, sau reflect valoarea memoriei program dup o operaie de scriere. La fel ca i la accesarea memoriei de date EEPROM, valoarea regitrilor EEADRH:EEADR trebuie s fie ntre 0000h i 1FFFh pentru PIC16F873.

Regitrii EECON1 i EECON2

Registrul EECON1 este un registru de control pentru configurarea i iniializarea accesului. Registrul EECON2 nu este un registru implementat fizic, dar este exclusiv folosit n secvena de scriere a memoriei pentru a evita scrierea accidental.

Exist mai muli bii pentru controlul operaiilor de scriere sau citire n memoria de date EEPROM i memoria de program FLASH. Bitul EEPGD determin dac accesul va fi fcut la memoria de date sau la memoria program. Cnd este ters, orice operaie ce urmeaz se va putea executa n memoria de date EEPROM. Cnd este setat, operaiile urmtoare vor fi efectuate n memoria program.

Operaiile de citire folosesc doar un singur bit adiional, RD, care va iniia operaia de citire de pe locaia de memorie dorit. Odat ce acest bit a fost setat, valoarea locaiei de memorie dorit va fi disponibil n regitrii de date. Acest bit nu poate fi ters prin firmware. Este ters automat la sfritul operaiei de citire. Pentru citirea memoriei de date EEPROM, datele vor fi disponibile n registrul EEDATA n urmtorul ciclu de instruciuni ce va urma dup ce bitul RD este setat. Pentru citirea memoriei program, datele vor fi ncrcate n regitrii EEDATH:EEDATA, urmtor celei de a doua instruciune ce urmeaz dup ce bitul RD este setat.

Operaiile de scriere au doi bii de control, WR i WREN, i doi bii de stare, WRERR i EEIF. Bitul WREN este folosit pentru activarea sau dezactivarea operaiei de scriere. Cnd acest bit este ters, operaia de scriere va fi dezactivat. Pentru aceasta, bitul WREN trebuie setat naintea executrii operaiei de scriere. Bitul WR este folosit pentru iniializarea operaiei de scriere. De asemenea este ters automat la sfritul operaiei de scriere flagul de ntreruperi EEIF pentru a stabili sfritul operaiei de scriere a memoriei. Acest flag trebuie ters n scrierea programului nainte ca bitul WR s fie setat. Pentru memoria de date EEPROM, odat ce bitul WREN i bitul WR au fost setai, adresa memoriei dorite din EEADR va fi stears, urmat de scrierea datelor n EEDATA. Aceast operaie are loc n paralel cu execuia normal a microprocesorului. Cnd scrierea este complet, bitul EEIF va fi setat. Pentru memoria program, microcontrolerul va nceta s execute operaiile. Locaiile de memorie ce au fost nregistrate n EEADRH:EEADR vor fi terse. Apoi, valoarea datei din EEDATH:EEDATA vor fi programate. Dup terminarea acestei operaii, bitul EEIF va fi setat i microcontrolerul va continua s execute codul.

Bitul WRERR este folosit pentru a indica cnd picul a fost resetat n timpul operaiei de scriere. Bitul WRERR trebuie s fie ters dup Power-on Reset. Dup accea, trebuie s se verifice orice alt aciune de reset. Bitul WRERR este setat cnd operaia de scriere a fost ntrerupt de MCLR Reset, sau de WDT Time-out Reset, n timpul unei operaii normale.

n aceste situaii, dup aciunea de reset, utilizatorul trebuie s verifice bitul WRERR i s rescrie locaia de memorie, dac este setat. Coninutul regitrilor de date, regitrii de adres i bitul EEPGD nu sunt influenai nici de MCLR Reset, sau de WDT Time-out Reset, n timpul unei operaii normale.Registrul EECON1

Tabel 2.15.Bit 7 - bitul de selecie program/data EEPROM: EEPGD

1 = accesarea memoriei program

2 = accesarea memoriei de date

(Acest bit nu poate fi schimbat n timpul unei operaii de citire sau scriere).

Biii 6-4 neimplementai: se citesc 0

Bit 3 bitul de eroare WRERR

1 = o operaie de scriere este terminat mai devreme

0 = operaia de scriere s-a ncheiat

Bit 2 WREN bitul de activare a scrierii

1 = permite ciclurile de scriere

0 = intezice scrierea n EEPROM

Bit 1 WR bitul control de scriere

1 = iniiaz ciclul de scriere

0 = ciclul de scriere n EEPROM este complet

Bit 0 RD bitul control de citire

1 = iniiaz citirea memoriei EEPROM

0 = nu initiaz citirea memoriei EEPROM

Citirea memoriei de date EEPROM

Citirea memoriei de date EEPROM este necesar doar atunci cnd adresa dorit de acces a fost scris n registrul EEADR i ters bitul EEPGD. Dup ce bitul RD a fost setat, datele vor fi disponibile n registrul EEDATA n ciclul de instruciuni ce urmeaz imediat. EEDATA va menine aceste valori pn cnd o alt operaie de citire este initializat sau pan cnd este scris de firmware.

Paii de citire a memoriei de date EEPROM sunt:

1. scrie adresa n EEDATA. Adresa nu trebuie s fie mai mare dect mrimea memoriei PIC16F873

2. terge bitul EEPGD pentru a arta spre memoria de date EEPROM

3. Seteaz bitul RD pentru a ncepe operaia de citire.

4. Citete date din registrul EEDATA.

Exemplu de citire a memoriei de date EEPROM:

Tabel 2.16.Scrierea n memoria de date EEPROM

Scrierea n memoria de date EEPROM se face prin mai muli pai. Adresa i valoarea datelor trebuie scrise n SFR. Bitul EEPGD trebuie ters, i bitul WREN trebuie setat, pentru activarea operaiei de scriere. Bitul WREN trebuie pstrat ters n tot timpul, cu excepia scrierii n memoria de date EEPROM. Bitul WR poate fi doar setat dac bitul WREN a fost setat ntr-o operaie anterioar; cei doi bii nu pot fi setai n aceeai operaie. Bitul WREN trebuie apoi ters prin firmware dup scriere.

Scrierea memoriei de date EEPROM trebuie s se fac dup scrierea unei secvene speciale de instruciuni, ce impiedic operaiile de scriere accidentale. Aceasta este o secvena de cinci instruciuni care trebuie s fie executate far ntreruperi. Firmware trebuie s verifice ca o scriere s nu fie n evoluie, naintea nceperii unui alt ciclu.

Paii pentru scrierea memoriei de date EEPROM sunt:

1. dac pasul 10 nu este ndeplinit, verific bitul WR pentru a vedea dac o operaie de scriere este n evoluie;

2. scrie adresa n EEADR. Adresa scris nu trebuie s fie mai mare dect mrimea memoriei picului;

3. scrie valoarea celui de-al 8-lea bit de date pentru a fi programat n registrul EEDATA;

4. terge bitul EEPGD pentru a arta spre memoria de date EEPROM;

5. seteaz bitul WREN pentru a activa operaiile programului;

6. dezactiveaz ntreruperile (dac acestea sunt activate);

7. execut secvena special cu cele cinci instruciuni:

- scrie 55h n EECON2 n doi pai (primul n W, apoi n EECON2)

- scrie Aah n EECON2 n doi pai (primul n W, apoi n EECON2);

8. activeaz ntreruperile (dac sunt folosite);

9. terge bitul WREN pentru a dezactiva operaiile programului;

10. dup ndeplinirea ciclului de scriere, bitul WR este ters i bitul flagului de ntreruperi EEIF este setat. Dac pasul 1 nu este ndeplinit, atunci firmware va trebui s verifice daca EEIF a fost setat, sau WR a fost sters, pentru a arta sfritul ciclului programului.

Scrierea memoriei EEPROM

Tabel 2.17.Citirea memoriei program FLASH

Citirea memoriei program FLASH este aproximativ la fel ca la memoria de date EEPROM, i doar dou instruciuni NOP trebuie inserate dup ce bitul RD este setat. Aceste dou cicluri de instructiuni pe care instructiunile NOP le execut, vor fi folosite de microcontroler pentru a citi datele din afara memoriei program i pentru a insera valoarea n regitrii EEDATH:EEDATA. Datele vor fi disponibile imediat dup cea de-a doua instruciune NOP. EEDATH i EEDATA vor pstra valorile pn cnd o alt operaie de citire este initializat, sau pn cnd aceti regitrii sunt scrii prin firmware.

Paii pentru citirea memoriei program FLASH sunt:

1. Scrie adresa n EEADRH:EEADR. Adresa nu trebuie s fie mai mare dect adresa memoriei picului;

2. Seteaz bitul EEPGD pentru a arta spre memoria program FLASH;

3. Seteaz bitul RD pentru a ncepe operaia de citire;

4. Execut dou instruciuni NOP pentru a permite microcontrolerului s citeasc datele din afara memoriei program;

5. Citete datele din regitrii EEDATH:EEDATA.Exemplu de citire a memoriei program FLASH

Tabel 2.18.Scrierea n memoria program FLASH

Scrierea n memoria program FLASH este unic, n sensul c microcontrolerul nu execut instruciunile n timp ce programarea are loc. Oscilatorul i toate perifericele continu s funcioneze, la fel i ntreruperile, dac sunt activate. Odat ce operaia de scriere este complet, procesorul ncepe s execute codul. O alt diferen important la scrierea memoriei FLASH este c bitul de configurare WRT, cnd este ters, mpiedic orice scriere n memoria program.

La fel ca i la memoria de date EEPROM, scrierea memoriei FLASH se face n mai muli pai. Adresa i valorile de date trebuie scrise n SFR. Bitul EEPGD i bitul WREN trebuie setai pentru a activa scrierea. Bitul WREN trbuie s fie ntotdeauna meninut ters, cu excepia scrierii n memoria program FLASH. Bitul WR poate fi setat doar dac bitul WREN a fost setat ntr-o operaie anterioar; cei doi bii nu pot s fie setai n aceeai operaie. Bitul WREN trebuie apoi ters prin firmware dup scriere. tergerea bitului WREN nainte ca scrierea s fie complet va face ca scrierea n evoluie sa nu poat fi terminat.

Scrierea n memoria program trebuie s se fac imediat dup o secvena special de instruciuni care evit operaiile de scriere accidental. Aceasta este o secvent de cinci instruciuni care trebuie executate fr ntreruperi pentru fiecare byte scris. Aceste instruciuni trebuie s fie urmate de cele dou instruciuni NOP pentru a permite microcontrolerului s seteze operaia de scriere. Odat ce scrierea este complet, execuia instruciunilor ncepe cu instruciunea ce se gasete dup cea de-a doua instruciune NOP.

Pasii pentru scrierea n memoria program sunt:

1. Scrie adresa n EEADRH:EEADR. Adresa nu trebuie s fie mai mare dect marimea memoriei picului.

2. Scrie valoarea datei de la bitul 14 pentru a fi programat n registrii EEDATH:EEDATA.

3. Seteaz bitul EEPGD pentru a fi ndreptat spre memoria program FLASH.

4. Seteaz bitul WREN pentru a activa operaiile programului.

5. Dezactiveaz intreruperile (dac sunt activate).

6. Execut secvena special cu cele cinci instruciuni:

- scrie 55h n EECON2 n doi pai (primul n W, apoi n EECON2)

- scrie Aah n EECON 2 n doi pai (primul n W, apoi n EECON2)

- seteaz bitul WR

7. Execut cele dou instruciuni NOP pentru a permite microcontrolerului s seteze operaia de scriere.

8. Activeaz ntreruperile (dac sunt folosite)

9. Sterge bitul WREN pentru dezactivarea operaiilor programului.

La indeplinirea ciclului de scriere, bitul WR este ters i bitul EEIF este setat. Deoarece microcontrolerul nu execut instruciunile n timpul ciclului de scriere, firmware nu trebuie neaparat s verifice biii EEIF sau WR, pentru a determina dac scrierea a fost terminat.

Exemplu: scrierea memoriei FLASH

Tabel 2.19.Verificarea scrierii

PIC16F873 nu verific automat valorile scrise n timpul operaiei de scriere. n funcie de aplicaie, bunii programatori pot comanda ca valoarea scris n memorie sa fie verificat n funcie de valoarea original. Acest lucru trebuie folosit n aplicaiile n care scrierea excesiv poate fora biii din apropierea limitelor specificate suportate.

Protecia mpotriva scrierii false

Exist condiii cnd dispozitivul nu vrea s scrie n memoria de date EEPROM sau memoria program FLASH. Pentru a proteja mpotriva acestor condiii de scriere fals, mai multe mecanisme au fost construite n dispozitiv.

Secvena de iniiere a scrierii mpreuna cu bitul WREN ajut la prevenirea oricror scrieri accidentale din timpul proastei funcionari a firmware.

Operaia de scriere i citire n timp ce exist un cod de protecie

PIC16F873 are dou mecanisme de cod de protecie, un bit pentru memoria de date EEPROM i doi bii pentru memoria program FLASH. Datele pot fi citite i scrise n memoria de date EEPROM, far s in cont de starea bitului codului de protecie, CPD. Cnd codul de protecie este activat i CPD sters, accesul extern prin ICSP este dezactivat, far a ine cont de starea biilor codului de proectie din memoria program. Acest lucru mpiedic citirea coninutului memoriei de date EEPROM din afara dispozitivului.

Starea biilor codului de protecie din memoria program, CP0 i CP1, nu afecteaz execuia instruciunilor din afara memoriei program. Echipamentele picului 16F873 pot citi ntotdeauna valorile din memoria program, far s ina cont de starea biilor codului de protecie. Oricum, starea acestor bii i bitul WRT au influene diferite asupra scrierii memoriei program.

Odat ce codul de protecie a fost activat pentru memoria EEPROM sau FLASH, doar o stergere a intregului echipament poate dezactiva codul de protectie.

Protecia de scriere pentru memoria program FLASH

Cuvntul de configuraie conine un bit de scriere ce protejeaz memoria FLASH, numit WRT. Acest bit poate fi accesat cnd programarea picului 16F873 se face prin ICSP. Odat ce protecia de scriere este activat, doar o tergere a ntregului dispozitiv poate dezactiva protecia. Cnd este activat, protecia la scriere mpiedic orice scriere n memoria FLASH. Protecia la scriere nu afecteaza citirea memoriei program.2.5. Modulul TIMER0Acest modul timer/contor are urmatoarele caracteristici:

un contor de tmp pe 8 bii

poate fi scris sau ters

un prescaler programabil de 8 bii

posibilitatea de a alege un ceas intern sau extern

Modul timer este selectat prin tergerea bitului T0CS (OPTIO_REG). n modul timer, modulul TIMER0 va incrementa orice ciclu de instruciuni (far prescaler). Dac registrul TMR0 este scris, incrementarea este oprit pentru urmtoarele dou cicluri de instruciuni.

Modul counter este selectat prin setarea bitului T0CS(OPTION_REG). n modul counter, Timer0 va incrementa la orice cretere, sau descretere a marginii pinului RA4/T0CKI. Incrementarea acestei margini este determinat de bitul Timer0 Source Edge Select, T0SE (OPTION_REG). Stergerea bitului T0SE selecteaz creterea marginii.

Prescalerul este folosit att de modulul Timer0 ct i de Watchdog Timer. Prescalerul nu poate fi citit sau scris.

Intreruperea Timer0

Aceast ntrerupere este generat de registrul TMR0 i se intinde de la FFh la 00h. Aceast ntrerupere poate fi ascuns prin tergerea bitului T0IE(INTCON). Bitul T0IF trebuie ters prin Timer0 module Interrupt Service Routine naintea reactivrii acestei ntreruperi. ntreruperea TMR0 nu poate trezi microprocesorul din aciunea SLEEP, pn cnd timer-ul este oprit n timpul aciunii SLEEP.

Folosirea Timer0 cu un ceas extern

Cnd nu se folosete nici un prescaler, ceasul de intrare extern este acelai ca i prescaler-ul de ieire. Sincronizarea T0CKI cu ceasurile de faz interne este realizat prin exemplificarea prescalerului n ciclurile Q2 i Q4 ale ceasurilor de faz interne.

Prescalerul

Exist doar un singur prescaler disponibil, i este folosit att de modulul Timer0 i Watchdog Timer. n atribuirea prescalerului modulului Timer0 nseamna c nu exist un prescaler pentru WDT. i invers. Acest prescaler nu poate fi citit sau scris.

Registrul OPTION_REG

Bitii PSA i PS2:PS0 determin atribuirii prescalerului i raportul prescalar. Cnd atribuirea se face modulului Timer0, toate instruciunile scrise n registrul TMR0 va sterge prescalerul. Cnd atribuirea se face WDT, instruciunea CLRWDT va terge prescalerul mpreuna cu WDT. Prescalerul nu poate fi citit sau scris.2.6. Modulul TIMER1Acest modul este un timer/counter de 16 bii care este alctuit din doi regitrii de 8 bii (TMR1H i TMR1L) ce pot fi scrii sau citii. Cei doi regitrii se afl situai de la adresa 0000h la FFFFh.

Timer1 poate lucra ca timer sau counter.

Modul de operare este determinat de bitul de selecie al ceasului TMR1CS (T1CON).

n modul Timer, Timer1 incrementeaz fiecare ciclu de instruciuni. n modul counter, este incrementat n fiecare cretere a marginii ceasului de intrare extern.

Timer1 poate fi activat/dezactivat prin setarea/tergerea bitului de control TMR1ON(T1CON).

Timer1 are de asemenea un reset de intrare intern. Acest reset poate fi generat prin cele dou module CCP.

T1CON: Registrul de control TIMER1

Cand oscilatorul Timer1 este dezactivat (T1OSCEN este setat) pinii RC1/OSI/CCP2 i RC0/T1OSO/T1CKI devin intrri. Valoarea TRISC este ignorat, i aceti pini sunt citii ca0.

Aciunea Timer1 n modul Timer

Modul timer este selectat prin tergerea bitului TMR!CS. n acest mod, ceasul de intrare din timer este FOSC/4. Bitul de sincronizare T1SYNC (T1CON) nu are nici un efect, atta timp ct ceasul intern este mereu sincronizat.

Aciunea contorului Timer1

Timer1 poate aciona fie n modul sincron sau asincron, n funcie de setarea bitului TMR1CS.

Cnd Timer1 este incrementat printr-o surs extern, incrementarea produce o cretere a marginii. Dup ce Timer1 este activat n modul counter, modulul trebuie s aib n primul rnd o cretere a marginii inainte ca contorul s nceap s incrementeze.

Actiunea Timer1 in modul counter sincronizat

Modul counter este selectat prin setarea bitului TMR1CS. n acest mod, timerul incrementeaz pe fiecare cretere a marginii ceasului de intrare pe pinul RC1/T1OSI/CCP2, cnd bitul T1OSCEN este setat, sau pe pinul RC0/T1OSO/T1CKI, cnd bitul T1OSCEN este ters.

Dac T1SYNC este ters, ceasul de intrare extern este sincronizat cu ceasurile de faze interne. Scara prescalerului este un ripple-counter asincron.

n aceast configuraie, n timpul modului SLEEP, Timer1 nu va incrementa chiar dac ceasul extern este present, atta timp ct circuitul de sincronizare este oprit. Prescalerul, oricum, va continua s incrementeze.

Aciunea Timer1 n modul counter asincron

Dac bitul de control T1SYNC (T1CON) este setat, ceasul de intrare extern nu este sincronizat. Timerul continu s incrementeze asincron ceasurile de faz interne. Timerul va continua s ruleze n timpul modului SLEEP si va genera o ntrerupere, ce va trezi procesorul. Oricum, msurile de precauie din software trebuie s citesc/scrie timerul.

n modul timer asincron, Timer1 nu poate fi folosit ca un timp de baz pentru operaiile de captur i comparare.

Citirea i scrierea Timer1 n modul counter asincron

Citirea lui TMR1H sau TMR1L n timp ce timerul merge dintr-un ceas extern asincron, va asigura o citire valid. Oricum, utilizatorul trebuie s aib n vedere c citirea bitului 16 din timer n dou valori de 8 bii, pune anumite probleme.

Pentru scriere, este recomandat ca utilizatorul s opreasc pur i simplu timerul i s scrie valorile dorite. Coninutul unei scrieri se formeaz prin scrierea n regitrii timerului, n timp ce registrul este incrementat. Aceasta poate produce o valoare neprevazut n registrul timerului.

Oscilatorul Timer1

Circuitul oscilatorului de crystal se afl ntre pinii T1OSO (intrare) i T1OSO (amplificator de ieire). Este activat prin setarea bitului de control T1OSCEN(T!CON). Oscilatorul este de putere joas cu o frecven de 200kHz. Continu s funcioneze n timpul modului SLEEP.

Oscilatorul Timer1 este asemantor cu oscilatorul LP. Utilizatorul trebuie s asigure prin programare un timp de ntrziere pentru a asigura pornirea complet a oscilatorului.

Timer1 trebuie configurat atat pentru modul Timer ct i pentru modul counter sincron pentru a avea avantajul acestei aciuni. Dac Timer1 funcioneaz n modul counter asincron, aceast operaie de reset nu poate avea loc.

Resetarea registrilor TMR1H si TMR1L

Regitrii TMR1H i TMR1L nu sunt resetai la adresa 00h n POR, iar T1CON este resetat la adresa 00h n Power-on Reset sau Brown-on Reset.

Prescalerul Timer1

Contorul prescalerului este ters la scierea regitrilor TMR1H sau TMR1L.

2.7. Modulul Timer2Timer2 este un timer de 8 bii care are un prescaler i un postscaler. Poaste fi folosit ca un PWM time-base pentru modul PWM al modulelor CCP. Registrul TMR2 poate fi citit sau scris i este ters cu orice mecanism RESET.

Ceasul de intrare FOSC/4 are o scar 1:1, 1:4, sau 1:16 selectat de biii de control T2CKPS1:T2CKPS0 (T2CON).

Modulul Timer1 are un registru perioad de 8 bii, PR2. Timer2 se incrementeaz de la 00h pn la adresa registrului PR2 i apoi se reseteraz la 00h la urmtorul ciclu de incrementare. PR2 este un registru ce poate fi citit i scris.

Timer2 poate fi oprit prin tergerea bitului de control TMR2ON (T2CON), pentru a minimiza consumul de energie.

Registrul T2CON

Prescalerul i postcalerul Timer2

Contorii prescaler i postscaler sunt tersi cnd una din urmtoarele aciuni apar:

scriere n registrul TMR2

scriere n registrul T2CON

orice echipament RESET (POR, MCLR Reset, WDT Reset, or BOR)

TMR2 nu poate fi sters cand T2CON este scris.2.8. Modulele CAPTURE/COMPARE/PWMFiecare din aceste module sunt alctuite dintr-un modul de 16 bii care lucreaz ca:

un registru Capture de 16 bii

un registru Compare de 16 bii

un registru PWM Master/Slave Duty Cycle

Ambele module CCP1 i CCP2 execut aceleai operaii, cu excepia operaiei speciale trigger.

Modulul CCP1:

Capture/Compare/PWM Register1 (CCPR1) cuprinde doi regitrii de 8 bii: CCPR1L (low byte) i CCPR1H (high byte). Registrul CCP1CON controleaz operaiile lui CCP1. Evenimentul special trigger este produs printr-o potrivire prin comparare i va reseta Timer1.

Modulul CCP2:

Capture/Compare/PWM Register2 (CCPR2) cuprinde doi regitri de 8 bii: CCPR2L (low byte) i CCPR2H (high byte). Registrul CCP2CON controleaz operaiile lui CCP2. Evenimentul special trigger este produs printr-o potrivire prin comparare i va reseta Timer1 i pornete conversia A/D (dac modulul A/D este activat).

Registrul CCP1CON/ Registrul CCP2CON

Modul Capture

n modul Capture, CCPR1H:CCPR1L captureaz valoarea celui de-al 16 bit al registrului TMR1 cnd un eveniment se produce la pinul RC2/CCP1. Un eveniment este determinat de:

fiecare micorare a margini (edge)

fiecare cretere margini

fiecare a patra cretere a marginii

fiecare a aisprezecea cretere a marginii

Tipul evenimentului este configurat de biii de control CCP1M3:CCP1M0(CCPxCON). Cnd o captur este facut, ntreruperea necesit ca bitul de flag CCP1lF (PIR1) s fie setat. Flagul de ntrerupere trebuie s fie ters n software. Dac o alt captur este facut nainte ca valoarea din registrul CCPR1 s fie citit, vechea valoare a capturii este rescris peste noua valoare.

Configurarea pinului CCP

n modul Capture, pinul RC2/CCP1 trebuie configurat ca ieire prin setarea bitului TRISC.

Not: dac pinul RC2/CCP1 este configurat ca ieire, scrierea se face cu o condiie de captur.

Selectarea modului Timer1

Timer1 trebuie s ruleze n modul Timer, sau modul counter sincronizat, pentru ca modulul CCP s foloseasc viitoarele capturi. n modul counter asincron, operaia de capturare nu poate funciona.

Intreruperile software

Cnd modul Capture este schimbat, se poate produce o ntrerupere printr-o captur fals. Utilizatorul trebuie s menin bitul CCP1IF (PIE1) ters pentru a evita ntreruperile false i trebuie s terg bitul flag CCP1IF.

Prescalerul CCP

Exist patru setri pentru prescaler, precizate de CCP1M3:CCP1M0. Ori de cte ori modulul CCP este oprit, sau cnd nu se afl n modul Capture, contorul prescalerului este ters. Orice Reset va terge contorul prescalerului.

Schimbarea de la o captur a prescalerului la alta poate produce o ntrerupere. De asemenea, contorul prescalerului poate fi ters, de aceea, prima captur poate fi de la un prescaler non-zero. Exemplul de mai jos arat metoda recomandat pentru schimbarea ntre capturile prescalerului. Acest exemplu terge de asemenea contorul prescalerului i nu va produce nici-o fals ntrerupere:

Tabel 2.20.Modul Compare

n modul Compare, valoarea registrului de 16 biti CCPR1 este mereu comparat cu valoarea registrului pereche TMR1 cnd valorile sunt aceleai, pinul RC2/CCP1 este:

driven high

driven low

rmne neschimbat

Aciunea de pe pin se bazeaz pe valoarea biilor de control CCP1M3:CCP1M0 (CCP1CON). n acelai timp, bitul flag de ntrerupere CCP1IF este setat.

Configurarea pinului CCP

Utilizatorul trebuie s configureze pinul RC2/CCP1 ca ieire prin stergerea bitului TRISC.

Not: tergerea registrului CCP1CON va fora pinul RC2/CCP1 s compare latch-ul de ieire cu default low level.

Selectarea modului Timer1

Timer1 trebuie s ruleze n modul Timer, sau modul sincronizat, pentru ca modulul CCP s foloseasc viitoarele capturi. n modul counter asincron, operaia de comparare nu va funciona.

Modul de intreruperi software

Cnd modul Generate Software ntrrerupt este ales, pinul CCP1 nu este afectat. Bitul CCPIF este setat, producnd ntreruperea CCP.

Evenimentul special trigger

n acest mod, un trigger hardware intern este produs i poate fi folosit pentru iniializarea unei aciuni.

Ieirea evenimentului special trigger al lui CCP1 reseteaz registrul pereche TMR1. Acest lucru permite registrului CCPR1 s fie efectiv un registru de 16 bii programabil pentru Timer1.

Ieirea evenimentului special trigger al lui CCP1 reseteaz registrul pereche TMR1 i ncepe conversia A/D (dac modulul A/D este activat).

Not: evenimentul special trigger din modulele CCP1 i CCP2 nu va seta bitul flag de ntreruperi TMR1IF(PIR).

Modul PWM

n modul PWM (n Pulse Width Modulation), pinul CCPx produce o cretere a ieirii PWM de rezoluie 10 bii. Bitul TRISC trebuie ters pentru ca pinul CCP1 s devin ieire.

Ieirea PWM

Fig.2.6.O ieire PWM are o perioad i un timp n care ieirea rmne la un nivel nalt (duty cycle). Frecvena PWM-ului este egal cu inversul perioadei.

Perioada PWM

Perioada PWM este precizat prin scrierea n registrul PR2. Perioada PWM poate fi calculat folosind urmtoarea formul:

PWM period=[(PR2)+1]*4*Tosc*(TMR2 prescaler value)

Frecvena PWM este definit ca 1/[PWM period].

Cnd TMR2=PR2, urmtoarele trei evenimente se vor produce n urmtorul ciclu de incrementere:

TMR2 este sters

Pinul CCP1 este setat

PWM duty cycle

PWM duty cycle este produs prin scrierea n registrul CCPR1L i n biii CCP1CON. Apare o rezoluie mai mare de 10 bii. CCPR1L este alctuit din 8 MSbs iar CCP1CON din doi LSbs. Duty cycle se calculeaz cu formula:

Rezoluia maxim a lui PWM pentru o frecven PWM data se calculeaz cu formula:

Nota: dac valoarea lui duty cycle este mai mare dect perioada, atunci pinul CCP1 nu va fi ters.

Setup pentru operatiile PWM

Urmtorii pai trebuie efectuai cnd se face configurarea modului CCP pentru operaiile PWM:

1. seteaz perioada PWM prin scrierea registrului PR2

2. seteaz PWM duty cycle prin scrierea n registrul CCPR1L i n biii CCP1CON

3. pinul CCP1 este ieire prin tergerea bitului TRISC

4. seteaz valoarea prescalerului TMR2 i activeaz Timer2 prin scrierea in T2CON

5. configureaz modulul CCP1 pentru operaiile PWM

Exemple de frecventePWM si rezolutii la 20 MHz

Tabel 2.21.2.9. Modulul MSSP (MASTER SYNCRONOUS SERIAL PORT)Modulul MSSP este o interfa serial, util pentru comunicarea cu alte echipamente periferice sau echipamente ale microcontrolerului. Aceste echipamente periferice pot fi memorii EEPROM, regitrii de deplasare, dispozitive de afisare, convertoare A/D, etc. Modulul MSSP poate funciona intr-unul din modurile:

interfaa serial periferic (SPI)

circuit inter-integrat (I2C)

Modul SPI

Modul SPI permite ca doar 8 bii de date s fie transmii i primii simultan. Toate cele patru moduri SPI sunt folosite. Pentru realizarea comunicaiei, n general sunt folosii trei pini:

serial data out (SDO)

serial data in (SDI)

serial clock (SCK)

Adiional, cel de-al patrulea pin poate fi folosit n modul Slave al operaiei: Slave Select ().

Pentru iniializarea modului SPI trebuie specificate cteva opiuni. Acest lucru se face prin programarea biilor de control SSPCON i SSPSTAS.

Aceti bii de control permit urmtoarele:

modul Master (SCK este ceas de ieire)

modul Slave (SCK este ceas de intrare)

ceas de polaritate (starea de repaus a SCK)

clock edge

rata ceasului (doar modul Master)

modul Slave Select (doar modul Slave)

Pentru activarea portului serial trebuie ca bitul MSSP i SSPEN s fie setai. Pentru resetarea sau reconfigurarea modului SPI, bitul SSPEN trebuie ters, regitrii SSPCON reiniializati i apoi bitul SSPEN setat. Aceste aciuni configureaz pinii SDI, SDO, SCK i ca pini ai portului serial. Ca pinii s aib funciile portului serial, trebuie ca unii dintre ei s aib biii de direcie a datelor (n registrul TRIS) corespunzator programai. Acest lucru nseamna c:

SDI este automat controlat de modulul SPI

SDO trebuie s aib TRISC ters

SCK (modul Master) trebuie s aib TRISC ters

SCK (modul Slave) trebuie s aib TRISC setat

trebuie s aib TRISC setat i registrul ADCON1 trebuie

setat astfel nct pinul RA5 s fie configurat ca I/O digital.

Orice funcie nedorit a portului serial poate fi omis prin programarea corespunzatoare a registrului TRIS cu valoarea opus.

Modul Master

Acest mod poate iniia transferul datelor n orice moment deoarece controleaz SCK. Masterul determin cnd slave-ul (processor 2) transmite datele prin protocolul software.

n modul Master, datele sunt transmise/recepionate imediat ce registrul SSPBUF a fost scris cu aceste date. Dac modulul SPI doar primete date, ieirea SDO poate fi dezactivat (programat ca intrare). Registrul SSPSR va continua s se deplaseze n prezena semnalului pinului SDI la rata programat a ceasului. Pe msur ce fiecare byte este recepionat este scris n registrul SSPBUF ca un byte de recepie normal (ntreruperile i starea biilor setate corespunzator). Acest lucru poate fi folositor n aplicaiile de recepionare ca o linie de monitorizare a activitii.

Polaritatea ceasului este selectat printr-o programare corespunzatoare a bitului CKP (SSPCON) ceea ce va da nite forme de semnal comunicaiei SPI iar MSb este transmis primul. n modul Master, rata ceasului SPI (bit rate) este programat de ctre utilizator i poate fi una dintre urmtoarele:

Fosc/4 (sau Tcy)

Fosc/16( sau 4*Tcy)

Fosc/64(sau 16*Tcy)

Timer2 output/2

Modul Slave

n modul Slave, datele sunt transmise i recepionate ca nite pulsuri externe de ceas n SCK. Cnd ultimul bit este primit, bitul SSPIF (PIR1) este setat, n timp ce n modul Slave, ceasul extern rspunde la sursa ceasului extern de pe pinul SCK. Acest ceas extern trebuie s ia valoarea minim i maxim a timpilor dai n specificaiile electrice.

Dei n modul SLEEP, slave-ul poate transmite/primi date. Cnd un byte este primit, echipamentul se va trezi din modul SLEEP>.

Aciunile MSSP I2C

Modulul MSSO n modul I2C, execut toate funciile masterului i slave-ului i produce ntreruperi biilor START i STOP n hardware, pentru a determina un free bus ( o funcie multi-master). Modulul MSSP execut specificaiile modului standard, la fel ca i adresarea bitului 7 i 10.

Un filtru glitch este situat pe pinii SCL i SDA atunci cnd acetia sunt intrri. Filtrul funcioneaz n ambele moduri de 100 kHz i 400 kHz. n modul 100 kHz, cnd aceti pini sunt ieiri, exist un control slew rate al pinului care este independent de frecvena dispozitivului.

Doi pini sunt folosii pentru transferul datelor. Acetia sunt pinul SCL, care este ceasul, i pinul ADA, care este data. Aceti pini sunt automat configurai cnd modul I2C este activat. Funciile modulului SSP sunt activate prin setarea bitului SSPEN ca fiind activ.

Modulul MSSP are ase regitrii pentru operaia I2C. Ei sunt:

registrul de control SSP: SSPCON

registrul 2 de control SSP: SSPCON2

registrul de stare SSP: SSPSTAT

bufferul serial Recepie/Transmisie: SSPBUF

registrul de deplasare SSP: SSPSR nu este direct accesibil

registrul de adrese SSP:SSPADD

Registrul SSPCON permite controlul aciunii I2C. Patru moduri de bii de selecie (SSPCON) permite selectarea unuia dintre modurile I2C:

modul slave I2C ( adresa pe 7 bii)

modul slave I2C (adresa pe 10 bii)

modul Master I2C, clock=OSC/4 (SSPADD+1)

modurile firmware I2C

naintea selectrii unuia dintre modurile I2C, pinii SCL i SDA trebuie programai ca intrri prin setarea biilor TRIS corespunztori. Selectarea modului I2C prin setarea bitului SSPEN, activeaz pinii SCL i SDA pentru a fi folosii ca linii de ceas i date n modul I2C.

Bitul CKE (SSPSTAT seteaz nivelele pinilor SDA i SDL n ambele moduri master sau slave. Cnd CKE=1, nivelele se vor conforma cu specificaia lui SMBus. Cand CKE=0, nivelele se vor conforma cu specifictia lui I2C.

Registrul SSPSTAT asigur starea transferului de date. Aceast informaie include detectarea bitului START (S) sau STOP (P), specificnd dac byte-ul receptionat a fost dat dau adres, dac urmtorul byte este completarea adresei bitului 10, i dac aceasta va fi un transfer de date de citire sau scriere.

SSPBUF este un registru unde transferul de date poate fi scris sau citit. Registrul SSPSR mut datele n interiorul sau n afara dispozitivului. n operaiile de recepie, regitrii SSPBUF i SSPSR creaz o recepie dublu-amortizat. Acest lucru permite ca recepia urmtorului byte s nceap naintea citirii ultimului byte a datelor recepionate. Cnd ultimul byte este recepionat, este transferat n registrul SSPBUF i bitul flag SSPIF este setat. Cnd un alt ultim byte este recepionat nainte ca registrul SSPBUF s fie citit, apare un surplus de recepie i bitul SSPOV (SSPCON) este setat i byte-ul din SSPSR este pierdut.

Registrul SSPADD reine adresa slave. n 10 bit mode, utilizatorul trebuie s scrie byte-ul cel mai nalt al adresei dup care byte-ul cel mai de jos trebuie ncarcat.

Modul Slave

n modul Slave, pinii SCL i SDA trebuie configurai ca ieiri. Modulul MSSP scrie pe aceti pini datele de ieire cnd acest lucru se cere.

Cnd o adres se potrivete una cu alta, sau transferal de date de dup comparare este recepionat, hardware-ul va produce pulsul Acknowledge (), i apoi ncrcat n registrul SSPBUF cu valoarea recepionat n registrul SSPSR.

Exist anumite condiii care vor produce modul MSSP dar nu prin pulsul . Acest lucru se va ntampla prin ndeplinirea celor dou condiii de mai jos sau prin ndeplinirea uneia dintre ele:

bitul BF (SSPSTAT) a fost setat nainte ca transferul s fie recepionat;

bitul SSPOV (SSPCON) a fost setat nainte ca transferul s fie recepionat.

Dac bitul BF este setat, valoarea registrului SSPSR nu este ncarcat n SSPBUF, dar biii SSPIF i SSPOV sunt setai.

Adresarea

Odat ce modulul MSSP a fost activat, va atepta ca condiia de START s apar. Dup condiia de start, cei 8 bii sunt mutai n registrul SSPSR. Valoarea registrului SSPR este comparat cu valoarea registrului SSPADD. Adresa este comparat cu cel de-al optulea puls de ceas SCL. Dac cele dou adrese coincid i biii BF i SSPOV sunt tersi, se vor produce urmtoarele evenimente:

valoarea registrului SSPSR este ncrcat n registrul SSPBUF prin pulsul SCL

un puls este generat

bitul SSPIF (PIR1) este setat (ntreruperea este generat dac este activat) prin cel de al noulea puls SCL

n modul de adresare zecimal, doi bytes de adres trebuie s fie recepionai de slave. Cei cinci bii, cei mai semnificativi (MSbs) ai primei adrese arat dac aceasta este o adresa zecimal. Bitul R/ trebuie s arate o scriere deci dispozitivul de slave va recepiona cea de-a doua adres de byte.

Pentru o adres zecimal, primul byte se va egala cu 1111 0 A9 A8 0, unde A9 i A8 sunt cei doi MSbs ai adresei. Secvena de evenimente pentru o adres zecimal este precum urmeaz, cu paii 7-9 pentru transmitorul slave:

1. prima dat se recepioneaz byte-ul cel mai nalt al adresei (biii SSPIF, BF i UA(SSPSTAT) sunt setai;

2. se actualizeaz registrul SSPADD cu cel de-al doilea byte (low) al adresei (se terge UA i se elibereaz linia SCL);

3. se citete registrul SSPBUF (se terge bitul BF) i se sterge bitul SSPIF;

4. se recepioneaz bitul cel mai de jos al adresei (biii SSPIF, BF i UA sunt setai);

5. se actualizeaz registrul SSPADD cu primul byte high al adresei. Acest lucru va terge bitul UA i se elibereaz linia SCL;

6. se citete bitul SSPBUFF (se terge bitul BF) i se terge bitul flag SSPIF;

7. se recepioneaz condiia de start repetat;

8. se recepioneaz primul byte high al adresei (se terge bitul BF) i se terge bitul flag SSPIF.

Receptia Slave

Cnd bitul R/al adresei de byte este ters i cnd se gsesc dou adrese asemntoare, bitul R/ al registrului SSPSTAT este ters. Adresa recepionat este ncrcat n registrul SSPBUF. Cnd exist o condiie de depire a adresei de byte se emite un puls . O condiie de depire este determinat atunci cnd bitul BF(SSPSTAT) sau SSPOV(SSPCON) este setat.

O ntrerupere SSP este produs pentru fiecare byte de transfer de date. Bitul SSPIF (PIR1) trebuie s fie ters prin software. Registrul SSPSTAT este folosit pentru a determina starea byte-ului receptionat.

Transmisia Slave

Cnd bitul R/al adresei de byte ce trebuie s vin este setat i se gsesc dou adrese cu aceeai valoare, bitul R/al registrului SSPSTAT este setat. Adresa recepionat este ncrcat n registrul SSPBUF. Pulsul va fi trimis la cel de-al noulea bit, i pinul SCL se menine low. Datele transmise trebuie s fie ncrcate n registrul SSPBUF care de asemenea sunt ncrcate i n registrul SSPSR. Apoi, pinul SCL trebuie s fie activat prin setarea bitului CKP (SSPCON). Masterul trebuie s monitorizeze pinul SCL anterior pentru afirmarea unui alt puls de ceas.

O ntrerupere SSP este generat pentru fiecare transfer de date. Bitul de flag SSPIF trebuie ters din software i registrul SSPSTAT este folosit pentru determinarea strii transferului de byte. Bitul flag SSPIF este setat ca on celui de-al noualea puls al ceasului.

General call address support

Procedura de adresare pentru I2C bus este aceea c primul byte dup condiia START de obicei determin ce dispozitiv va fi slave-ul adresat de master. Excepie face adresa apelrii generale, care poate adresa toate echipamentele. Cnd aceast adres este folosit, toate dispozitivele trebuie s rspund cu un .

Adresa apelarii generale este una din cele opt adrese rezervate pentru scopuri specifice de protocolul I2C.

Adresa de apelare general este recunoscut cnd bitul GCEN (General Call Enable) este activat (SSPCON2 este setat). Dup detectarea bitului START, 8 bii sunt mutai n SSPR i adresa este comparat cu cea din SSPADD. De asemenea, este comparat cu adresa apelrii generale i este fixat n hardware.

n urma comparrii dac adresa apelrii generale se potrivete SSPSR este transferat n SSPBUF, flagul BF este setat la fel i flagul SSPIF.

Cnd ntreruperea este depanat, sursa pentru ntreruperi poate fi verificat prin citirea coninutului SSPBUF pentru a determina dac adresa a fost o adres a unui dispozitiv anume sau adresa unei apelri generale.

n modul zecimal, SSPADD necesit s fie reactualizat pentru cea de-a doua jumtate a adresei pentru a se potrivi, i bitul UA este setat (SSPSTAT). Dac adresa apelrii generale este data cnd GCEN este setat, n timp ce slave-ul este configurat n modul de adresare zecimal, apoi cea de-a doua jumtate a adresei nu este necesar, bitul UA nu va fi setat i slave-ul va ncepe s recepioneze date dup fiecare .

Aciunea SLEEP

Cnd n este n modul SLEEP, modulul I2C poate recepiona adrese sau date. Cnd o adres se potrivete sau cnd transferul ultimului byte este efectuat, procesorul se trezete din modul SLEEP (dac ntreruperea SSP este activat).

Efectele actiunii RESET

O aciune RESET dezactiveaz modulul SSP i termin transferal current.

Modul Master

Modul Master a unei operaii este produs prin ntreruperi ale detectrii condiiilor START i STOP. Biii STOP(P) i START(S) sunt tersi printr-un RESET, sau cnd modulul MSSP este dezactivat. Controlul lui I2C bus este fcut atunci cnd bitul P este setat, sau bus-ul este n ateptare cnd ambii bii S i P sunt teri.

n modul Master, liniile SCL i SDA sunt acionate de MSSP.

Urmtoarele evenimente vor face ca biii de flag SSP, SSPIF, s fie setai (o intrerupere SSP se va produce dac este activat):

condiia de START

condiia de STOP

byte-ul de transfer al datelor transmise/recepionate

transmisia

START repetat

Modul multi-master

n modul multi-master, generarea ntreruperilor la detecia condiiilor de START i STOP permite determinarea bus-ului cnd este liber. Biii STOP(P) i START(S) sunt teri prin RESET sau cnd modulul MSSP este dezactivat. Controlul lui I2C bus va aparea cnd bitul P (SSPSTAT) este setat, sau bus este n ateptare cu ambii bii S i P teri. Cnd bus-ul este ocupat, activarea ntreruperii SSP va produce o ntrerupere cnd o condiia STOP are loc.

n aciunea multi-master, linia SDT trebuie monitorizat pentru arbitraj, pentru a vedea dac nivelul de semnal este un nivel ateptat de ieire. Aceast verificare este efectuat n hardware, iar rezultatul este plasat n bitul BCLIF.Strile n care arbitrajul poate fi pierdut sunt:

transferul adresei

transferul datelor

o condiie de START

o condiie repetitiv de START

o condiie

Suportul modului I2C Master

Modul Master este activat prin setarea i tergerea biilor corespunztori SSPM din SSPCON i prin setarea bitului SSPEN. Odat ce modul Master este activat, utilizatorul are ase opiuni:

afirmarea unei condiii START n SDA i SCL

afirmarea unei condiii repetitive START n SDA i SCL

scrierea n registrul SSPBUF pentru iniierea transmisiunii datelor/adreselor

producerea unei condiii STOP n SDA i SCL

configurarea portului I2C pentru a recepiona datele

producerea unei condiii la sfritul byte-ului recepionat al datelor

Aciunea modului I2C master

Dispozitivul Master produce toate pulsurile ceasului serial i condiiile de START i STOP. Un transfer este sfrit cu o condiie de STOP sau cu o condiie repetitiv START. n timp ce condiia repetitiv START este, de asemenea, nceputul urmtorului transfer serial, I2C bus nu va fi eliberat.

n modul de transmisie Master, datele seriale sunt ieiri prin SDA. Primul byte transmis conine adresa slave-ului dispozitivului ce recepioneaz (7 bii) i bitul Read/Write. n acest caz, acest bit va fi 0 logic. Datele seriale transmit 8 bii o singur dat. Dup fiecare byte ce a fost transmis, un bit este recepionat. Condiiile START i STOP sunt ieiri i indic nceputul i sfritul transferului serial.

n modul Master, primul byte transmis conine adresa slave-ului dispozitivului ce transmite (pe 7 bii) i bitul R/. n acest caz, bitul R/va fi 1 logic. Astfel, primul byte transmis este adresa slave-ului pe 7 bii, urmat de 1 ce indic bitul recepionat. Datele seriale sunt recepionate prin SDA, n timp ce SCL produce ceasul serial. Datele seriale sunt recepionate pe 8 bii odat. Dup fiecare byte recepionat, un bit este transmis. Condiiile de START i STOP arat nceputul i sfritul transmisiei.

Generatorul ratei de transmisie a datelor prin modem folosit pentru aciunea modului SPI este acum folosit pentru a seta frecvena ceasului SCL pentru toate aciunile la 100 kHz, 400 kHz sau 1MHz I2C. Acest generator al ratei de transmisie a datelor prin modem rencarc valorile ce sunt coninute de cei mai de jos 7 bii ai registrului SSPADD. Generatorul ratei de transmisie a datelor prin modem va ncepe automat s conteze pe o scriere n registrul SSPBUF. Odat ce operaia dat este complet, ceasul intern se va opri automat din numrat i pinul SCL va rmne la ultima sa stare.O secven de transmisie normal va arata astfel:

a) Utilizatorul scrie o condiie de START prin activarea bitului START (SEN) n SSPCON2.

b) SSPIF este setat. Modulul va atepta timpul de start solicitat naintea oricrei alte aciuni ce va urma.

c) Utilizatorul ncarc SSPBUF cu adresa ce trebuie transmis.

d) Adresa este mutat din pinul SDA pn cnd toti cei 8 bii sunt transmii.

e) Modulul MSSP se deplaseaz n bitul ACK din dispozitivul slave i scrie valoare ce o conine n registrul SSPCON2 (SSPCON2).

f) Modulul MSSP produce o ntrerupere la sfritul celui de-al noulea ciclu al ceasului prin setarea registrului SSPIF.

g) Utilizatorul ncarc registrul SSPBUF cu 8 bii de date.

h) Datele sunt mutate din pinul SDA pn cnd toi cei 8 bii sunt transmii.

i) Modulul MSSP se deplaseaz n bitul ACK din dispozitivul slave, i scrie valoarea ce o conine n registrul SSPCON2 (SSPCON2).

j) Modulul MSSP produce o ntrerupere la sfritul celui de-al noulea ciclu al ceasului prin setarea bitului SSPIF.

k) Utilizatorul scrie o condiie de STOP prin activarea bitului STOP, PEN n SSPCON2.

l) ntreruperea este produs odat ce condiia STOP este complet.

Generatorul ratei de transmisie a datelor prin modem

n modul Master I2C, valoarea rencrcat pentru BRG este situat n bitul 7, cel mai de jos al registrului SSPADD. Cnd BRG este ncrcat cu aceast valoare, BRG numar napoi pn la 0 i se oprete pn cnd o alt rencrcare are loc. Numrtoarea lui BRG este decrementat de dou ori pe ciclul de instruciuni pe cesul Q2 i Q4.

n modul Master I2C, BRG este rencrcat automat. Dac determinarea pasului de ceas urmeaz s aib loc, BRG va fi rencrcat cnd pinul SCL atinge o valoare nalt (vezi figura de mai jos).

Fig. 2.7.Condiia de start a modului Master I2C

Pentru iniializarea unei condiii de start, utilizatorul seteaz bitul SEN (SSPCON2), prin activarea bitului de condiie START. Dac pinii SDA i SCL ating o valoare nalt, generatorul ratei de transfer al datelor prin modem este rencrcat cu coninutlul lui SSPADD i ncepe s numere. Dac SCL i ADA ating amndou valori nalte cnd generatorul ratei de transfer se oprete, pinul SDA este adus low. Aciunea lui SDA devine low n timp ce SCL este high. Aceasta este condiia de START i face ca bitul S (SSPSTAT) s fie setat. Dup aceasta, generatorul ratei de transfer este rencrcat cu coninutul lui SSPADD i ii rencepe numrtoarea. Cnd generatorul ratei de transfer a datelor se sfrete, bitul SEN(SSPCON2) va fi automat ters. Generatorul ratei de transfer este ntrerupt i condiia de START este complet.

Flagul de stare WCOL

Dac utilizatorul scrie SSPBUF cnd o secven START are loc, apoi WCOL este setat i coninuturile bufferului sunt neschimbate (scrierea nu are loc).

Conditia de start repetat a modului Master I2C

O conditie START repetitiv se produce cnd bitul RSEN (SSPCON2) este programat high i modulul I2C este n starea IDLE. Cnd bitul RSEN este setat, pinul SCL este low. Cnd bitul SCL este fcut low, generatorul ratei de transfer este ncarcat cu coninutul lui SSPADD i continu numrtoarea. Pinul SDA este eliberat din numartoarea generatorului ratei de transfer a datelor. Cnd aceasta se sfrete i SDA este fcut high, pinul SCL este adus high. Cnd SCL este adus high generatorul ratei de transfer este rencrcat cu coninutul lui SSPADD i continu numrtoarea. Aceast aciune este urmat de afirmarea pinului SDA pentru o numrtoare a generatorului, n timp ce SCL este high. Apoi, bitul RSEN din registrul SSPCON2 va fi automat ters i generatorul ratei de transfer nu va fi ncarcat, lsnd pinul SDA low. Odat ce condiia START este detectat pe pinii SDA i SCL, bitul S va fi setat. Bitul SSPIF nu va fi setat pn cand generatorul ratei de transfer al datelor nu termin numrtoarea.

Imediat dup setarea bitului SSPIF, utilizatorul poate scrie n SSPBUF adresa de 7 bii sau prima adres n zecimal. Dup ce primii 8 bii sunt transmii i un bit ACK este recepionat, utilizatorul poate apoi transmite 8 bii adiionali ai adresei (in zecimal) sau 8 bii de date (pe 7 bii).

Flagul de stare WCOL

Dac utilizatorul scrie n SSPBUF cnd o secven de START repetitiv are loc, atunci WCOL este setat i coninuturile bufferului rmne neschimbat (scrierea nu are loc).

Transmisia modului Master I2C

Transmisia unui byte de date, a unei adrese de 7 bii sau celei de-a doua jumti a adresei pe 10 bii, este realizat prin simpla scriere a valorii n registrul SSPBUF. Aceast aciune va seta bitul BF (Buffer Full Flag) i i permite generatorului ratei de transmisie a datelor s nceap numratoarea i s nceap o nou transmisie. Fiecare bit al adresei/datei va fi deplasat spre pinul SDA dup ce o micorare a lui SCL este dat. SCL este meninut low pentru o numrtoare a generatorului ratei de transmisie a datelor. Cnd pinul SCL este fcut high, este meninut astfel pentru o numrtoare a generatorului. Datele din pinul SDA trebuie s rmn stabile pentru aceea durat i pentru un timp dup urmtoarea micorare a lui SCL. Dup ce cel de-al optulea bit este deplasat, flagul BF este ters i masterul elibereaz SDA permindu-i dispozitivului slave s fie adresat pentru a rspunde cu un bit ACK n timpul celui de-al noulea bit, dac o potrivire de adres are loc sau dac datele au fost recepionate cum trebuie. Starea bitului ACK este citit din ACKDT pe micorarea marginii celui de-al noulea ceas. Dac masterul primete un ACK, bitul de stare ACK (ACKSTAT) este ters. Dac nu, bitul este setat. Dup cel de-al noulea ceas, SSPIF este setat i master clock este suspendat pan ce urmtorul byte de date este ncrcat n SSPBUF, lsnd SCL low i SDA neschimbat.

Dup scrierea n SSPBUF, fiecare bit al adresei va fi deplasat din SCL, pn cnd toi cei 7 bii de adrese i bitul R/sunt complete. Pe baza micorrii celui de-al noualea ceas, masterul va seta pinul SDA, permind slave-ului s rspund cu un bit ACK. Masterul va da o valoare pinului SDA pentru a vedea dac adresa a fost recunoscut de slave. Starea bitului ACK este ncarcat n bitul de stare ACKSTAT. Apoi, SSPIF este setat, flagul BF este ters, i generatorul ratei de transfer a datelor este oprit pn cnd o alt scriere n SSPBUF are loc, meninnd SCL low i permindu-i lui SDA s-i in valoarea.

Flagul de stare BF

n modul de transmisie, bitul BF (SSPSTAT) este setat cnd CPU scrie n SSPBUF i este ters cnd toi cei 8 bii sunt deplasai din el.

Flagul de stare WCOL

Cnd utilizatorul scrie n SSPBUF cnd o transmisie are loc WCOL este setat i coninuturile bufferului rmn neschimbate (scrierea nu are loc) WCOL trebuie ters.

Flagul de stare ACKSTAT

n modul de transmisie, bitul ACKSTAT este ters cnd slave-ul a trimis un bit ACK (=1). Slave-ul trimite un bit ACK cnd i s-a recunoscut adresa sau cnd slave-ul a recepionat cum trebuie datele.

Receptia modului I2C Master

Recepia modului Master este activat prin programarea bitului RCEN active.

Generatorul ratei de transmisie a datelor ncepe numrtoarea, pinul SCL se schimb (din low n high/ din high n low) i datele sunt deplasate n SSPSR. Flagul activ de recepie este automat ters dup cel de-al optulea ceas, coninutul lui SSPIF este ncrcat n SSPBUF, flagul BF este setat, SSPIF este setat, i generatorul ratei de transfer este oprit din numrtoare, meninnd SCL low. SSP se afl acum n starea IDLE, asteptnd urmtoarea comand. Cnd bufferul este citit de CPU, flagul BF este automat ters. Utilizatorul poate apoi s trimit un bit ACK la sfaritul recepiei, prin setarea bitului ACKEN(SSPCON2).

Flagul de stare BF

n aciunea de recepie, BF este setat cnd un byte de adres sau de date este ncrcat n SSPBUF din SSPSR. Este ters cnd SSPBUF este citit.

Flagul de stare SSPOV

n aciunea de recepie, SSPOV este setat cnd 8 bii sunt repepionai n SSPSR i flagul BF este deja setat dintr-o recepie anterioar.

9.2.12.3. Flagul de stare WCOL

Dac utilizatorul scrie n SSPBUF cnd o aciune de recepie are loc atunci WCOL este setat i coninuturile buffer-ului rman neschimbate (scrierea nu are loc).

Sincronizarea secventei ACK

O secven ACK este activat prin setarea bitului ACKEN. Cnd acest bit este setat, pinul SCL devine low i coninutul bitului de date ACK este prezent n pinul SDA. Dac utilizatorul dorete s produc un bit ACK, bitul ACKDT trebuie ters. Dac nu, utilizatorul trebuie s seteze bitul ACKDT inaintea nceperii unei secvene ACK. Generatorul ratei de transfer a datelor numr timp de o perioad i pinului SCL i se atribuie starea high. Cnd pinul SCL este high generatorul ratei de transfer numr pentru o perioada. Pinului SCL i se atribuie apoi starea low. Dup aceea, bitul ACKEN este automat ters, generatorul ratei de transfer este oprit, i modulul SSP trece n modul IDLE.

Flagul de stare WCOL

Dac utilizatorul scrie n SSPBUF n timp ce o secven ACK are loc, WCOL este setat i coninutul buffer-ului rmne neschimbat (scrierea nu are loc).

Sincronizarea aciunii STOP

Un bit STOP i se atribuie pinului SDA la sfritul uei recepii/transmisii prin setarea bitului PEN(SSPCON). La sfritul unei recepii/transmisii, linia SCL este meninut low dup cel de-al noulea ceas. Cnd bitul PEN este setat, masterul i va atribuii liniei SDA starea low. Cnd linia SDA este low, generatorul ratei de transfer este rencrcat i ncepe o numrtoare invers la 0. Cnd generatorul ia o paus, pinul SCL este adus high la fel i SDA dup care bitul P (SSPSTAT) este setat. Apoi bitul PEN este ters i bitul SSPIF este setat.

Oricnd firmware decide s preia controlul bus, prima dat va determina dac bus este ocupat cu verificarea biilor S i P din registrul SSPSTAT. Dac bis este ocupat, atunci CPU poate fi ntrerupt cnd bitul STOP este detectat (bus este liber).

Flagul de stare WCOL

Dac utilizatorul scrie n SSPBUF cnd o aciune de recepie are loc, atunci WCOL este setat i coninuturile buffer-ului rmn neschimbate (scrierea nu are loc).

Clock Arbitration

Clock Arbitration se produce cnd masterul, n timpul oricrei recepii, transmisii sau condiii repetitive START/STOP, i atribuie o stare pinului SCL. Cnd pinului SCL i se atribuie o stare high, BRG este ntrerupt din numrtoare pn cnd pinul SCL devine high, dup care BRG esre rencrcat cu coninutul lui SSPADD i ncepe numrtoarea. Acest lucru asigur timpul necesar ca SCL s devin high este cel puin egal cu cel n care BRG numr n cazul n care ceasul este meninut low printr-un dispozitiv extern

Aciunea SLEEP

n timp ce n modul SLEEP, modulul I2C poate recepiona adrese sau date, i cnd se gsesc dou adrese egale sau cnd transferul complet al byte-ilor are loc, procesorul se trezete din aciunea operaiei SLEEP (dac ntreruperea SSP este activat).

Efectele aciunii RESET

O aciune RESET dezactiveaz modulul SSP i termin transferul curent.

Comunicatia Multi-Master, Bus Collision si Bus Arbitration

Suportul modului multi-master este realizat prin bus arbitration. Cnd masterul pune biii de adres/date n pinul SDA, arbitrajul are loc cnd masterul pune 1 n SDA. Cnd pinul SCL devine high, datele ar trebui s fie stabile. Dac datele ateptate n SDA sunt 1 logic iar datele existente n SDA sunt setate 0 logic, are loc un bus collision. Masterul va seta bitul BCLIF (bus collision ntrrerupt flag) i va reseta portul I2C la starea IDLE.

Dac o aciune de transmisie are loc cnd are loc un bus collision, transmisia este oprit, flagul BF este ters, liniile SDA i SCL nu mai sunt atribuite, SSPBUF poate fi scris. Cnd utilizatorul depaneaz o rutin de ntrerupere prin bus collision i dac bus I2C este liber, utilizatorul poate rencepe comunicaia prin afirmarea unei condiii START.

Dac o condiie de START/ repetitiv de START/ STOP/ ACK are loc cnd un bus collision se produce, condiia este anulat, liniile SDA i SCL sunt re-declarate, i biii de control respetitivi din SSPCON2 sunt teri. Cnd utilizatorul depaneaz o rutin de ntrerupere prin bus collision i dac bus I2C este liber, utilizatorul poate rencepe comunicaia prin afirmarea unei condiii START.

Masterul va continua s monitorizeze pinii SDA i SCL i dac o condiie de STOP are loc, bitul SSPIF va fi setat.

O scriere n SSPBUF va ncepe transmisia datelor din primul bit de date, indifferent de locul n care transmisia a fost lsat cnd bus collision a avut loc.

n modul multi-master, generarea ntreruperilor, detectarea condiiilor de START i STOP permite determinarea cnd bus este liber. Controlul lui I2C bus poate fi luat cnd bitul P este setat n registrul SSPSTAT, sau bus este n modul idle i biii S i P sunt teri.

Bus collision in timpul unei conditii de START

n timpul unei condiii de start, un bus collision are loc dac:

SDA sau SCL sunt programai low la nceputul condiiei START

SCL este programat low nainte ca SDA s fie declarat low

n timpul unei cond