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