Acest curs explorează arhitectura și programarea principalelor interfețe periferice utilizate în sistemele embedded.
Microcontrolerele și microprocesoarele comunică cu dispozitive externe prin interfețe periferice. Acestea includ GPIO pentru control digital, I2C și SPI pentru comunicare serială, UART pentru transmisie asincronă și ADC/DAC pentru conversia semnalelor analogice.
Source: https://brandonroots.com/2020/11/03/lab-i2c-and-spi-communication/
GPIO sunt pini configurabili ai microcontrolerului care pot funcționa ca intrare sau ieșire digitală. Ei sunt utilizați pentru controlul LED-urilor, butoanelor și altor dispozitive digitale.
#define GPIO_OUTPUT 1
#define GPIO_INPUT 0
void set_pin_mode(int pin, int mode) {
if (mode == GPIO_OUTPUT) {
// Configurare ca ieșire
} else {
// Configurare ca intrare
}
}
void write_gpio(int pin, int value) {
// Setează valoarea pinului
}
I2C este un protocol de comunicație serială utilizat pentru conectarea senzorilor și altor componente. Folosește două linii: SDA pentru date și SCL pentru ceas.
void i2c_write(int address, char data) {
// Inițializare transmisie
// Transmitere adresă și date
}
SPI este o interfață de comunicație serială sincronă utilizată pentru transferuri rapide de date. Folosește linii dedicate pentru semnalul de ceas și selecția dispozitivului.
void spi_init() {
// Configurare ceas și mod SPI
}
void spi_transfer(char data) {
// Transmitere și recepție simultană
}
UART permite transmisia de date între dispozitive printr-o conexiune serială asincronă. Este utilizat în comunicații RS232 și USB-TTL.
void uart_init(int baudrate) {
// Configurare viteză baud și mod de transmisie
}
void uart_send(char data) {
// Transmitere caracter
}
ADC convertește un semnal analogic într-o valoare digitală, permițând citirea senzorilor de temperatură, presiune sau luminozitate.
int read_adc(int channel) {
// Selectează canalul și începe conversia
return adc_value;
}
DAC convertește o valoare digitală într-un semnal analogic, fiind utilizat pentru generarea de unde sinusoidale și PWM.
void write_dac(int value) {
// Convertirea valorii digitale în tensiune analogică
}