Notite
Notite
Tranzistorul
• element de baza in circuite digitale. Functii: amplificare, comutare
Microcontroler vs Microprocesor
Microcontroler - este un mic computer pe un singur circuit integrat(CI).
Microprocesor - este un proces central de calculator(CPU) pe un singur circuit integrat(CI).
Tipuri de procesoare
Lucruri care conteaza:
• Periferice
• Concurenta si sincronizare
• Frecventa de ceas
• Dimensiuni memorie (SRAM si Flash)
• Dimensiuni pachete de date
Memorie si stocare
• SRAM - pentru date volatile, RAM de lucru
• Flash - pentru cod program, se scrie la compilare
• EEPROM - pentru date configurabile, scris/lent
Care sunt metricile principale la care ar trebui sa te uiti atunci cand alegi procesorul?
• Consumul de energie
• Frecventa de operare
• Pini IO
• Memorie
• Functii interne
• Software availability & suport
Ce operatii trebuie sa execute software-ul cu un periferic?
• Get and set parameters
• Receive and disable functions
• Enable and disable functions
Cum expunem o interfata din hardware pentru ca software-ul sa execute aceste
operatii?
• Instructiuni speciale CPU(de ex, x85 in/out)
• Tratam perifericele ca si cum ar fi memorie (Memory-Mapped IO)
Memory-mapped IO
E folosit pentru sisteme embedded. De ce nu PORT I/O? Pentru ca instructiunile speciale
I/O ar fi dependente de ISA si ai nevoie de hardware special ca sa executi instructiunile si sa
asiguri protectia accesului - costa mai mult.
Memory-mapped I/O:
• Poate sa refoloseasca instructiunile din ISA ce referentieaza memoria.
• Mecanismul de protectie al memoriei ofera mai multa flexibilitate decat instructiuni
speciale cu acces protejat.
• Poti sa reutilizezi hardware ul deja existent (economisesti spatiu in siliciu, tii costul si
consumul de energie scazut).
Programare AVR
Se incarca in MCU cu
• Bootloader
• ISP(In-System Programmer) sau JTAG
Stocare variabile
• SRAM mica => evita recursivitatea si alocarea dinamica
• Stiva: variabile locale, context intreruperi
• .bss: variabile statice
• Heap : nerecomanday in MCU-uri mici
• Flash: pentru constante
• EEPROM: pentru date configurabile
Variabile si constante
AVR are o arhitectura Harvard, memoria de date(SRAM) si cea de program cu
separate(FLASH).
Stocarea constantelor
RAM - nu e indicat, memoria RAM este de mici dimensiuni.
FLASH - memoria de program este mai mare, scriere la compilare.
EEPROM - pot fi rescrise in timpul executiei programului, dar cu latenta mare.
Curs 2 - Debugging & UART
Saturday, May 31, 2025 10:26 AM
Bootloader
Bootloader-ul este un program rezident in memoria de program care ruleaza la indeplinirea
unei conditii speciale.
Ce se intampla daca bootloader-ul este defect? Un programator JTAG care este de obicei mai
scump si permite depanarea codului.
Tipuri de bug-uri
• La compilare: sintaxa, ortografie, neconcordanta statica a tipurilor
• Design: algoritmi gresit conceputi - iesiri incorecte
• Logica programului - if/else, terminarea buclelor.
• Absurditati de memorie: pointeri null limite ale vectorilor, tipuri gresite, memory
leaks - runtime exceptions.
• Erori de interfatare intre module, fire de executie, programe.
• Conditii neobisnuite: esecut unei parti s software-ului sau a echipamentului de baza
• Blocari - deadlocks.
Porturile seriale sunt porturi digitale pe care procesorul le foloseste pentru a comunica cu
perifericele externe: UART, I2C, SPI.
UART(port serial) - pentru a programa prin bootloader placa sau pentru a comunica cu
calculatorul pe care faceti dezvoltarea codului.
I2C - pentru comunicatia cu senzorii: accelerometrul, giroscopul, magnetometrul, senzorul
barometric de presiune.
SPI - pentru comunicatia cu cardul SD si ecranul LCD grafic.
Protocolul serial
Fiecare caracter este trimis pe linia seriala dupa cum urmeaza:
• Un bit de start (nivel logic 0)
• Un numar configurabil de biti de date (de la 5 la 9, de obicei 8)
• Un bit optional de paritate
• Unul sau 2 biti de stop
• Intervalul de timp dintre 2 biti da viteza de transfer (numita si baud rate)
Receptia unui caracter pe UART
Receptorul se resincronizeaza la fiecare bit de start: trebuie sa fie suficient de precis doar
pentru urmatorul data frame (maxim 9 biti). Daca ceasul receptorului este mai lent sau mai
rapid, se receptioneaza gunoi.
Receptorul verific ca bitul de stop este '1', daca nu raporteaza un 'framing error' procesorului.
Noul bit de start poate sa apara imediat dupa bitul de stop. Receptorul se va resincroniza la
fiecare bit de start.
UBRRn (baud rate)
Total bitti per cadru UART = biti de start + biti de date + biti de paritate + biti de stop
• Se da urmatoarea configuratie de UART: 6 biti de date, 1 biti de stop, 1 biti paritate, baud
rate: 671369 bps .Scrieti care este viteza efectiva a cantitatii de date utile a interfetei în
biti/secunda Introduceti doar valoare numerica, fara u.m.
• Pentru un convertor ce are o rezolutie de 12 bitii si un domeniu de intrare (full scale range)
FSR cuprins între [ -1.024V ; 1.024V], treapta de cuantizare (cuanta) masurata în microVolti
este de:
Calcularea intervalului total al domeniului de intrare (FSR):
○ FSR = 1.024V - (-1.024V) = 2.048V
Determinarea numarului total de niveluri de cuantizare:
○ Numarul total de niveluri de cuantizare pentru un convertor de 12 biti este 2
^{12}= 4096 niveluri.
Calcularea treptei de cuantizare:
○ Treapta de cuantizare = FSR/Numarul total de niveluri
○ Treapta de cuantizare = 2.048V/4096
Convertirea treptei de cantizare în microVolti:
○ Treapta de cuantizare = 2.048V/4096= 0.0005V
○ 0.0005V = 500 microVolti
• Care dintre urmatoarele unele de debugging software poti fi folosite peste UART?
• Trimiterea de pachete Bluetooth, presupunand ca avem un transmitor Bluetooth legat la
UART
• Printf
• Presupunem ca dispozitivul la care ne conectam peste UART furnizeaza in shell. Dupa
conectare, observam ca mesajul de la consola este conform celui asteptat. Totusi, cand
incercam sa dam comenzi, shellul pare sa fie inghetat. Ar trebui sa verificam doar firul RX
device - TX laptop.
• Verificarea corectitudinii cadrelor UART se poate face folosind: un osciloscop, un analizator
de protocol, un analizator logic.
• Parametrii de baza utilizati pentru configurarea unei interfete UART sunt :
a. baud rateul, tipul bitului de paritate, nr de biti de date si numarul de biti de stop
Curs 3 - Intreruperi
Saturday, May 31, 2025 10:59 AM
Polling
CPU verifica periodic daca un periferic are nevoie de atentie. Polling este ca si cum te-ai uiat
la telefon in fiecare secunda ca sa verifici daca cineva te suna.
• Pro: poate fi eficient daca evenimentele vin in succesiune rapida.
• Con: tine procesorul ocupat chiar daca si atunci cand nu se petrece nici un eveniment.
Alternativa: Intreruperi
Fiecare periferic are o linie prin care sa semnalizeze procesorului ca are nevoie de atentie
(IRQ).
Cand un IRQ soseste la procesor, se lanseaza o rutina de tratare a intreruperii.
Controllerul de intreruperi
Trateaza intreruperi simultane: receptioneaza cereri de intrerupere in timp ce procesorul
trateaza.
Seteaza flag-uri de intrerupere: CPU poate sa faca poll pe aceste flag-uri in loc sa sara
imediat intr-un interrup handler.
Multiplexeaza multe linii de IRQ la putine linii: CPU nu are nevoie de o linie dedicata de
IRQ la fiecare periferic.
Executia rutinelor de tratare a intreruperilor
1. Asteapta ca instructiunea curenta sa se execute
2. Salveaza PC in stiva
3. Salveaza toate registrele active in stiva
4. Salt la adresa rutinei de tratare a intreruperii (RTI) specificata in tabela de vectoru de
tratare a intreruperilor.
5. La intoarcerea din RTI, reface registrele active si PC salvate pe stiva
Controlul motoarelor/luminilor
• Servomotoare - semnalul PWM controleaza rotatia si directia
• Motoare DC - semnalul PWM controleaza puterea
• RGB LEDs - semnalul PWM permite variatia luminozitatii
Componente Hardware ale unui Timer
• Prescaler - divide frecventa de tact
• Counter - numara impulsurile
• Compare/ Capture - genereaza evenimente pe baza valorii contorului
• Clock Driver, Xtal/Osc - oscilatoare (RC, cuart)
• Low-Level Timer Subsystem Device Drivers - driverele de nivel jos
Atmega324P Timer Resources
8-bit Timer/Counter 0
16-bit Timer/Counter 1
8-bit Timer/Counter 2
8-bit Timers
Moduri de functionare:
• Overflow(reset at 0xFF)
• Capture (CTC)
• Fast PWM
• Pahse-correct PWM
16-bit Timer
Moduri de functionare:
• Overflow(reset at 0xFFFF)
• Capture
○ CTC
○ ICR
• Fast PWM
○ 5 modes
○
○ 8 to 16-bit resolution
• Phase-correct PWM
○ 7 modes
○ 8 to 16-bit resolution
PWM
• Semnal digital cu factor de umplere variabil.
• Control asupra motoarelor, LED-urilor RGB.
Factorul de umplere este d.p cu valoarea medie a semnalului.
Un timer care poate genera semnal PWM este, in esenta, un convertor D/A pe un singur bit.
Watchdog Timer
• Timer special care reseteaza microcontrolerul daca nu este resetat regulat.
• Util pentru a detecta blocaje.
• Daca este initializat, el va numara pana va ajunge la o valoare anume, in acel moment
va reseta microcontrolerul. Pentru a preveni asta, codul trebuie sa reseteze periodic
timerul.
Virtula Timers
• Rezolvare software cand nu sunt suficiente timere hardware.
• Timer fizic genereaza intreruperi pentru evenimente sortate intr-o coada.
• Necesita:
○ Gestionare ISE + main loop.
○ Zone critice (disable interrupts)
○ Tratarea overflow-ului
• Functioneaza doar pentru modul 'compare' al timer-ului. Va genera timpi mai lenti de
raspuns pentru ISR.
Probleme de implementare
• Structura de date este partajata intre ISR si main loop.
• Numaratorul nostru nu e infinit. Overflow.
1. Considerati ca aveti un semnal PWM care comuta intre 0 si 7V. Presupunem ca avem o
frecventa de 3kHZ, un factor de umplere de 44%. Cat este, in milivolti, tensiunea
medie a semnalului de iesire.
2. Pentru un semnal periodic care comuta intre 0 si 5V, care are perioada de 5ms si durata
palierului pozitiv (Ton) de 2 ms care va fi valoarea media a tensiunii semnalului?
3. Pentru a configura un timer in regim in FAST PWM alegeti toate configurarile pe care
trebuie sa le realizam astfel incat sa obtinem un semnal de tip PWM la iesirea
pinului/pinilor din microcontroller:
○ Bitii Csxy alesi corespunzator datasheet-ului (Clock Source bits)
○ Bitii corespunzatori iesirii selectate din registrul DDR aferent
○ Bitii COMxAy/COMxBy alesi corespunzator datasheet-ului
○ Bitii WGMxy alesi corespunzator datasheet-ului
4. Putem detecta (si corecta) automat blocarea (din diverse motive) a codului (e.g. o citire
blocanta unde nu primim rsspuns de la dispozitivul slave/periferic) folosind:
Raspunsurile corecte sunt:
a. Watchdog Timer intern
c. Watchdog Timer extern declansat periodic printr-un GPIO
5. Considerati ca aveti un semnal PWM care comuta între 0 si 7V.
Presupunem ca avem o frecventa de 3kHz, un factor de umplere de 44 %.
Cât este, în miliviolti, tensiunea medie a semnalului de iesire.
Curs 5 - ADC
Saturday, May 31, 2025 3:33 PM
ADC
Un traducator transforma semnalul fizic in tensiune -> ADC -> valoare numerica.
ADC pe ATmega324P
• Rezolutie: 10 biti (1024 valori)
• Domeniu: 0-5V => 4.88mV/pas
• Precizie: ~2LSB
• Timp conversie: 13-260 micro s
• 8 canale multiplexate
• Moduri:
○ Single-ended, diferential
○ Free-running si single conversion
Referinta de tensiune
• Interna: 1.1V, 2.56V
• Externa: Vcc
Registre ADC
• ADMUX:
○ REFS: selectare referinta tensiune
○ ADLAR: aliniere rezultat (stanga/dreapta)
○
○ MUX: canal selectat
• ADCSRA:
○ ADEN: enable ADC
○ ADSC: porneste conversia
○ ADIF: flag conversie completa
○ ADIE: enable intrerupere ADC
○ ADPS: prescaler pentru conversie
• ADCSRB:
○ ADTS: selectare sursa de trigger (auto-trigger)
• ADC:
○ Registrul cu rezultatul conversiei.
F_max = 50704.5 Hz
Curs 6 - SPI
Saturday, May 31, 2025 4:04 PM
SPI
• Protocol sincron
• Full duplex: transmite si primeste date simultan
• Single MASTER, cu mai multe SLAVE
• Folosit pentru comunicatii rapide intre microcontroler si periferice pe acelasi PCB
• Folosit pentru comunicatia peste distante mici (pe acelasi PCB).
• Latime de banda mai mare ca I2C
Four-wire protocol
• SCLK - Serial Clock
• MOSI/SIMO - Master Output, Slave Input
• MISO/SOMI - Master Input, Slave Output
• SS - Slave Select (CS - Chip Select)
Necesita mai multi pini de date, nu are flow control hardware si no slave acknowledgment
(master poate sa vorbeasca in fol si sa nu isi dea seama).
Capabilitati SPI
• Intotdeauna full-duplex
• Viteze de transmisie de zeci sau chiar sute Mbps
• Transferuri de date folosind pachete de la 4 la 16 biti
Protocol SPI
• Master seteaza Slave Select pe 0
• Master genereaza semnalul de ceas
• MISO - MOSI legate la registre shiftare
Selectia dispozitivului cu care se comunica se realizeaza prin pinul de SS/CS.
Datele sunt transferate catre slave prin pinul MOSI si de la slave spre master prin MISO,
comunicatia fiind sincrona, dependenta de semnalul de ceas SCK.
Comunicatia SPI
• Masterul selecteaza slave-ul coborand linia SS.
• Masterul trimite impulsuri de clock pe SCLK.
• La fiecare front de clock, se transmite 1 bit pe MOSI si se primeste simultan 1 bit de
slave pe MISO (transfer complet duplex).
• Dupa n biti(ex: 8), masterul ridica linia SS (comunicatia se termina).
Exista 4 moduri de a furniza semnalul de ceas: 2 faze si 2 polaritati. Master si Slave-ul
trebuie sa fie in acelasi mod.
Scrierea SPI
• Master trece linia de CS/SS pe zero logic
• Genereaza semnalul de ceas, apoi trimite informatia bit cu bit pe linia MOSI. Pentru ca
este o scriere, nu este nevoie de un raspuns din partea Slave, deci linia MISO este in
HiZ.
Citirea SPI
• Master trimite doar o comanda
• SPI raspunde pe MISO cu unul sau mai multi octeti de date, in functie de comanda.
ALTERNATIVE SPI
1. 3-Wire SPI:
• CS + SCK + o linie bidirectionala (MOSI/MISO combinate)
• Half-duplex
• Necesita suport hardware
2. SPI Daisy Chaining
• Slave-urile sunt in serie
• Tehnica de conectare a mai multor dispozitive Slave prin insiruire.
• MISO de la un Slave este legat la MOSI de la urmatorul Slave.
• Avantaj: toate cipurile Slave au acelasi Chip Select - sunt tratate ca acelasi Slave.
• Dezavantaj: un transfer dureaza mai mult
Daca offset-ul unui segment este pe 16 biti, atunci spatiul de memorie pentru segment este 2
^ 16 = 65,536 octeti = 64KB de memorie.
1. Alegeti varianta corecta referitoare la tipurile de conexiuni posibile a mai multor
dispozitive slave pe o linie de SPI: SPI Daisy Chain si SPI Bus.
2. Consideram ca avem un microcontroller AVR ce este tactat la (lucreaza la o frecventa
de) 16MHz. Dispozitivul SPI slave cu care microcontroller-ul comunica accepta o
frecventa a semnalului SCK de maximum 1MHz. Care este valoarea minima a
prescaller-ului ce trebuie selectata pentru a asigura integritatea transmisiei datelor si a
respecta constrangerile de timp.
3. Daca frecventa semnalului de ceas (SCK) a magistralei SPI este 1MHz atunci viteza
datelor (throughput-ului) pe linia MOSI este de:
I2C
• Foarte potrivit pentru comunicatia de date la distante mici la viteze de la kHz pana la
cativa MHz.
• Multi-Master, Multi-Slave.
• Protocol sincron.
• Half-duplex.
• O linie dedicata pentru ceas (SCL)
• O singura linie pentru date (SDA)
• Two-Wire Interface (SDA si SCL)
○ Cele 2 linii sunt trase sus de rezistente de pull-up.
○ Liniile de I2C sunt tinute pe 1 logic, iar daca unul sau mai multe dispozitive
conectate la linie vor sa comunice, trebuie sa traga linia 0 logic.
• Liniile sunt open-drain
• Sunt 3 stari pe linia de date I2C:
○ Idle (1 logic)
○ Master transmit mode
○ Master receive mode
Arhitectura I2C
• Adrese pe 7 biti => maxim 128 slaves.
• Fiecare dispozitiv are adresa unica pe bus
• Fiecare dispozitiv poate fi emitator sau receptor
Transfer de date I2C
Regula de baza: Linia de date isi schimba starea doar cand ceasul este pe 0 logic. Datele
sunt valide cand ceasul este pe 1 logic.
1. START - masterul trage linia SDA LOW in timp ce SCL este HIGH.
2. Adresare - masterul transmite adresa slave-ului (7 biti) + 1 bit de R(1)/W(0)).
3. ACK/NACK - slave-ul raspunde tragand SDA LOW pentru ACK sau lasa HIGH
pentru NACK.
4. Transfer date - in pachete de 8 titi (MSB primul), fiecare urmat de ACK.
5. STOP - masterul elibereaza SDA (o duce HIGH) in timp ce SCL este HIGH.
Relatiile Master-Slave
Cazul 1: Master trimite la Slave
• A(master) adreseaza B(slave)
• A(master-transmitter) trimite date la B (slave-receiver)
• A termina transferul
Cazul 2: Master primeste de la Slave
• A(master) adreseaza B(slave)
• A(master-receiver) primeste date de la B(slave-transmitter)
• A termina transferul
Important: In ambele cazuri Master genereaza ceasul si controleaza transferul!
Eficienta bus-ului:
Conditiile pe bus
• START(S): SDA: 1->0 in timp ce SCL = 1
• STOP(P):SDA: 0->1 in timp ce SCL = 1
• DATE VALIDE(D): SDA stabil in timp ce SCL = 1
• ACK/NACK: Receptor trage SDA jos (ACK) sau o elibereaza (NACK)
• WAIT: Datele se modifica cand SCL = 0
• MAGISTRALA INACTIVA: Ambele linii sunt ridicate
Arbitrarea
Problema:
Doi Master incep comunicatia simultan sau mai multi Slave raspund la aceeasi adresa.
Solutia:
• Fiecare device scrie si citeste nivelul de pe SDA
• Daca vede 0 logic cand se asteapta 1 logic -> alt dispozitiv foloseste linia
• Dispozitivul face back-off pana la aparitia conditiei de STOP
Arduino Uno poate sa comunica cu alta placa similara prin intermediul
• interfetei I2C
• SPI
• interfetei seriale RS232.
USB
• Protocol serial
• Sincron
• Tip master-slave(host-device)
• Suporta viteza mare si comunicare cu mai multe dispozitive.
Arhitecuta USB
Un arbore:
• Perifericele sunt frunze
• Host, hub-uri USB sunt nodurile
Comunicatie
• Half-duplex
• Conditionata de host
• Punct la punct (host - device)
• Non Return to Zero Inverted(NRZI)
• 0 bit = comutare liinol de date (J la K sau invers)
• 1 bit = liniile de date raman neschimbate
USB Frame
Comunicatia pe USB se face prin tranzactii. Orice tranzactie trece prin un cadru de timp
controlat de Host - numit Frame. Lungimea si frecventa tranzactiilor despind de tipul
transferului.
Endpoints
• unidirectional; poate fi IN sau OUT.
• Analog porturilor de la web sockets
• Un singur tip de transfer per endpoint
• Endpoint 0 - intotdeauna de control
• Fiecare functie a dispozitivului = endpoints distincte
Caracteristica Detalii
Multi-master Orice nod poate transmite, daca magistrala e libera
Mesaje bazate pe Nu se transmite "catre" un nod, ci un mesaj identificat printr-un
ID ID
Determinist Prioritati pe ID – mesajele cu ID mai mic au prioritate
Detectie erori CRC, ACK, bit stuffing, checkuri multiple
Viteza Pâna la 1 Mbps (standard), 5 Mbps (CAN FD)
Maxim noduri Teoretic 112 (limitat de capacitance)
Structura fizica:
• 2 fire de date: CAN_H si CAN_L
• Magistrala este diferentiala (semnal = CAN_H - CAN_L)
• Lungime maxima: ~40m la 1 Mbps
• Terminatoare de 120 ohmi la capetele magistralei
Tipuri de mesaje
• Data Frame - cel mai uzual, contine date utile
• Remote Frame - cere unui nod sa trimita un Data Frame
• Error Frame - semnalat de noduri cand detecteaza erori
• Overload Frame - introduce o intarziere intre cadre.
MODBUS
• Protocol de comunicare master-slave sau client-server
• Suporta citire/scriere de registre, biti, date analogice/digitale
• Functioneaza prin serial(RS-232/RS-485) sau TCP/IP.
Arhitectura MODBUS
• Un master controleaza schimbul de date
• Unul sau mai mutli slaves (0-247 adrese posobile)
• Un slave nu transmite niciodata fara o comanda de la master
• Cimunicarea este determinista
Butoanele necesita
• Pull-up/pull-down pentru a evita stari nedefinite
• Debouncing (eliminarea efectului de bouncing)
• Protectia la supracurenti si descarcari electrostatice.
Ecrane tactile (touchscreen)
Tehnologie
Tip Principiu Avantaje Limitari
Rezistiv 2 folii conductive ce se Ieftin, functioneaza Nu suporta multitouch,
ating cu orice obiect necesita calibrare
Capacitiv - Modificarea capacitatii Mai precis, durabil Doar un punct de
surface intre straturi contact
Capacitiv - Matrice de Precizie ridicata Mai complex si
projected condensatoare, costisitor
multitouch real
SAW(Surface Unde sonore pe Foarte sensibil Sensibil la murdarie
Acustic Wave) suprafata, blocate la
atingere
Infrared(IR) Raza IR intrerupta de Nu necesita contact Afectat de lumina
atingere fizic externa
Acoustic Pulse Sunete detectate de Functioneaza cu Costisitor
Recognition senzori piezo orice obiect