Download as pdf or txt
Download as pdf or txt
You are on page 1of 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


concatenati pentru a forma un
registru dublu D
Doua registre index X si Y
Stack pointer
Registrul de stare CPU denumit
CCR
Numaratorul de program PC

32 acumulatori R0-R31
R26-R27, R28-R29, R30-R31
can be concatenated to form the
X, Y, Z , registers
Stack pointer SP
registrul de stare CPU denumit
SREG
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
;RESET

.......
ORG

$FFFE

DW

MAIN

entry

point

at

;store
the
value
of
the
;label MAIN at $FFFE-$FFFF

Exemplu de initializare a vectorilor de intrerupere la


AVR

.......
.ORG
RJMP
.......
ANA_COMP:
.......
RETI

$000C
ANA_COMP

;unconditional jump to the


;interrupt handler

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
STAA

#$30
DDRD

;configure PORTD, bit 4,5 as


;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
LDI
OUT

DDRB,R16
R16,$0F
PORTB,R16

IN

R0,PINB

;enable internal pull-ups on


;lower nibble and write 0 in the
;upper nibble
;read the input lines

Alt exemplu cu AVR

LDI

R16,$F0

OUT
LDI
OUT
IN
SWAP
SBR
OUT

DDRC,R16
R16,$0F
PORTC,R16
R16,PINC
R16
R16,$0F
PORTC,R16

;configure port

;enable pull-ups

;read input lines


;swap nibbles
;keep pull-ups active
;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. Intro 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
divizoarele care genereaza
ceasurile de
emisie/receptie
SCSR - SCI Status
Register
SCCR1, SCCR2 - SCI
control registers

UBRR -USART Baud


Rate Register
USR - USART Status
Register
UCR - USART Control
Register
Nota: la unele AVR-uri
denumirile registrelor sunt
diferite (vezi foaia de
catalog pt. Fiecare)

Structura registrelor de control si stare ale SCI


la HC11 - Registrul BAUD

BAUD

RESET

TCLR
0

SCP1
0

SCP0
0

RCKB
0

SCR2
0

SCR1
0

SCR0
0

Bitii registrului BAUD - Controlul prescaller-ului

SCP1
0
0
1
1

SCP0 Prescaller divide by:


0
1
1
3
0
4
1
13

Bitii registrului BAUD. Controlul divizoarelor


de frecventa

SCR2

SCR1

SCR0

0
0
0
0
1
1
1
1

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

Prescaller output is
divided by:
1
2
4
8
16
32
64
128

Exemplu de calcul a constantelor pentru


programarea baud rate
Example
Knowing that the oscillator frequency is 8 MHz, and that the output frequency of the baud generator must be 16 times the actual
baud rate, determine the value to write in the BAUD register in order 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
TDRE

RESET 0

TC

RDRF

IDLE

OR

NF

FE

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

RESET

R8

T8

WAKE

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

RESET

TIE

TCIE

RIE

ILIE

TE

RE

RWU

0
SBK

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
RXC
TXC
UDRE

4
FE

3
OR

2
-

1
-

0
-

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

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
STAA
CLR
LDAA
STAA
.

#$30
BAUD ;9600 baud
SCCR1;clear M
#$0C ;TE=1, RE=1
SCCR2;no interrupts

O rutina de receptie
SCI_REC

SRET
FRET

LDAA
ANDA
BEQ
LDAA
STAA
SEC
RTS
CLC
RTS

SCSR ;read status register


#$20 ;isolate RDRF bit
FRET ;failure return
SCDR ;get character
SOMEWHERE
;and save it
;Set Carry to inform
;the main program
;Clear carry

Rutina de emisie a unui caracter


SCI_SEND
SSLOOP

TAB
LDAA
ANDA
BEQ
STAB
RTS

;save character to B
SCSR
#$80 ;isolate TDRE
SSLOOP
SCDR ;send character
;and return

O rutina de intrerupere pentru receptia unui


caracter
SCI_ISR

LDAA
LDAA
STAA
INC
RTI

SCSR
SCDR ;get character
SCIRB ;save it in a buffer
QSCI ;true QSCI

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 intro 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 halfduplex).

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 clockul 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

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

SPIE

SPE

DWOM MSTR CPOL

CPHA SPR1

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

0
SPR0

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
SPIF WCOL -

4
-

3
-

2
-

1
-

0
-

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

SPIE

SPE

DORD MSTR CPOL CPHA SPR1

0
SPR0

DORD=1 LSB of the data word is transmitted first


DORD=0 MSB of the data word is transmitted first.
SPR1-SPR0
0
0
0
1
1
0
1
1

SCK is the system clock divided by:


4
16
64
128

Exemplu de initializare a SPI la AVR


init_spim:

sbi
sbi
sbi
ldi
out
ret

init_spiS:
cbi
cbi
cbi
cbi
ldi
out
ret

ddrb,5
ddrb,7
ddrb,4
r16,0x54
spcr,r16
;SLAVE initialization
ddrb,5 ;
DDRB,6
ddrb,7
ddrb,4
r16,0xC4
spcr,r16

Exemplu de folosire a SPI - conectarea a


doua microcontrollere
Emisia unui caracter de
SPI_SENDCH
LDAA
ANDA
BEQ
LDAA
STAA
SPS05
LDAA
ANDA
BEQ
LDAA
STAA
RTS

la MASTER
SPSR ;wait for SPIF
#$80
SPI_SENDCH ;wait
XSPI
SPDR ;send it
SPSR ;wait for end of
;transmission
#$80
SPS05
SPDR ;read the byte
RSPI

Rutina de receptie cu intrerupere la SLAVE


SPISVC

LDAA
LDAA
STAA
INC
LDAA
STAA
RTI

SPSR ;read SPSR


SPDR
SPIRDATA
QSPI ;true QSPI
SPIXDATA
SPDR

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 I2CSTART


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
JSR
BCLR
JSR
RTS

PORTA,SCL
DELAY ;wait a few microseconds
PORTA,SDA
;HIGH to LOW
DELAY

I2CSTOP

BSET
JSR
BSET
JSR
RTS

PORTA,SCL
DELAY
PORTA,SDA
DELAY

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 115us.
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

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
OC1I

RESET 0

OC2I

OC3I

OC4I

I4/O5I IC1I

IC2I IC3I

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

OMx
0
0
1
1

OM2

OL2

OM3

OL3

OM4

OL4

OM5 OL5

OLx
0
1
0
1

Action taken on compare match


Timer disconnected from output pin
Toggle OCx output line
Clear OCx output line to 0
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
0
0
1

EDGxA
0
1
0

Type of capture
capture disabled
capture on rising edge
capture on falling edge

capture on both edges

Registrele OC1M si OC1D


OC1M
7
OC1M7
OC1D
7
OC1D7

6
5
4
3
2
OC1M6 OC1M5 OC1M4 OC1M3 -

1
-

0
-

6
5
4
3
2
OC1D6 OC1D5 OC1D4 OC1D3 -

1
-

0
-

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 (notaunele 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

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
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

CCF
RESET 1

SCAN MULT CD
x
x
x

CC
x

CB
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

0
CA
x

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

ADEN ADSC ADFR ADIF

ADIE

ADPS2

ADPS1

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

0
ADPS0

Registrul ADMUX
ADMUX 7

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.2PINC.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
dt
di
dt

Ri V
0

Regim
stationar

Turatia este proportionala cu


tensiunea la borne

Comanda motorului folosind un


semnal PWM
D

Tp
T
T

Vout

1
y(t )dt
T0

y(t )

Vmax t [ DT ,T ]
0 t [0, DT ]

DT

Vout

1
DT
Vmax dt Vmax
T 0
T

DVmax

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

Vi

1
e(t )dt
Ti 0

1
N * t0

ei

t 0 * ei
i 0

i 0

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.

f ' (t )

df (t )
dt

tn
f ' (t )

f (t n ) f (t n 1 )
tn tn 1

f
t

tn
f (t n )

1
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 spaii de adresare duale pentru
date
Doi operanzi pot fi accesai simultan
Unele au bus-uri distincte pentru accesul
la registrele si porturile I/O

Microcontrollerele DSP (2)


Arhitectur Harvard cu bus-uri multiple
Aplicaii tipice
Prelucrarea semnalelor audio i video (I timp
real)
Prelucrarea imaginilor
Comunicaii (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 bii)
Modificri fata de 6502:
Arhitectur RISC de 32 de bii
Lungime fix a instruciunilor

ARM (2)
Versiunile utilizate n prezent: ARM7 ..
ARM11
ARM Ltd. NU produce chipuri ARM:
Proiecteaz arhitectura procesoarelor ARM
Liceniaz proiectele ctre partenerii care
fabric procesoarele
Dezvolt tehnologii pentru asistarea proiectrii
Magistrale, periferice, instrumente software, plci 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 instruciunea 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 125MHz.
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

You might also like