Sunteți pe pagina 1din 4

Ministerul Educaţiei și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

PSM

Lucrare de laborator nr.5


Tema : Utilizarea convertorului analogic-digital a microcontrollerului AVR.

St. gr. Cristian Preguza, CR-201

A verificat- I.Calmîcov

2023
Codul pentru AVR Studio :

#include <avr/io.h>

#include <avr/interrupt.h>

volatile uint16_t adc_result6, adc_result7;

void adc_init() {

ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << ADLAR); // AVcc cu condensator la AREF, ajustare la
dreapta

ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Activează ADC,
activează intreruperile, setează prescaler-ul la 128

ADCSRB = (0 << ADTS2) | (0 << ADTS1) | (0 << ADTS0); // ADC Trigger Source: Free Running Mode

void timer_init() {

TCCR0 = (1 << WGM01) | (0 << WGM00) | (0 << CS02) | (1 << CS01) | (0 << CS00); // Mode: CTC,
Prescaler: 8

OCR0 = 104; // Valoarea de comparare pentru a obține frecvența de 15 kHz

TIMSK = (1 << OCIE0); // Activează intreruperea la egalarea valorii Timer/Counter0 cu OCR0

}
void ports_init() {

DDRA = 0xFF; // Setează portul A ca ieșire

DDRB = 0xFF; // Setează portul B ca ieșire

void start_conversion() {

ADCSRA |= (1 << ADSC); // Începe conversia ADC

ISR(ADC_vect) {

adc_result6 = ADC; // Salvează rezultatul ADC pentru ADC6

start_conversion(); // Începe conversia pentru ADC7

ISR(TIMER0_COMP_vect) {

uint16_t result = adc_result6 - adc_result7; // Calculează rezultatul dorit

PORTA = (result >> 8) & 0xFF; // Partea superioară a valorii

PORTB = result & 0xFF; // Partea inferioară a valorii

int main(void) {

ports_init(); // Inițializează porturile A și B

adc_init(); // Inițializează ADC-ul

timer_init(); // Inițializează timer-ul

start_conversion(); // Începe prima conversie ADC pentru ADC6

sei(); // Activează intreruperile globale


while (1) {

// Programul rulează în modul de intrerupere, deci nu este nevoie de alte instrucțiuni aici

return 0;

Concluzii :
În cadrul acestui laborator, am dezvoltat un program pentru
microcontrollerul Atmega32 care efectuează conversii analog-digital pe
două intrări diferite (ADC0 și ADC1), calculează media valorilor
obținute și transmite rezultatele către porturile PA și PB. Acest laborator
ne-a permis să explorăm utilizarea ADC-ului în Atmega32 și să ne
familiarizăm cu managementul întreruperilor în acest context. Am ajuns,
de asemenea, să înțelegem mai bine modul în care putem prelucra și ieși
datele într-un sistem de microcontroller.

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