0% au considerat acest document util (0 voturi)
4 vizualizări34 pagini

Notite

Documentul oferă o introducere în conceptele de bază ale tranzistorilor, microcontrolerelor și microprocesoarelor, evidențiind diferențele dintre acestea. Se discută despre tipurile de memorie, metricile esențiale în alegerea unui procesor și modul de interacțiune între software și hardware prin intermediul interfețelor de tip memory-mapped I/O. De asemenea, sunt prezentate tehnici de debugging, utilizarea UART pentru comunicare, gestionarea întreruperilor și controlul timpurilor și PWM în aplicații embedded.

Încărcat de

floreansara24
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
4 vizualizări34 pagini

Notite

Documentul oferă o introducere în conceptele de bază ale tranzistorilor, microcontrolerelor și microprocesoarelor, evidențiind diferențele dintre acestea. Se discută despre tipurile de memorie, metricile esențiale în alegerea unui procesor și modul de interacțiune între software și hardware prin intermediul interfețelor de tip memory-mapped I/O. De asemenea, sunt prezentate tehnici de debugging, utilizarea UART pentru comunicare, gestionarea întreruperilor și controlul timpurilor și PWM în aplicații embedded.

Încărcat de

floreansara24
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Curs1

Saturday, May 31, 2025 10:06 AM

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

ATmega324P - detalii arhitecturale


• CPU RISC pe 8 biti
• 32 registre generale
• ALU cu 1 ciclu (majoritatea instructiunilor)
• Foloseste memory-mapped I/O pentru periferice (nu Port I/O)

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.

Unelte folosite pentru debugging


• LED, printf, UART
• Debugger JTAG, analizator logic, osciloscop
• IDE cu debugger integrat
• Profiler, trace-uri, teste de acoperire
UART
• Convertor paralel/serial folosit pentru comunicare intre MCU si alte dispozitive (ex.
PC, senzori)
• Poate fi configurat: baud rate, paritate, stop bits, data bits.
Structura unui cadru UART
• Start bit (0 logic)
• 5-9 biti de date
• Bit de paritate (optional)
• 1-2 biti de stop (1 logic)
AVR USART
Registre:
• UCSRnA - status
• UCSRnB - activare TX/RX si intreruperi
• UCSRnC - frame (USB, UCSZ, UPM)
• UBBRn - baud rate
Doua metode de utilizare:
1. Busy waiting
2. Cu intreruperi (mai eficient, dar necesita buffer software)

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.

Periferic intern vs extern


Procesorul nu poate comunica direct cu un periferic extern, are nevoie de un periferic intern
pe care sa-l initializeze si care sa efectueze transferurile de date. Comunicarea cu perifericul
intern se poate face prin intreruperi sau prin polling.

Parallel Bus vs Serial Bus


De ce folosim magistrale seriale?
• Nu folosesc multe linii de date (liniile au nevoie de pini de IO care costa, necesita
spatiu pe PCB care costa).
• Pot conecta mai multe sisteme complet diferite prin aceeasi magistrala( de ex. Senzori,
display, touch capacitiv pe acelasi bus I2C, 2 sau mai multe microcontrolere prin
aceeasi magistrala spi sau i2c).
• Viteza de transfer este desori scazuta.

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)

• Se da urmatoarea configuratie de UART: 5 biti de date, 1 bit de stop, 0 biti de paritate.


Scrieti care este eficienta exprimat in procente interfetei de comunicatie ce utilizeaza
protocolul UART:

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

Mecanismul de tratare al intreruperilor la ATmega324P


1. Finalizeaza instructiunea curenta
2. Push la PC + 2 in stiva
3. Push la SREG si orice alte registre generale folosite in bucla principala.
4. Salt la adresa din tabela vector întreruperi corespunzatoare tipului întreruperii sosite
5. În tabela trebuie sa fie un jmp la RTI
6. Executie RTI
7. La retur din RTI, pop la registre generale utilizate, pop la SREG
8. Pop la PC + 2 -> reluarea executiei în bucla main()

Initializare intreruperi pentru un periferic in avr-gcc


Pe interfata USART:
• Setam bitul din registrul perifericului (USART) care activeaza intreruperea(RXCIE0
din UCSRB0) - local interrupt enable.
• Setam bitul I din SREG - global interrupt enable.
• Scriem codul pentru RTI - ISR.
Functii importante
• Sei() - seteaza bitul I din SREG (activeaza intreruperile global)
• Cli() - dezactiveaza bitul I din SREG (dezactiveaza intreruperilglobal)
Intreruperi externe la ATmega324P
• Are 3 linii de intrerupere externa: INT0, INT1 si INT2
ISR Attributes
• ISR_BLOCK (default): La intrarea în executie a codului din ISR se dezactiveaza orice
alta întrerupere
• ISR_NOBLOCK: ISR ruleaza cu întreruperile activate. Permite executia de nested
interrupts (întrerupere în întrerupere)
• ISR_NAKED: Nu se mai face automat salvarea si refacerea contextului la
intrarea/iesirea din ISR. Este la latitudinea programatorului sa faca acesti pasi în cod
• ISR_ALIASOF: ISR e legat de alt ISR. Ajuta daca vreti sa rulati aceeasi rutina de
tratare pentru doua întreruperi din surse diferite
Multithreading
La fiecare yield() se salveaza contextul thread-ului curent(in cazul de fata push in stiva
pentru toate reg. generale si SREG), apoi se reface contextul pentru thread-ul urmator.
Curs 4 - Timere, RTC, PWM
Saturday, May 31, 2025 11:18 AM

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.

Componentele unui Lant de Conversie


• Senzor(traducator): genereaza un semnal analogic
• ADC: transforma tensiunea in valoare digitala (count)
• Conversii de unitati

Parametrii Criterici ai ADC


Rezolutia
• Numar de biti => numar de niveluri
• Ex: 10 biti -> 2 ^ 10 = 1024 valori
• Pas de cuantificare = Domeniu / 1024
• Eroare de cuantificare = 1/2 LSB
Frecventa de esantionare
• Teorema Nyquist-Shannon: f_esantionare > 2 * f_max

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.

Moduri de utilizare ADC


• Polling:
○ Initializare + citire prin busy-waiting
• Intrerupere:
○ Declansezi conversia manual
○ Se citeste rezultatul in ISR
• Auto-Triggering
○ Conversii automate pornite de: Timer0/1 Overflow/Compare, INT0, Comparator
analogic
○ Permite citire continua fara interventie manuala
Comparator Analogic
• Compara 2 tensiuni
• Poate genera intreruperi
• Util in decizii rapide fara ADC
Teorema Nyquist:

1. Conform teoremei Nyquist, pentru a putea reconstrui un semnal sinusoidal cu


perioada de 5 ms dupa conversia A/D, trebuie sa folosim rata de esantionare
de:
2. Ce mecanism este utilizat in microcontroller-ele Atmega pentru a putea citi
tensiunile de pe mai multe canale ale modului ADC? Multiplexarea
analogica a semnalelor
3. Care sunt configurarile minime necasare pentru ADC pentru a face o conversie
prin continuous polling?
○ Activare ADC
○ Setare prescaler
○ Pornire conversie
○ Selectie canale
4. Pentru a esantiona cu o precizie cat mai buna un semnal electric de tensiune
maxima de 2V putem folosi o referinta de: 2.5V
Pentru a esantiona cu cea mai buna precizie un semnal, este important ca
tensiunea de referinta(Vref) a convertorului A/D sa fie cat mai apropiata,
dar mai mare sau egala cu tensiunea maxima a semnalului.
5. Un ADC cu rezolutia de 8 biti are tensiunea de referinta 3.3V. Pentru o intrare
analogica de 1.65V care va fi valoarea(in baza zece) generata de ADC in urma
conversiei? Prima formula.
6. Pentru a putea esantiona direct un semnal de amplitudine vârf la vârf (axat în
0) de 2V si 230Hz putem utiliza:
Pentru a putea esantiona direct un semnal de amplitudine vârf la vârf (axat în
0) de 2V si 230Hz, trebuie sa luam în considerare atât gama de intrare a
convertorului (FSR - Full Scale Range), cât si frecventa de esantionare (SPS -
Samples Per Second).
Full Scale Range (FSR)
• Semnalul de 2V vârf la vârf, axat în 0, va varia între -1V si +1V. Deci,
convertorul trebuie sa suporte cel putin aceasta gama.
Frecventa de esantionare
• Conform teoremei esantionarii (Nyquist-Shannon), frecventa de
esantionare trebuie sa fie cel putin de doua ori frecventa semnalului
pentru a evita aliasingul. Deci, pentru un semnal de 230Hz,
frecventa de esantionare trebuie sa fie cel putin 460SPS.
Asadar, raspunsul corect este:
a. Un convertor cu FSR cuprins între -1.024V si 1.024V si o frecventa de
esantionare de 2000SPS sau un convertor cu FSR cuprins între -2.048V si
2.048V si o frecventa de esantionare de 6000SP

7. Pentru un convertor ce are o rezolutie de 12 biti si un domeniu de intrare (full


scale range)FSR cuprins între [ -1.024V ; 1.024V], treapta de cuantizare
(cuanta) masurata în microVolti este de:

8. Presupunem ca într-un proiect tehnic utilizam un ADC cu urmatoarele


specificatii:
rezolutie de 13 biti, rata de esantionare de 101409 esantioane/secunda,
referinta de tensiune de 3 V. Folosind acest ADC trebuie sa esantionam un
semnal sinusoidal pur de 2.5 V
Care este frecventa maxima a semnalului pâna la care putem realiza
esantionarea corect? (fara fenomen de alias)

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:

4. Care este diferenta dintre cele 2 headere: 0xA0 si 0xA1? Read/Write.


5. Alegeti afirmatia corecta despre comunicatia prin SPI:
b. Selectia dispozitivului cu care se comunica se realizeaza prin pinul de SS/CS
(Slave Select/Chip Select). 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
Curs 7 - I2C
Saturday, May 31, 2025 4:24 PM

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!

Calculul vitezei de transfer


Formula pentru circuit RC

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.

• În cazul interfetelor de comunicatie I2C, tehnica de ”clock stretching”


(blocarea/alungirea semnalului de ceas) este utilizata:
b. pentru a încetini comunicatia pe magistrala (când un dispozitiv slave necesita mai
mult timp pentru prelucrarea datelor)
• Alegeti variantele corecte de raspuns referitor la comunicatia pe I2C.
Tranzactie = comunicatie între conditia de start si conditia de stop.
Sa analizam fiecare afirmatie pentru a alege variantele corecte referitoare la
comunicatia pe I2C:
a. Orice tranzactie are loc pe magistrala I2C (master -> slave sau slave -> master),
receptorul trebuie sa semnalizeze ACK asupra pachetului, altfel, comunicatia va fi
anulată
Corect. În comunicarea I2C, receptorul trebuie sa semnalizeze ACK (acknowledge)
pentru fiecare byte receptionat, altfel comunicatia este considerata invalida si poate fi
anulata.
b. Magistrala I2C utilizeaza interfete tip open-collector doar pentru master
Incorect. Atât masterul, cât si slave-ul utilizeaza interfete tip open-collector.
c. Indiferent de tipul tranzactiei (Read sau Write), pentru fiecare tranzactie trebuie
comunicata o adresa de slave din partea master-ului
Corect. Fiecare tranzactie pe magistrala I2C începe cu o adresa de slave pentru a
specifica care dispozitiv va fi accesat.
d. Magistrala I2C utilizeaza interfete tip open-collector atât pentru master cât si
pentru slave
Corect. Ambele, master si slave, folosesc interfete tip open-collector pentru a permite
conectarea mai multor dispozitive pe aceeasi magistrala fara conflicte de semnal.
e. Orice tranzactie pe magistrala I2C, chiar si de la slave catre master este
întotdeauna initiata de catre master
Corect. Master-ul initiaza întotdeauna tranzactiile pe magistrala I2C, chiar daca datele
vor fi trimise de la slave catre master.
f. Magistrala I2C utilizeaza interfete tip open-collector atât pentru slave
Corect. Dar acest lucru este deja inclus în d), deci redundant.
g. Magistrala I2C utilizeaza interfete tip open-collector sau interfete push-pull
(cum sunt GPIO-urile în mod uzual pe microcontroller)
Incorect. Magistrala I2C utilizeaza întotdeauna interfete open-collector, nu push-pull.
h. Magistrala I2C este întotdeauna half-duplex, niciodata simplex sau full-duplex
Corect. I2C este o magistrala half-duplex, ceea ce înseamna ca datele pot fi transmise
în ambele directii, dar nu simultan.
Curs 8 - USB, CAN, MODBUS
Saturday, May 31, 2025 6:14 PM

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 Host vs USB Device


USB Host:
• Cunoaste toate dispozitivele
○ Capabilitatile fiecaruia
○ Nevoile de transfer de date
○ Cerintele de consum
• Administreaza comunicatia
○ Aloca latime de banda pentru dispozitive
○ Anunta comunicatia dispozitiv-host
○ Interogheaza dispozitive
USB Device:
• Responsabil sa se identifice host-ului
• Canale de comunicatie (endpoints - ports)
• Recunoaste comunicatia adresata lui
• Raspunde la cererile host-ului
• Mentine consumul de energie in limitele declarate
• Comunica cu host-ul atunci cand acesta cere

Firele intr-un cablu USB tipic


• VBUS (5V) - alimentare
• GND - masa
• D+ (Data+) - linie de date (diferential)
• D-(Date-) - linie de date (diferential)

Structura generala a comunicatiei USB


1. Enumerare: Cand un dispozitiv e conectat, host-ul il detecteaza si ii cere informatii.
Dispozitivul raspunde cu descriptorul USB.
2. Configurare: Host-ul seteaza parametri (ex: configuratia curenta, endpoint-uri).
3. Transferuri de date: Prin endpoint-uri

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

Tipuri de transfer USB


Tip Scop Exemple
Control Configurare, comenzi Initializare
Bulk Date mari, fara timp real Stick USB, imprimanta
Interrupt Raspunsuri rapide, mici Mouse, tastatura
Isochronous Timp real, cu latenta garantata Audio, video streaming
Secventa de comunicare tipica
1. Host detecteaza device (detectare VBUS, tragere D+ sau D- la HIGH).
2. Host trimite cereri de tip GET_DESCRIPTOR.
3. Device raspunde cu structuri descriptor.
4. Host configureaza device-ul (SET_CONFIGURATION).
5. Se deschid endpoint-urile, incepe tranferul normal.
Enumerare
Dispozitivul este atasat fizic
• Hub-ul:
○ Detecteaza dispozitivul
○ Informeaza Host-ul
○ Detecteaza viteza cu care se poate comunica
○ Reseteaza dispozitivul
○ Host-ul afla daca dispozitivul este high-speed
○ Conecteaza dispozitivul la bus
• Host-ul:
○ Aloca o adresa
○ Cere descriptorii dispozitivului
○ Selecteaza un driver potrivit
Descriptorii
Descriptorii sunt structuri care prezinta capabilitatile si configurarile unui dispozitiv catre
Host.
Device Descriptor:
• Vendor ID, Product ID, link catre string descriptors cu numele
• Nivelul de compatibilitate USB
• Numarul de configuratii posibile.
Configuration Descriptor:
• Descrie un set de functionalitati care pot fi active simultan
• Configuratia curenta este selectat de Host bazandu-se pe cimpatibilitate.
Interface Descriptor, Endpoint Descriptor, String Descriptor.
USB si AVR
• Functionarea USB full-speed necesita un ceas de 48MHz
• 1 control endpoint - 64 bytes, 1 endpoint - 256 bytes, 5 endpoints - 64 bytes.
• 20 registre IO pentru control/status.

CAN(Controller Area Network) BUS


• Half-duplex, protocol bazat pe mesaje
• ISO-11898 - standardul care descrie CAN
• Folosit pentru transmiterea datelor la distante mari
Caracteristici cheie

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

Structura unui mesaj CAN standard


Camp Lungime Descriere
Start bit 1 Semnal de inceput
Identifier 11 Priotitate si tipul mesajului
RTR bit 1 Remote Transmission Request
IDE bit 1 Identificator standard/extins
DLC 4 Data length code(0-8). Contine numarul de octeti de date
transmisi in data frame
Data 0-8B Datele propriu-zise
CRC 15 + 1 Verificari erori
ACK 2 Confirmare de la alte noduri
End of 7 Marcaj final
frame

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.

Variante ale MODBUS


Varianta Transoort Detalii principale
MODBUS RTU Serial(RS-485) Compact, binar, checksum CRC
MODBUS ASCII Serial(RS-232) Codificat ASCII, usor de citit
MODBUS TCP Ethernet Functioneaza prin IP, fara CRC

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

Structura de date MODBUS


• 2 tabele pentru valori discrete on/off (coils)
• 2 tabele cu valori numerice (registre)
• Fiecare tabela are 9999 valori.
• Fiecare coil este codifica ca un singut bit(on/off) si are o adresa de la 0x0000 la
0x270E.
• Fiecare registru este un cuvant de 16 biti
Bus Interface Unit a procesorului 8086 face prefetch la instructiuni si le stocheaza in
coda.
1. Care dintre urmatoarele tipuri de ecrane tactile (touch screen) nu permit detectia
apasarilor simultane (multitouch), indiferent de algoritmul utilizat pentru
prelucrarea datelor: CAN & RS485/RS422
Curs Sisteme cu microprocesoare
Sunday, June 1, 2025 3:18 PM

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

Detectia de miscare, orientare si pozitie


MRU / MRUV/ miscare circulara / pozitionare relativa si globala
• Accelerometru (MEMS)
○ Detecteaza acceleratia, inclusiv gravitatia
○ Nu poate distinge orientarea absoluta fara giroscop
• Giroscop
○ Masoara viteza unghiulara: roll, pitch, yaw
○ Nu ofera unghiuri absolute => trebuie combinat cu accelerometru
• Magnetometru
○ Masoara campul magnetic => folosit pentru busola
○ Afectat de interferente electromagnetice
• Fuziune senzorilor
○ Se schimba datele accelerometrului si giroscopului cu filtre (ex: Kalman,
complementar)
Pozitionare geografica
Sisteme
• Triangulatie prin GSM
• GPS/RTK GPS - pentru precizie crescuta
1. Iata corespondentele corecte între termeni si afirmatii:
a. ISR - rutina de tratare a întreruperii
b. Arduino - sistem de prototipare cu mediu de dezvoltare specific
c. Atmega324P - microcontroller cu nucleu AVR
d. Raspberry Pi - Single Board Computer
e. ADC - convertor analog digital
f. PWM - semnal dreptunghiular cu modulatie a latimii pulsurilor
2. Care dintre urmatoarele tipuri de ecrane tactile (touch screen) nu permit detectia
apasarilor simultane (multitouch), indiferent de algoritmul utilizat pentru prelucrarea
datelor: a. ecranele tactile rezistive cu 4 fire
3. Iata corespondentele corecte intre termeni si afirmatiile aferente:
• camera anecoica - utilizare - camera de testare la standardele IP
• RoHS si WEEE - directive de protectie a mediului înconjurator
• Declaratie de conformitate valabila în spatiul economic european necesara
comercializarii aparatelor electronice - CE
• Standardul IP - Protectie la praf si/sau umezeala
• EMI/EMC - testarea de interferenta electromagnetica a aparatelor
• eX - se refera la rezistenta la explozivi/utilizarea în mediu cu potential exploziv
4. Desigur! Iata corespondentele corecte pentru fiecare termen:
1. Open-Drain/Open-Collector:
○ functionalitate electronica implementata în uC care poate trage la masa linia
de comunicatie
2. Printf debugging:
○ tehnica de debugging utilizata pentru a trimite date la consola/seriala
3. Bit-bang:
○ implementarea unei functionalitati (e.g., UART, SPI, I2C, etc) folosind
comutarea din cod a pinilor pentru a simula perifericul specific unui
protocol de comunicatie
4. CS/SS/PS (Chip Select/Slave Select/Peripheral Select):
○ pin utilizat pentru protocoalele SPI, I2C
5. Analizor logic:

○ dispozitiv pentru esantionarea semnalelor digitale în vederea analizei
acestora pentru debug pe diverse protocoale digitale
5. Care dintre urmatoarele secvente de cod pot fi utilizate pentru a detecta evenimentul de
apasare (dar care nu se mai declanseaza daca butonul este tinut apasat continuu) a unui
buton legat pe intrarea unui microcontroller cu nucleu AVR (e.g. ATMEGA324P) care
are rezistenta de pull up externa si care trage pinul la masa atunci când este apasat?
Se considera GPIO-urile configurate corect apriori.
Presupuneti ca butonul este legat la PB0
a.
if(!(PINB & (1<<PB0)){ // If Some Button is pressed...
delay_ms(50); // Delay to debounce button
if(!PINB & 1<<PB0){ // If Button is Still Pressed...
//... Do Something useful here ...
}
}
while(!(PINC & BUTTON));
b.
if(~(PINB & _BV(PB0)))
c.
nicio varianta
d.
toate variantele
e.
if((PINB & _BV(PB0)))
f.
if(!(PINB & _BV(PB0)))
//cod pentru buton apasat
Raspuns corect: f.
6. Pentru a corela termenii cu afirmatiile aferente, iata care este fiecare:
1. GPS:
○ Sistem de pozitionare absolut global
2. Giroscop electronic:
○ Furnizeaza date privind viteze/acceleratii unghiulare
3. Accelerometru:
○ Dispozitiv MEMS
4. Touchscreen capacitiv:
○ Permite detectia a mai multe apasari concomitente
5. Magnetometru:
○ Busola magnetica
7.

S-ar putea să vă placă și