Sei sulla pagina 1di 227

Arhitecturi de microcalculatoare

• Von Neuman
• Caracteristici:

• Magistrala comuna
pentru memoria de
program si de date
• Exemplu tipic:
• Motorola HC11
• Arhitectura Harvard
• Caracteristici:
• magistrale distincte
pentru program si date

• Exemplu tipic
• Atmel AVR
Consecinte ale arhitecturii Harvard
– The presence of the second bus makes the following things possible:
While an instruction is executed, the next instruction can be fetched
from the program memory. This technique is called pipelining and
brings a significant increase of the computer speed.
The program memory can be organized in words of a different size,
usually larger, than the data memory. Wider instructions mean a
greater data flow to the CPU, and therefore the overall speed is
higher.
Such architecture, along with reducing and optimizing the instruction
set, allow that most instructions execute in a single machine cycle.
Since the Harvard architecture is often accompanied by the reduction
of the size and complexity of the instruction set, the computers with
this architecture are also called RISC. (Reduced Instruction Set
Computers) For example, some PIC microcontrollers have an
instruction set of only 35 instructions, compared to more than 100 of
HC11. The speed increase is even higher.
Consecinte asupra organizarii spatiului de adrese

• Harta memoriei in
cazul unui
microcontroller HC11
• Harta memoriei
pentru un
microcontroller
din seria Atmel
AVR
• Se observa ca aici
exista 3 spatii de
adrese
Registrele interne ale CPU

• HC11 • AVR
• Doi acumulatori A si B. Pot fi • 32 acumulatori R0-R31
concatenati pentru a forma un • R26-R27, R28-R29, R30-R31
registru dublu D can be concatenated to form the
• Doua registre index X si Y X, Y, Z , registers
• Stack pointer • Stack pointer SP
• Registrul de stare CPU denumit • registrul de stare CPU denumit
CCR SREG
• Numaratorul de program PC • Numaratorul de program
Interfetele periferice

• Any peripheral
interface contains
one or more
control and status
registers, and one
or more data
registers
• These registers are,
normally, located
in the address
space of the data
memory, and are
accessed as RAM
locations
Interfete periferice uzuale

The I/O (Input/Output) ports.


The asynchronous serial interface (SCI, UART)
The synchronous serial interfac(SPI)
Several types of timers
The Analog to Digital (A/D) converters
Sistemul de intreruperi

Definitie:
• An interrupt is a mechanism that allows an
external event to temporarily put on hold the
normal execution of the program, forcing the
execution of a specific subroutine. Once the
interrupt service subroutine completes, the main
program continues from the point where it was
interrupted.
Procesul de tratare a unei intreruperi

– .The identification of the interrupt source. This is automatically


done by hardware.
– .Saving the current value of the PC register, thus providing a
means to return from the interrupt service routine. The contents of
PC is saved to the stack, and the operation is also done by
hardware.
– .Then, the PC is loaded either with, or from the address of a
reserved memory area, called interrupt vector. For each possible
interrupt, a unique vector is assigned. The interrupt vectors are
hardwired and cannot be modified by user.
– .At the address of the interrupt vector, the program must contain
either the address of the interrupt service routine (HC11 uses this
technique) or an instruction for an unconditional jump to this
routine (AVR and 8051 work this way).
Tratarea unei intreruperi - continuare

• The next step is the execution of the interrupt service routine (ISR).
This is a program sequence similar to a subroutine, but ended with a
special instruction called Return from Interrupt (RTI, RETI).
• Observatie importanta: STAREA masinii trebuie salvata prin soft
inainte de executia rutinei de intrerupere si restaurata dupa executia
rutinei de intrerupere.
• The final step in handling an interrupt is the actual return to the main
program. This is done by executing a RTI (RETI) instruction as
mentioned before. When this instruction is encountered, the contents of
PC, saved in step 2, is retrieved from stack and restored, which is
equivalent to a jump to the point where the program was interrupted.
Intreruperi - note importante

The stack is essential for the interrupt system. Both the PC and the
CPU status are saved in the stack when handling interrupts.
Therefore, the SP must be initialized by software before enabling
the interrupts.
The interrupt service routine must save the CPU status and restore
it before returning to the main program.
If two or more interrupt requests occur simultaneously, they are
serviced in a predetermined, order according to a hardwired
priority
Controlul asupra intreruperilor

• Exista o dubla conditionare a


intreruperilor
• The software control over the
interrupt system is exerted
either globally, by
enabling/disabling all the
interrupts by means of specific
instructions, or individually, by
setting or clearing some control
bits, called interrupt masks,
associated with each interrupt.
Conditionarea intreruperilor

• The INTERRUPT FLAG is the actual interrupt source, and, usually, is a


flip-flop set by the external event. This bit is, in most cases, accessible for
the program as a distinct bit in the status register of the peripheral
interface.
• The LOCAL INTERRUPT MASKS are control bits, located in the control
registers of the interface. When set to 1 by software, the interrupts from
that specific interface are enabled.
• The GLOBAL INTERRUPT MASK is a bit located in the CPU status
register (CCR, SREG,PSW) that enables or disables all interrupts.
• In some cases, it is required that the CPU is informed immediately about
some important internal or external events, regardless of the status of the
global interrupt mask. The solution to this problem is the non-maskable
interrupt, which is unconditionally transmitted to the CPU. A special case
of non-maskable interrupt can be considered the RESET. Basically, the
behavior of the MCU at RESET is entirely similar to the process of
identification and execution of a non-maskable interrupt.
Particularitati ale sistemului de intreruperi al HC11

• Starea masinii este salvata automat in stiva la recunoasterea unei


intreruperi si este restaurata automat la revenirea din rutina de
intrerupere
• Admite intreruperi nemascabile (XIRQ, SWI si TRAP)
• Controlul global asupra intreruperilor se face cu ajutorul bitului I din
registrul CCR. Acesta este afectat de intructiunile specifice SEI (Set
Interrupt Mask - echivalent cu Disable Interrupts) si CLI - (Clear
Interrupt Mask - echivalent cu Enable Interrupts)
• Exista un registru denumit HPRIO (Highest Priority Interrupt) cu
ajutorul caruia se poate alege intreruperea cu prioritate maxima
• Zona de vectori de intrerupere este plasata la sfarsitul spatiului de
adrese ($FFC0-$FFFF)
• Vectorul contine adresa rutinei de intrerupere
Particularitati ale intreruperilor la AVR

The interrupt vector does not contain the address of the


interrupt service routine, but a jump instruction to that
routine.
The vector area is located at the beginning of the
program memory address space, between the addresses
$0000-$0010.
There are no non-maskable interrupts besides RESET.
The I bit in SREG acts differently, compared to HC11:
when I=1, the interrupts are enabled.
There is no equivalent to the HPRIO register, and no
other means to modify the hardwired relative priority of
interrupts.
Exemplu de initializare a vectorilor de intrerupere la
HC11

MAIN ....... ;Program entry point at


;RESET
.......
ORG $FFFE ;store the value of the
;label MAIN at $FFFE-$FFFF
DW MAIN
Exemplu de initializare a vectorilor de intrerupere la
AVR

.......
.ORG $000C
RJMP ANA_COMP ;unconditional jump to the
;interrupt handler
.......
ANA_COMP:
.......
RETI
Porturile de intrare-iesire ale
microcontrollerelor

Porturile I/O sunt cea mai simpla interfata.


In acest capitol, vom analiza structura tipica a unui
astfel de port,vom sublinia cateva din
caracteristicile electrice si vom analiza cateva
scheme simple de conectare cu dispozitive
externe.
Schema de principiu a circuitelor asociate cu liniile
I/O

• O linie de intrare conecteaza un pin


al MCU la busul intern prin
intermediul unui buffer tri-state.
• Consecinta - linia de intrare este
esantionata doar cand se decodifica
o instructiune de citire a portului
(semnal RP activ).
• Linia de iesire are asociat un latch.
In cursul unei instructiuni Write
Port, data de pe busul intern se
scrie in latch si ramane acolo pana
la o noua scriere.
Linii I/O bidirectionale
• In practica se folosesc linii
bidirectionale care pot fi
configurate prin soft ca linii de
intrare sau de iesire.
• In acest scop se asociaza cu fiecare
port un registru denumit Data
Direction Register (DDR)
• Scriind 1 in DDR, portul este
configurat ca port de iesire. Scriind
0, liniile asociate sunt configurate
ca linii de intrare.
• In cadrul aceluiasi port se pot
configura o parte linii ca intrari si
restul ca iesiri.
Similitudini cu structura generala
a unei interfete
• Registrul de control este
registrul de directie
• Registrul de date este latch-ul
asociat cu portul
• De multe ori tranzitia unei linii
I/O poate genera direct
intrerupere
Caracteristici electrice ale liniilor
I/O
• Reguli generale
• Orice intrare poate evolua intre potentialul GND si
potentialul Vdd
• Cu rare exceptii, orice iesire poate genera sau absorbi un
curent maxim de circa 2mA. Orice circuit sau dispozitiv
care nu respecta aceste reguli poate fi conectat la un MCU
doar prin intermediul unor circuite speciale de adaptare,
adecvate.
Exemple de circuite de intrare
• Schema de conectare a
unui buton
Intrare izolata optic
• Un exemplu de izolare
galvanica a unei intrari
cu ajutorul unui
optocuplor.
Exemplu de driver de iesire
• Un driver uzual de
iesire ULN2803 si
schema lui interna (un
canal din 8)
Controlul liniilor I/O prin
program (HC11)

INIT_PORTD LDAA #$30 ;configure PORTD, bit 4,5 as


STAA DDRD ;output
Particularitati la AVR
• Registrul de date al unui port
I/O la AVR este ―divizat‖ in
doua parti.
• La scriere se scrie in PORTx
• La citire, se citeste PINx
• O operatie de scriere intr-un
port configurat ca intrare, are ca
efect conectarea unor rezistente
interne de pull-up la pin.
Exemplu de utilizare a unui port
la AVR
• LDI R16, $F0 ;configure upper nibble of PORTB
;as output
• OUT DDRB,R16
• LDI R16,$0F
• OUT PORTB,R16 ;enable internal pull-ups on
;lower nibble and write 0 in the
;upper nibble
• IN R0,PINB ;read the input lines
Alt exemplu cu AVR
– LDI R16,$F0 ;configure port
• OUT DDRC,R16
• LDI R16,$0F ;enable pull-ups
• OUT PORTC,R16
• IN R16,PINC ;read input lines
• SWAP R16 ;swap nibbles
• SBR R16,$0F ;keep pull-ups active
• OUT PORTC,R16 ;write to port

• Citeste starea PINC0-3 si o scrie in bitii PORTC4-7.


Proiectarea sistemelor cu
microprocesoare
Interfete de comunicatie asincrona ale
microcontrollerelor
Definitii
• O transmisie de date
este ―seriala‖ atunci
cand bitii de
informatie sunt
transmisi bit dupa bit,
in serie.
• Exemplu: transferul
datelor intre doua
registre de deplasare
Transmisii sincrone/asincrone
• O transmisie de date este
sincrona daca transmitatorul
genereaza si transmite un clock
de sincronizare.
• In cazul transmisiei asincrone,
transmitatorul si receptorul au
fiecare cate un ceas propriu.
• Este insa necesar ca frecventele
ceasurilor de la transmitator si
receptor sa fie egale.
Viteze standardizate in comunicatii asincrone

• Viteza de comunicatie se masoara in biti pe


secunda sau ―baud‖.
• Vitezele standardizate sunt:
• 110,300,600,1200,2400,4800,9600,19200,
• 38400, 57600, 115200 baud.
• Perioada ceasului de transmisie se numeste
―timp de bit‖.
Mecanismul de sincronizare in transmisiile
asincrone
• Bitii sunt grupati in pachete, de
obicei de 8 biti.
• Fiecare pachet e delimitat de un
bit de start si unul de stop.
• Starea de repaus a liniei este
HIGH
• Bitul de start are intotdeauna
polaritate opusa starii de repaus
• Bitul de stop are intotdeauna
polaritatea starii de repaus.
• Primul bit transmis este LSB
Detectia erorilor in transmisii asincrone

• Bitul de start se esantioneaza de doua ori - odata pe frontul cazator si


apoi la mijlocul timpului de bit. Daca la verificare nu se gaseste linia in
LOW la mijlocul Tb, se detecteaza o eroare de tip NOISE.
• Se verifica starea liniei in momentul bitului de stop. Daca nu este
HIGH se detecteaza o eroare de incadrare (framing error)
• Optional se poate introduce un control de paritate la nivelul fiecarui
octet. De defineste un bit de paritate (care poate fi MSB sau un al
noualea bit atasat fiecarui octet in pozitia MSB) astfel calculat incat
numarul total de biti de 1ai octetului sa fie par (EVEN) sau impar
(ODD). Daca bitul de paritate calculat si transmis nu coincide cu
valoarea recalculata la receptie se detecteaza o eroare de paritate.
• Suplimentar, se pot grupa octetii in ―pachete‖ si se adauga mecanisme
de verioficare a integritati intregului pachet. (CRC).
Simplex/Duplex

• O transmisie unidirectionala se numeste simplex.


• O transmisie bidirectionala se numeste duplex
• O transmisie este full duplex daca fiecare dispozitiv de
comunicatie poate emite si receptiona in acelasi timp. Intr-
o astfel de comunicatie exista de fapt doua canale - unul
pentru emisie si altul pentru receptie.
• O transmisie este half duplex daca fiecare dispozitiv de
comunicatie poate emite si receptiona date succesiv.
UART/USART
• UART=Universal
Asynchronous Receiver
Transmitter
• USART=Universal
Synchronous Asynchronous
Receiver Transmitter
• SCI - denumirea generica a
UART-urilor implementate in
majoritatea microcontrollerelor
(Serial Communication
Interface)
Registrele SCI la HC11F1 si AVR
(AT90S8535)
• BAUD - controleaza • UBRR -USART Baud
divizoarele care genereaza Rate Register
ceasurile de • USR - USART Status
emisie/receptie Register
• SCSR - SCI Status • UCR - USART Control
Register Register
• SCCR1, SCCR2 - SCI • Nota: la unele AVR-uri
control registers denumirile registrelor sunt
diferite (vezi foaia de
catalog pt. Fiecare)
Structura registrelor de control si stare ale SCI
la HC11 - Registrul BAUD

BAUD 7 6 5 4 3 2 1 0
TCLR - SCP1 SCP0 RCKB SCR2 SCR1 SCR0
RESET 0 0 0 0 0 0 0 0
Bitii registrului BAUD - Controlul prescaller-ului

• SCP1 SCP0 Prescaller divide by:


• 0 0 1
• 0 1 3
• 1 0 4
• 1 1 13
Bitii registrului BAUD. Controlul divizoarelor
de frecventa

SCR2 SCR1 SCR0 Prescaller output is


divided by:
0 0 0 1
0 0 1 2
0 1 0 4
0 1 1 8
1 0 0 16
1 0 1 32
1 1 0 64
1 1 1 128
Exemplu de calcul a constantelor pentru
programarea baud rate

Example
Knowing that the oscillator frequency is 8 MHz, and that the out-
put frequency of the baud generator must be 16 times the actual
baud rate, determine the value to write in the BAUD register in or-
der to obtain 9600 baud communication speed.
The input clock for the prescaller is the system clock E.
fE=fOSC/4=2MHz=2000000Hz
The output clock must have the frequency:
f1=9600*16=153600 Hz
This gives the global division rate: 2000000/153600=13.
Choose the prescaller to divide by 13 (SCP1:SCP0=1:1), and the
secondary counter to divide by 1 (SCR2:SCR1:SCR0=0:0:0). The
resulting value for BAUD register is 00110000b=30H.
SCSR - SCI Status Register

• SCSR 7 6 5 4 3 2 1 0

• TDRE TC RDRF IDLE OR NF FE -

• RESET 0 0 0 0 0 0 0 0
Bitii de stare din SCSR
• TDRE – Transmitter Data Register Empty
• 0 – SCDR busy
• 1 – SCDR ready for a new operation
• TC — Transmit Complete Flag
• 0 = Transmitter busy
• 1 = Transmitter ready
• RDRF — Receive Data Register Full Flag
• 0 = SCDR empty
• 1 = SCDR full
• IDLE —Rx Idle Line Detected Flag
• 0 = RxD line is active
• 1 = RxD line is idle
• OR — Overrun Error Flag
• 0 = No overrun
• 1 = Overrun detected
• NF — Noise Error Flag
• FE — Framing Error
• All error bits are cleared by reading SCSR followed by a read from SCDR.
Registrul SCCR1

SCCR1 7 6 5 4 3 2 1 0

R8 T8 - M WAKE - - -

RESET 1 1 0 0 0 0 0 0

Daca bitul M=1 (MODE) atunci se selecteaza transmisia pe 9 biti - iar


T8 si R8 sunt bitii cei mai semnificativi ai caracfterului
transmis/receptionat.
WAKE - se refera la un regim de functionare care nu ne intereseaza
acum.
Registrul SCCR2

SCCR2 7 6 5 4 3 2 1 0

TIE TCIE RIE ILIE TE RE RWU SBK

RESET 1 1 0 0 0 0 0 0

Cei mai importanti biti de aici sunt TE - Transmitter Enable


si RE - Receiver enable. Cand sunt pe 1 se activeaza
intregul bloc al transmitatorului respectiv receptorului.
Bitii de control din SCCR2
TIE=0 TDRE interrupts disabled
TIE=1 An interrupt request is generated when TDRE=1.
TCIE=0 TC interrupts disabled
TCIE=1 SCI interrupt requested when TC status flag is set
RIE=0 RDRF and OR interrupts disabled
RIE=1 SCI interrupt requested when RDRF (receiver data
register full) flag or the OR (overrun error) bit in SCSR is set
ILIE=0 IDLE interrupts disabled
ILIE=1 SCI interrupt requested when IDLE status flag is set
RWU - Receiver Wakeup Control
RWU=0 Normal SCI receiver
RWU=1 Wakeup enabled and receiver interrupts inhibited
SBK=0 Break generator off
SBK=1 = Break codes generated
Interfata asincrona a AVR
Registrul de control al vitezei de comunicatie
UBRR – UART Baud Rate Register - este similar cu BAUD, dar mai
simplu de folosit
16*BaudRate=Fosc/(UBRR+1)

Registrul de stare a UART-ului


USR 7 6 5 4 3 2 1 0
RXC TXC UDRE FE OR - - -
Bitii de stare din USR
RXC – Reception Complete. Similar cu RDRF of the HC11. It is
automatically set by hardware when a character is available in
UDR. It is cleared by reading UDR, or when the associated
interrupt is executed.
TXC – Transmission complete. Similar cu TC de la HC11.
TXC is automatically cleared when the associated interrupt is
executed or by writing 1 to the corresponding position of USR.
This is the only Read/Write bit of USR. All other bits are Read
Only.
UDRE – USART Data Register Empty. Similar cu TDRE de la
HC11
OR – Overrun, and FE – Framing Error Similari cu OR si FE de la
HC11
Registrul de control al UART-ului (UCR)

UCR 7 6 5 4 3 2 1 0

RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8

Cei mai importanti biti de aici sunt RXEN si TXEN, complet


similari cu RE si TE de la HC11
Bitii de control din UCR

RXCIE - masca de intrerupere pentru RXC


TXCIE - masca de intrerupere pentru TXC
UDRIE - masca de intrerupere pentru UDRE
CHR9 – Similar cu M de la HC11.
TX8 si RX8 sunt bitii cei mai semnificativi
cand CHR9=1.
Programarea SCI la HC11

Initializarea consta in:


- activarea transmitatorului si receptorului
- selectarea vitezei de transmisie
- optional - activarea unor intreruperi.
Secventa de initializare se executa o singura data dupa
RESET.
Exemplu de initializarea SCI la HC11

INIT_SCI LDAA #$30


STAA BAUD ;9600 baud
CLR SCCR1;clear M
LDAA #$0C ;TE=1, RE=1
STAA SCCR2;no interrupts
….
O rutina de receptie

SCI_REC LDAA SCSR ;read status register


ANDA #$20 ;isolate RDRF bit
BEQ FRET ;failure return
LDAA SCDR ;get character
STAA SOMEWHERE ;and save it
SRET SEC ;Set Carry to inform
RTS ;the main program
FRET CLC ;Clear carry
RTS
Rutina de emisie a unui caracter
SCI_SEND TAB ;save character to B
SSLOOP LDAA SCSR
ANDA #$80 ;isolate TDRE
BEQ SSLOOP
STAB SCDR ;send character
RTS ;and return
O rutina de intrerupere pentru receptia unui
caracter
SCI_ISR LDAA SCSR
LDAA SCDR ;get character
STAA SCIRB ;save it in a buffer
INC QSCI ;true QSCI
RTI
Nivelul fizic al sistemelor de
comunicatie seriala asincrona
Principiile realizarii unor retele de
microcontrollere
Structura generala a unei legaturi de date

• DTE=Data
Terminal
Equipment (ex.
computer, PLC,
etc.)
• DCE=Data
Communication
Equipment (ex.
Modem)
Standardul RS232

Codificarea electrica a informatiei


este de tip “single ended”, adica
informatia este transmisa pe un
singur fir, iar bitii 1 si 0 sunt
definiti prin nivele de tensiune
fata de o referinta comuna.
La emisie:
0L=+12V
1L=-12V
Circuitele de receptie trebuie sa fie
capabile sa discearna nivele de
tensiune intre +3V si –3V pentru
0 si 1.
Semnalele de handshake la RS232

DCD – Data Carrier Detect.


DTR – Data Terminal
Ready. Semnal setat de DTE
DSR – Data Set Ready.
Raspunsul la DTR
RTS – Request To Send –
cerere de transmisie
CTS – Clear To Send – este
raspunsul la RTS si indica faptul ca
modemul are loc in buffer si poate
prelua efectiv datele.
Structura cablului ―null-modem‖

Conector DB9 – mama la amble capete


Semnal Pin Semnal Pin
Rxd 2 Txd 3
Txd 3 Rxd 2
RTS 7 CTS 8
CTS 8 RTS 7
DTR 4 DSR 6
DSR 6 DTR 4
GND 5 GND 5
Un circuit tipic de interfata RS232

• Contine doua drivere


de emisie si doua
receptoare
• Se alimenteaza de la o
singura sursa de +5V
si genereaza intern
tensiunile de +12V si -
12V necesare
Dezavantajele RS232

•Lungimea maxima a liniei de comunicatie este


limitata la 15m,
•Viteza de comunicatie (pentru un cablu de 15m) este
limitata la 19200 baud,
•Topologie stricta point to point,
•Vulnerabilitate mare la perturbatii elecromagnetice.
Transmisia diferentiala Standardul RS422

• Standardul RS422 a fost conceput sa elimine aceste


inconveniente.
• Principala inovatie consta in codificarea diferentiala a
semnelelor de pe linie.
• Datele nu mai sunt codificate printr-o tensiune pozitiva sau
negativa fata de masa, ca in cazul transmisiei single-ended, ci
prin diferenta de potential intre doi conductori.
• Pretul eliminarii dezavantajelor interfetei RS232 este dublarea
numarului de conductori necesari pentru transmisie.
Standardul RS422

Cu acest mod de codare


electrica a semnalelor pe linia
de comunicatie, standardul
RS422 asigura urmatoarele
performante:
•Viteza maxima de comunicatie
de pana la 10Mbps
•Lungimea liniei de pana la
1200m, dar nu la viteza maxima
•Topologii multidrop cu pana la
10 receptoare conectate la un
driver
Forma de unda a semnalelor la o transmisie
RS422
• Oscilogramele din figura
alaturata reprezinta nivelele de
tensiune pe cele doua linii de
comunicatie A si B, masurate
fata de masa.
• Codificarea informatiei
transmise se face prin diferenta
intre tensiunile de pe cele doua
linii. (VA>VB inseamna 1
logic, VA<VB inseamna 0
logic).
Topologii posibile cu RS422

• Point to point simplex


Topologii cu RS422

• Point to point duplex


• Necesita 4 fire
Topologii cu RS422

• Multidrop simplex
• Sunt admise pana la 10
receptoare conectate la
acelasi transmitator.
• RS422 nu permite realizarea
unor topologii multipoint, cu
alte cuvinte, pe o linie de
comunicatie poate fi
conectat un singur circuit
driver. Acest neajuns a fost
rezolvat prin introducerea
standardului de interfata
RS485.
Standardul RS485

• Transmisia este tot diferentiala


ca la RS422.
• Diferenta esentiala este ca la
RS485 driverul poate trece intr-
o stare de inalta impedanta
• Aceasta permite topologii
multidrop in care un numar de
pana la 32 de drivere se pot
conecta pe acelasi bus.
• Conditia este ca UN SIGUR
DRIVER sa fie activ la un
moment dat (transmisie half-
duplex).
Un circuit tipic de interfata RS485
MAX485-SN75176
• Circuitele SN75176
(MAX485) sunt
prevazute cu intrarile de
comanda DE/RE\ care
activeaza sau
dezactiveaza individual
driverul si receptorul.
Un exemplu de convertor RS232-RS485

• Circuitul din figura


alaturata foloseste unul
din semnalele de
handshake ale interfetei
RS232 (RTS) pentru
controlul directiei de
transfer pe busul RS485.
Retele de microcontrollere cu comunicatie
seriala
• Un numar de dispozitive de comunicatie, conectate intr-o topologie
multidrop, formeaza o retea daca fiecare dispozitiv respecta un set de
reguli de acces la busul comun.
• Setul de reguli se numeste PROTOCOL DE COMUNICATIE.
• Un protocol este de tip MASTER-SLAVE atunci cand in sistem exista
un singur dispozitiv abilitat cu capacitatea de a initia secvente de
comunicatie pe bus.
• Dispozitivul MASTER initiaza o secventa de comunicatie trimitand pe
bus un pachet de date, care va fi receptionat de toate dispozitivele
SLAVE din retea.
• Un singur SLAVE are dreptul sa raspunda la interogarile emise de
MASTER si anume, acel SLAVE care isi recunoste propria adresa in
pachetul receptionat.
Structura generala a pachetelor de date
vehiculate intr-o retea

Header Body CRC Tail


• Campurile Header si Tail sunt secvente predefinite care delimiteaza
inceputul si sfarsitul pachetelor
• Campul Body trebuie sa contina adresa SLAVE-ului caruia ii este
destinat pachetul, un OPCODE si (optional) o zona de date.
• Campul CRC (Control Redundant Ciclic) este o suma de control care
permite detectarea eventualelor erori de comunicatie.
• Un exemplu de protocol MASTER-SLAVE este protocolul MODBUS,
foarte raspandit in automatizari industriale.
Alte tipuri de comunicatie seriala
si sisteme cu microcontrollere
•Interfata de comunicatie sincrona
SPI
•Interfata I2C
SPI - Synchronous Peripheral Interface
• Interfata SPI este prezenta in
structura majoritatii
microcontrollerelor
• MASTER-ul genereaza clock-
ul de transfer
• Este FULL DUPLEX
• Sunt 4 semnale de dialog pe
inertfata:
• MOSI - MASTER Out Slave In
• MISO - MASTER In Slave Out
• SCK - Serial Clock
• SS - SLAVE Select
Structura generala a SPI
• Recunoastem structura
generala a unei
interfete, cu registre de
date, control si stare.
• Registrele de
deplasare au clock
comun adica EMISIA
SI RECEPTIA AU
LOC SIMULTAN
Registrele SPI la HC11
• SPDR - SPI Data Register
• La scriere, se scrie direct in registrul de
deplasare al transmitatorului
• La citire, se citeste ultimul caracter primit
integral
• Daca incercam sa scriem in SPDR inainte
de terminarea emisiei caracterului curent, se
genereaza o conditie de eroare (WCOL).
Registrele SPI la HC11 - SPSR
• SPSR - SPI STATUS REGISTER
7 6 5 4 3 2 1 0

SPIF WCOL - MODF - - -


SPIF=1 - SPI transfer completeEste setat automat la terminarea
transferului si sters prin citirea succesiva a SPSR si SPDR
WCOL - Write Collision - se seteaza cand incercam sa scriem in SPDR
inainte de incheierea trasnferului curent
MODF - MODE FAULT - Eroare de configurare. Apare atunci cand linia
SS este adusa in starea LOW (fortare in mod SLAVE) iar dispozitivul
este configurat soft ca MASTER.
Registrele SPI la HC11 - SPCR
• SPCR - SPI Control Register
7 6 5 4 3 2 1 0

SPIE SPE DWOM MSTR CPOL CPHA SPR1 SPR0


SPIE - SPI INTERRUPT ENABLE
SPE - SPI ENABLE
DWOM - PORTD WiredOR Mode (Nu are gegatura cu SPI)
MSTR - Configureaza dispozitivul ca MASTER
CPOL - Clock Polarity
CPOL=0 SCK line idles LOW
CPOL=1 SCK line idles HIGH
Registrul SPCR - continuare
CPHA - Clock Phase
CPHA=0 SS trebuie sa urce in HIGH intre doua
transferuri
CPHA=1 SS poate fi mentinut in LOW permanent
SPR1-SPR0 SCK is E clock divided by:
0 0 2
0 1 4
1 0 16
1 1 32
Exemplu de initializare a SPI la HC11
*MASTER SPI initialization routine
SPI_INITM LDAA #$20
STAA DDRD
BCLR PORTD,$20 ;make SS=0
LDAA #$56 ;SPI enable, Master,
;CPHA=1 clock:32
STAA SPCR
RTS
* SLAVE SPI initialization routine
SPI_INITS LDAA #$C6 ;SPIE, SPE, Slave, CHPA=1
;clock:32
STAA SPCR
RTS
Interfata SPI la AVR

• Denumirile registrelor sunt identice ca la


HC11. Chiar si bitii de control si stare au
denumiri foarte asemanatoare.
• Totusi, unele AVR-uri au o asa-numita USI
(Universal Serial Interface) in loc de SPI
• In acest caz registrele sunt denumite
USIDR, USISR, USICR
SPSR la AVR
7 6 5 4 3 2 1 0
SPIF WCOL - - - - - -
Lipseste bitul MODF, pentru ca AVR-urie se
comporta diferit. Daca SS este tras LOW cand
dispozitivul este configurat soft ca MASTER, se
sterge automat bitul MASTER din registrul de
control.
SPIF si WCOL au aceeasi semnificatie si
comportament
SPCR la AVR
7 6 5 4 3 2 1 0

SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0


DORD=1 LSB of the data word is transmitted first
DORD=0 MSB of the data word is transmitted first.
SPR1-SPR0 SCK is the system clock divided by:
0 0 4
0 1 16
1 0 64
1 1 128
Exemplu de initializare a SPI la AVR
init_spim: sbi ddrb,5
sbi ddrb,7
sbi ddrb,4
ldi r16,0x54
out spcr,r16
ret
init_spiS: ;SLAVE initialization
cbi ddrb,5 ;
cbi DDRB,6
cbi ddrb,7
cbi ddrb,4
ldi r16,0xC4
out spcr,r16
ret
Exemplu de folosire a SPI - conectarea a
doua microcontrollere
Emisia unui caracter de la MASTER
SPI_SENDCH LDAA SPSR ;wait for SPIF
ANDA #$80
BEQ SPI_SENDCH ;wait
LDAA XSPI
STAA SPDR ;send it
SPS05 LDAA SPSR ;wait for end of
;transmission
ANDA #$80
BEQ SPS05
LDAA SPDR ;read the byte
STAA RSPI
RTS
Rutina de receptie cu intrerupere la SLAVE
SPISVC LDAA SPSR ;read SPSR
LDAA SPDR
STAA SPIRDATA
INC QSPI ;true QSPI
LDAA SPIXDATA
STAA SPDR
RTI
Exemplu de folosire a SPI - adaugarea unui
port de intrare si de iesire
• Portul de intrare este
realizat cu un circuit
SN74165 - registru cu
intrare paralel si iesire
serie
• Portul de iesire este
realizat cu un registru
CD4094 - cu intrare serie
si iesire paralel
• Amblele controlate de
acelasi clock SCK
Exemple de circuite cu interfata SPI

• MC14489 - driver pentru 24 LED-uri (Freescale


Semiconductors)
• M25P05 - memorie flash de 512Kbit (ST
Microelectronics)
• XTR-VF-2.4-LP - tansceiver radio in 2.4GHz cu interfata
SPI (Aur-EL)
• MAX6627/MAX6628 senzor de temperatura cu convertor
A/D de 12 biti (MAXIM)
• L9929 - H Bridge motor driver (ST Micro)
Bus-ul I2C Caracteristici generale
• Bus-ul propriu-zis este format din doi conductori
denumiti SDA (Serial Data) si SCL (Serial Clock)
• Fiecare dispozitiv conectat la bus poate deveni (in
principiu) MASTER pe bus
• Fiecare dispozitiv are o adresa unica pe bus
• Liniile SDA si SCL sunt ambele bidirectionale
open collector, sau open drain, cu rezistente la Vcc
• Starea de repaus a liniilor SDA si SCL este HIGH
Descrierea protocolului I2C
1. Dispozitivul MASTER genereaza o conditie de START pe bus
2. MASTER genereaza 8 impulsuri SCL controland linia SDA in asa fel
incat transmite un octet care contine adresa SLAVE si tipul
transferului (citire/scriere). Receptoarele esantioneaza linia SDA atunci
cand SCL este HIGH. SDA poate sa-si schimbe starea NUMAI atunci
cand SCL este LOW.
3. MASTER genereaza un al noualea puls SCL, cu linia SDA inactiva.
Dispozitivul SLAVE care si-a recunoscut adresa trage linia SDA in
LOW, generand in acest fel o conditie ACK.
4. MASTER continua sa genereze pachete de cate 9 pulsul SCL,in timp
ce linia SDA este controlata fie de MASTEr fie de SLAVE in functie
de tipul transferului (citire sau scriere) Dupa fiecare octet transferat
RECEPTORUL emite ACK (la citire receptorul este MASTER-ul)
5. Procesul continua pana cand MASTER genereaza o conditie de
STOP.
Forma de unda a semnalelor in cazul I2C-
START
• Conditia de START
consta intr-o tranzitie
HIGH to LOW a liniei
SDA cand linia SCL
este HIGH
Transferul datelor pe busul I2C
• Datele au voie sa se
schimbe NUMAI cand
SCL este LOW
• Primul bit transferat
este MSB
• Figura alaturata
contine reprezentarea
conditiei de START si
transferul bitilor 1101
Conditia I2C stop
• Conditia de STOP
consta intr-o tranzitie
LOW to HIGH a liniei
SDA cand SCL este
HIGH.
• Dupa STOP ambele
linii revin in starea de
repaus.
Conectarea unor memorii I2C la un
microcontroller
• Se observa ca cele
doua memorii au
adresele cablate la 000
respectiv 001.
• Rezistentele R1, R2 au
valoarea tipica de
10K.
Exemplu de implementare soft a conditiilor de
START si STOP pe busul I2C
I2CSTART BSET PORTA,SCL
JSR DELAY ;wait a few microseconds
BCLR PORTA,SDA ;HIGH to LOW
JSR DELAY
RTS
I2CSTOP BSET PORTA,SCL
JSR DELAY
BSET PORTA,SDA
JSR DELAY
RTS
Exemple de periferice I2C

• Cea mai comuna utilizare a busului I2C este


pentru conectarea unor memorii la
microcontrollere (seria 24Cxx de memorii
flash/EEPROM)
• Exista si alte circuite cu interfata I2C -
display-uri, senzori, convertoare A/D si
D/A.
One wire interface
Cursul contine o prezentare succinta a
protocolului de comunicatie 1-Wire si
o recapitulare a interfetelor de
comunicatie seriala sincrona si
asincrona
Protocolul 1 Wire
• Figura alaturata
prezinta structura
generala ca ―stiva‖ de
7 layer-e a oricarui
protocol de
comunicatie.
• Notati faptul ca nu
este obligatoriu ca
TOATE layerele sa fie
implementate.
Layer-ul fizic
• La nivelul fizic,
protocolul 1 wire se
deruleaza pe un bus
open collector/open
drain.
Layer-ul Data link
• Figura alaturata
prezinta formele de
unda pe bus-ul 1W
pentru initierea
dialogului.
• RESET PULSE este
emis de MASTER
• PRESENCE PULSE
este emis de SLAVE
Layer-ul data link continuare
• Forma de unda pe bus la
scrierea unui bit 1.
• Remarcam prezenta unui
impul de sincronizare
emis de MASTER, activ
LOW, cu durata intre 1-
15us.
• Timpul de bit (SLOT
TIME) are valoarea intre
60-120us.
Layer-ul data link - continuare
• Forma de unda pentru
un bit cu valoarea 0.
Layer-ul data link - continuare
• Esantionarea liniei la
citire se face la 15us
dupa frontul cazator al
impulsului de
sincronizare emis de
MASTER.
• Un nou SYNC poate fi
emis doar dupa
expirarea SLOT TIME
Intrebari recapitulative
• Unde am mai intalnit bus-uri open
collector?
• Comunicatia pe un bus 1-Wire este
sincrona sau asincrona?
• Dar la I2C? Dar la SPI? Dar la UART?
Folosirea timerelor interne ale
microcontrollerelor
Timerele de uz general
O definitie a timerului
Un timer este un circuit (subsistem) destinat sa
rezolve una sau mai multe din urmatoarele
probleme:
•Generarea unor intervale precise de timp
•Masurarea duratei unor procese interne sau externe
•Numararea unor evenimente externe
•Generarea unor impulsuri modulate in durata
•Watchdog
Structura unui timer
• Elementul central al
oricarui timer este un
numarator - TCNT
• Evenimente legate de
acest numarator:
• Depasirea capacitatii
(overflow)
• Output compare
• Input capture
• In toate situatiile de mai
sus se pot genera
intreruperi
Modul de operare ―timer overflow‖
• La depasirea capacitatii ($FF pentru un timer de 8
biti, sau $FFFF pentru un timer de 16 biti) se
seteaza un flag intr-un registru de stare.
• Daca intreruperea asociata este activata, setarea
flag-ului genereaza o cerere de intrerupere
• Controlul asupra intervalului de timp intre doua
intreruperi succesive se face fie ajustand frecventa
ceasului de numarare, fie scriind o valoare in
TCNT
Modul de operare ―Output
compare‖
• Continutul TCNT este permanent comparat
(hard) cu continutul registrului OCR.
• La coincidenta, se seteaza un flag de stare si
se poate genera o intrerupere
• In rutina de intrerupere se scrie o noua
valoare in OCR, care determina momentul
cand va avea loc urmatoarea coincidenta
intre TCNT si OCR.
Exemplu de folosire a timerului
in mod OUTPUT COMPARE
#define DELTA_T 1000
unsigned int OCR_VALUE;
…..
OCR_VALUE=OCR;
OCR_VALUE=OCR_VALUE+DELTA_T;
OCR=OCR_VALUE;
Modul de operare ―INPUT CAPTURE‖
• Este folosit pentru masurarea precisa a duratei
unor evenimente externe.
• Evenimentele externe sunt marcate de tranzitia
unui semnal logic conectat la unul din pinii
microcontrollerului.
• La detectarea frontului activ al intrarii, continutul
TCNT este automat transferat in registrul ICR.
Optional se genereaza intrerupere.
• Intervalul dintre doua fronturi succesive se obtine
facand diferenta intre valorile ICR in cele 2 cazuri.
Timerul de uz general al HC11
• Elementul central este un numarator de 16
biti
• Acesta numara numai pe ceas intern si
numai inainte.
• Prescallerul este un numarator programabil
de 4 biti - I.e. poate diviza cu 1, 2, 4, 8 sau
16.
Timerul de uz general al HC11
• Exista 4 registre OCR, denumite TOC1,
TOC2, TOC3, TOC4
• Exista 3 registre ICR (input capture)
denumite TIC1, TIC2, TIC3
• Exista un registru separat care poate fi
configurat prin soft fie ca OCR (TOC5) fie
ca ICR (TIC4).
Timerul de uz general al HC11
• Timerul este asociat cu liniile PORTA, dupa cum urmeaza:
• PA0 input capture 3
• PA1 input capture 2
• PA2 input capture 1
• PA3 input capture 4 / output compare 5
• PA4 output compare 4
• PA5 output compare 3
• PA6 output compare 2
• PA7 este asociat cu alt timer
Registrele de stare a timerului la HC11 -
TFLG1, TFLG2
TFLG1 contine flag-urile asociate cu registrele TOC1-4 si TIC1-3

TFLG1 7 6 5 4 3 2 1 0

OC1F OC2F OC3F OC4F I4/O5F IC1F IC2F IC3F

Flag-ul TOF (TIMER OVERFLOW FLAG) este bitul 7 din registrul


TFLG2
Registrele de control ale
timerului la HC11
• Pentru controlul intreruperilor se foloseste registrul
TMSK1
TMSK1 7 6 5 4 3 2 1 0

OC1I OC2I OC3I OC4I I4/O5I IC1I IC2I IC3I

RESET 0 0 0 0 0 0 0 0

• Intreruperea asociata este validata scriind 1 in TMSK1


• Intreruperea de OVERFLOW este validata de bitul 7 (TOI)
din TMSK2
Registrul TCTL1
Controleaza efectul evenimentelor de tip output compare
asupra liniilor I/O asociate cu timerul.
TCTL1 7 6 5 4 3 2 1 0

OM2 OL2 OM3 OL3 OM4 OL4 OM5 OL5

OMx OLx Action taken on compare match


0 0 Timer disconnected from output pin
0 1 Toggle OCx output line
1 0 Clear OCx output line to 0
1 1 Set OCx output line to 1
Registrul de control TCTL2
Selecteaza fronturile pentru functia INPUT CAPTURE
TCTL2
7 6 5 4 3 2 1 0
EDG4B EDG4A EDG1B EDG1A EDG2B EDG2A EDG3B EDG3A
EDGxB EDGxA Type of capture
0 0 capture disabled
0 1 capture on rising edge
1 0 capture on falling edge
1 1 capture on both edges
Registrele OC1M si OC1D
OC1M
7 6 5 4 3 2 1 0
OC1M7 OC1M6 OC1M5 OC1M4 OC1M3 - - -
OC1D
7 6 5 4 3 2 1 0
OC1D7 OC1D6 OC1D5 OC1D4 OC1D3 - - -
TOC1 - poate controla SIMULTAN mai multe linii ale
PORTA
OC1M - indica CE BITI SUNT AFECTATI
OC1D - indica starea pe care o vor lua liniile indicate de
OC1M la coincidenta TCNT=TOC1
Timerul PULSE ACCUMULATOR

• Este un timer aditional, mai simplu, doar de 8 biti,


destinat in special sa numere evenimente externe.
(Timerul principal al HC11 numara doar pe ceas intern)
• Registrul de control asociat se numeste PACTL
• Bitii de stare asociati cu PA sunt plasati in TFLG2
• Evenimentele asociate cu acest timer sunt:
- Overflow(bit de stare PAOVF)
- INPUT EDGE (Bit de stare PAII)
Si aici, evenimentele pot genera intreruperi.
Timerele AVR- Timer0
• Timer0 este centrat pe un numarator de 8 biti TCNT0
• Singurul eveniment raportat este OVERFLOW (nota-
unele AVR-uri au si output compare la timer0)
• Poate numara atat pe ceas intern cat si pe ceas extern
(este deci mai flexibil decat PULSE
ACCUMULATOR al HC11, care numara doar pe ceas
extern)
• Prescallerul este de asemenea mai flexibil (are 3 biti
fata de 2 la HC11)
Timerul (timerele) de 16 biti la AVR
• Caracteristici definitorii
10-bit prescaller
TCNT1 is read/write
TCNT1 can count on external clock.
TCNT1 can be automatically cleared at
compare match.
Input capture can be triggered by the built-in
analog comparator.
Timerele PWM si interfatarea cu
semnale analogice

Acest capitol continua prezentarea


timerelor care echipeaza
microcontrollerele si introduce
intefetele cu semnale analogice:
convertorul A/D si comparatorul
analogic.
Semnale PWM
PWM este un acronim de
la Pulse Width
Modulator – Modulator
de impulsuri in durata,
mai precis e vorba de un
generator de semnale
dreptunghiulare cu
frecventa fixa, dar cu
factor de umplere
modificat dinamic.
Proprietati ale semnalelor PWM
• Valoarea medie a unui
semnal PWM este
proportionala cu
factorul de umplere
(duty cycle D)
• Trecand un semnal
PWM printr-un filtru
trece-jos se obtine o
tensiune continua,
proportionala cu
factorul de umplere
Generarea semnalelor PWM
• Metoda
comparatorului
analogic
Generarea semnalelor PWM
• Metoda
comparatorului digital
• Observati
similitudinile intre
schema alaturata si
functia Output
Compare a timerelor
de uz general
Aplicatii ale semnalelor PWM
• In telecomunicatii
• Controlul puterii eliberate pe o sarcina
(amplificatoare audio de mare putere in clasa
D), controlul turatiei motoarelor de curent
continuu.
• Surse de tensiune in comutatie
• Controlul ―sliding mode‖
• Iesiri analogice din microcontrollere
Subsistemul PWM al HC11
• Microcontrollerele HC11 din seria K au 4
canale PWM de 8 biti, care pot fi configurate
sa functioneze ca doua canale de 16 biti.
• Susbsistemul PWM al HC11 este total distinct
de timerele de uz general. La AVR-uri,
subsistemul PWM foloseste timerele de uz
general (care nu mai sunt disponibile pentru
alte aplicatii).
Structura unui canal PWM la
HC11
• PWCNT - numaratorul
principal (numara
numai inainte)
• PWPER - registru
pentru controlul
perioadei
• PWDTY - registrul
pentru controlul Duty
Cycle
Fucntionarea PWM la HC11
• Continutul PWCNT
este permanent
comparat cu continutul
a doua registre
PWPER si PWDTY.
La coincidenta se
comanda bascularea
bistabilului conectat la
iesire.
Structura PWM la AVR
Diferente majore fata de
HC11
• Foloseste structura
hardware a timerului
principal
• Poate functiona pe 8,
9, sau 10 biti
• Numaratorul PWCNT
numara in ambele
sensuri.
Functionarea PWM la HC11
• Nu exista PWPER -
perioada semnalelor
generate se regleaza
din prescaller.
• Numaratorul numara
in ambele sensuri
• Este mai putin flexibil
decat la HC11
Exemple de utilizare
.Folosind timer1 al
ATMega16 sa se
genereze la iesirile
OC1A si OC1B doua
ceasuri, unul cu factor
de umplere ½ iar celalat
cu factor de umplere ¼.
Programul se reduce la
initializarea timerului.
Exemple de utilizare a PWM
.Folosind iesirea PWM OC1B asociata cu timer1 sa se
genereze un semnal care, dupa filtrarea trece-jos, sa
aproximeze un semnal liniar variabil.
while (1)
{
for (i=0;i<10;i++)
{
OCR1BL=PWMTAB[i];
delay_ms(1);
}
};
Alte tipuri de timere - Watchdog-ul

• Sistemul constra intr-un


numarator al carui
moment de overflow este
controlabil prin program.
• La overflow, genereaza un
RESET harware
• Periodic, programul
trebuie sa stearga
numaratorul inainte de
overflow.
Watchdog-ul la HC11
• Se numeste COP Timer (Computer Operating Properly)
• Validarea watchdog-ului se face cu ajutorul bitului
NOCOP din registrul CONFIG.
• Reamintim ca registrul CONFIG este nevolatil.
• Selectia ceasului de intrare se face cu bitii CR1:CR0 (COP
Rate Select) din registrul OPTION
• Stergerea numaratorului se face scriind, aceasta ordine $55
si $AA in registrul special COPRST
• Timpul pana la RESET poate fi programat in 4 cuante intre
16ms si 1 sec. (aproximativ)
Watchdog-ul la AVR
Registrul de control al Watchdog, WDCTR

WDCTR 7 6 5 4 3 2 1 0

– – – WDTOE WDE WDP2 WDP1 WDP0

WDP0-WDP1-WDP2 - Watchdog Prescaller Select - pot selecta


timpi de overflow intre 15ms si 1 sec
WDE - Watchdog Enable
WDTE - Watchdog Turn-OFF Enable
Functionarea watchdog-ului la AVR
• Stergerea WDE se face in felul urmator
• Inainte de stergere, ambii biti WDE si
WDTE trebuie setati la 1.
• In urmatoarele 4 clock-uri, se scrie 0 in
WDE.
• Pentru stergerea numaratorului s-a introdus
o instructiune speciala WDR (Watchdog
Reset)
Interfatarea cu semnale analogice
• Intrarile analogice pot fi gestionate cu ajutorul
unor ―comparatoare analogice‖, sau cu ajutorul
unor convertoare A/D. Comparatorul analogic este
prezent ca subsistem distinct doar la AVR-uri
• Microcontrollerele uzuale NU au un convertor
D/A distinct in configuratie. Se pot folosi insa
iesirile PWM insotite de filtre FTJ pentru
generarea unor semnale analogice.
Comparatorul analogic al AVR
• Cand este activat,
poate genera
intreruperi daca
tensiunea de pe
intrarea AN0>AN1.
• Are un singur registru
folosit si pentru
control si pentru stare
• Foloseste 2 pini ai
MCU
Registrul ACSR
ACSR 7 6 5 4 3 2 1 0

ACD - ACO ACI ACIE ACIC ACIS1 ACIS0


• ACD - analog Comparator Disable
• ACO - Analog Comparator Output
• ACIE - AC Interrupt Enable
• ACI - AC Interrupt Flag
• ACIC - AC Input Capture Enable - Iesirea AC este folosita
ca intrare de Input Capture pentru Timer1.
• ACIS0,1 - Interrupt mode select (selectie front) pentru
intrerupere
Convertorul A/D
Singurul mod in care un
sistem digital cum este un
microcontroller poate urmari
evolutia in timp a unui
semnal analogic, este sa
masoare la intervale discrete
de timp valorile succesive ale
semnalului.
Treaba asta o face
convertorul A/D.
Structura tipica a unui convertor
A/D
• Majoritatea
microcontrollerelor sunt
echipate cu un convertor
A/D de tipul ―cu
aproximari succesive‖
• Rezolutia convertorului
A/D este de 8 biti la HC11
si de 8 sau 10 biti la
AVR(selectabila soft)
Convertorul A/D al HC11
• Rezolutie: 8 biti
• Timp de conversie: 128 perioade ale ceasului E
• Alimentare separata AVDD, AGND
• Referinte separate VRL, VRH
• In fiecare ciclu de conversie se executa 4 conversii -
rezultatele se se stocheaza in ADR1-ADR4, fie asupra
aceleiasi intrari fie asupra unui grup de intrari. (Bitul
MULT din ADCTL)
• Nu exista intrerupere asociata cu convertorul A/D.
Registrul ADCTL
ADCTL 7 6 5 4 3 2 1 0

CCF - SCAN MULT CD CC CB CA


RESET 1 0 x x x x x x

• CCF - Conversion Complete Flag


• SCAN - conversie continua sau ciclu distinct
• MULT - intrari multiple sau single input
• CD:CC:CB:CA - Channel select
• In plus, mai exista un bit de control denumit ADPU (bitul 7 din
registrul OPTION) - care controleaza alimentarea convertorului
• ADPU - se traduce prin A/D Power Up
Convertorul A/D la AVR-uri
• Are rezolutia de 10 biti - sunt necesare doua
registre de date ADCH-ADCL
• Poate genera intreruperi la sfarsitul
conversiei
• Foate functiona cu procesorul in SLEEP
• Are un prescaller propriu pentru controlul
ceasului (divizeaza cu rate intre 2 si 128)
Registrul ADCSR
ADCSR7 6 5 4 3 2 1 0

ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0

• ADEN - AD Converter Enable


• ADSC – A/D Start Conversion Command
• ADFR – A/D Free Running Mode select
• ADIF – A/D Interrupt Flag
• ADIE - AD Interrupt Enable
• [ADPS2:ADPS1:ADPS0] - AD Prescaller
Select
Registrul ADMUX
ADMUX 7 6 5 4 3 2 1 0

– – – – – MUX2 MUX1 MUX0


Nota - la unele modele de AVR, registrul ADMUX are biti
suplimentari pentru selectia VREF
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
PROIECTAREA SISTEMELOR CU
MICROPROCESOARE
Cursul nr. 10

EXEMPLE DE PROIECTARE A UNOR


AUTOMATE SIMPLE
Tema nr. 1 Proiectarea unui automat pentru deschiderea
unei usi glisante

• Date generale de proiectare


• Elementul de executie este un motor de curent
continuu cu poterea de 100W si Un=24V.
• Comanda de deschidere este initiata de un detector
de miscare de tip PIR (Passive Infrared Detector)
cu iesire de tip contact de releu.
• Starea de complet deschis sau complet inchis a
usii culisante este detectata de doua contacte de tip
―limitator de cursa‖
• Timpul de deschidere/inchidere este 4 secunde
Conectarea motorului
• Sunt necesare doua relee
K1 si K2 conectate ca in
figura.
• K1 comanda miscarea K2
determina sensul de
miscare.
• Curentul de sarcina al
releelor este
In=100W/24V
• Se aleg relee cu curent
nominal de 8A.
Conectarea releelor la microcontroller

• Curentul necesar pentru


activarea bobinei releului
este uzual 50mA
• Este necesar un driver - de
exenplu ULN2803 ca in
figura
• Observati folosirea
aceluiasi driver pentru
comanda unei lampi de
semnalizare avarie
Inventar intrari-iesiri
• Sistemul se prezinta ca
o cutie neagra cu 3
intrari si 3 iesiri
digitale.
• Pe baza acestui
inventar, alegem
microcontrollerul
Conectarea intrarilor
• In figura alaturata este
prezentata schema de
conectare a unei intrari de
tip contact la
microcontroller
• Valori tipice pentru
rezistente R1=2k2,
R2=10k
• Optocuplorul este de tip
CNY74-4
Analiza starilor posibile ale sistemului
• Starea de repaus cu usa inchisa Starea 0.
• Starea de miscare pentru deschiderea usii
• Starea de asteptare cu usa deschisa
• Starea de miscare pentru inchiderea usii
• Starea de avarie
Starea 0 - repaus cu usa inchisa
• Se asteapta activarea intrarii conectate la
detectorul de miscare (PINC.0)
• Atentie! Toate intrarile sunt active pe zero!!
• Daca s-a activat intrarea PINC.0 se da
comanda de deschidere (K1=ON K2=OFF)
si se porneste un timer de 5 secunde
• Se trece in starea 1.
Starea 1- Miscare pentru deschiderea usii

• Se verifica daca a expirat timerul de 5s


• Daca a expirat e avarie - usa blocata. Se trece in
starea 4
• Daca nu a expirat se verifica daca s-a atins
limitatorul conectat la PINC.1 (Usa complet
deschisa)
• Daca s-a atins limitatorul, se opreste motorul si se
trece in starea 2 (asteptare cu usa deschisa). Se
porneste un timer de 4 secunde.
Starea 2. Asteptare cu usa deschisa

• Se verifica detectorul de miscare. Daca e activ se


reporneste timerul de 4 secunde
• Se verifica timerul de 4 secunde. Daca a expirat,
se trece in starea 3 (miscare pentru inchiderea
usii).
• Se comanda motorul pentru inchidere (K1=ON,
K2=ON)
• Se porneste un timer de 5 secunde
Starea 3 - Miscare pentru inchiderea usii

• Se verifica daca a expirat timerul de 5s


• Daca a expirat e avarie - usa blocata. Se trece in
starea 4
• Daca nu a expirat se verifica daca s-a atins
limitatorul conectat la PINC.2 (Usa complet
inchisa)
• Daca s-a atins limitatorul, se opreste motorul si se
trece in starea 0 (asteptare cu usa inchisa).
Starea 4. Semnalizare avarie

• Se asteapta un timp nedefinit


• Se iesie din starea 4 testand limitatoarele de
cursa
• Daca usa e inchisa se revine in starea 0
• Daca usa e deschisa se trece in starea 2
• Se reia ciclul.
Programul
timer();
switch(status)
{
case 0: // asteptare cu usa inchisa
if(PINC.0==0)
{
PORTB.0=1; //comanda deschidere
PORTB.1=0;
TTAB[8]=50;
status=1;
}
break;
Programul - continuare

case 1: // miscare pentru deschidere


if(TTAB[8]==0)
{
PORTB.0=0;
PORTB.1=0;
status=4;
break;
}
Programul - continuare
if(PINC.1==0) //s-a atins limitatorul
{
PORTB.0=0;
PORTB.1=0;
TTAB[9]=40;
status=2;
}
break; // sfarsitul starii 1
Programul - Starea 2
case 2: // asteptare cu usa deschisa
if(PINC.0==0) TTAB[9]=40;
//repornire timer
if(TTAB[9]==0)
{
PORTB=0x03;
status=3;
TTAB[8]=50;
}
break;
Programul - starea 3
case 3: // miscare pentru inchiderea usii
if(TTAB[8]==0)
{
PORTB=0;
status=4;
break;
}
if(PINC.2==0)
{
PORTB=0;
status=0;
}
break;
Programul - starea 4
case 4: //avarie
PORTB.2=1; //semnalizare avarie
if(PINC.1==0)
{
status=0;
PORTB=0;
break;
}
if(PINC.2==0)
{
status=2;
PORTB=0;
TTAB[9]=40;
}
break;
Tema nr. 2 Proiectarea unui sistem de alarma
cu 4 zone
• Termenul ―zona‖ desemneaza o intrare unde se
conecteaza un dispozitiv de initiere a alarmei
• Exista doua tipuri de zone: zone ―instant‖, care
declanseaza alarma imediat ce au fost activate
(daca sistemul e armat), si zone intarziate
(delayed), care declanseaza alrma doar daca se
mentin active un anumit timp.
• Armarea si dezarmarea sistemului se pot face cu
un contact cu cheie (similar cu cheia de contact
auto)
Supervizarea intrarilor cu End of line resistors
• Pentru fiecare zona se
folosesc doua intrari
analogice ale
microcontrollerului.Rezist
entele R1 si R3 se afla pe
placa microcontrollerului.
R2 se monteaza pe
contactul senzorului.
• In acest mod se pot
detecta TOATE situatiile
anormale (intreruperea sau
scurtcircuitarea cablurilor)
Inventar intrari-iesiri

• PINC.0 intrarea de
armare/dezarmare
• PINC.1 - zona 1 - delayed
• Z2-Z4 zone instant
conectate la PINC.2-
PINC.4
• PORB.0 - LED
semnalizare starea de
armat
• PORTB.1 releu de alrma
Analiza starilor posibile
• Starea de repaus - starea 0 - sistemul este
dezarmat. Se ignora alarmele, dar se testeaza
intrarea ARM/DISARM. Daca aceasta se
activeaza se trece in starea 1 (prearmare) si se
porneste un timer pentru EXIT DELAY.
• In starea 1 (prearmat), zonele instant (Z2-Z4)
genereaza alarma. Zona intarziata este ignorata. Se
testeaza expirarea timerului EXIT DELAY. La
expirare se trece in starea 2 (armare)
Analiza starilor posibile - continuare
• Starea 2 - sistem armat. Zonele instant genereaza
alarma. La activarea zonei intarziate Z1 se
porneste un timer pentru ENTRY DELAY si se
intra in starea 3 (prealarma sau asteptare
dezarmare).
• Starea 3. Se asteapta activarea intrarii de
dezarmare, sau expirarea timerului de ENTRY
DELAY. Daca pana la expirarea timerului nu a
fost dezarmat sistemul, se genereaza alarma.
Analiza starilor posibile - continuare
• Starea 4 - alarma.
• Se activeaza releul pentru comanda sirenei
• se testeaza timerul asociat cu sirena
• Daca a expirat timerul, sirena este oprita dar
sistemul ramane armat si se revine in starea 2.
• Se testeaza si intarea de dezarmare. Daca aceasta
se activeaza pe durata cat sirena este ON, se
opreste sirena si se revine in starea 0.
Lucruri demne de retinut
• Secventa comanda-confirmare prin limitator sau
time-out cu avarie este foarte raspandita in
practica.
• Modalitatea de a gandi programul ca un automat
finit este extrem de productiva - simplifica analiza,
programul este usor de depanat, si scade sansa de
a scapa din vedere unele aspecte ale evolutiei
sistemului.
PROIECTAREA SISTEMELOR CU
MICROPROCESOARE
Cursul nr. 11

EXEMPLE DE PROIECTARE A UNOR


SISTEME DE REGLARE IN BUCLA
INCHISA
Tema nr. 1 Proiectarea unui regulator de turatie
pentru un motor de curent continuu

• Date generale de proiectare


• Elementul de executie este un motor de curent
continuu cu puterea nominala de 50W si
Un=12V.
• Masurarea turatiei se face cu un tachogenerator
analogic care furnizeaza o tensiune de 12V la
cap de scala (turatia maxima).
• Valoarea prescrisa a turatiei se defineste cu un
potentiometru cu variatie liniara.
• Nu este necesara schimbarea sensului de rotatie
a motorului.
Analiza problemei
• Schema echivalenta a motorului de cc;

di
L Ri V K
dt
di Regim
0 stationar
dt
R 0
V K Turatia este proportionala cu
tensiunea la borne
Comanda motorului folosind un
semnal PWM
Tp
D
T
T
1
Vout y(t )dt
T0
Vmax t [ DT ,T ]
y(t )
0 t [0, DT ]

DT
1 DT
Vout Vmax dt Vmax DVmax
T 0 T
Schema bloc a solutiei hardware
Implementarea unui regulator
proportional
Vp – valoarea prescrisa a turatiei
Vm - valoarea masurata a turatiei
e(t)= Vp-Vm – eroarea de reglaj
Se pune problema generarii Vout(t) in asa fel incat
e(t)->0 in orice moment.
Regulatorul proportional genereaza Vout=Kp*e(t)
Kp este o constanta de proportionalitate
Solutia software
• Se porneste de la proiectul template
• Se creaza un nou proiect dc_motor1, care
contine modulele analog, timer si pwm
• Se definesc variabilele (de tip octet) Vp,
Vm
• Se defineste o variabila (int) error (e(t))
• Se defineste o variabila (int) Kp si se
initializeaza Kp=50
Solutia software
Kp=50;
while (1)
{
if(TTAB[0]==0)
{
TTAB[0]=2; //20ms interval intre doua actualizari
Vp=read_adc(0);
Vm=read_adc(1);
compute_error();
OCR2=reglaj();
}
};
}
Functiile folosite
void compute_error(void)
{
error=(int)Vp-(int)Vm;
}
unsigned char reglaj(void)
{
Vout=Kp*error;
if(Vout<0) return(0);
if(Vout>255) return(255);
return(Vout&0xFF);
}
Analiza rezultatelor

La valori mici ale Kp apare eroare stationara


La valori mari ale Kp apare instabilitate
Inversarea sensului de rotatie.
Solutia cu relee

Releul K1 este pentru comenzi ON/OFF


Releul K2 schimba polaritatea tensiunii la bornele
motorului
Inverarea sensului de rotatie.
Solutia cu punte H
Implementarea unui regulator PI

Introducerea termenului integrativ este destinat sa


elimine eroarea stationara.
Calculul integralei
• Integrala se reduce la media e(t) pentru
ultimele N esantioane calculate la intervale
de timp t0 (Ti=N*t0)
N

Ti N
ei
1 1 i 0
Vi e(t )dt t 0 * ei
Ti 0 N * t0 i 0 N
Calculul componentei derivative

• Derivata unei functii in raport cu timpul este o masura a vitezei de


variatie a functiei
• Se poate aproxima prin diferenta intre doua esantioane consecutive.

df (t ) f f (t n ) f (t n 1 )
f ' (t )
dt t tn tn 1

tn tn 1 1
f ' (t ) f (t n ) f (t n 1 )
Programul complet
while (1)
{
if(TTAB[0]==0)
{
TTAB[0]=1;
Vp=read_adc(0);
Vm=read_adc(1);
error=(int)Vp-(int)Vm;
IBUF[ibptr++]=error;
if(ibptr>=Ti) ibptr=0;
OCR2=reglaj(); //executia propriu-zisa
}
if(TTAB[1]==0)
{
TTAB[1]=Td;
calc_deriv();
}
}; //end while
Principalele functii
unsigned char reglaj(void)
{
calc_medie();
Vout=Kp*error;
Vout=Vout+Ki*medie;
Vout=Vout+Kd*derivata;
if(Vout<0) return(0);
if(Vout>255) return(255);
return(Vout&0xFF);
}
void calc_medie(void)
{
int i;
medie=0;
for(i=0;i<Ti;i++) medie=medie+IBUF[i];
medie =medie/Ti;
}
void calc_deriv(void)
{
Vp=read_adc(0);
Vm=read_adc(1);
error=(int)Vp-(int)Vm;
derivata=error-prev_error;
prev_error=error;
}
Proiectarea sistemelor cu
microprocesoare
Curs 12
Alte familii de microcontrollere
Intel 80C51
• Primul si cel mai popular microcontroller, dar nu
si cel mai performant
• Magistrala de date de 8 biti, 16 biti pentru
magistrala de adrese
• Arhitectura este Von Neumann, cu pagini distincte
si spatii de adrese distincte pentru memoria de
program si de date.
• 128 octeti RAM, 4K ROM, fara EEPROM
• Doua timere, UART
• Produs initial de Intel, dar preluat si imbunatatit de
Atmel, Philips, TI, ST Microelectronics etc.
I80C51 - pinout
I8051 functionarea cu bus extern
Particularitati ale 80C51
• Dispune de 4 banc-uri de cate 8 registre interne de
8 biti R0-R7. La un moment dat, un singur banc
este ―vizibil‖ pentru CPU.
• Cele 4x8 registre sunt vizibile in spatiul de adrese
al memoriei de date (0x00-0x1F).
• Mai are doua acumulatoare A si B, si un registru
index numit Data Pointer DPTR.
• Registrul SP e de 8 biti!! – rezulta ca stiva poate fi
setata doar in memoria interna.
• SP se incrementeaza la PUSH (invers fata de
majoritatea microprocesoarelor uzuale).
80C51 avantaje si dezavantaje
• Avantaje:
- E foarte bine documentat si sustinut cu
unelte software
- Sunt disponibile numeroare exemple de
proiecte
Dezavantaje:
- E relativ sarac in resurse
- Nu are facilitatea ISP
Microcontrollerele PIC seria ―low end‖
Microchip PIC – seria mid range
Microchip PIC seria high end
Microchip PIC caracteristici

• Sunt construite in arhitectura Harvard cu bus-ul de


date al memoriei de program de latime diferita de
cel al memoriei de date (12, 14, 16 biti). Sunt
primele microcontrollere Harvard care au avut
succes de piata.
• Sunt RISC. Au un set foarte redus de instructiuni
(35 la 16Fxxx)
• Seria high end (PIC17 si PIC18) difera foarte mult
ca peformante si facilitati de seria low end.
PIC 12xxx si 16xxx pinout
PIC17Fxxx pinout
PIC18Fxxx pinout
PIC32
Particularitati ale PIC
• Registrul acumulator este denumit W0 (Work Register0) Seria
high end are pana la 16 registre acumulator.
• Toate locatiile de RAM sunt vazute ca registre interne ale CPU
• Stiva este implementata hardware (8 nivele) si nu exista SP
• Registrele CPU, registrele interfetelor periferice, chiar si
Program Counter-ul sunt mapate in acelasi spatiu de adrese.
• Setul de instructiuni difera de la o serie la alta (35 instructiuni
la seriile low end si ajunge la 80 de instructiuni la high end)
• Programarea memoriei de program difera foarte mult de la o
serie la alta. Seria high end suporta ICSP (In Circuit Serial
programming). Seriile mai vechi necesita programatoare.
PIC development tools

• Sunt disponibile numeroase module hardware


(starter kits, development boards programmers
etc.) Vezi www.olimex.com si www.adelaida.ro
• Microchip ofera free un IDE foarte bun (MPLAB)
si un compilator C pentru seria PIC18
• PikLAB este o versiune open source de IDE
similara MPLAB (http://piklab.sourceforge.net/)
PIC avantaje si dezavantaje

• Avantaje: sunt ieftine si rapide, bine


sustinute de documentatie si exemple de
proiecte open source
(http://picprojects.org.uk/)
• Dezavantaje: Prea mare diversitate de la o
serie la alta, lipsa unor compilatoare C, lipsa
facilitatii ISP la multe modele, nevoia de a
lucra in assembler cu un set redus de
instructiuni foarte simple.
Microcontrollerele DSP

• DSP – Digital Signal Processor


• Procesoare optimizate pentru calcule
matematice intensive
• Pot avea spaţii de adresare duale pentru
date
– Doi operanzi pot fi accesaţi simultan
– Unele au bus-uri distincte pentru accesul
la registrele si porturile I/O
Microcontrollerele DSP (2)

• Arhitectură Harvard cu bus-uri multiple


• Aplicaţii tipice
– Prelucrarea semnalelor audio şi video (I timp
real)
– Prelucrarea imaginilor
– Comunicaţii (routere)
– Radio şi televiziune digitală
– Aparatură medicală
– Navigare GPS
Microcontrollerele DSP (3)

• Exemple de microcontrolere DSP


– Texas Instruments: seriile TMS320C62x,
TMS320C64x, TMS320C67x, TMS320C645x
– Microchip Technology: seriile dsPIC30FXXX,
dsPIC33FXXX
– Freescale Semiconductor: seriile 56F800,
56F820, 56F8000, 56F8100, 56F8300,
56F8400
– Analog Devices: seriile ADSP-21xx, Blackfin,
SHARC
– Seria TMS320 este prima cu impact pe piata si e cea
mai bine sustinuta cu development tools
Microcontrollerele ARM (Advanced Risc
Machines)
– Primul procesor RISC comercial: ARM1
(1985)
– Arhitectura a fost proiectată la firma Acorn
Computers (UK)
– Dezvoltarea procesoarelor ARM a continuat în
cadrul firmei ARM Ltd. (1990)
– Bazat pe procesorul 6502 (8 biţi)
– Modificări fata de 6502:
• Arhitectură RISC de 32 de biţi
• Lungime fixă a instrucţiunilor
ARM (2)

• Versiunile utilizate în prezent: ARM7 ..


ARM11
• ARM Ltd. NU produce chipuri ARM:
– Proiectează arhitectura procesoarelor ARM
– Licenţiază proiectele către partenerii care
fabrică procesoarele
– Dezvoltă tehnologii pentru asistarea proiectării
• Magistrale, periferice, instrumente software, plăci de
dezvoltare, debuggers
ARM (3)

• Arhitectură HARVARD
• Spatiu de adrese unic desi au bus-uri diferite
pentru ROM, RAM si periferice
• 31 registre generale
– 16 registre vizibile în orice moment
– R14: LR (Link Register)
– R15: PC (Program Counter)
– De obicei, R13 este stack pointer-ul SP
ARM(4)
• Au doua seturi de instructiuni: unul
―normal‖ pe 32 de biti si unul ―thumb‖ pe
16 biti.
• Se pot combina cele două seturi
• Comutarea între starea ARM şi starea
Thumb: cu instrucţiunea BX (Branch and
eXchange)
• Rolul thumb este sa reduca necesarul de
memorii externe
Exemplu de procesoare ARM7 seria LPC2xxx
de la NXP (Philips)
LPC2103 minimal
LPC2xxx resurse on chip

• 8K/16K/32K Flash on chip


• 2K/4K/8K static RAM on chip
• 32 linii I/O
• Convertor A/D de 10 biti cu 8 intrari multiplexate
• I2C
• SPI
• 2xUART (din care unul perfect compatibil 16550)
• Doua timere de 32 biti (7 IC 7 OC)
• Doua timere de 16 biti (3 IC 7 OC)
• Watchdog
• PWM
• RTC timer separat
LPC2xxx alte caracteristici

• Putere consumata 0.5mW/MHz


• Viteza pana la 70MHz (Nota: Alte modele au
depasit 1GHz) Ceasul este controlat de un
oscilator PLL intern, programabil, cu multiplicator
de frecventa care foloseste un quartz extern de 1-
25MHz.
• Interuperi vectorizate cu prioritatea controlabila
soft (13 interuperi externe la LPC2103)
• Programarea ISP fie pe linia seriala cu ajutorul
unui bootloader on chip, fie printr-o interfata
JTAG.
LPC2xxx development tools

• Sunt disponibile starter kits ieftine si


flexibile (www.olimex.com)
• Sunt disponibile mai multe compilatoare C
foarte performante (Keil, IAR Systems). Cel
mai accesibil pentru incepatori este Keil
uVision, pentru care exista si o versiune
demo complet functionala (www.keil.com)
Exemple de module hardware (LPC2148)
Exemple de module hardware
(LPC2294)
Keil microvision ARM
Avantajele ARM

• Viteza mare si putere redusa –asta le recomanda


pentru numeroase aplicatii (telefoane, tablete etc.)
• Tind sa depaseasca in performante DSP-urile, la
putere mai redusa
• Sunt variatii relativ mici de la o serie la alta –
compilatoarele suporta de obicei majoritatea
modelelor
• Seriile high end (ARM9-11) sunt compatibile cu
cerintele Linux, WinCE, Android