Articole electronica, kituri, scheme
RET

Familia de Microcontrolere MOTOROLA MC68HC11. Aplicații

 

Întreruperile, ca la orice MC, sunt utile pentru ca programul să poată răspunde şi cererilor asincrone ale unor periferice. La apariţia unei cereri de întrerupere, dacă aceasta este validată, conţinutul curent al numărătorului de program va fi salvat în stivă şi apoi va fi încărcat cu valoarea vectorului de întrerupere (adresa de la care începe subrutina de tratare a întreruperii respective). După terminarea execuţiei subrutinei (întâlnirea instrucţiunii RTI), numărătorul de program va fi încărcat cu valoarea iniţială, salvată în stivă, iar execuţia programului va fi reluată din punctul în care a fost întreruptă.

Odată cu salvarea în stiva a număratorului de program,are loc salvarea şi a altor registrii ai unităţii centrale. Ordinea de salvare este: PCL, PCH, IYL, IYH, IXL, IXH, ACCA, ACCB şi CCR. După salvare este setat bitul I din registrul CCR pentru a inhiba alte cereri de întrerupere.

Dacă apar simultan mai multe cereri de întrerupere se execută o secvenţă de interogare şi este lansată în execuţie întreruperea cu nivelul prioritar cel mai mare.

Există 6 surse de întreruperi nemascabile, care au nivel de prioritate fix. Acestea sunt: reset, eroare de ceas, creare de cod instrucţiune, întrerupere extemă XIRQ şi eroare de programare. Pentru celelalte întreruperi nivelul de prioritate se stabileşte cu biţii PSEL3 – PSEL0.

5. Interfețele de comunicaţii seriale

5.1 Interfata seriala periferică (SPI)

Interfaţa serială periferică a MC68HC11 este de fapt portul serial. Pentru transferuri prin acest port se utilizează 4 registre: DDRD (registru de specificare a direcţiei datelor prin portul D), SPI (registru de stare al SPI), SPDR (registrul de date al SPI) şi SPCR (registrul de control pentru SPI). Cu ajutorul acestor regiştri se stabileşte protocolul de comunicație serială, modul de conectare în cazul legării mai multor MC prin portul serial şi se realizează recepţia respectiv transmisia datelor.

Semnalele necesare comunicării sunt scoase la pinii portului D (PD2 – PD5), recepţia şi transmisia fiind coordonate de registrul SPSR. Validarea funcţionarii portului serial se face prin setarea bitului SPE din registrul SPCR. La conectarea a două sau mai multe MC prin portul serial, unul va fi principal, iar celelalte secundare (regim master – slave). MC master va avea pinul /SS (slave select) conectat la VDD, iar pinul SCK va reprezenta generatorul de tact pentru MC slave. Selecția MC slave cu care se face comunicaţia se face cu ajutorul biţilor MSTR şi SS.
Transmisia datelor se face pe liniile MISO şi respectiv MOSI (master-in-slave-out, respectiv master-out-slave-in), ghidată de tactul emis permanent de MC master pe linia SCK.

5.2 Interfața de comunicație serială (SCI)

SCI este o interfaţă standard pentru transmisia serială. Această interfaţă solicită doar doi pini ai MC (PD0 – RxD şi PD1 – TxD) prin care se poate obţine o viteză de transfer de 9600 baud.
Dezavantajele comunicării prin acest tip de interfaţă sunt:

• selecţie complicată a MC destinatar;
• dificultatea comunicării între un MC slave şi master.

6. Circuitul de temporizare (timer)

MC68HC11 conţine un numărător pe 16 biţi, care realizează funcţia de contorizare a timpului în sistem. Numărătorul este legat la ceasul sistemului direct sau prin intermediul unui circuit de divizare a frecvenţei programabil (prescaler). Sistemul mai conţine 3 intrări de captură, evenimente digitale cu funcţionare independentă una faţă de alta şi 5 circuite de comparare. Din aceasta cauză, pentru deservirea circuitului de temporizare este alocat cel mai mare număr de registre, în raport cu celelalte blocuri funcţionale ale MC.

6.1. Numărătorul şi divizorul de frecvență

După reset, numărătorul începe să numere de la $0000H până la $FFFFH. La următorul impuls de tact se va semnaliza depăşire si numărătorul va relua numărarea de la $0000H. Această depăşire generează o cerere de întrerupere care determină setarea bitului TOF din registrul TFLG, şi încărcarea în numărătorul de program a adresei subrutinei de tratare a acestei întreruperi (vector: $FFDEH), dacă întreruperea a fost validată (TOI = 1 în registrul TMSK2). Dacă TOI = 0 programul va continua fără a lua în considerare cererea de întrerupere.

Durata unui ciclu complet de numărare ($0000H – $FFFFH) în cazul aplicării directe a impulsurilor de la ceasul intern este de 32,768 ms pentru o frecventă a ceasului intern de 2 MHz, cu o rezolutie de 500 ns. În unele aplicatii este necesar ca ciclul de numărare să fie mai lung. În acest caz este posibilă aplicarea unui semnal de ceas divizat cu 4, 8 sau 16, prelungindu-se astfel perioada între depăşiri până la 524,3 ms (la fceas= 2MHz), dar reducându-se rezoluţia la 8 ms.

Stabilirea ratei de divizare a frecventei de ceas se face prin setarea corespunzătoare a bitilor PR1 si PR0 din registrul TMSK2 în primii 64 cicli de după reset.

6.2. Intrări de captură evenimente digitale

Pinii pentru intrările de capturare a evenimentelor digitale sunt amplasați in portul A (biti PA0 = IC3 – PA2 = IC1), fiind linii de intrare. Un semnal aplicat la una din aceste linii determină salvarea conţinutului numărătorului în registrul aferent liniei de captură activate.

Pentru fiecare linie de captură există alocat cîte un registru de 16 biţi (în zona de memorie $0010H – $0015H), precum şi doi biti EDGnA şi EDGnB în registrul TCTL2 (registrul 2 de control al circuitului de temporizare). Cei doi biţi stabilesc pe care din fronturi va avea loc declanşarea capturii (nici unul = 00, căzător = 01, ridicător = 10 sau ambele = 11).

La apariţia unui eveniment pe linia de captură poate fi lansată o întrerupere dacă bitul corespunzător liniei din registrul TMSK1 este setat, simultan evenimentul este semnalizat prin setarea bitului corespunzător liniei din registrul TFLG1.

Citirea valorii capturate se va face printr-o instrucţiune de transfer pe 16 biti.

Captura de evenimente digitale reprezintă o modalitate facilă de măsurare a duratei între două evenimente, a lungimii unui impuls sau a perioadei unui semnal.

6.3. Ieșirile de comparare evenimente digitale

MC68HC11 conţine 5 regiștri de 16 biti a căror valoare este comparată cu conţinutul numărătorului. Compararea se face la fiecare ciclu de magistrală. La sesizarea unei egalitaţi este transmis un semnal pe linia aferentă registrului şi este setat bitul corespunzător în registrul OC1M. Simultan poate fi generată şi o întrerupere.

Mecanismul de comparare este utilizat pentru generarea impulsurilor cu durata stabilită, producerea de întârzieri de durată stabilită, obţinerea unei bune rezolutii la convertoarele numeric-analogice făra a apela la întreruperi.

7. Convertorul anaIog-numeric

Convertorul analog-numeric încorporat în MC68HC11 constă dintr-un multiplexor analogic cu 8 canale (sau 4 canale pentru capsula DIP cu 48 pini), un circuit de esantionare-memorare si un convertor A/D pe 8 biți cu aproximări succesive, cu timp de conversie de 16 ms. Referinţa negativă şi pozitivă este stabilită prin pinii VRL şi VRH. În functie de potențialul la care se află aceşti pini, se stabileşte valoarea tensiunii pentru 00H şi respectiv FFH.

Rezultatul conversiei se va găsi în registrul ADRn (n = 1 … 8).

Procesul de conversie constă în următoarele etape:

• selectarea canalului analogic în registrul ADCTL,
• citirea registrului ADRn, după 16 ms de la selectare.

Validarea lucrului cu convertorul se face prin setarea în registrul OPTION a bitului ADPU. Această validare (respectiv inhibare) poate fi făcută în oricare moment al programului.

Registrul care coordonează funcţionarea convertorului este ADCTL. Structura acestui registru este prezentată în tabelul 1.

microcontrolere-motorola-mc68hc11-t1

Convertorul poate fi testat prin setarea bitului CD care determină conversia unei tensiuni de referinţă (Vrh, Vrl sau Vrh/2).

O secvenţă de program pentru efectuarea unei conversii analog numerice este prezentată mai jos:

LDAA #01H
;selecție canal 1
STAA ADCTL
;și start conversie
LDAB #6
;temporizare 0.016ms
WAIT: DECB
BNE WAIT
LDAA ADR1
;citire rezultat in acumulator.

Ceasul după care funcţionează convertorul este în general cel intern, de 2 MHz. Deoarece frecvența de funcţionare a acestuia poate fi modificată, pentru a preîntâmpina erorile ce pot apare la o frecvenţă de ceas prea mică, circuitul a fost prevăzut cu un ceas suplimentar (oscilator RC), care poate fi selectat prin ştergerea bitului CSEL din registrul OPTION.

La funcţionarea cu tactul preluat de la ceasul intern, în cazul în care toate canalele sunt folosite, durata minimă între două conversii este de 0,064 ms. În acest caz, în calcularea frecvenţei de eşantionare este bine să se ţină seama de întârzierea introdusă de filtrul aflat pe fiecare canal, precum si de timpii de achiziție ai circuitului de eşantionare şi memorare cale cresc odată cu creşterea nivelul semnalului şi diferenţele dintre nivelele de pe canale adiacente.

8. Moduri de funcționare cu consum redus

Consumul de putere al MC este în general mic, ca urmare a implementării în tehnologie CMOS. Pentru modul single-chip, curentul absorbit de la sursa de alimentare este mai mic de 20 mA. Totuşi, uneori este necesar să se reducă acest curent pentru a prelungi durata de serviciu a aparaturii (de regulă la alimentare de la baterii).

Pentru familia 68HC11 sunt disponibile 2 moduri de funcţionare cu consum redus: modul WAIT (curent maxim absorbit 5 mA) şi modul STOP (curent maxim 300 uA). Fiecare dintre aceste moduri acţionează diferit asupra MC, alegerea unuia dintre ele fiind determinată de aplicaţia concretă pentru care se proiectează sistemul.

Modul WAIT

Acest mod constă în execuţia instructiunii WAIT. În acest mod se menţine funcționarea oscilatorului şi puterea disipată depinde de gradul de utilizare a temporizatorului şi al interfeţelor de comunicaţie serială. Dacă nu este validată nici o întrerupere externă şi nici circuitele COP sau watch-dog, sistemul va fi oprit. Ieşirea se poate face prin două moduri: lansarea unei întreruperi externe nemascabile sau reset.
La apariţia unei cereri de întrerupere nemascabile MC va intra automat în subrutina de tratare a întreruperii. La întâlnirea instrucţiunii RTI se va intra din nou în modul de aşteptare. Acest mod de lucru este util la folosirea MC pe post de supervizor întrr-un proces în care intervenţia sa nu este necesară permanent.

Prin aplicarea unui ”0” la pinul /RESET sistemul va părăsi modul WAIT şi va relua programul.

Modul STOP

Intrarea în modul STOP constă în executarea instrucţiunii STOP, după ce aceasta a fost în prealabil validată prin stergerea bitului S din registrul CCR, folosind secvenţa de program:

TPA
ANDA#01111111B
TAP
STOP

În modul STOP orice activitate a MC este oprită prin oprirea ceasului intern. Spre deosebire de modul WAIT, prin oprirea ceasului intern în acest mod nu mai pot avea loc comunicaţii.
Ieşirea din acest mod se poate face prin resetarea sistemului sau printr-o cerere de întrerupere externă. La aplicarea unui nivel scăzut la pinul /RESET sistemul va relua programul de la început, urmînd ca după executarea programului să intre din nou în modul STOP.

În cazul părăsirii modului STOP printr-o cerere de întrerupere există două variante de continuare a programului în funcţie de bitul X al registrului CCR:

• dacă X = 1 (întreruperi externe invalidate) atunci la apariţia unei cereri de întrerupere execuţia programului va continua cu instrucţiunea de după STOP;
• dacă X = 0 (întreruperi externe validate) atunci la apariţia unei cereri de întrerupere se va trece la execuţia subrutinei de tratare a întreruperii.

Din momentul lansării comenzii de ieşire din modul STOP şi până la începerea efectivă a rulării programului (sau a subrutinei) va apare o întîrziere de 4064 cicli de tact (aproximativ 2ms) necesari pentru intrarea oscilatorului în regim permanent.

9. Regiștri principali ai MC68HC11

MC are doi regiştrii acumulatori A şi B, fiecare de 8 biţi (împreună formând registrul D de 16 biţi). În general, aceşti regiştri sunt folosiţi la stocarea unor rezultate sau la manipulari de date. Pe lângă aceşti regiștri, în memoria RAM internă se mai află şi regiştrii IX şi IY (regiștri indecşi pentru date), SP (indicator de stivă), PC (registru numarător de program) şi registrul de stare (Figura 1).

microcontrolere-motorola-mc68hc11-f1

Aplicatie: Programarea memoriei EEPROM internă cu ajutorul unui PC.

În Figura 2 se prezintă o schemă minimală necesară programării memoriei EEPROM internă a microcontrolerului MC68HC11. Datele ce se doresc a fi înscrise în EEPROM sunt transmise prin interfaţa serială RS-232 de la un PC. Datele trebuie să se găsească într-un fişier în format S.

microcontrolere-motorola-mc68hc11-f2

Schema conţine pe lângă microcontrolerul propriu-zis şi componentele pasive necesare funcționării acestuia şi un circuit MAX 232. Acesta face deplasarea nivelelor de tensiune ale interfeţei seriale conform standardului RS-232, eliminând astfel necesitatea existenţei surselor suplimentare de tensiune de +12 V, -12 V. Comunicaţia se face pe portul serial SCI al MC68HC11.
MC68HC11 lucrează în modul special bootstrap care este invocat prin aplicarea unui zero logic la pinii MODA şi MODB urmat de un reset hardware.

După reset, MC68HC11 execută secvenţa de program numită bootloader. Aceasta se găseşte în memoria BOOT-ROM internă între adresele $BF40H şi $BFFFH. După realocarea vectorilor în zona BOOT-ROM programul de bootstrap continuă prin iniţializarea portului serial SCI la 7812 baud şi trece la examinarea stării bitului NOSEC din registrul CONFIG. Dacă acesta este pe zero (protejat la citire) bootloader-ul va şterge întreg conținutul memoriei EEPROM si de asemenea conţinutul registrului CONFIG. Ştergerea conţinutului registrului CONFIG va dezactiva funcţia de protecţie. Apoi programul de bootstrap furnizează la portul SCI un semnal de inițiere a transmisiei şi asteapta sosirea primului octet de la PC.

Pentru realizarea transmisiei de date este necesar ca PC-ul să ruleze un program de comunicaţie, o interfaţă de legătură a sistemul cu MC68HC11. Această interfaţă trebuie să asigure selecţia canalului serial al caIculatorului (COM- ului) şi iniţializarea parametrilor transmisiei seriale cum ar fi rata de transfer (uzual 1200 baud).

Din acest moment se poate începe transmisia programului propriu-zis de programare a memoriei EEPROM. Acesta se încarcă de la adresa $0000H în memoria RAM internă a MC68HC11.

Primul octet transmis este $FFH care determină bootloader-ul să ajusteze automat viteza de transfer la 1200 baud a MC68HC11 după PC. În continuare urmează octeţii programului propriu-zis după care, în completare până la 256 de octeţi se transmite $00H.
Dacă apare o eroare în transmisie aceasta se întrerupe şi se reia de la început. Când s-a ajuns la al 256-lea octet, transmisia se termină şi MC68HC11 lansează în execuţie programul recepţionat de la adresa $0000H din memoria RAM internă.

Odată lansat în execuţie, acest program va recepţiona fiecare caracter de la PC ce urmează a fi memorat în EEPROM şi-l va returna înapoi (transmisie cu ecou). Aceasta, pe lânga asigurarea unui mai bun control al transmisiei de date asigură şi sincronismul dintre PC şi MC68HC11. Astfel, se înlătură posibilitatea de suprapunere a datelor datorate timpilor de programare a EEPROM-ului, şi deci nu mai este necesar un mecanism suplimentar de handshake.

Opţiunea de verificare face ca orice eroare de programare produsă să fie transmisă PC- ului şi afişată împreună cu adresa respectiva. Astfel poate fi contorizat şi afişat întreg numărul de erori produse la programare.

Algoritmii de ştergere şi scriere a EEPROM-ului intern sunt prezentaţi în Figura 3 şi respectiv Figura 4. Se poate face atât o ştergere în bloc cât şi una la nivel de octet. În general este necesară ştergerea octetului accesat (ştergerea inseamnă $FFH) urmat de o scriere la aceeaşi adresă.

microcontrolere-motorola-mc68hc11-f3f4

Secvenţa internă de programare implică accesarea registrului PROG (adresa $103BH) pentru păstrarea adresei şi a datei de programat pe durata aplicării tensiunii de programare. Acestă întârziere poate fi realizată atât printr-o buclă software cât şi prin folosirea unui timer intern MC68HC11.

În anexa AN1010 la ”MC68HC11 Reference Manual” al firmei Motorola sunt prezentate cele două programe: interfaţa de comunicatie cu PC-ul – EELOAD.BAS scrisă în BASIC si programul propriu-zis de programare a EEPROM-ului – EEPROGIX.ASC, scris în limbaj de asamblare MC68HCI11. Programul are facilitatea de a realiza şi programarea unui EEPROM extern.

În continuare, se prezintă structura unei linii dintr-un fişier de date în format S:

S1 14 C01E 0B29BDC02A18386A3B6F3B39180926FC39 DE
1 2 3 4 5

1. Tipul înregistrării:

S0 – Antet. Câmpul adresei de încărcare $0000H. Câmpul de cod/date opțional poate conţine informaţii descriptive.
S1 – Cod/date. Câmpul de cod/date conține cod executabil sau date.
s9 – Sfârşit. Câmpul adresei de încărcare conţine opţional adresa de execuţie. Câmpul de cod/date lipseşte, există doar suma de control.

2. Numărul de caractere HEX ce urmează (Len).

3. Câmpul adresei de încărcare a memoriei (Ldhi, Ldlo).

4. Câmpul de cod/date. Are de la 0 la N octeţi de cod/date.

5. Suma de control.

Observaţie: În afară de primul caracter S toate celelalte sunt simboluri hexa.

Bibliografie:
1 *** 68HC11 Reference Manual, Motorola 1990
2 Pittman, C. Design with microcontrollers, MacGraw Hill 1990.

m68hc11e-datasheet

Articol publicat in revista RET

Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Comments
Inline Feedbacks
View all comments
back to top