Časové priebehy #
Súčasťou mnohých elektronických zapojení sú priebehy signálov v elektronickom obvode závislé od času. Pre tvorbu časových priebehov môžeme využiť niektoré z dostupných programov ako napríklad plantuml, v CircuitMacros môžeme využiť jednoduchú knižnicu lib_time.
Použitie #
Pri kreslení diagramov s časovými priebehmi je vhodné použiť mriežku Grid(x,y), ktorá zjednodušuje orientáciu pri zadávaní časových priebehov a relácií medzi nimi.
Hodnota amplitúdy logických úrovní pre príkazy kreslenia elementov časového priebehu je prednastavená na hodnotu 0.7, pre kreslenie priebehu je začiatkom zadaný stred logickej stopy. Parametre priebehov je možné modifikovať globálnymi premennými:
pulse_level = 0.7 - amplitúda logických hodnôt
pulse_slope = 0.0 - doba nábehu / odbehu signálu
pulse_width = 0.5 - šírka pwm pulzu
pulse_edge = .05 - hrana pre signál data
Statické úrovne a prechody medzi úrovňami #
level(d, L|H|X, D) - vykreslenie logických úrovní
pulse(d, delay, LH|HL) - vykreslenie prechodov medzi logickými úrovňami
parametre:
d - dĺžka stavu
L|H|X - úroveň L, H, X-neurčitý stav
D - čiarkovaný priebeh
delay - 0..1, oneskorenie zobrazenia prechodu, d*delay
Obr. 53 Statické úrovne signálov a prechody medzi úrovňami.#
Každý element časového priebehu je “orámovaný” neviditeľným boxom označeným ako B, tento je možné využiť v prípade potreby ako referenciu pre umiestnenie popisu časového okamžiku priebehu.
Obr. 54 Referencie pre umiestnenie popisného textu k časovému priebehu.#
Obr. 55 Referencie pre popis časových parametrov časových priebehov.#
Dáta #
V časových diagramoch dáta reprezentujú binárny vektor, hodnota alebo symbolické označenie vektora je zvyčajne súčasťou zobrazenia dát.
data(d, text, L|R|X) - vykreslenie dát
parametre:
d - dĺžka stavu
text - hodnota alebo označenie dát, text v úvodzovkách
L|R|X - typ dát, otvorené zľava, zprava, neučité / opakované dáta
Obr. 56 Vykreslenie dát s popisom.#
Hodinové impulzy #
Hodinové impulzy sú zvyčajne sekvenciou opakujúcich sa impulzov so striedou 1:1.
clock(d, HL|LH) - vykreslenie hodinového impulzu
parametre:
d - dĺžka stavu
HL|LH - fáza hodinového impulzu
Obr. 57 Hodinove impulzy.#
Pre zobrazenie sekvencie hodinovým impulzov môžeme použiť príkaz cyklu
for i=0 to 5 do { clock(1, HL); }
Časové relácie #
Pre zobrazenie súvislostí medzi časovými priebehmi (závislosti, oneskoreni) môžeme využiť konštrukcie z CircuitMacros. Pre vykreslenie vzniku a časových súvislostí zaviazaných s udalosťou (event) je v knižnici definované makro event()
event(p1, p2, offset) - vykreslenie závislosti medzi dvoma časovými okamžikmi
parametre:
p1,p2 - počiatočný a koncový okamžik udalosti
offset - tvar krivky, kladná alebo záporná hodnota
Obr. 58 Zobrazenie časových relácií medzi priebehmi.#
Zdrojový kód
include(lib_base.ckt)
include(lib_color.ckt)
include(lib_time.ckt)
command "\sf"
Grid(7,2);
move to (0.5, 1.5);
P1: pulse(2, 0.5, LH)
move to (1., 0.5);
P2: pulse(2, 0.5, LH);
color_red;
event(P1.C, P2.C, 0.25);
"$t_1$" at last spline.start rjust;
"$t_2$" at last spline.end ljust;
pulse_slope = 0;
color_black;
move to (3.5, 1.5);
P3: pulse(2.5, 0.5, LH)
move to (4.5, 0.5);
P4: pulse(2, 0.5, LH);
color_red;
L1: line from (P3.C, P3.C)+(0,0.75) to (P3.C, P4.C)+(0,-0.75) dashed;
L2: line from (P4.C, P3.C)+(0,0.75) to (P4.C, P4.C)+(0,-0.75) dashed;
"$\Delta t$" at 0.5 between L1.start and L2.start
Pre znázornenie volania prerušenia (interrupt) môžeme využiť makro irq()
irq(name) - vykreslenie volania prerušenia
parametre:
name - pomenovanie preušenia
Obr. 59 Zobrazenie volania prerušenia.#
Jednoduchý diagram #
Na diagrame je znázornený priebeh generovania PWM signálu časovačom procesora STM32L476 v móde 1.
Obr. 60 Generovanie PWM signálu.#
Zdrojový kód
.PS
scale = 2.54 # cm - jednotka pre obrazok
maxpswid = 30 # rozmery obrazku
maxpsht = 30 # 30 x 30cm, default je 8.5x11 inch
cct_init
arrowwid = 0.127 # parametre sipok - sirka
arrowht = 0.254 # dlzka
include(lib_base.ckt)
include(lib_time.ckt)
include(lib_color.ckt)
command "\sf"
Origin: Here
Grid(13,5); # vykreslenie pomocnej mriezky, origin je (0,0)
pulse_edge = .05 #
pulse_level = 0.7
pulse_slope = 0.0
pulse_width = 0.5
d=1.5
move to (2.5,4);
"\small{CK\_CNT}" at Here rjust;
level(1,L)
for i=0 to 5 do{
clock(0.5, HL)
level(1,L)
}
move to (2.5,3);
"\small{Counter}" at Here rjust;
data(d-0.5, "6" ,L); data(d,"7"); data(d,"8"); data(d,"9"); data(d,"0"); data(d,"1"); data(d-0.5,"2", R)
move to (2.5,2);
"\small{PWM 1}" at Here rjust;
level(2.5,H); pulse(3,0, HL); pulse(4.5,0, LH)
move to (2.5,1);
"\small{UPDATE Flag}" at Here rjust;
level(5.5,L); pulse(0.5, 0.0, LH); level(3.5,H);
color_red;
line from (5, 0) to (5, 5) dashed .08;
line from (8, 0) to (8, 5) dashed .08;
.PE