vezi 2017
pt ca nu ne zice efectiv frecv am considerat 16M Hz
exercitiile rezolvate Examen2017.pdf
1
În figură este prezentată diagrama de timp pentru perifericul Timer/Counter0 al microcontrolerului ATmega1280, în următorul mod de lucru:
a. Clear Timer on Compare Match (CTC), prescaler /8
b. Normal, fără prescaler
c. Normal, prescaler /8
d. Clear Timer on Compare Match (CTC), fără prescaler

raspuns
numara pana la max → normal nu are prescaler → b
2
Care este durata de timp măsurată de Timer/Counter0 al microcontrolerului ATmega1280 între valorile 100 și 210 ale registrului TCNT0, dacă acesta funcționează în mod normal cu un prescaler de 8?
frecv 16Mhz
raspuns
f timer = 16 Mhz /8 = 2mhz T timer = 1/ 2000 000 = 0.0000005 s = 0.0005 ms = 0.5 us 210 - 100 = 110 ⇒ 110 * 0.5 = 55 us
3
intreruperi depasire timer counter 1 prescaler 8 5secunde 16 Mhz
raspuns
f timer = 16 Mhz /8 = 2mhz 5 secunde ⇒ 10 000 000 nr int =10 000 000 / 65356 = 153
4
Care este durata impulsului pozitiv al unui semnal dreptunghiular generat cu ajutorul Timer/Counter1 al microcontrolerului ATmega1280, care funcționează în modul 14, cu ICR1 = 999 și OCR1A = 500?
Timerul folosește un prescaler de 64, iar la începutul ciclului de numărare pinul pe care este generat semnalul este 1 logic. 16 mhz
raspuns
mod 14 ICR1=999 OCR1A=500
prescaler 64, 16 MHZ frecv atmega1280 la începutul ciclului de numărare pinul semnalului generat este 1
mod 14 ⇒ FAST PWM TOP = ICR1
semnal pozitiv ⇒ 0 pana la 500 ⇒ 501 pasi f clock = 16 000 000 / 64 = 250 000 Hz ⇒ T = 0.000 004 s = 0.004 ms = 4 us 501 * 4 = 2004 us = 2 ms
5
Care este frecvența reală de lucru a microcontrolerului ATmega1280 pentru care instrucțiunea
__delay_cycles(200000L)
se execută în 44 ms?
raspuns
200 000 cicli ⇒ 44 ms
t reala = nr cicli / timp ⇒ 200 000 / 44 = 4545 cicli / ms = 4 545 000 = 4.545 M HZ
6
Care este valoarea registrului UBRR pentru a seta viteza de comunicație pe interfața serială la 19200 baud (biți pe secundă)?
Microcontrolerul ATmega1280 lucrează la 16 MHz, cu U2X = 1.
raspuns
BAUD= f_osc / 8 (UBBR + 1) UBBR= ( f_osc / 8baud ) - 1
UBBR = 16 000 000 / 8* 19200 = 2 000 000 / 19200 -1 = 103
7
Ce cantitate de memorie de program (Flash) are microcontrolerul ATmega1280?
a. 16 KB
b. 32 KB
c. 128 KB
d. 64 KB
raspuns
128 kb
8
Care este frecvența de lucru maximă pentru microcontrolerul ATmega1280?
a. 1 MHz
b. 10 MHz
c. 16 MHz
d. 4 MHz
raspuns
16
9
Care este numărul registrelor interne de uz general ale microcontrolerului ATmega1280?
a. 16
b. 8
c. 64
d. 32
raspuns
d
10
Care este valoarea de pe pinul PD2 după execuția următoarei secvențe de instrucțiuni la începutul unui program rulat pe ATmega1280?
PORTD = 0xE6;
DDRD = 0xB5;
a. Nedefinit
b. 0 (0 V)
c. 1 (5 V)
d. Impedanță ridicată (Hi-Z)
raspuns
5
11
Care este șirul de caractere transmis pe interfața serială la apelul funcției print de mai jos?
int value = 40;
print(value + 1);
Funcția print este:
void print(int a) {
const char tab[] = "0123456789ABCDEF";
char data[5];
int b = a * 1000, i = 0;
while (i < 4) {
data[i] = b & 0x000F;
b >>= 4;
i++;
}
i = 0;
while (i < 4) {
USART_Transmit(tab[data[4 - i - 1]]);
i++;
}
}
raspuns
b= 41 000 b & 0x000F; ia primu octet 1111 shifteaza
afiseaza nr 41 000 in hexa A028
12
Cât timp durează transmisia efectivă a întregului șir de caractere de la exemplul precedent, dacă interfața serială funcționează la 19200 baud, cu 8 biți pe caracter, fără paritate și cu un bit de stop?
raspuns
8 + start + stop = 10 biti / caracter ⇒ 4 * 10 = 40 biti timp = biti ./19200 = 40 /19200 =
13
Care este numărul de reset-uri pe secundă provocate de WATCHDOG pentru următorul program rulat pe ATmega1280?
Se consideră datele (ideale) din foaia de catalog.
__no_init int flag;
void main(void) {
if (flag == 1) {
flag = 0;
TCCR1B |= (1<<CS11);
while (TCNT1 < 8000);
} else {
flag = 1;
TCCR1B |= (1<<CS11)|(1<<CS10);
while (TCNT1 < 2000);
WDTCR |= (1<<WDP0);
}
asm("WDR");
WDTCR |= (1<<WDE);
while (5);
}
raspuns
ramura 1 nu modif watchdogu ramura 2 wdp 0 ⇒ 32 ms
nr reset pe secunda = 1 000 / 32 = 31.25
14
Care este perioada de timp calculată de următoarea expresie, în care TCNT1 = 16000?
Timer/Counter1 funcționează fără prescaler. Precizați în mod explicit unitatea de măsură.
unsigned long period = (TCNT1 >> 2) / 1000;
raspuns
4000 / 1000 = 4
15
De câte ori se va executa în fiecare secundă zona de cod marcată cu gri, pentru următorul program rulat pe ATmega1280?
unsigned int count = 0;
unsigned int flag = 0;
#pragma vector = TIMER1_OVF_vect
__interrupt void isr_TIMER1_overflow(void) {
count++;
if (count == 100) {
count = 0;
flag = 1;
}
TCNT1 = 45500;
}
void main(void) {
TCNT1 = 45500;
TCCR1B |= (1<<CS10);
TIMSK |= (1<<TOIE1);
__enable_interrupt();
while (5 > 4) {
if (flag == 1) {
flag = 0; //asta
}
}
}
raspuns
face intreruperea doar la overflow 65356 - 45500 = 20036 de tickuri timer prescaler = 1 ⇒ 1 clkc ceas = 1 clkc timp
t overflow = 20036 / 16 000 000= 0.00125 t flag_set = 0.125 f flag_set = 1 / 0.125 = 8