FA C UL T AT E A D E ING IN E RI E M E CA NI C Ă Ș I E L EC T RIC Ă
MICROCONTROLLERE
ÎNDRUMĂTOR DE LABORATOR
Autori:
Asist.Cercet.Drd.Ing. LÖRINCZ ALEXANDRA-ELISABETA
Asist.Cercet.Drd.Ing. RÎSTEIU MARIUS-NICOLAE
Referenți științifici:
Prof.univ.dr.habil.ing. Monica LEBA
Conf.univ.dr.ing. Olimpiu STOICUȚA
I. Rîsteiu, Marius-Nicolae
004
Temă:
LED-ul să pâlpâie mai încet.
LED-ul să oscileze între albastru-galben.
LABORATORUL 2 -
Logica Digitală și Electronică
R R1 R2!!! Vab V1 V2
R1 R2
V1 Vab!!! V2 Vab
R1 R2 R1 R2
R1 R2
V1 V2 Vab!!! R !!!
R1 R2
I I1 I2!!!
R2 R1
I1 I!!! I2 I
R1 R2 R1 R2
Programul Keil uVision4 – Simulator
Selectarea unei variabile -> click dreapta -> Add ‘Sw1’ to... ->
Watch 1. Folosind butonul Step Over (F10) rulăm programul și
vedem că SW1 = 0x00000100 si SW2 = 0x00000001, adică
butoanele nu sunt apăsate.
Deschidem fereastra :
a). Peripherals
b). Selectam TExaS Port F
c). Se deschide fereastra TExaS edX Lab 4
d). Bifăm SW1
e). Se aprinde LED-ul în culoarea verde (Green)
Programul Keil uVision4 –
Placa electronică EK-TM4C123GXL
Temă :
În momentul apăsării SW1 și SW2 să se aprindă LED-ul
albastru, iar dacă nu sunt apasate butoanele, să fie stins.
Dacă SW1 este apăsat si SW2 nu este apăsat atunci LED-ul să
fie roșu iar dacă SW1 nu este apăsat și SW2 este apăsat atunci LED-
ul să fie verde.
LABORATORUL 3 - Introducere în C
1. IDE :
❖ Editor – Limbaj C
❖ Compiler – Limbaj C → Limbaj de asamblare
❖ Assembler – Cod asamblare → Cod mașină
❖ Linker
➢ startup.s ↘
➢ UART.c → One system
➢ main.c ↗
❖ Loader – One system → Memoria flash ROM.
❖ Debugger – Asigură verificarea programului pentru funcționare
corectă.
int main(void)
{
UART_Init(); // call subroutine to init uart lib
printf("This program calculates areas of square shaped
rooms\n");
}
Build → Debug
o View
o Select Serial Windows
o UART #1
Calcularea suprafeței unei camere
int main(void)
{
unsigned long side; //room wall meters
unsigned long area; // size squared meters
UART_Init(); // call subroutine to init uart lib
printf("This program calculates areas of square shaped rooms.\n");
side = 3; // 3 meters
area = side * side; //square meters
printf(“Area of the room with side of %ld m is %ld sqr
m\n”,side,area);
}
side = 3; // 3 meters
area = Calc_Area(side);
printf("\nArea of the room with side of %ld m is %ld sqr
m\n",side,area);
Punctuație Descriere
; Sfârșitul declarației
: Definește o „etichetă”
, Separă elementele dintr-o listă
() Începutul și sfârșitul unei liste de parametri
{} Începutul și sfârșitul unei compuneri de instrucțiuni
[] Începutul și sfârșitul unui index de matrice
„„ Începutul și sfârșitul unui șir
‚‚ Începutul și sfârșitul unei constante caracter
Operator Descriere Operator Descriere
= Declarație de == Egalitate
atribuire
? Selecție <= Mai mic sau egal
< Mai mic >= Mai mare sau egal
> Mai mare != Neegalitate
! Negație << Deplasare stânga
~ Complement față de >> Deplasare dreapta
1
(inversare)
+ Adunare ++ Incrementare
- Scădere -- Decrementare
* Înmulțire && ȘI logic
/ Împărțire || SAU logic
% Rest împărțire += Adaugă valoare la
întreagă
| SAU inclusiv -= Scade valoare din
& ȘI *= Înmulțește valoarea
la
^ SAU exclusiv /= Împarte valoarea la
. Folosit pentru |= SAU valoare la
accesarea
partilor unei
stucturi
>>= Deplasare dreapta &= ȘI valoare la
valoare
%= Rest împărțire ^= SAU exclusiv
valoare valoare la
-> Selector indirect <<= Deplasare stânga
structură valoare
LABORATORUL 4 -
Porturile Microcontrollerului
1. I/O :
a) Paralel
b) Serial
c) Analog
d) Time
void PortF_Init(void)
{
volatile unsigned long delay;
SYSCTL_RCGC2_R |= 0x00000200; // 1) activate clock
for Port F
delay = SYSCTL_RCGC2_R; // allow time for
clock to start
GPIO_PORTF_LOCK_R = 0x5C4F435B; // 2) unlock
GPIO Port F
GPIO_PORTF_CR_R = 0x0F; // allow changes to
PF4-0
// only PF0 needs to be unlocked, other bits can't be locked
GPIO_PORTF_AMSEL_R = 0x00; // 3) disable analog
on PF
GPIO_PORTF_PCTL_R = 0x00000000; // 4) PCTL GPIO
on PF4-0
GPIO_PORTF_DIR_R = 0x1E; // 5) PF4,PF0 in, PF3-
1 out
GPIO_PORTF_AFSEL_R = 0x00; // 6) disable alt funct
on PF7-0
GPIO_PORTF_PUR_R = 0x12; // enable pull-up on
PF0 and PF4
GPIO_PORTF_DEN_R = 0x0F; // 7) enable digital
I/O on PF4-0
}
// 2. Declarations Section
// Global Variables
unsigned long In; // input from PF4
unsigned long Out; // output to PF2 (blue LED)
// Function Prototypes
void PortF_Init(void);
// 3. Subroutines Section
// MAIN: Mandatory for a C Program to be executable
int main(void)
{ // initialize PF0 and PF4 and make them inputs
PortF_Init(); // make PF3-1 out (PF3-1 built-in LEDs)
while(1)
{
In = GPIO_PORTF_DATA_R & 0x10; // read PF4 into Sw1
In = In>>2; // shift into position PF2
Out = GPIO_PORTF_DATA_R;
Out = Out&&0xFB;
Out = Out|In;
GPIO_PORTF_DATA_R = Out; // output
}
}
OR pentru a seta un bit
GPIO_DATA | 0X10 – Set
1. Pseudocod:
a) Inițializarea porturilor
b) If SW1 nu este apăsat
Repetă pasul b.
c) Flash SOS o singură
dată
Delay 5 secunde
d) If SW2 nu este apăsat
Repeta pasul c. si d.
e) Mergi la pasul b.
int main(void)
{
PortF_Init(); // Init port PF4 PF2 PF0
while(1){
do {
SW1 = GPIO_PORTF_DATA_R&0x20; // PF4 into SW1 }
while(SW1 == 0x20);
do{
FlashSOS();
SW2 = GPIO_PORTF_DATA_R&0x01; // PF0 into SW2 }
while(SW2 == 0x01);
}
}
Build → Debug → Run
2. Interfață - SWITCH
Fișă de caracteristici:
3. Interfață - LED
D (Digital) = 1 logic
A (Analog) = 3.3 V
3.3V – Id * R – Vd = 0
R = ( 3.3 – Vd ) / Id
R = ( 3.3 – 1.8 ) /3 mA = 500 Ω →
folosim 470 Ω
D (Digital) = 0 logic
A (Analog) = 0 V
Temă:
1. →Keil →Labware → Lab8_SwitchLEDinterface → PE0 intrare
(SW), PE1 ieșire (LED). Led-ul stă aprins, când butonul este apăsat
face blink.
• Program
• Montaj
• Verificare Logic Analyzer
• Verificare TExaSdisplay
2. →Keil →Labware → Lab7_Heart_Block
LABORATORUL 6 –
Funcționalitatea Debugger-ului
1. SysTick Counter:
Setup:
a) Enable (CTRL) = 0
b) INIT (RELOAD)
c) Value (CURRENT): Ex: 0
d) CTRL – enable set, interrupt off, clock 16 MHz
2. Arrays
Temă:
My computer → Local Disk (C:) → Keil → Labware →
Lab9_FunctionalDebugging→ Lab9
LABORATORUL 7 - Finite State Machines
PLL
- Ne lasă să creștem viteza sau să scădem viteza
- Compromis între viteză și consum de energie
Regiștri PLL
- Precizie mai mare cu cristal extern sau “acuratețe”
- Flexibilitate în a alege viteza:
o Consum
o Viteză
2. PLL - schimbări System Clock
5 “Lucruri”
- Setarea intrărilor
- Setarea ieșirilor
- Setarea stărilor
- Tranziția stărilor
o Graph (STG)
o Matrix
- Condiții pentru ieșiri
Moore FSM
NextState = f (current_state, Input)
Output = g (current_state)
Mealy FSM
Output = h (current_state, Input)
- Input 1 bit
- Output 1 bit
- State
o Odd so far
o Even so far
- STG
- Output Determ. (Moore)
Scriere sub formă de cod
Grafic de tranziție
STyp FSM[4]=
{
{0x28,3000,{goN,waitN,goN,waitN}},
{0x21, 500,{goE,goE,goE,goE}},
{0x1C,3000,{goE,goE,waitE,waitE}},
{0x15, 500,{goN,goN,goN,goN}}
};
FSM ENGINE
S = goN;
while(1)
{
LIGHT = FSM[S].Out; // set lights
SysTick_Wait10ms(FSM[S].Time);
Input = SENSOR; // read sensors
S = FSM[S].Next[Input];
}
Temă:
My computer → Local Disk (C:) → Keil → Labware →
Lab10_TrafficLight → Lab10
LABORATORUL 8 –
Interfața serială – UART / USART
Comunicație UART
2. Comunicația UART – TM4C123
Frame pe 10 biți
Inițializare UART
Handle Interrupts
Pentru “manipularea” întreruperii putem folosi denumiri de
funcții special definite.
void GPIOPortF_Handler(void)
Temă:
My computer → Local Disk (C:) → Keil → Labware →
Lab12_TuningFork→ Lab12
LABORATORUL 10 - Sunetul și DAC
1. Digitalizare
3. Modul R-2R
4. Se deschide programul µVision4 → Project → Open Project...
My computer → Local Disk (C:) → Keil → TExaSware →
C13_R2R3bit→ C12_R2Rbit.uvproj→ Open
Temă:
My computer → Local Disk (C:) → Keil → Labware →
Lab13_DAC→ Lab13
LABORATORUL 11 - ADC și Achiziția de date
1. ADC (Analog to Digital Converter)
Lumea înconjurătoare este alcătuită în esență din semnale
analogice : lumina, sunetul, căldura. Pentru a putea fi măsurate într-
un sistem de calcul digital, aceste semnale trebuiesc convertite în
valori numerice discrete. Un convertor analog – digital (ADC) este
un circuit electronic care convertește o tensiune analogică de la
intrare într-o valoare digitală. Aceasta poate fi reprezentată în mai
multe feluri în funcție de codificarea datelor: binar, cod Gray sau cod
complement al lui doi.
Semnal analogic
Rezoluții diferite
2. Sistem de achiziții de date
Parametrii ADC:
- Precizia – 12 biți 4096
- Interval ( Range) – max 0V – max 3V
- Rezoluția – Interval/Precizie = (3V - 0V)/4096 = 0.7mV
detectabil la această valoare
Regiștrii de inițializare:
Regiștrii pentru captura unui test (sample)
Temă:
My computer → Local Disk (C:) → Keil → Labware →
Lab14_MeasurementOfDistance→ Lab14
LABORATORUL 12 - Sisteme – Nivelul Design
1. Systems-Level Design
- Switch x2, LED x2
- Întreruperi
- DAC – sunet – 4 biți
- ADC
- LCD
Modular Design:
- Call Graph
- Data-Flow
- Flow Chart
Ex:
Modul ADC: - ADC.h - Public Functions
- Prototypes
- ADC.c -Implementation
struct State
{
unsigned long x;
unsigned long y;
const unsigned char *image;
long life;
};
typedef struct State STyp;
STyp Enemy[4];
void Init(void)
{
int i;
for(i=0;i<4;i++)
{
Enemy[i].x=10*i;
Enemy[i].y = 10;
Enemy[i].image = SmallEnemy30PointA;
Enemy[i].life = 1;
}
}
void Move(void)
{
int i;
for(i=0;i<5;i++)
{
if(Enemy[i].x<72) {Enemy[i].x +=3;}
else {Enemy[i].life =0;}
}
}
void Draw(void)
{
int i;
Nokia5110_ClearBuffer();
for(i=0;i<5;i++)
{
if(Enemy[i].life >0)
{Nokia5110_PrintBMP(Enemy[i].x,Enemy[i].y,Enemy[i].im
age,0);}
}
Nokia5110_DisplayBuffer();
}
//------------------------------------------
Int main(void)
{
Random_Init(1);
Nokia5110_Init();
Init();
Draw();
while(1)
{
Move();
Draw();
Delay100ms(2);}
}
Timer2
Regiștrii:
- A clock enable bit, bit 2 in SYSCTL_RCGCTIMER_R
- A control register, TIMER2_CTL_R (set to 0 to disable, 1 to
enable)
- A configuration register, TIMER2_CFG_R (set to 0 for 32-bit
mode)
- A mode register, TIMER2_TAMR_R (set to 2 for periodic
mode)
- A 32-bit reload register, TIMER2_TAILR_R
- A resolution register, TIMER2_TAPR_R (set to 0 for 12.5ns)
- An interrupt clear register, TIMER2_ICR_R (bit 0)
- An interrupt arm bit, TATOIM, TIMER2_IM_R (bit 0)
- A flag bit, TATORIS, TIMER2_RIS_R (bit 0)
Timer1A_Handler(void);
REGULAMENTUL DE PROTECȚIA MUNCII
Nr.
Nume și prenume Semnătura
crt.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40