Sunteți pe pagina 1din 98

FACULTATEA DE AUTOMATIC I CALCULATOARE

DEPARTAMENTUL CALCULATOARE
Sistem de monitorizare i comand pentru
vehicule electrice bazat pe microcontroller
LUCRARE DE LICEN

Absolvent: Lucian CRIAN
Coordonator tiinific: S.L.Dr.In Radu D!N"SC#

$%&$
VIZA!
DECAN! DIREC"R DE#ARA$EN!
'ro(. dr. in. Liviu )ICL"A 'ro(. dr. in. Rodica
'*+*L"A

Absolvent: Lucian CRIAN
+I+L#L L#CR!RII D" LIC"N,!
%& "nun-ul temei. #roble'a (e care l)crarea de fa*+ o abordea,+ se refer+ la cond)cerea
)nei 'a-ini .n 'od eficient! av/nd ca -i constr/n0eri o destina*ie aflat+ la )n an)'it
n)'+r de 1ilo'etri sa)2-i o constr/n0ere le0at+ de ti'()l 'a3i' (/n+ la care se dore-te
a4)n0erea la destina*ie& 5e va folosi )n 'icrocontroller (entr) ac6i,i*ia datelor de la
sen,ori -i tri'iterea lor la o tablet+ c) siste' de o(erare Android&
7& Con-inutul lucrrii. Pagina de prezentare, Declaraie, Introducere, Obiectivele
proiectului, Studiu bibliografic, Analiz i fundamentare teoretic, Proiectare de detaliu
i implementare, Testare i validare, anual de instalare i utilizare, !oncluzii,
"ibliografie, Ane#e
8& Locul documentrii. #niversitatea +ehnic din Clu/0Napoca1 Departamentul
Calculatoare
2. Consultan-i. S.L. Dr. In. Radu Dnescu1 A.L. Dr. te(an 3reban
9& Data emiterii temei. % noie'brie 7:%%
;& Data predrii. 7< I)nie 7:%7
Absolvent: =============================
Coordonator tiinific: =============================
Declaraie
5)bse'nat)l $ucian !%I&A'! st)dent al >ac)lt+ii de A)to'atic+ i Calc)latoare!
Universitatea e6nic+ din Cl)4?Na(oca! declar c+ ideile! anali,a! (roiectarea!
i'(le'entarea! re,)ltatele i concl),iile c)(rinse .n aceast+ l)crare de licen+ constit)ie
efort)l 'e) (ro(ri)! 'ai ()in acele ele'ente ce n) .'i a(arin! (e care le indic i
rec)nosc ca atare&
Declar de ase'enea c+! d)(+ tiina 'ea! l)crarea .n aceast+ for'+ este ori0inal+
i n) a 'ai fost niciodat+ (re,entat+ sa) de()s+ .n alte loc)ri sa) alte instit)ii dec/t cele
indicate .n 'od e3(res de 'ine&
Data: 7< I)nie 7:%7 Absolvent: Lucian CRIAN
N)'+r 'atricol: 7%:@A7
5e'n+t)ra:======================
Cuprins
%& Introd)cere B Conte3t)l (roiect)l)i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%
%&% Conte3t)l (roiect)l)i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%
%&7 Do'eni)l te'ei de licen*+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%
7& "biectivele (roiect)l)i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7
7&% $+s)rarea tensi)nii (e -)nt -i (e divi,or)l de tensi)ne&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7
7&%&% Asi0)rarea ba,ei de ti'( (entr) ac6i,i*ia de date&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7
7&%&7 Asi0)rarea volta4)l)i de referin*+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7
7&%&8 A'eliorarea varia*ilor cons)')l)i de c)rent&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7
7&7 Co')nicarea c) tableta&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8
7&7&% #rotocol)l Android "(en AccessorC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8
7&7&7 Ali'entarea tabletei&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8
7&7&8 #osibilitatea .nloc)iri tabletei&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8
7&8 Asi0)rarea inde(enden*ei .n co')nicare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8
7&8&% ri'iterea (ara'etrilor de confi0)ra*ie ai 'icrocontroller?)l)i&&&&&&&&&&&&&&&&&&&A
8& 5t)di) biblio0rafic&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9
8&% Variante alternative de conectare la 'icrocontroller&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9
8&%&% Dac1in0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9
8&%&7 Erid0e .ntre U5E -i serial&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9
8&%&8 Erid0e .ntre El)eoot6 -i serial&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9
8&7 Android "(en AccessorC #rotocolF ADGH&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;
8&7&% AndroidIDo'e&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&;
8&8 5iste' a)dio?video al 'a-inii conectat la Android&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&J
8&A Cond)cerea eficient+ a ve6ic)lelor electrice&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&J
8&9 Robo*i a)tono'i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@
A& Anali,+ -i f)nda'entare teoretic+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&<
A&% $#LAE K&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&<
A&7 $icroc6i( A((lication LibrarC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&<
A&8 Co'(onente 6ardLare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%:
A&8&% Circ)it)l de ac6i,i*ie&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%:
A&8&7 D?Erid0e&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%:
A&8&8 $otoarele de c)rent contin))&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%
A&A #erifericele 'icrocontroller?)l)i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%7
A&A&% i'er&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%7
A&A&7 ")t()t Co'(are&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%8
A&A&8 In()t ca(t)re&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%9
A&A&A I7C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%;
A&A&9 ADC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%J
A&A&; RCC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%@
A&A&J Controller?)l de .ntrer)(eri&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%<
A&9 #rotocoale folosite&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7:
A&9&% I7C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7:
A&9&7 U5E&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&77
A&9&7&% " sc)rt+ introd)cere&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&77
A&9&7&7 i()ri de transfer&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&78
A&9&7&8 $odel)l de co')nica*ie U5E&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&78
A&9&7&A Descri(torii de U5E&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7A
A&9&7&9 #roces)l de en)'erare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7A
A&9&7&; U5E E'bedded Dost 5tac1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&79
A&9&7&;&% ar0et #eri(6eral ListF #LH&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&79
A&9&7&;&7 Ar6itect)ra stivei&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7;
A&9&7&;&8 Driver?)l client ba,at (e eveni'ente&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7J
A&9&8 Android "(en AccessorC #rotocol&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7J
A&; Al0orit'ii (ro()-i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&7@
A&;&% Conversia din analo0ic .n di0ital&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8:
A&;&7 $+s)rarea t)ra*iei&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8%
A&;&8 Act)ali,area datelor&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&87
A&;&A Calibrare 'otoare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&88
A&;&9 Mnl+n*)irea co'en,ilor (e U5E &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&88
9& #roiectare de detali) -i i'(le'entare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&89
9&% $od)l)l de DAC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8;
9&7 $od)l)l de In()t Ca(t)re &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8J
9&8 $od)l)l de #N$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8<
9&A $od)l)l de ADC &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&8<
9&9 $od)l)l de RCC&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A:
9&; #ro0ra')l (rinci(al&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A:
9&;&% 5tr)ct)ra co'en,iilor&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A%
9&;&7 ri'iterea datelor c+tre tablet+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A7
9&;&8 >)nc*ia de tri'itere a datelor c+tre Android&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A8
9&;&A Ini*iali,area co')nica*iei (e U5E -i ADG&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A8
9&;&9 U5Eas1FHO 1ee( t6e stac1 r)nnin0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AA
9&;&J Ini*iali,area (l+cii de de,voltare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AA
9&J Lo0ica 0eneral+ a a(lica*iei&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&AA
;& estare -i validare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A;
J& $an)al de instalare -i )tili,are&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A<
J&%& Instalare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A<
J&%&% Instalare 6ardLare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&A<
J&%&7 Instalare softLare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9%
J&7 $an)al)l )tili,ator)l)i&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&97
@& Concl),ii&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&98
@&% Re,)'at&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&98
@&7 Re,)ltate ob*in)te&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&98
@&8 #osibile de,volt+ri -i .'b)n+t+*iri )lterioare&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9A
<& Eiblio0rafie&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9;
%:& Ane3e&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&9J
1. Introducere Contextul proiectului
1.1 Contextul proiectului
L)crarea de fa*+ este o co'(onent+ a 'a-inii solare de,oltat+ .n cadr)l
Universit+*ii e6nice din Cl)4?Na(oca -i intit)lat+ Solis()*( Ve6ic)l)l se dore-te a fi )n)l
de ti( a)tono'! a c+r)i (ro()lsie este de ti( electric! ali'entarea f+c/nd)?se folosind
ac)')latori .nc+rca*i de la (ano)ri fotovoltaice&
#entr) (rel)area infor'a*iilor de la sen,ori se folose-te )n 'icrocontroller! )til -i
(entr) ac*ionarea 'otoarelor& Afi-area infor'a*iilor -i inte(retarea lor se face folosind o
tablet+ care are )n siste' de o(erare de ti( Android! .n loc)l (ano)l)i central de bord&
1.2 Domeniul temei de licen
#roble'a (e care l)crarea de fa*+ o abordea,+ se refer+ la cond)cerea )nei 'a-ini
.n 'od eficient! av/nd ca -i constr/n0eri o destina*ie aflat+ la )n an)'it n)'+r de
1ilo'etri sa)2-i o constr/n0ere le0at+ de ti'()l 'a3i' (/n+ la care se dore-te a4)n0erea
la destina*ie& Ca -i 'odel de 'a-in+ se va considera )na de ti( solar! c) ali'entare
electric+ de la ac)')latori&
Co'(arativ c) circ)itele analo0ice! )n siste' de co'anda si 'onitori,are ba,at
(e 'icrocontroller (er'ite o 'ai 'are fle3ibilitate! -i o ada(tare 'ai b)n+ la 'odificarea
(ara'etrilor& #entr) sen,ori -i ele'ente de ac*ionare se va folosi o adresare individ)al+
.n loc)l )nei 'a0istrale co')ne&
Mn cadr)l 'a-inii solare )n as(ect i'(ortant .l re(re,int+ 'onitori,area bateriilor!
deoarece folosirea lor (este li'ita (er'is+ (oate (rod)ce distr)0erea lor& Astfel se va
'onitori,a cons)')l de c)rent din circ)it (rec)' -i 0rad)l lor de desc+rcare&
C)noa-terea acestor (ara'etri (er'ite o esti'are a ti'()l)i r+'as (/n+ la descarcarea
bateriilor! .n rit')l de cons)' act)al& >olosind c)rbele de desc+rcare se (ot indica
diverse 'od)ri de (rel)n0ire a d)ratei de desc+rcare! .n f)nc*ie de cons)')l de c)rent&
Un alt as(ect i'(ortant .l constit)ie ac*ionarea 'otoarelor& Mn )r'a testelor s?a
constat c+ circ)itele de ac*ionare r+s()nd .n 'od diferit la sti')li& Din aceast+ ca),+ este
necesar ca at)nci c/nd se conectea,+ )n set no) de 'otoare s+ se fac+ o calibrare ini*ial+ a
lor& Mn ti'()l f)nc*ion+rii se folose-te -i o b)cl+ de co'and+ .nc6is+! i'(le'entat+ .n
softLare! (entr) a red)ce diferen*ele .ntre t)ra*ii&
Co')nicarea c) sen,orii! sa) c) tableta se face folosind (rotocoale c)' ar fi I7C
res(ectiv U5E& Datele circ)l+ .n 0eneral .ntr?o sin0)r+ direc*ie de la sen,ori s(re
'icrocontroller! sa) de la acesta s(re ele'entele de ac*ionare -i .n a'bele sens)ri (e
U5E&
%
2. Obiectivele proiectului
2.1 Msurarea tensiunii pe unt i pe divizorul de tensiune
#rinci(al)l obiectiv al acestei l)cr+ri .l constit)ie 'onitori,area desc+rc+rii )nor
ac)')latori c/nd s)nt folosi*i c) )n cons)' variabil& Mn acest sens s?a folosit )n -)nt de
:&@P astfel .nc/t '+s)r/nd c+derea de tensi)ne s+ se (oat+ afla cons)')l 'o'entan de
c)rent& #entr) '+s)rarea l)i s?a folosit ()ntea N6eatstone! datorit+ necesit+*ii e3isten*ei
)nei (reci,ii ridicate (entr) '+s)rarea )nei re,isten*e de valoare 'ic+&
#rinci(i)l (rin care se afl+ intensitatea -tiind c+derea de tensi)ne (e -)nt este de a
folosi le0ea l)i "6': +, I- %& Voi folosi )n sc)rt e3e'(l): la o valoare de tensi)ne
'+s)rat+ (e -)nt de :&AV -i re,isten*a de :&@P! folosind for')la en)n*at+ anterior se
a4)n0e la valoarea intensit+*ii de :&9A&
Astfel obiectiv)l (rinci(al (res)()ne '+s)rarea .n fa(t a do)+ tensi)ni: )na (e
ac)')latori! folosind )n divi,or -i alta (e -)nt& 5?a ales )n -)nt de o valoare 'ic+ (entr)
a avea )n cons)' 'ini' de c)rent& Acest fa(t face ca tensi)nea '+s)rat+ s+ n)
de(+-easc+ :&9V& Valoarea '+s)rat+ (e divi,or este de 8 ori 'ai 'are! 'a3i')l fiind de
%&9V&
2.1.1 Asigurarea bazei de timp pentru achiziie date
Un alt as(ect i'(ortant .n cadr)l (roiect)l)i este de inte0rare .n ti'( a celor do)+
valori '+s)rate& #entr) aceasta este necesar ca ac6i,i*ia datelor s+ se fac+ la intervale de
ti'( foarte bine stabilite& N) este at/t de i'(ortant s+ se -i tri'it+ datele c) e3act aceia-i
constan*+& #entr) aceasta s?a ales o ba,+ de ti'( de %D,! care este asi0)rat+ de circ)it)l
de RCC& " varia*ie .n 0enerarea acestei ba,e de ti'( va d)ce .n ti'( la re,)ltate
eronate&
2.1.2 Asigurarea voltajului de referin
" alt+ (arte esen*ial+ a '+s)r+rii tensi)nilor o constit)ie 'en*inerea referin*ei
(entr) ADC la o valoare constant+& #entr) aceasta se vor folosi re0)lator)l de tensi)ne de
(e (lac+ .n co'bina*ie c) circ)it)l de DAC& Convertor)l din analo0ic .n di0ital va folosi
o referin*+ de %&9V .n loc)l celei e 8&79V folosind)?se 'ai eficient cei %: bi*i ai
re,)ltat)l)i conversiei din analo0 -i tot odat+ d)ce la o (reci,ie ridicat+ la '+s)rarea 'V&
2.1.! Ameliorarea variailor consumului de curent
Datorit+ 'od)l)i de constr)c*ie al 'otoarelor -i a fa(t)l)i c+ s)nt co'andate .n
#N$ a(ar varia*ii ale cons)')l)i de c)rent! de frecven*a co'en,ii (ri'ite& Acest l)cr)
se datorea,+ r+s()ns)l)i bobinelor la se'nal)l dre(t)n06i)lar& #entr) aten)area efect)l)i
s?a folosit )n condensator -i o 'ediere a valoriilor '+s)rate folosind softLare?)l&
Asi0)rarea )nei referin*e stabile (entr) ADC n) este s)ficient+& Ea,a de ti'( a
convertor)l)i treb)i s+ fie de ase'enea stabil+& Mn acest sens oscilator)l intern al 'od)l)i
n) (oate fi folosit! fiind nereco'andat la '+s)r+tori de (reci,ie& >olosirea se'nal)l)i de
ceas al (erifericelorFcare este divi,at din oscilator)l (rinci(alH este o alternativ+ ')lt 'ai
(otrivit+&
7
2.2 Comunicarea cu tableta
Datorit+ ca(acit+*ii li'itate de (rocesare -i de afi-are a 'icrocontroller?)l)i se
i'()ne folosirea )nei tablete (entr) (rel)crea infor'a*iilor! salvarea -i afi-area lor .n
ti'( real! )tili,ator)l)i )'an& Acest l)cr) ridic+ cel ()*in do)+ (roble'e: tri'itirea
infor'a*iilor la o frecven*+ ridicat+ -i (osibilitatea ali'entarii tabletei .n acela-i ti'(&
2.2.1 "rotocolul Android #pen Accessor$
Este )n (rotocol de,voltat de Qoo0le care folose-te U5E?)l .'(re)n+ c) )n
'ecanis' de 6and?s6a1e (er'i*/nd co')nicarea .ntre )n 'aster -i )n slave& reb)ie av)t
.n vedere c+ F'o'entanH tableta 4oac+ rol)l de slave& Astfel cod)l necesar f)nc*ion+rii
co')nica*iei cade .n sarcina 'icrocontroller?)l)i& Un alt de,avanta4 ce treb)ie av)t .n
vedere este c+ doar )lti'ele versi)ni de Android s)(ort+ acest (rotocol&
2.2.2 Alimentarea tabletei
"b*inerea ali'ent+rii contin)e a tabletei este necesar+ deoarece dac+ se folose-te
ca -i (ano) de bord! n) se (oate .nde(+rta .n ti'()l f)nc*ion+rii (entr) a se re.nc+rca&
>olosirea )nei s)rse alternative de ali'entare n) este o sol)*ie 0eneral+! deoarece de cele
'ai ')lte ori! n) e3ist+ o ')f+ se(arat+ .n acest sco(&
Avanta4)l U5E este acela c+ (er'ite transfer)l datelor la vite,e de ordin)l $E2s
(er'i*/nd -i ali'entarea slave?)l)i .n acela-i ti'(& ensi)nea de ali'entare este de 9V la
)n c)rent 'a3i' de 79:'A! ceea ce .n ca,)l de fa*+ este s)ficient&
2.2.! "osibilitatea %nlocuiri tabletei
5e dore-te folosirea )n)i (rotocol care s+ (er'it+ o .nloc)ire c/t 'ai facil+ a )nei
tablete c) alta de acela-i ti( sa) alt 'odel& 5ol)*iile de ti( R6ac1in0S (e c/t s)nt de
interesante -i de ca(tivante (res)()n de cele 'ai ')lte ori desfacerea carcasei -i
cositorirea )nor fire&
>olosirea sol)*iei (re,entate .n aceast+ l)crare! (res)()ne doar .nde(+rtarea
cabl)l)i de U5E! sc6i'barea tabletei! .nc+rcarea (e aceasta a (ro0ra')l)i Android! a(oi
se reconectea,+ cabl)l -i se (oate rel)a activitatea&
2.3 Asiurarea independenei !n comunicare
5e dore-te ca o sc6i'bare fie a dis(o,itiv)l)i slave! fie a cel)i 'aster s+ n)
(res)()n+ -i 'odificarea (rotocol)l)i de co')nicare& Mn acest sens s?a ales )n (rotocol
si'(l)! ba,at (e tri'iterea de octe*i& Astfel fiecare 'esa4 este (recedat de )n cod de
identificare! )r'at a(oi de )n n)'+r fi3 de octe*i care re(re,int+ ar0)'entele&
"ctet
%
"ctet
7
&&&& "ctet
nT%
Cod 'esa4 Ar0)'ent
%
&&&& Ar0)'ent
n
Tabelul .(/0 1ormatul general al unui mesa2
Mn ca,)l .n care o valoare oc)(+ 'ai ')lt de )n octetFca de e3e'(l) valoarea de
8
la ADC care este (e %: bi*iH se va tri'ite (e n)'+r)l necesar de octe*i! c) aliniere la
drea(ta .n cadr)l 0r)()i de bCtes&
2.!.1 &rimiterea parametrilor de configuraie ai microcontroller'ului
>iecare 'icrocontroller este infl)en*at de 6ardLare .n ceea ce (rive-te 'od)l de
re(re,entare al re,)ltatelor -i n)'+r)l de bi*i (e c/*i se re(re,int+ acestea& Astfel este de
(referat ca .nainte de a se .nce(e tri'iterea de 'esa4e s+ se tri'it+ confi0)ra*iile (l+cii de
de,voltare& reb)ie av)t .n vedere c+ -i frecven*a (l+cii (oate s+ fie diferit+! (rec)' -i
frecven*a de l)cr) (entr) (eriferice&
A
!. (tudiu bibliografic
$aterialele folosite (entr) reali,area acestei l)cr+ri c)(rind: data s6eet! reference
'an)al! a(lication note! c+r*i! l)cr+ri de laborator! (rec)' -i n)'eroase (a0ini de (e
internet& Acestea s)nt .n 'area 'a4oritate .n li'ba en0le,+ c) c/teva e3ce(*ii .n li'ba
ro'/n+& Datorit+ no)t+*ii te6nolo0iei ADG! care a fost lansat+ .n (ri'+vara an)l)i 7:%%!
n) se (oate vorbi des(re o biblio0rafie de 'ari di'ensi)ni&
3.1 "ariante alternative de conectare la microcontroller
!.1.1 )ac*ing
Re(re,int+ varianta cea 'ai riscant+ -i .n acela-i ti'( -i cea 'ai interesant+ de
co')nicare& A-a c)' se arat+ .n articol)l U%V s)nt do)+ abord+ri (osibile: (ri'a
(res)()ne folosirea )n)i brid0e .ntre U5E -i (ort)l serial! iar a do)a -i cea 'ai dificil+
(res)()ne 0+sirea -i conectarea la (ort)l serial direct de (e 'a0istrala telefon)l)i&
#rinci(al)l avanta4 al )lti'ei 'etode .l constit)ie cost)l& De,avanta4)l 'a4or! .l
constit)ie fa(t)l c+ fiecare dis(o,itiv c) Andoid! are (inii de la (ort)l serial sit)a*i .n alt+
loca*ie& Acces)l la sc6e'ele 6ardLare este dificil! -i de cele 'ai ')lte ori acestea n) s)nt
f+c)te ()blice deoarece client)l n) are nevoie .n 'od nor'al de aceste infor'a*ii&
!.1.2 +ridge %ntre ,(+ -i serial
>olosirea )n)i brid0e .ntre serial -i U5E este (re,entat .n res)rsa U7V! .n acest
articol fiind (re,entat 'od)l concret de constr)ire al acest)i brid0e& Avanta4)l abord+rii
c)rente -i a celei (recedente este re(re,entat de fa(t)l c+ (e (artea de 'icrocontroller se
folose-te co')nicarea (rin (rotocol)l UAR& Acesta este s)(ortat nativ de c+tre toate
dis(o,itivele -i de ase'enea este )n (rotocol )-or de folosit&
Un brid0e (entr) 'icrocontroller este e3(licat -i .n res)rsa U8V! care s(re
deosebire de variantele anterioare ba,ate (e serial necesit+ -i folosirea )nei libr+rii 'ai
co'(le3e& De ase'enea s)(ort)l (entr) 1it?)l de de,voltare este oferit doar (entr)
Ard)ino! ceea ce li'itea,+ co'(le3itatea (ro0ra')l)i ce (oate fi .nc+rcat (e (lac+&
!.1.! +ridge %ntre +lue&ooth -i serial
As)(ra variantelor Lireless '?a' o(rit c) doc)'entarea doar (e varianta de
El)etoot6! datorit+ (re*)l)i 'ai red)s al s6ield?)l)i! -i a (rotocol)l)i care este 'ai
si'(l)& #entr) aceasta se (oate folosi UAV! care n) este altceva dec/t o libr+rie tot (entr)
Ard)ino& Aceasta acce(t+ )n n)'+r 'are de brid0e?)ri .ntre UAR i El)eoot6! at/t
ti'( c/t se setea,+ ba)d rate?)l (entr) co')nica*ia serial+ la o valoare (restabilit+&
Mn t)torial)l U9V se e3(lic+ (e lar0 'od)l 0eneral de conectare .ntre device?)ri
folosind )n brid0e de la El)eoot6 la serial& 5e ofer+ de ase'enea at/t sc6e'ele de
'onta4 constr)ite .n 4)r)l )n)i Ard)ino -i a )n)i brid0e de la 5(ar1>)n! (rec)' -i cod)l
(entr) Android -i (a-ii necesari de,volt+rii a(lica*iei (e 'icrocontroller&
9
3.2 Android Open Accessor# $rotocol% AD&'
>iecare telefon sa) tablet+ (oate folosi U5E?)l .'(re)n+ c) (rotocol)l ADEFcare
.n 'od nor'al este folosit (entr) de(anareH (entr) tri'iterea datelor! a-a c)' este
(re,entat .n blo0?)l U;V& " (rivire critic+ as)(ra ADG se 0+se-te (e blo0?)l l)i Ro'fron
UJV! )nde se co'bate ve6e'ent ADG?)l! fiind considerat ca li(sit de inova*ie fa*+ de
ADE! deoarece li'itea,+ folosirea telefon)l)i2tabletei (rec)' -i 'odele acce(tate& ADG
are tot)-i avanta4)l c+ (er'ite folosireaF 'o'entan .n de,voltareH .n (aralel a f)nc*ie de
de(anare fie (rintr?)n U5E sec)ndar sa) (rin Lireless&
5in0)rele doc)'enta*ii oficiale referitoare la ADG s)nt cele oferite de Qoo0le!
)nde e3ist+ o sc)rt+ sec*i)ne dedicat+ U@V! .n cadr)l 06id)l)i (entr) Android& Acestei
doc)'enta*ii i se al+t)r+ doc)'enta*ia oferit+ de c+tre $icroc6i( U<V& A'bele
doc)'enta*ii .ns+ n) s)nt dest)l de detaliate! oferind infor'a*ii foarte ()*ine&
ADG folose-te 'o'entan telefon)l (e (ost de slave -i (laca de de,volatare (e
(ost de 'aster! U5E?)l fiind )n (rotocol asi'etric& Deci,ia aceasta a fost l)at+! a-a c)'
se arat+ .n blo0?)l oficial U%:V! deoarece 'o'entan 'a4oritatea telefoanelor n) a) 'od)l
'aster -i nici "Q! ci n)'ai slave& De ase'enea deoarece 'a4oritatea s)(ort+ ADE! a)
cel ()*in 'od)l de slave! (entr) a se conecta la #C -i a reali,a de(anarea (rint?)n cabl)
U5E& Din aceast+ ca),+! a-a c)' se re'arc+ -i .n blo0! este o sit)a*ie inversat+! Rc) s)s)l
.n 4osS: telefon)l de-i are ()tere de calc)l 'ai 'are ac*ionea,+ ca -i slave! av/nd de
ase'enea nevoie -i de ali'entare&
#e viitor! a-a c)' se arat+ .n blo0?)l a'intit 'ai s)s! U%:V! se va .ncerca s+ n) se
'ai ofere ali'entare telefon)l)i -i s+ se s)(orte distrib)irea de con*in)t a)dio (este
U5EF acest l)cr) n) este fe,abil .n varianta de fa*+! deoarece n) se s)(ort+ transfer)l
i,ocronH& Mn cadr)l Qoo0le I2" din 7:%% U%%V s?a lansat ideea c6iar ca telefon)l s+ fie 6ost!
ceea ce ar )-)ra foarte ')lt ')nca de,voltatorilor de e'bedded&
!.2.1 Android.)ome
Conce(t)l a fost (re,entat .n cadr)l Qoo0le I2" 7:%% U%7V! ca fiind o e3tindere
(entr) Android "(en AccessorC #rotocol (entr) a)to'ati,area )nei .ntre0i loc)in*e&
Dis(o,itiv)l Android va treb)i s+ foloseasc+ AndroidIDo'e >ra'eLor1 (entr) a ()tea
co')nica c) sen,orii folosind Ni?>i&
Un (rotocol Lireless! care folose-te )nde radio de <::$D, a fost de,voltat
(entr) conectarea ele'entelor ce n) (ot .n0loba ca(acit+*iile de Ni?>i& Mn acest sens a
fost (re,entat )n bec ba,at (e te6nolo0ia LED -i (rod)s .'(re)n+ c) Li06t 5cience! care
folose-te acest (rotocol (ro(rietar&
"ferta de (rod)se co'(atibile c) AndroidIDo'e este 'o'entan red)s+& ot)-i
(osibilitatea conect+rii la internet ofer+ acces)l la Qoo0le Clo)d -i toate serviciile
asociate l)i& Un alt e3e'(l) (re,entat a fost .n0lobarea servici)l)i $)sic Eeta! care
(er'ite sincroni,area diverselor dis(o,itive care a) Android! (rin folosirea )n)i cont
Qoo0le& oat+ '),ica se va afla salvat+ .n clo)d! astfel .nc/t n) va oc)(a s(a*i) (e disc&
;
3.3 (istem audio)video al mainii conectat la Android
Mn res)rsa U%8V se e3e'(lific+ o i'(le'entare a (rotocol)l)i ADG oferit+ de
Dar'an! (rin siste')l lor de a)dio?video instalat (e 'a-in+& elefon)l sa) tableta (ot fi
co'andate de la co'en,iile de (e ecran)l tactil! (rin co'and+ vocal+! b)toanele de (e
volan sa) direct din (ano)l central siste')l)i a)dio? video&
5e (oate astfel s+ se tri'it+ )n s's sa) e?'ail folosind co'anda vocal+! sa) s+ se
redea con*in)t)l )n)i 'esa4 (ri'it .n bo3ele 'a-inii& #osibilitatea de a r+s()nde la
telefon! sa) de a a(ela )n n)'+r se (oate face tot vocal! sa) din b)toanele de (e volan&
Re*ele sociale! c)' ar fi >aceboo1 sa) Litter a) fost -i ele tratate de Dar'an& Con*in)t)l
te3t al oric+r)i (ost (ri'it (oate fi redat de c+tre siste')l a)dio al 'a-inii&
A(lica*iile de navi0a*ie care se 0+sesc (e telefoane -i tablete (ot fi folosite (entr)
0+sirea celei 'ai a(ro(iate sta*ii de ali'entare c) carb)ran*i! sa) (entr) a desco(eri
resta)rantele din ,on+& De ase'enea (ot fi redate -i fil'e! (e (ano)l siste')l)i a)dio?
video sa) (e ecrane care (ot fi 'ontate .n tetiere&
ot)-i site')l a)dio?video oferit de fir'a Dar'an n) interfa*ea,+ c) (artea de
control al (ara'etrilor 'a-iniiFc) e3ce(*ia vol)')l)i .n dif),oare! -i a con*in)t)l)i )nor
ecraneH! fiind 'ai ')lt o e3tindere a ecran)l)i tactil al tabletei& Aici dis(o,itiv)l Android
are rol)l de 0estionar (entr) '),ic+! fil'e! a(le)ri -i 'esa4e (ri'ite! sa) (ost+riile de (e
re*elele sociale&
3.* Conducerea e+icient a ve,iculelor electrice
Mn l)crarea U%AV se tratea,+ 'od)l .n care (ot fi satisf+c)te cerin*ele client)l)i
*in/nd cont de res)rsele 'a-inii& Abordarea ado(tat+ .n acest articol este ierar6ic+! -i
c)(rinde A 'od)le&
>iecare 'od)l constit)ie o intrare (entr) cel de nivel s)(erior! astfel .nc/t se
trans'it o colec*ie de sol)*ii sta0i)l)i )r'+tor! acesta co'bin/nd fiecare sol)*ie (ri'it+
c) cea (ro(rie! (entr) a ob*ine tot o colec*ie de sol)*ii& Un o(ti' local )n)i nivel (oate s+
n) fac+ (arte -i din sol)*ia 0lobal+! de aceea se tri'it )n set de sol)*ii&
5ol)*ia )n)i sin0)r dr)' o(ti'al! din ()nct de vedere al client)l)i! i'(lic+
satisfacerea constr/n0erilor de ti'( -i de cons)' ener0etic& La acestea se (ot ad+)0a
cost)ri de re.nc+rcare! ti'(i 'or*i .n care se face ali'entarea! n)'+r)l de astfel de o(riri
-i alte criterii&
#ri')l nivel tratat este cel al co'(onentelor 'a-inii! c) rol as)(ra confort)l)i
client)l)i sa) as)(ra (osibilit+*ii efective de loco'o*ie& La acest nivel strate0iile s)nt
foarte si'(le! -i s)nt constit)ite .n 'are din co'(ararea )nor t6res6old?)ri&
La nivel)l )r'+tor! cel al c+l+toriei se ia) .n considerare ()nctele de ali'entare -i
destina*iile! -i 'od)l .n care se (oate a4)n0e c/t 'ai eficient la ele& Aici (entr) elaborarea
strate0iilor se folosesc 0raf)ri&
Nivel)l c+l+toriei este for'at dintr?o serie de r)te! -i ()ncte de sta*ionare2(arcare
re(re,entate de destina*ii inter'ediare sa) finale& #entr) conectarea r)telor se folose-te
(ro0ra'area dina'ic+! sa) 0+sirea )n)i o(ti' local&
Ulti')l nivel este cel de asi0)rare a 'obilit+*ii! .n care )n client n) este le0at .n
'od direct de )n an)'it 'i4loc de trans(ortW (oate folosi -i 'i4loace de trans(ort .n
co')n! sa) (e an)'ite (or*i)ni (oate s+ c+l+toreasc+ al+t)ri de )n c)nosc)t& Mn acest sco(
J
se folosesc al0orit'i din teoria 4oc)l)i&
Concl),ia acestei l)cr+ri este c+ n) doar cost)l )nei c+l+torii (oate fi .'b)n+t+*it!
dar c6iar -i ti'()l total (oate fi ')lt .'b)n+t+*it .n (aralel& #entr) s)s*inerea acestei
afir'a*ii s?a de,voltat )n cadr) 'ate'atic (rin care se st)dia,+ co'(le3itatea
al0orit'ilor! -i s(a*i) co'()ta*ional al sol)*iilor& Este necesar s+ se ren)n*e la an)'ite
variante .n sta0ii c/t 'ai inci(iente! deoarece dac+ n) s(a*i)l sol)*iilor (oate a4)n0e la
ordin)l 'iilor! iar anali,a lor va cons)'a foarte ')lt ti'(& De ase'enea ale0erea )nei
'edii! .n loc)l )n)i o(ti' 0lobal (oate s+ satisfac+ de cele 'ai ')lte ori cerin*ele
client)l)i&
3.- .oboi autonomi
Mn cartea U%9V se (re,int+ ti()rile de robo*i a)tono'i! 'obilitatea lor! sen,ori -i
(erce(*ia 'edi)l)i! locali,area -i (lanificarea c+l+toriei&
Un robot care are 8 ro*i are avanta4)l stabilit+*ii -i de ase'enea n) are nevoie de
s)s(ensie! deoarece )n (lan este deter'inat de 8 ()ncte -i astfel fiecare roat+ are contact
(er'anent c) sol)l& " alt+ condi*ie necesar+ este ca centr)l de 0re)tate s+ se 0+seasc+ .n
interior)l tri)n06i)l)i for'at de cele 8 ro*i&
#entr) control direc*iei! ()ntea din fa*+ se ac*ionea,+ inde(endent! iar .n s(ate se
(oate folosi o roat+ sferic+ sa) )na (ivotant+& 5c6i'barea direc*iei se face (rin rotirea .n
4)r)l centr)l)i de 0re)tate! bloc/nd o roat+ -i cealalt+ fiind ac*ionat+ .n sens)l dorit& Mn
loc)l bloc+rii se (oate folosi ac*ionarea .n sens invers! ceea ce d)ce ca robot)l s+ roteasc+
la ()nct fi3& Dific)ltatea control)l)i const+ .n fa(t)l c+ t)ra*iile celor do)+ ro*i 'otoare
treb)ie s+ fie identice (entr) o de(lasare .n linie drea(t+& >olosirea )nei ro*i sferice sa) a
)neia (ivotante .n s(ate n) infl)en*ea,+ .n 'od se'nificativ 'anevrabilitatea robot)l)i&
#entr) atin0erea destina*iei se (oate folosi o (lanificare fie .n b)cl+ desc6is+! fie
.n b)cl+ .nc6is+& #ri'a abordare (res)()ne divi,area trase)l)i .n 'ai ')lte se0'ente de
ti()l liniilor sa) arcelor de cerc& Aceast+ te6nic+ n) ia .n calc)l 'odific+riile ne(rev+,)te
.n confi0)ra*ia 'edi)l)i! -i de ase'enea vite,a de de(lasare are fl)ct)a*ii 'ari datorit+
nere0)larit+*iilor ce a(ar .n co'()nerea dr)')l)i ales&
>olosirea )nei b)cle .nc6ise! (rin anali,a feed bac1?)l)i (ri'it de la diver-i
sen,ori! constit)ie o abordare 'ai realist+ -i )-or ada(tabil+ la sc6i'b+riile de 'edi)&
e6nica de ba,+ const+ .n ale0erea )nor ()ncte inter'ediare! care )r'ea,+ s+ fie vi,itate&
@
/. Analiz -i fundamentare teoretic
*.1 M$/A0 1
$edi)l de de,voltare $#LAE K v&%&%:! asi0)r+ de,voltarea facil+ a a(lica*iilor
(entr) 'icrocontroller?ele $icroc6i(& Are f)nc*ii de (ro0ra'are a acestora folosind )n
cabl) U5E sa) )n (ro0ra'ator! de citire a con*in)t)l)i 'e'oriei -i de e3ec)*ie a )n)i
(ro0ra' (as?c)?(as&
estarea a(lica*iilor! .n li(sa )nei (l+ci de de,voltare! se (oate face folosind
si')lator)l! care (oate e')la orice 'icrocontroller s)(ortat de 'edi)l de de,voltare& Are
de,avanta4)l de a afi-a re0istrele .n 'od list+! ordonate d)(+ adres+ sa) d)(+ n)'e! .n
loc)l )nei 0r)(+ri d)(+ (eriferic)l de care a(ar*in&
De,voltarea (ro0ra'elor se (oate face! folosind fie li'ba4)l de asa'blare fie C&
#rin folosirea directive (entr) co'(ilare! se (er'ite introd)cerea de cod scris .n alt
li'ba4 dec/t cel ales de )tili,ator la crearea (roiect)l)i& 5e ofer+ s)(ort (entr) li'ba4)l
de asa'blare (rin A5$ iar (rin C%@2C8:2C87 res(ectiv DI?ECD #ICC2#ICC?%@ se
ofer+ s)(ort (entr) C& Varietatea 'are de co'(ilatoare se e3(lic+ (rin ')ltit)dinea de
ar6itect)ri s)(ortate: de @! 7A -i 87 de bi*i (rec)' -i (rocesoare di0itale de se'nal&
#e l/n0+ co'(ilatoarele necesare! (entr) r)larea IDE?)l)i este nevoie -i de
instalarea )n)i XRE& Mn ca,)l .n care este instalat+ -i versi)nea @ de $#LAE este nevoie
de )n driver sLitc6 (entr) conectarea la (laca de de,voltare& 5Litc6?)l are rol)l de a
.nc+rca driver?)l cores()n,+tor folosiri U5E ca -i (ro0ra'ator (entr) 'icrocontrollerW
at/t versi)nea @ c/t -i versi)nea K a) driver (ro(ri)&
$edi)l de (ro0ra'are fiind de,voltat (lec/nd de la NetEeans ofer+ )n 0rad ridicat
de 'od)laritate (rintr?)n set de (l)0?in?)ri& Un)l foarte )til este D$CI care (er'ite
vi,)ali,area diverselor ti()ri de variabile! afi-area )n)i vector (e 0rafic sa) 'odificarea
)nor valori folosind sliders sa) b)toane de ti( on2off (entr) booleans&
*.2 Microc,ip Application /ibrar#
C)(rinde o serie de libr+rii scrise .n C (entr) folosirea (erifericelor de (e (lac+! a
c+ror (ro0ra'are este 'ai dificil+& 5e ofer+ acces la stivele de C#2I#! U5E! Nireless!
ecrane tactile! 5D card -i siste'e de fi-iere& Aceste libr+ri (ot fi folosite individ)al sa)
(ot fi co'binate .n ca,)l .n care a(lica*ia este 'ai co'(licat+&
Libr+ria Android AccessorC >ra'eLor1! folose-te -i libr+ria de U5E (entr) a
oferi )n A#I facil de,volt+rii a(lica*iilor de ti( ADG& Qenerarea fi-ierelor de confi0)ra*ie
(entr) driver?)l de U5E se (oate face folosind (ro0ra')l U5E Confi0! (rin confi0)rarea
(as?c)?(as a fiec+rei o(*i)ni asociate co')nica*iei seriale&
Libr+riile necesare (ot fi incl)se .n (roiect)l c)rent .n do)+ 'od)ri: (rin
ad+)0area loca*iei la incl)de (at6 ca -i cale absol)t+! sa) (rin co(ierea lor .n (roiect)l
c)rent -i referirea folosind calea relativ+& $etoda a do)a asi0)r+ n) doar (ortabilitate! dar
.'(iedic+ 'odificarea vol)ntar+ sa) n) a fi-ierelor ori0inale din libr+rie& Co'(ilator)l
folose-te incl)de (at6 (entr) a c+)ta de(enden*ele (roiect)l)i! c)' ar fi fi-ierele din
libr+riile standard&
<
*.3 Componente ,ard2are
/.!.1 Circuitul de achiziie
Circ)it)l de ac6i,i*ie este (re,entat .n fi0)ra A&%! .n contin)are fiind (re,entate
co'(onentele constr)ctive& 5c6e'a a fost reali,at+ folosind: falstad&co'2circ)it2! )n
a((let .n Xava! de ti( dra0?and?dro(&
Ac)')latorii s)nt de ti( re.nc+rcabil! c) o tensi)ne la borne de %&7V -i o
ca(acitate de 7A9:'A6& Mn loc)l ac)')latorilor se (ot folosi baterii obi-n)ite de %&9V&
Cei A ac)')latori s)nt le0a*i .n serie! oferind astfel A&@V! ca(acitatea r+'/n/nd la
valoarea de 7A9:'A6&
Circ)it)l de '+s)r+ al volta4)l)i la borne este for'at din A re,isten*e de %GP .n
serie! c) sco()l de a for'a )n divi,or de tensi)ne& Re,isten*ele (ot fi de orice valoare! c/t
ti'( s)nt de valori e0ale& Dac+ s)nt de valori diferite tensi)nea (e o re,isten*+ va treb)i
calc)lat+ folosind (ro(or*iile arit'etice& Mn ca,)l folosiri a A re,isten*e! c+derea de
tensi)ne (e o re,isten*+ este de A ori 'ai 'ic+ dec/t .n tot circ)it)l serie& Mn ca,)l de fa*+
s?a ales valoarea de %GP (entr) a se red)ce cons)')l de c)rent .n circ)it&
Condensator)l este de ti( electrolitic -i are o ca(acitate de A&J'>! iar cele do)+
'otoare s)nt re(re,entate (e sc6e'+ ca -i do)+ re,isten*e de %::P! aflate .n (artea
drea(t+& As)(ra rol)l)i condensator)l)i voi reveni .ntr?)n ca(itol viitor! iar 'otoarele vor
fi (re,entate .n contin)are&
/.!.2 )'+ridge
Circ)it)l are rol)l de a sc6i'ba direc*ia 'otor)l)i! f+r+ a fi necesar+ 'odificarea
'onta4)l)i& #entr) aceasta se folosesc (atr) tran,istori 0r)(a*i .n do)+ (erec6i: Y%2Y8 -i
%:
1igura 3(/0 !ircuitul de ac4iziie
Y72YA! co'anda*i (rin se'nalele A! res(ectiv E&
Dac+ A are valoarea Z%Z! iar E are valoarea Z:Z! 'otor)l se va roti .n sens)l acelor
de ceasornic! iar dac+ A este Z:Z -i E este Z%Z! se va roti .n sens)l o()s acelor de ceasornic&
#entr) a se o(ri 'otor)l! a'bele se'nale de control treb)ie s+ fie la valoarea Z:Z& Dac+
a'bele se'nale s)nt Z%Z! co'(orta'ent)l va fi nedefinit&
Mn fi0)ra A&7 este (re,entat )n #'od ce .nde(line-te f)nc*ia descris+ 'ai s)s! -i
sc6e'a 0eneral+ a circ)it)l)i de D brid0e! folosit+ (entr) e3e'(lificarea f)nc*ion+rii&
A-a c)' se (oate observa circ)it)l de ali'entare este se(arat de co'and+! astfel .nc/t
'otoarele (ot fi ac*ionate la tensi)ni -i c)ren*i 'ari&
/.!.! 0otoarele de curent continuu
$otoarele s)nt de ti( I0aras6i IQ77! c) o c)tie de vite,e .ncor(orat+! ce are )n
ra(ort de %:%<! f)nc*ion/nd ca )n red)ctor c) ra(ort fi3& $odel)l de fa*+ se (oate
ali'enta la tensi)ni de 'a3i' ;V! c)rent contin))! iar cons)')l de c)rent are valoarea
'a3i'+ de %79'A& Mn fi0)ra A&8 este (re,entat+ o (rivire de ansa'bl) as)(ra 'otor)l)i!
o vedere din s(ate a encoder?)l)i -i ie-irea .n defa,a4 a celor doi sen,ori Dall&
Mn (artea din s(ate a fiec+r)i 'otor se afl+ )n encoder! ba,at (e efect Dall! care
'+soar+ 0rad)l de rota*ie& 5co()l acest)i circ)it este s+ deter'ine t)ra*ia 'otor)l)i!
folosind doi sen,ori 'a0netici dis()-i la o an)'it+ distan*+ )n)l fa*+ de cel+lalt&
$a0net)l folosit este )n)l obi-n)it! de ti( Nord?5)d& Cei doi sen,ori ofer+ la ie-ire
se'nalele A -i E! defa,ate c) <:
:
! -i c) )n factor de )'(lere de 9:[! a-a c)' se vede .n
%%
1igura 3(.0 Pod 5"678n partea st9ng: i sc4ema general a 5
bridge78n dreapta:
(artea drea(t+ 4os&
reb)ie av)t .n vedere c+ sen,orii '+soar+ direct t)ra*ia rotor)l)i! astfel valoarea
ob*in)t+ este de %< ori 'ai 'are dec/t ie-irea din red)ctor! care ac*ionea,+ ro*ile&
5en,or)l Dall (oate fi folosit c6iar dac+ 'otor)l n) este ali'entat& Valoarea 0rad)l)i de
rota*ie este )na relativ+ la 'o'ent)l .nce(erii '+s)r+rii& >olosirea )nei codific+ri QraC
asociate acest)i encoder ar fi (er'is c)noa-terea .n orice 'o'ent al 0rad)l)i de rota*ie&
1igura 3(;0 otorul de curent continuu i encoder<ul
*.* $eri+ericele microcontroller)ului
Mn secti)niile )r'+toare s)nt (re,entate (erifericele folosite .n cadr)l (roiect)l)i&
er'en)l de #E se refer+ la se'nal)l de ceas al (erifericelor! iar 5"5C la oscilator)l
sec)ndar& Ceas)l 0eneral al siste')l)i! 5\5CLG ! este divi,at (entr) a se ob*ine #E&
Nota*ia Z3Z din den)'irea re0istrelor sa) (inilor se refer+ la re0istr)l2(in)l asociat )nei
an)'ite instan*e a (eriferic)l)i! ca de e3e'(l) dac+ 3 este % .n 3CG este (in)l
se'nal)l)i de ceas e3tern (entr) i'er %&
/./.1 &imer
A' folosit ca -i (rinci(al+ s)rs+ de infor'are Reference $an)al U%;V& Acest
'odel de c6i( are )n n)'ar de 9 ti'ere de %; bi*iF%? 9H& #entr) a se ob*ine )n ti'er de
87 de bi*i se (ot asocia 7 c) 8 sa) A c) 9&
%7
5e folosete ter'en)l de T=pe A (entr) cele care (ot fi folosite doar ca -i %; bi*i!
res(ectiv T=pe " (entr) cele care (ot fi folosite -i ca 87 bi*i& Mn ca,)l E se folosesc
nota*iile de i'erK -i i'er\! (ri')l fiind considerat 'asterFe3e'(l) i'er 7H iar al
doilea fiind considerat slaveFe3e'(l) 8H& $aster)l stabile-te (erioada -i set+riile de
ba,+! re0istrele l)i \ s)nt folosite doar (entr) setarea .ntrer)(erilor&
#ot fi identificate 'ai ')lte 'od)ri de o(erare:
$od)l sincron care este ase'+n+tor (entr) ti()l A -i E (res)()ne folosirea
#eri(6eral E)s Cloc1 F#EH -i event)al a )n)i (rescaler&
$od)l sincron cu ceas e#tern (res)()ne folosirea )n)i (inF3CGH )nde este
f)rni,at )n ceas e3tern& Acesta este sincroni,at c) ceas)l siste')l)i&
$od)l gated (res)()ne folosirea )n)i se'nal e3tern care validea,+ n)'+rarea&
$od)l asincron( Acesta este sin0)r)l 'od care a(are doar la ti()l A! s(re
deosebire de 'od)rile de 'ai s)s care a(ar la a'bele ti()ri& 5e (oate folosi ca -i
s)rsa %CG sa) oscilator)l sec)ndar F5"5CH& 5e ofer+ 'ecanis'e de sincroni,are
.ntre #E cloc1 -i ceas)l e3tern&
>iecare ti'er are (ro(ria .ntrer)(ere! a c+rei (rioritate2s)b(rioritate (oate fi setat+
individ)al& #oate avea s)rse ')lti(le c)' ar fi atin0erea valorii din #R sa)! dac+ se
folose-te .n 'od)l 0ated! de )n fallin0 ed0e (e 0ate&
/./.2 #utput Compare
#rinci(ala s)rs+ de infor'are (rivind #N$ a constit)it?o Reference $an)alU%JV&
#oate fi folosit doar c) i'er 7 sa) c) i'er 8& 5e (ot folosi )n n)'+r de 'a3i'
9 canale& Mn (rivin*a re0istrelor necesare! n)'+r)l acestora este 'ic:
"C3C"N! folosit (entr) confi0)rarea 'od)l)l)i
%8
1igura 3(30 Timer /
"C3R -i "C3R5 folosite (entr) co'(ararea c) valori de %; bi*i sa) de 87 de bi*i
dac+ se folose-te -i re0istr)l sec)ndarF"C3R5H&
Din ()nct)l de vedere al 'od)rilor de f)nc*ionare se (ot distin0e:
'od)l Single compare, a c+r)i ie-ire (oate fi folosit+ (entr) a avea 6i06! loL sa)
to00le! la (otrivirea valorii din ti'er c) cea din o)t()t co'(areF"c3RH&
$od)l Dual compare, folose-te a'bele re0istre (entr) co'(arare& De e3'(l) la
atin0erea valorii din (ri')l re0istr) va trece .n starea loL! a(oi la atin0erea valorii
din re0istr)l al doilea va trece .n 6i06&
$od)l P>( #erioada se stabile-te (rin setarea ti'er?)l)i! iar factor)l de )'(lere
(rin setarea "c3R& "c3R5 are aici rol de b)ffer! -i se transfer+ .n "c3R la
overfloL?)l ti'er?)l)i&
#N$ (oate fi folosit c) sco()l de convertor di0ital?analo0ic& $odific/nd factor)l
de )'(lere se 'odific+ -i ie-irea& La frecven*e 'ari! de ordin)l 1D,! )n factor de
)'(lere de 3[! va face ca ie-irea s+ fie (erce()t+ ca fiind 3[ din valoarea 'a3i'+& Mn
e3e'(l)l din fi0)ra A&; la )n factor de )'(lere de 9:[! ie-irea este '+s)rat+ ca fiind 9V!
4)'+tate din cei %:V! c/t re(re,int+ valoarea 6i06 a se'nal)l)i dre(t)n06i)lar&
>iecare canal are asociat o .ntrer)(ere! astfel se (ot seta individ)al (riorit+*iile -i
s)b(riorit+*iile&
%A
1igura 3(?0 P> ca i regulator de tensiune
1igura 3(60 1uncionarea O!
/./.! Input capture
Este folosit (entr) a se efect)a '+s)r+tori ale frecven*ei sa) ale d)ratei )n)i
i'()ls! a-a c)' se arat+ .n Reference $an)al U%@V&
$od)l)l are do)+ re0istre: )n)l (entr) confi0)rare IC3C"N -i )n)l de ti( b)ffer
IC3E)f& #rin inter'edi)l acest)i re0istr) b)ffer (oate fi citit+ stivaF>I>"H& Dac+ stiva
con*ine A valori at)nci s)nt necesare A citiri din IC3EU>& 5tiva are )n n)'+r 'a3i' de A
c)vinte& 5e (oate folosi ca -i ba,+ de ti'( i'er 7! i'er 8 sa) a'bele (entr) o ba,+ de
ti'( de 87 de bi*i&
5e (oate folosi .n )r'+toarele 'od)ri:
simple capture! 'od .n care se ale0e 'od)l de risin02fallin0! iar .ntrer)(erea va fi
0enerat+ d)(+ n)'+r)l de eveni'ente s(ecificat .n IC3C"N&
prescaled capture! 'od .n care se va 0enera )n eveni'ent tot la al A?lea sa) %;?
lea eveni'ent&
$od)l edge detect va detecta at/t tran,i*iile 6i06?loL c/t -i loL?6i06& $od)l
interrupt<onl= se folose-te (entr) 'od)l slee( -i idle&
$od)l)l are do)+ .ntrer)(eri: IC3I>! care a(are d)(+ n)'+r)l dorit de
eveni'ente -i IC3IE care a(are .n )r'a )nei erori c)' ar fi fa(t)l ca n) se cite-te din
>I>" -i a(are over r)n&
%9
1igura 3(@0 odulul de input capture
1igura 3(A0 odul general de folosire al I! i Timer
Mn fi0)ra A&@! este (re,entat conce(t)al f)nc*ionarea 'od)l)i& $od)l de folosire
este de sin0le ca(t)re! -i eveni'entele de interes s)nt cele de ti()l risin0 ed0e! 'arcate
c) verde (e fi0)r+& Re0istr)l se va incre'enta c) frecven*a ceas)l)i folosit ca -i ba,+
(entr) '+s)r+toare& Dac+ a(are )n eveni'ent se 0enerea,+ o .ntrer)(ere! se salvea,+
valoarea! a(oi re0istr)l se va reini*iali,a&
/././ I2C
Cele 'ai i'(ortante caracteristici ale 'od)l)l)i s)nt )r'+toarele:
lo0ic+ se(arat+ (entr) (artea de slave2'aster
(osibilitatea de a l)cra at/t c) adrese J bit c/t -i de %: bit
(osibilitatea arbitr+ri .n siste'e de ti( ')lti'aster
(oate l)cra la frecven*e de %::GD,! A::GD, sa) %$D,&
Re0istrele care controlea,+ 'od)l)l de I7C s)nt (re,entate .n U%<V -i s)nt
)r'+toarele:
I7C3C"N! este re0istr)l care va controla f)nc*ionarea I7C
I7C35A! conine o serie de fla0s
I7C3ADD! este re0istr)l ce con*ine adresa .n ca,)l .n care f)nc*ionea,+ ca -i slave
I7C3$5G! este )n re0istr) de 'asc+ (entr) adres+! astfel .nc/t s+ (oat+ s+
r+s()nd+ la 'ai ')lte adrese
I7C3ERQ! folosit (entr) ba)d rate
I7C3RN! aici se vor ()ne datele care se doresc tri'ise
I7C3RCV! aici se vor de()nde datele (ri'ite
Mntrer)(erile asociate c) acest 'od)l s)nt diferen*iate (entr) 'od)l de folosire
'aster! slave sa) s)nt co')neFb)s collisionH! s)rsele .n fiecare ca, fiind ')lti(le& #entr)
rece(*ionarea datelor se folose-te (rinci(i)l de do)ble b)ffer& #ri'a dat+ datele s)nt
de(lasate folosind I7C3R5R iar a(oi odat+ ter'inat+ o(era*iaFd)(+ (ri'irea a @ bi*iH se
')t+ datele .n I7C3RCV& Dac+ vec6ea valoare n) a fost citit+ din acest re0istr) se va
se'nali,a (rin fla0)l I73C"V! iar valoarea no)+ se va (ierde&
>)nc*ia de reload a)to'at (entr) Ea)d Rate Qenerator are sens .n conte3t)l
arbitr+rii! (entr) a deter'ina o no)+ .ncercare de ob*inere a 'a0istralei& ERQ se va
decre'enta c/t ti'( 5CL este loL! iar a(oi va .ncerca s+ ad)c+ 5CL .n starea 6i06&
#ierderea arbitr+rii (oate s+ a(ar+ la 5tart! Re(eated 5tart! tri'itere de date! adres+! sa) la
5to(W -i se va se'nali,a (rin setarea fla0?)l)i de ECL&
In contin)are voi (re,enta )nele (artic)larit+*i (entr) 'od)l)l de I7C .n 'od)l
%;
'aster& La ini*iali,area )n)i 5tart treb)ie s+ se a-te(te ter'inarea l)i! altfel se va
se'nali,a o coli,i)ne (e b)s& #entr) a se verifica dac+ b)s?)l este idleF5CL este 6i06H se
'ai (oate verifica fla0)l de 5to(& #entr) o abordare ba,at+ (e .ntrer)(eri este necesar+
constr)irea )n)i state 'ac6ine deoarece! .ntrer)(erea (entr) 'od)l 'aster (oate fi
activat+ de 'ai ')lte s)rse&
/./.1 A2C
Re0istrele folosite (entr) (ro0ra'area 'od)l)i s)nt )r'+toarele:
AD%C"N%! AD%C"N7! AD%C"N8! folosite (entr) confi0)rare
AD%CD5! folosit la selectarea (inilor ce vor fi conecta*i la 5DA! (rin cele do)+
')lti(le3oare
AD%#C>Q! este folosit (entr) confi0)rarea (inilor ca -i di0ital sa) analo0ic
AD%C55L! este folosit (entr) ale0erea (iniilor ce vor fi folosi*i la scanare
ADC%EU>:? ADC%EU>>! constit)ie stiva )nde vor fi de()se re,)ltatele
#entr) a se folosi )n (in ca -i intrare analo0ic+ 'ai .nt/i se va 'arca ca -i (in de
intrare folosind re0istr)l RI5! a(oi se va seta ca -i analo0ic folosind AD%#C>Q&
Re,)ltat)l conversie este de %: bi*i! dar (oate fi citit ca -i )n n)'+r (e %; sa) (e 87 de
bi*i at/t .n for'at .ntre0 c/t -i .n for'at frac*ional! c) se'n sa) f+r+& N)'erele ne0ative
n) se ob*in .n )r'a citiri )nei valori ne0ative! ci datorit+ fa(t)l)i c+ s)nt .n (ri'a
4)'+tate a interval)l)i! .n 'i4loc)l interval)l)i fiind valoarea :&
%J
1igura 3(B0 odulu AD!
5etarea 'od)l)i de conversie (oate fi reali,at+ .n A fel)ri -i an)'e: 'an)al (rin
setarea bit)l)i de sa'(leW (rin folosirea i'er7 -i2sa) i'er8W (rintr?o .ntrer)(ere
e3tern+W sa) .n 'od a)to& $od)l a)to va seta la final)l conversie bit)l de sa'(le! ceea ce
va d)ce la .nce(erea )nei noi e-antion+ri&
5e (oate s(ecifica n)'+r)l de conversii d)(+ care se va 0enera o .ntrer)(ere! acest
n)'+r fiind de 'a3i' %; sa) @ .n f)nc*ie de "uffer 1ill ode& Re,)ltatele vor fi salvate
.n stiv+ .nce(/nd c) EU>: -i contin)/nd (/n+ la 'a3i' EU>>& #rin folosirea d)al b)ffer
stiva este .'(+r*it+ .n do)+ ,one: (ri'ele @ EU>:? EU>J -i )lti'ele EU>@? EU>>& Astfel
'ai .nt/i se scrie .n (ri'a ,ona! se 0enerea,+ .ntrer)(ere! a(oi se trece la a do)a ,on+! -i
se 0enerea,+ .ntrer)(ere! a(oi re,)ltatele conversiei vor fi de()se din no) .n (ri'a ,on+&
Qenerarea .ntrer)(erii se face d)(+ scrierea n)'+r)l)i indicat de valori! valoarea 'a3i'+
.n acest 'od fiind de @& $ai .nt/i se va scrie .n b)ffer?)l :! a(oi .n %!7 .n (ri'a ,on+W
res(ectiv @! <! %: (entr) ,ona a do)a& Astfel se (er'ite o o(era*ie de citire dintr?o ,on+!
.n ti'( ce se scri) re,)ltatele .n alt+ ,on+! f+r+ risc)l de s)(rascriere a valorilor&
#erioada convertor)l)i se n)'e-te
AD
-i este dat+ fie de )n oscilator intern! fie de
se'nal)l de ceas al (erifericelor& Convertor)l este )n)l de ti()l sa'(le and 6old! fiind
(re,entat .n fi0)ra A&< ca o ,on+ ()nctat+ c) den)'irea 52D& >)nc*ionarea este (re,entat+
.n fi0)ra A&%:! valoarea analo0ic+ av/nd c)loarea 0ri! ()nctele de e-antionare fiind
(re,entate c) linii ()nctate! -i valoarea di0iti,at+ av/nd c)loarea ro-ie (e 0rafic& #ri'a
dat+ se face o .nc+rcare a condenstator)l)i! )r'at+ de dec)(larea .ntrer)(+tor)l)i& D)(+
(erioada de e-antionare! )r'ea,+ (erioada de 6old .n care se face conversia valorii din
condensator& #erioada de sa'(le (oate fi 'odificat+ de la % la %7J
AD !
dar (erioada de
conversie este fi3at+ la %7
AD
&
Mn secti)nia %J&9 din U7:V se (re,int+ 'od)l de calc)l al
AD
-i (entr) a se ob*ine o
frecventa de e-antionare de %:::1s(s&
/./.3 4&CC
RCC este )n circ)it ce asi0)r+ (+strarea datei .n for'at ECD! facilit/nd astfel
inter(retarea c/t 'ai ra(id+ a datei f+r+ a 'ai fi nevoie de (rel)cr+ri )lterioare& 5e ofer+
(osibilitatea de .ntrer)(ere -i to00le de o)t()t la intervale de o sec)nd+! )n 'in)t! o or+
-i alte intervale 'ai 'ari& Mn 'od intern (erioada de l)cr) este de o 4)'+tate de sec)nd+!
dar (entr) citire re,ol)*ia este la o sec)nd+&
Mn ceea ce (rive-te alar'a ea (oate fi setat+ .ntr?)n interval de la o 4)'+tate de
sec)nd+ (/n+ la )n an -i (oate fi re(etat+ de )n n)'+r de 'a3i' 799 de ori& Dac+ se
folose-te o(*i)nea de C6i'e se va re(eta la nesf/r-it! detect/nd atin0erea n)'+r)l)i de :
%@
1igura 3(/C0 1uncionarea SD5
re(et+ri contor)l se va reini*iali,a&
Acces)l la re0istrele (entr) ti'( -i (entr) alar'+ se face doar dac+ bit)l
RC5\NC! res(ectiv ALR$5\NC este ,ero& Acest interval de ti'( este de 87 de
(erioade de ceas! o citire sa) o scriere .n afara acest)i interval (rod)c/nd efecte
nedefinite&
Mn fi0)ra A&%% se (re,int+ 'od)l .n care se incre'entea,+ re0istr)l sec)ndelor&
D)(+ 87J;@ de (erioade de ceas are loc incre'entarea re0istr)l)i&
Mn ca,)l .n care se observ+ c+ referin*a n) are e3act 87 J;@D, se (oate a4)sta c)
for')la: F87 J;@? 1recven msuratH];:O )roare( Acest+ valoare (oate avea at/t valori
(o,itive c/t -i ne0ative& $od)l)l va face corec*iile necesare o dat+ la % 'in)t! (rin
'odificarea sec)ndelor&
#entr) alar'+ se va seta data -i ti'()l (ri'ei declan-+ri! a(oi se ale0e c/ndFd)(+
o sec)nd+! o ,i! )n anH se va declan-a -i de c/te ori se va re(eta alar'a la interval)l
s(ecificat& Data (ri'ei alar'e este co'(arat+ c) o 'asc+& De e3e'(l)! dac+ se ale0e )n
interval de )n 'in)t n) se vor l)a .n considerare sec)ndele (entr) a se stabili (erioada de
declan-are& La incre'entarea re0istr)l)i 'in)telor vo' avea o alar'+& Mn ca,)l e3tre'!
de re(etare la )n interval de o sec)nd+! setarea datei (ri'ei alar'e este in)til+&
Confi0)ra*ia '+-ti .n acest ca, face ca (ri'a alar'+ s+ a(ar+ d)(+ o sec)nd+ de la
setarea bit)l)i de enable& #entr) .n*ele0erea acest)i 'od)l reco'and )r'+rirea U7%V-i
U77V&
/./.5 Controller'ul de %ntreruperi
Acest 'icrocontroller are )n n)'+r de A; vectori de .ntrer)(ere -i )n n)'+r de 9@
de IRYF s)rse de .ntrer)(ere! incl)siv cele 9 e3terneH& At/t .n 'od)l sin0le c/t -i .n 'od)l
')lti? vector se (ot folosi re0istre de ti( s6adoLFsecondarC re0ister setH&
$od)l single vector : este 'od)l defa)lt! .n care va intra d)(+ reset& 5e va folosi
aceia-i adres+ indiferent de vector)l care a 0enerat?o&
$od)l multi vector : fiecare vector are asociat o adres+ )nic+ calc)lat+ folosind o
adres+ de ba,+ -i )n de(lasa'ent&
Mntrer)(erile (ot avea (rioritate .ntre %F'ini'H -i JF'a3i'H& #rioritatea : se
folose-te (entr) a in6iba .ntrer)(erea& Controller?)l de .ntrer)(eri va servi o .ntrer)(ere
de ordin s)(erior! c6iar dac+ e3ist+ )na de ordin inferior .n e3ec)*ie& Aceia-i ordonare -i
re0)l+ de servire a(are -i .n ca,)l folosirii s)b(riorit+*iilor ce a) valori .ntre :F'ini'H -i
8F'a3i'H& #e l/n0+ aceste re0)li (entr) ordonare se folose-te -i ordinea nat)ral+! )nde :
este 'a3i' -i vector)l A9 este 'ini'& La intrarea .n I5RFInterr)(t service ro)tineH este
obli0atori) s+ se 'arc6e,e s)rsa care a 0enerat .ntrer)(erea (entr) a evita .ntrer)(eri de
ti( rec)rsiv&
%<
1igura 3(//0 Incrementarea secundelor
Re0istrele s6adoLFal doilea set de re0istre Q#RH ad)c o cre-tere a
(erfor'an*ei deoarece n) 'ai este nevoie s+ se fac+ salv+ri de conte3t (e stiv+& Acestea
s)nt valabile (entr) sin0le vector! iar .n ')lti vector s)nt valabile doar (entr)
.ntrer)(erile de nivel 'ai ridicat&
e6nica T)PO%A$ P%OEIITF I'T)%%+PT !OA$)S!I'G, (res)()ne
folosirea )nei co,i )nde se ()n .ntrer)(erile! de 0rad e0al sa) 'ai 'ic c) )n (ra0 dat! -i
care vor fi a(oi servite .nl+n*)it& 5e folose-te )n ti'er! care este declan-at de a(ari*ia
(ri'ei .ntrer)(eri ce res(ect+ condi*ia de 0rad& "dat+ a4)ns la ,ero! se vor (rocesa
.nl+n*)it toate acele .ntrer)(eri care a) res(ectat condi*ia de a intra .n coada de a-te(tare&
#entr) aceasta este nevoie s+ se .ncarce (ra0)l dorit .n #C -i valoarea de )nde se va
decre'enta .n I#$RF valoare (e 87 bi*iH& Acest ti'er folose-te direct 5\5CLG! f+r+
(rescaler&
5e (ot folosi de ase'enea -i (/n+ la 9 intrer)(eri e3terne! care (ot fi (e front
cresc+tor sa) descrec+tor! -i do)+ .ntrer)(eri de ti( soft! a c+ror declan-are (oate fi f+c)t+
e3cl)siv (rin cod& #entr) .n*ele0erea .ntrer)(erilor reco'and U78V&
*.- $rotocoale +olosite
/.1.1 I2C
Este )n (rotocol de ti()l 'aster slave& 5e folosesc do)+ linii (entr) co')nicare:
)na (entr) dateF5DAH! -i alta (entr) se'nal)l de ceasF5CLH& A'bele linii s)nt de ti()l
o(en?drain! (entr) a se ()tea 'odifica valoarea liniei din orice ()nct& #e linia de 5DA se
(ot .nc+rca datele fie de c+tre 'aster! fie de c+tre slaveW dar linia de 5CL este (er'anent
controlat+ de 'aster! slave?)l ()t/nd doar s+ (rel)n0easc+ ti'()l .n care se 0+se-te .n
starea Z:Z&
1igura 3(/.0 agistrala I.!
Liniile a) valoarea defa)lt Z%Z! datorit+ re,isten*elor de ()ll?)( R(! care s)nt
conectate la Vdd! a-a c)' se (oate vedea .n fi0)ra A&%7& #entr) 'odificarea valorii la Z:Z
se va conecta linia dorit+ la QND! fie din 'aster! fie din slave&
#entr) a se 'odifica valoarea linie 5DA! linia de 5CL treb)ie s+ fie .n (o,i*ia loL&
5in0)rele e3ce(tii de la aceast+ re0)l+ s)nt condi*iile de start -i sto(! .n care datele trec
din 6i06 .n loL -i invers! de-i linia se'nal)l)i de ceas are valoarea Z%Z! a-a c)' se arat+ -i
.n fi0)ra A&%8&
7:
Datele trans'ise (e 'a0istral+ a) @ bi*i .n di'ensi)ne! )r'ate a(oi de bit de
confir'are& Mn fi0)ra A&%A se (re,int+ sc6e'a 0eneral+ de transfer (e 'a0istrala I7C&
Re(etarea start)l)i a(are (entr) a n) se (ierde arbitrarea at)nci c/nd se dore-te s+ se
transfere 'ai ')lt de % bCte s(re )n dis(o,itiv&
$a0istralele c) 'ai ')lt de )n 'aster a) nevoie de arbitrare& Mn fi0)ra A&%9 s?a
(res)()s c+ s)nt conectate 7 astfel de dis(o,itive& A'bele verific+ linia de 5CL -i
.ncearc+ (ornirea )n)i transfer! -i i'(licit ob*inerea 'a0istralei& Deoarece a'bele a)
()t)t da start)l! vor contin)a s+ ()n+ datele .n (aralel! (/n+ c/nd Data% este Z%Z! .ns+ 5DA
este Z:Z! ceea ce .nsea'n+ c+ (ri')l a (ierd)t 'a0istrala! -i astfel ren)n*+ s+ 'ai ()n+
date (e I7C&
7%
1igura 3(/30 1ormatul general de transfer al datelor
1igura 3(/;0 Start, sc4imbare date, stop
Un 'ecanis' si'ilar cel)i de arbitrare a(are -i la se'nal)l de ceas -i se n)'e-te
Zcloc1 strec6in0Z& Dac+ slave?)l 'ai are nevoie de ti'( (entr) (rocesare va 'en*ine linia
de cloc1 la valoarea Z:Z! e3e'(lificat .n fi0)ra A&%A! (entr) a ()tea face (roces+riile
necesare&
#rotocol)l I7C (res)()ne tri'iterea 'ai .nt/i a adresei slave?)l)i de la care se
dore-te rece(*ionarea2tri'iterea datelor! .nso*it de )n bit de read2Lrite! iar la final de
ACG& Mn octe*ii )r'+tori se 0+sesc datele de la slave s(re 'aster! sa) .n sens invers& Cel
care este destinatar)l datelor treb)ie s+ confir'e transfer)l (rin ACG& As)(ra ti()rilor de
transfer voi reveni .n ca(itolele )r'+toare )nde vor fi -i e3e'(lificate (entr) DAC&
/.1.2 ,(+
#entr) aceast+ (re,entare 0eneral+ a (rotocol)l)i a' folosit U7AV -i U79V! (rec)'
-i )nele constat+ri e3(eri'entale&
*.-.2.1 O scurt introducere
Diferen*ele .ntre f)nc*ionalit+*iile (ort)l)i U5E de (e (laca de de,voltare -i cel de
(e )n #C s)nt 'ini'e& Diferen*ele 'a4ore s)nt )r'+toarele: ofer+ s)(ort doar (entr)
an)'ite clase sa) dis(o,itive! (oate s)(orta doar an)'ite ti()ri de transfer! n) s)(ort+
6)b?)ri! cantitatea de c)rent oferit+ este li'itat+&
#er'ite conectarea diverselor (eriferice la calc)lator (rin folosirea )n)i cabl)
)nic& Mntr?)n siste' conin/nd o 'a0istral+ U5E! (erifericele se (ot conecta .n serie sa)
.ntr?o to(olo0ie s)b for'+ de stea (e 'ai ')lte nivele& Un avanta4 i'(ortant .l re(re,int+
conectarea de ti( (l)0?and?(laC care n) necesit+ desfacerea carcasei sa) re(ornirea
siste')l)i&
#ort)l U5E detectea,+ ad+)0area )n)i no) (eriferic i deter'in+ .n 'od a)to'at
res)rsele necesare acest)ia! incl)siv driver?)l softLare! rata de transfer -i cons)')l de
c)rent& #erifericele se (ot afla la o distan+ de (/n+ la 9 ' )nele fa+ de altele sa) fa+ de
)n distrib)itorF6)bH&
Mn confi0)ra*ia de fa*+ oferit+ de $icroc6i( n) se (oate folosi distrib)itor& Din
aceast+ ca),+ to(olo0iile de ti( stea n) (ot fi i'(le'entate& De ase'enea de-i din ()nct
77
1igura 3(/60 Arbitrarea a dou masters
de vedere al U5E Dost 5tac1 se (er'ite conectarea 'ai ')ltor dis(o,itive in serie! (laca
de de,voltare asi0)r+ )n sin0)r (ort de U5E -i astfel se (oate conecta (ractic )n sin0)r
(eriferic la )n 'o'ent dat&
>iecare f)ncieF(erifericH conine infor'aii de confi0)raie care descri)
(osibilit+ile sale i res)rsele necesare& Aceste infor'aii s)nt trans'ise calc)lator)l)i
0a,d+ ca r+s()ns la o tran,acie de control& Mnaintea )tili,+rii )nei f)ncii! aceasta treb)ie
confi0)rat+ de calc)lator)l 0a,d+& Aceast+ confi0)rare (res)()ne alocarea )nei l+i'i de
band+ .n cadr)l 'a0istralei U5E i selectarea o(i)nilor s(ecifice de confi0)raie&
*.-.2.2 3ipuri de trans+er
Ar6itect)ra U5E (er'ite (atr) ti()ri de transfer)ri de date: de control! de
.ntrer)(ere! de date vol)'inoase i i,ocrone&
ransfer)rile de control se )tili,ea,+ de driver?ele calc)lator)l)i 0a,d+ (entr)
confi0)rarea dis(o,itivelor care s)nt ataate la siste'&
ransfer)rile de 8ntrerupere se )tili,ea,+ (entr) date care treb)ie trans'ise c)
o .nt/r,iere li'itat+& ransfer)l acestor date (oate fi solicitat de )n dis(o,itiv .n orice
'o'ent! iar rata de transfer (e 'a0istral+ n) (oate fi 'ai red)s+ dec/t cea s(ecificat+ de
dis(o,itiv& astat)ra sa) 'o)se?)l (ot folosi acest ti( de transfer (entr) notificarea
a(+s+rii )nei taste! res(ectiv (entr) tri'iterea noilor coordonate ale c)rsor)l)i&
ransfer)rile de date voluminoase F^bulHSH se )tili,ea,+ c) (eriferice c)' s)nt
'e'orii de 'as+! i'(ri'ante sa) scanere& Aceste date s)nt secveniale! -i de di'ensi)ni
'ari& >iabilitatea transfer)rilor este asi0)rat+ la nivel 6ardLare (rin )tili,area )n)i cod
detector de erori i rel)area )n)i transfer c) erori de )n an)'it n)'+r de ori& Rata de
transfer (oate varia .n f)ncie de alte activit+i de (e 'a0istral+&
ransfer)rile izocrone se )tili,ea,+ (entr) datele care treb)ie f)rni,ate c) o
an)'it+ rat+ de transfer constant+ i a c+ror sincroni,are treb)ie 0arantat+& Un e3e'(l) ar
fi strea'in0?)l a)dio sa) video! )nde o eroare la trans'iterea )n)i (ac6et d)ce la
an)larea retrans'isiei -i contin)area c) )r'+tor)l din secven*a de transfer&
Mn ca,)l a(lica*iei de,voltate se folosesc c) (rec+dere transfer)ri de control -i de
.ntrer)(ere! e3ist/nd s)(ort -i (entr) b)l1W transfer)rile i,ocrone n) s)nt s)(ortate&
*.-.2.3 Modelul de comunicaie 4(0
#rotocol)l U5E este de ti( asi'etric! -i folose-te adresarea (entr) identificarea
dis(o,itivelor conectate& 5(re deosebire de I7C 'a0istrala n) este de ti()l ')lti'aster&
$a0istrala U5E are A fire: VEU5 -i QND s)nt folosite (entr) ali'entarea dis(o,itivelor
iar DT -i D? se folosesc (entr) transfer)l .ntr?o sin0)r+ direc*ie la )n 'o'ent dat al
datelor&
Co')nicarea .ntre 6ost -i (eriferic se face folosind fl)3)ri de co')nica*ie n)'ite
(i(es! (entr) reali,area le0+t)rii la nivel de end (oint?)ri& End (oint?)l este folosit al+t)ri
de adresa device?)l)i (entr) identificare& El este necesar deoarece la o adresaFla )n
dis(o,itivH (ot e3ista 'ai ')lte ti()ri de transfer)ri fiecare fiind asociat c) )n end (oint&
#)nctele ter'inale (ot fi de intare sa) de ie-ire! iar cel c) n)'+r : este defa)lt fiind
folosit (entr) confi0)rare&
E3ist+ do)+ 'od)ri de co')nicaie (rintr?o cond)ct+F(i(eH: ir sa) 'esa4& Mn
'od)l ir! datele n) a) o str)ct)r+ definit+ de s(ecificaiile U5E& Datele s)nt transferate
secvenial i a) o direcie (redefinit+! de intrare sa) de ieire& Cond)ctele de ti( ir (er'it
78
transfer)ri de .ntrer)(ere! b)l1 sa) i,ocrone& Mn 'od)l 'esa4! datele a) o an)'it+
str)ct)r+ definit+ de s(ecificaiile U5E& Conin)t)l datelor transferate (rintr?o cond)ct+
de ti( 'esa4 este inter(retat de controller?)l U5E& Aceste cond)cte s)nt controlate de
calc)lator)l 0a,d+ i (er'it doar transfer)ri de control! .n a'bele direcii! fiind folosite
(entr) confi0)rarea dis(o,itivelor&
#)nctele ter'inale conin b)ffere de intrare sa) de ieire (rin inter'edi)l c+rora
se reali,ea,+ co')nicaia .ntre calc)lator)l 0a,d+ i dis(o,itiv)l U5E& De e3e'(l)! dac+
(ro0ra')l r)lat (e calc)lator)l 0a,d+ trans'ite )n (ac6et adresat )n)i an)'it dis(o,itiv
U5E! acest (ac6et va fi de()s .n b)ffer)l )n)i ()nct ter'inal de ieire al dis(o,itiv)l)i&
Ulterior! controller?)l dis(o,itiv)l)i va citi din b)ffer (ac6et)l rece(ionat& Dac+
dis(o,itiv)l treb)ie s+ trans'it+ date la calc)lator)l 0a,d+! n) (oate de()ne datele direct
(e 'a0istral+! deoarece toate tran,aciile s)nt iniiate de 'aster& Dis(o,itiv)l va de()ne
datele .n b)ffer?)l )n)i ()nct ter'inal de intrare! iar aceste date vor fi transferate la
cererea calc)lator)l)i (rintr?)n (ac6et de intrare& No*i)nile de intrare2ie-ire s)nt relative
la 6ost& $aster?)l a fost den)'it alternativ calc)lator sa) 6ost& #entr) slave s?a folosit
den)'irea de dis(o,itiv&
*.-.2.* Descriptorii de 4(0
Ierar6ia de descri(tori are ca r+d+cin+ la nivel)l s)(erior descri(tor)l de
dis(o,itiv& La nivel)l )r'+tor se afl+ descri(torii de confi0)raieW e3ist+ c/te )n ase'enea
descri(tor (entr) fiecare confi0)raie a dis(o,itiv)l)i& #entr) fiecare confi0)raie (ot
e3ista )n)l sa) 'ai ')li descri(tori de interfa+! .n f)ncie de n)'+r)l de interfee ale
confi0)raiei res(ective& Mn sf/rit! (entr) fiecare ()nct ter'inal al fiec+rei interfee e3ist+
c/te )n descri(tor al ()nct)l)i ter'inal&
Descriptorul de dispozitiv este folosit (entr) a oferi infor'a*ii 0enerale des(re
dis(o,itiv: clasa2s)bclasa (rod)cator ID2(rod)s ID! revi,ia de U5E& Descriptorul de
configuraie este folosit (entr) a (ri'i infor'a*ii le0ate de ti()l ali'ent+rii: (ro(rii sa)
(rin b)s?)l de U5E& Mn ca,)l .n care )n dis(o,itiv are asociate 'ai ')lte astfel de
dis(o,itive! la )n 'o'ent dat (oate fi activat doar )n)l& Un n)'+r oarecare de ()ncte
ter'inale (ot fi 0r)(ate lo0ic .ntr?)n descriptor de interfaW care este folosit in cadr)l
dis(o,itivelor ')ltif)nc*ionale& La )n 'o'ent dat (ot fi activate 'ai ')l*i ase'enea
descri(tori& Con*ine infor'a*ii le0ate de n)'+r)l de ()ncte ter'inale -i ti()l de
clas+2s)bclas+& Descriptori de end<point s)nt folosi*i (entr) a se stabili direc*ia! ti'()l de
acces! la*i'ea de band+! adresa dis(o,itiv)l)i& Un alt descri(tor o(*ional dar care este
i'(le'entat in U5E Dost 5tac1 este cel de ir de caractere7 string: folosit (entr) a se
ob*ine infor'a*ii in (lain te3t le0ate de ca(abilit+*iile dis(o,itiv)l)i&
*.-.2.- $rocesul de enumerare
At)nci c/nd )n dis(o,itiv este conectat2deconectat la 'a0istrala U5E!
calc)lator)l 0a,d+ e3ec)t+ )n (roces n)'it en)'erare (entr) a deter'ina 'odific+rile
a(+r)te .n confi0)raia siste')l)i U5E& La conectarea )n)i dis(o,itiv U5E la 'a0istral+!
se e3ec)t+ )r'+toarele o(eraii:
%& Calc)lator)l 0a,d+ folosind o re,isten*+ deter'in+ conectarea )n)i no)
dis(o,itiv&
7& Calc)lator)l 0a,d+ atea(t+ )n ti'( de cel ()in %::'s (entr) ca tensi)nea de
7A
ali'entare a dis(o,itiv)l)i s+ devin+ stabil+! d)(+ care trans'ite o co'and+ de validare
i de resetare a (ort)l)i& >olosind '+s)rarea tensi)nii (e liniile de date! se deter'in+
(re,en*a re,isten*elor de ()ll?)(2()ll?doLn! -i astfel se deter'in+ vite,a dis(o,itiv)l)i:
vite,+ ridicat+FA@: $bii2sH sa) vite,a nor'al+ F%7 $bii2sH&
8& D)(+ ter'inarea (roced)rii de resetare! (ort)l este validat& Dis(o,itiv)l se afl+
ac)' .n starea i'(licit+ i (oate absorbi )n c)rent de 'a3i' %:: 'A de (e linia VEU5 a
'a0istralei& Dis(o,itiv)l va r+s()nde la tran,acii c) adresa i'(licit+ ,ero&
A& Calc)lator)l 0a,d+ solicit+ descri(tor)l de dis(o,itiv! iar dis(o,itiv)l trans'ite
acest descri(tor (rin inter'edi)l cond)ctei i'(licite&
9& Calc)lator)l 0a,d+ asi0nea,+ o adres+ )nic+ dis(o,itiv)l)i&
;& Calc)lator)l 0a,d+ solicit+ descri(torii de confi0)raie! iar dis(o,itiv)l
trans'ite calc)lator)l)i 0a,d+ aceti descri(tori&
J& #e ba,a infor'aiilor de confi0)raie! calc)lator)l 0a,d+ asi0nea,+ o an)'it+
confi0)raie dis(o,itiv)l)i& Dis(o,itiv)l se afl+ ac)' .n starea confi0)rat+ i toate
()nctele ter'inale ale acestei confi0)raii s)nt confi0)rate confor' caracteristicilor
s(ecificate .n descri(torii acestora&
Dis(o,itiv)l este (re0+tit (entr) )tili,are i (oate absorbi de (e linia VEU5 a
'a0istralei c)rent)l s(ecificat (entr) confi0)raia selectat+&
At)nci c/nd dis(o,itiv)l U5E este deconectat de la )n (ort U5E! calc)lator)l
0a,d+ de,activea,+ (ort)l res(ectiv i act)ali,ea,+ infor'aiile sale des(re to(olo0ia
'a0istralei&
*.-.2.5 4(0 6mbedded 7ost (tac8
Mn A((lication note U7;V se face o sc)rt+ introd)cere a 'od)l)i de f)nc*ionare a
U5E 6ost ada(tat (entr) e'bedded& Articol)l U7JV vine ca -i o co'(letare a articol)l)i
(recedent! insist/nd)?se 'ai ')lt (e (artea de (ro0ra'are! c) ')lte e3e'(le de cod&
*.-.2.5.1 3aret $erip,eral /ist% 3$/'
Con*ine o descriere a dis(o,itivelor ce (ot fi s)(ortate de 6ost fie (e ba,+ de clas+
-i de (rotocol Fca de e3e'(l) tabel)l A&% H sa) de VID?#ID Fca de e3e'(l) tabel)l A&7H&
Mn ca,)l 'icrocontroller?)l)i! s(re deosebire de #C! #L r+'/ne fi3! ()t/nd)?se s)(orta
doar dis(o,itivele declarate ini*ial&
Descriere N)'ele clasei Cod)l clasei Cod)l s)bclasei #rotocol
>las6 Drive $ass 5tora0e :3:@ :3:; :39:
Tabelul 3(/0 )#emplu de TP$ pentru !las, Subclas i Protocol
Descriere #rod)c+tor $odel VIDFvector IDH #IDF(rod)ct IDH
Device c)
s)(ort ADG
Qoo0le elefon2 tablet+ :3%@D% :37D::
Tabelul 3(.0 )#emplu de TP$ pentru *ID, PID
79
*.-.2.5.2 Ar,itectura stivei
Este for'at+ din do)+ (+r*i: 'a-ina de st+riF(entr) en)'erarea dis(o,itivelorH -i
6andler?)l de .ntrer)(eriF(entr) (rocese criticeH&
Mn fi0)ra A&%; se (re,int+ sc6e'a 0eneral+ (entr) state 'ac6ine& Ini*iali,area are
rol)l de a (re0+ti controller?)l U5E! -i se reali,ea,+ o sin0)r+ dat+ d)(+ reset! trec/nd)?
se a(oi .n starea detac4ed, .n care se a-tea(t+ conectarea dis(o,itivelor& Un dis(o,itiv
ata-at trece din starea atac4ed .n starea de (ri'ire a )nei adrese dac+ res(ect+ condi*iile
electrice s(ecifice& 5tarea configured (res)()ne (re0+tirea end (oint?)rilor (entr) a se
reali,a transfer)l bidirec*ional! (rintr?)n a(el al 6andler?)l)i de ini*iali,are s(ecific
dis(o,itiv)l)i! folosind intr+rile din #L -i Client Driver able& La deconectare se trece
din starea running .n starea detac4ed(
5tiva de fir'Lare este o str)ct)r+ de ti( ierar6ic& A(lica*iaF cod)l )tili,ator)l)iH
re(re,int+ )lti')l nivel! U5E Client Driver este folosit (entr) ini*iali,area dis(o,itiv)l)i
7;
1igura 3(/?0 aina de stri
desco(erit! iar U5E Dost LaCer este libr+ria care facilitea,+ acces)l la res)rsele 6ardLare
-i ofer+ f)nc*ionalitatea de ba,+ (entr) 'od)l: identificare! en)'erare! 'ana0e'ent)l de
drivere& #ot e3ista 'ai ')lte U5E Client Driver dac+ se dore-te oferirea s)(ort)l)i
(entr) )n n)'+r 'ai 'are de dis(o,itive&
" or0ani,are (e laCers se folose-te -i (entr) 6andler?)l de .ntrer)(ere! av/nd trei
nivele: electric! 'esa4e U5E -i 'esa4e AndroidF)lti')l nivelH& >iecare nivel tratea,+
eveni'entele s(ecifice! iar la .nt/lnirea )n)ia nec)nosc)t se face o tri'itere s(re nivelele
s)(erioare (entr) anali,+&
*.-.2.5.3 Driver)ul client bazat pe evenimente
A(lica*ia (rinci(al+ are rol)l de a a(ela
constant laCer?)l de la nivel)l cel 'ai sc+,)t:
U5E 6ostFs+0eat+ _7H& La ter'inarea )nei
activit+*i (e U5E se va a(elaF_8H .n client
driver! iar dac+ este s)(ortat! se va a(ela 'ai
a(oi a(lica*iaF_AH& A(el)rile! folosind str)ct)ri!
tri'it -i infor'a*ii le0ate de s)rs+ -i (ara'etrii&
Astfel tran,i*iile de la nivelele s)(erioare! a(ar
ca )r'are a eveni'entelor de (e U5E! fiecare
nivel av/nd )n state 'ac6ine&
LaCer?)l Dost este infl)en*at -i de
eveni'etele ce a(ar (e 'a0istral+ c)' ar fi
conectarea sa) deconectarea )n)i dis(o,itiv&
A(el)l _7 are rol)l de a (er'ite tran,i*iile .ntre
s)b?st+riile de la adresare sa) confi0)rare&
5e (oate i'(le'enta driver?)l client -i
folosind (ollin0& Diferen*a .ntre cele do)+
'etode a(are la 'od)l .n care se face tran,i*ia
.ntre st+ri! 'arcat+ (rin folosirea de L6ile loo(s
F (ollin0H sa) de .ntrer)(eri -i call bac1sF event
basedH& Varianta c) .ntrer)(eri este 'ai
eficient+& E3e'(le de call bac1 s)nt a(el)rile
_8 -i _A&
/.1.! Android #pen Accessor$ "rotocol
Un U5E 6ostFaccesori)lH va treb)i s+ i'(le'ente,e )r'+torii (a-i:
a-tea(t+ -i detectea,+ conectarea device?)l)i c) Android
verific+ dac+ acest device s)(ort+ 'od)l accesori)
dac+ n) este de4a .n acest 'od va .ncerca (ornirea acest)ia .n 'od)l a'intit
7J
1igura 3(/@0 Driver<ul bazat pe
evenimente
stabile-te co')nicarea c) device?)l folosind (rotocol)l a'intit .n s)btitl)
Accesori)l verific+ la fiecare conectare a )n)i slave ca vendor ID device?)l)i s+
fie :3%@D%! -i ID de (rod)s s+ fie :37D::FADGH sa) :37D:%FADG -i ADEH& Dac+ n)
se (ri'esc aceste r+s()ns)ri! 'icrocontroller?)l va .ncerca (ornirea dis(o,itiv)l)i .n 'od
accesori): tri'ite o co'and+ de ti( 9%! de ob*inere a (rotocol)l)i! iar device?)l va
r+s()nde c) )n n)'+r nen)l dac+ are i'(le'entat ADG&
>olosind co'anda 97 se vor tri'ite (e r/nd descrierile c+tre accesori)& A(oi se va
tri'ite device?)l)i co'anda 98 (entr) a (orni .n 'od)l accesori)& D)(+ tri'iterea
co'en,ii 98! U5E?)l de (e device se va re(orni ceea ce d)ce la )n no) (roces de
en)'erare& De aceast+ dat+ vendor ID -i (rod)ct ID treb)ie s+ fie cele corecte! .n ca,
contrar! sa) la orice eroare a(+r)t+ (e (arc)rs! .nsea'n+ c+ device?)l n) c)noa-te
(rotocol)l cer)t& #entr) 'ai ')lte detalii le0ate de str)ct)ra acestor 'esa4e standard
(oate fi cons)ltat+ sec*i)nea 6(B( !omenzi +S" din U79V&
Co''and Re`)est C(e Re`)est Val)e Inde3 Len0t6 DataFo(tio
nalH
Qet
(rotocol
F9%
%:
H
U5E=Dir=o)ta
U5E=tC(e=Vend
ora U5E=Device
9% : : 7 Qet
(rotocol
5end
strin0s
F97
%:
H
U5E=Dir=o)ta
U5E=tC(e=Vend
ora U5E=Device
97 : :&&& 9 5trin0
di'ension
5end a
strin0
5trart
F98
%:
H
U5E=Dir=o)ta
U5E=tC(e=Vend
ora U5E=Device
98 : : : 5end N)ll
Tabelul 3(;0 !omenzi de iniializare ADI
Dac+ ID?)l de (rod)c+tor este :37D::! at)nci este o sin0)r+ interfa*+ c) do)+
end(oint?)ri b)l1! )n)l (entr) intrare -i alt)l (entr) ie-ire& Dac+ (ri'i' ID :37D:%!
at)nci s)nt do)+ interfe*eFADG -i ADEH fiecare c) c/te do)+ b)l1 end(oints& Mn tabel)l
A&8 s)nt (re,entate sc6e'atic eta(ele (rotocol)l)i! n)'erele fiind .n ba,a ,ece& Valorile
l)i inde3 (entr) co'anda 97 .n ordine cresc+toare s)nt: (rod)c+tor! 'odel! descriere!
versi)ne! URI! -i n)'+r serial& URI se folose-te (entr) a se desc+rca a(lica*ia din Qoo0le
#laC .n ca,)l .n care n) este instalat+ (e telefon2tablet+& Co'en,iile 97 -i 98 n) se
folosesc dac+ device?)l se afl+ de4a .n 'od)l accesori)&
*.5 Aloritmii propui
Mntre0)l siste' (oate fi (rivit ca -i )n siste' distrib)it! deoarece fiecare 'od)l .-i
e3ec)t+ f)nc*ionalitatea inde(endent de rest)l&
7@
1igura 3(/A0 Structura logic a aplicaiei
Mn fi0)ra A&%@ este (re,entat+ sc6e'a 0eneral+ a a(lica*iei& Cod)l de c)lori ofer+ o
'ai b)n+ 0r)(are vi,)al+ a co'(onentelor& #erifericele (rod)c+toare2cons)'atoare de
date s)nt colorate c) albastr)! iar ,onele (arta4ate s)nt de c)loarea oran0e& $e'oriile
(arta4ate (ot fi (rivite ca -i b)ffere! c) 'ai ')lte (eriferice care scri) -i care citesc din
aceste ,one& Circ)itele de U5E -i RCC s)nt colorate c) verde res(ectiv ro-) deoarece
.nde(linesc f)nc*ionalit+*i s(eciale& RCC se folose-te (entr) a controla (roces)l de
act)ali,are a ,onei co')ne v+,)t+ de U5E! co(ierea datelor f+c/nd)?se de la drea(ta la
st/n0aFs+0eata de (e desenH& $od)l)l U5E este cel care co')nic+ 'ai de(arte c) tableta&
Direc*ia s+0e*ilor arat+ 'od)l de de(lasare al datelor! f+r+ a se insista (e ti()l sa) n)'ele
datelor care circ)l+&
Datele care intr+ .n ADC s)nt de ti( analo0ic! iar cele care intr+! res(ectiv ies din
IC -i din #N$ s)nt de ti( di0ital! de ti( se'nal dre(t)n06i)lar& RCC este ali'entat de o
sin)soid+ de 87J;@D,&
7<
/.3.1 Conversia din analogic %n digital
Mn fi0)ra A&%< se (re,int+ sc6e'a 0eneral+ de conversie din analo0ic .n di0ital&
#ri')l (as (res)()ne e-antionarea -i conversia efectiv+ a celor do)+ tensi)niFcanal % si
canal 7H& Mn f)nc*ie de ce ,on+ folosi' (entr) salvare se va salva .n ,ona : sa) .n %&
Valoriile (entr) i s)nt de la : la J! iar (entr) 2 s)nt de la @ la %9& At/t i! c/t -i 2 se vor
incre'enta! iar d)(+ ce a) a4)ns la J res(ectiv %9 se 0enerea,+ o .ntrer)(ere -i se
reini*iali,ea,+& Mn .ntrer)(ere are loc citirea celor @ valori din b)ffere! .n f)nc*ie de ,ona
de l)cr) -i 'edierea lor& E-antionarea celor do)+ tensi)ni se face .n 'od alternativ&
De e3e'(l)! consider+' c+ ,ona de l)cr) este :& 5e face conversia (ri'ei tensi)ni
-i salvarea .n b)ffer?)l :! iar a do)a tensi)ne se salvea,+ .n b)ffer)l %& 5e va contin)a c)
salvarea canal)l)i % .n b)ffer?)l 7! -i a canal)l)i 7 .n b)ffer?)l 8& D)(+ ce s?a scris -i .n
b)ffer)l J se 0enerea,+ .ntrer)(erea& Mn .ntrer)(ere se *ine sea'a de ,ona c)rent+ de l)cr)
-i de alternan*a c) care se salvea,+ cele do)+ canale&
8:
1igura 3(/B0 Sc4ema general de conversie
/.3.2 0surarea turaiei
Mn fi0)ra A&7: se (re,int+ 'od)l 0eneral .n care se '+soar+ frecven*a )n)i se'nal
dre(t)n06i)lar& C/t ti'( n) a(are )n front cresc+tor se incre'entea,+ )n ti'er& La
a(ari*ia )n)i eveni'ent se 0enerea,+ o .ntrer)(ere& Mn .ntrer)(ere se verific+ dac+ a fost
(ri')l astfel de eveni'ent& Mn ca, afir'ativ se reini*iali,ea,+ ti'er?)l& La al doilea
eveni'ent 'ai .nt/i se va salva valoarea ceas)l)i! a(oi acesta se va reini*iali,a& Al treilea
eveni'ent este considerat din no) ca fiind (ri')l! ac*i)nea al0orit')l)i fiind si'ilar+&
1igura 3(./0 odul de folosire al dou module de I! i un Timer
Mn fi0)ra A&7% se (re,int+ ca,)l .n care se '+soar+ do)+ frecven*e folosind )n
sin0)r ti'er& C)loarea albastr+ re(re,int+ (ri')l canal! iar c)loarea verde re(re,int+ al
8%
1igura 3(.C0 surare frecven puls
doilea canal& Mn acest ca, 'ai .nt/i se anali,ea,+ (ri')l canal .n a-te(tarea a do)+ front)ri
de interesF>% -i >7H& Mn acest ti'( orice eveni'ent (e al doilea canal este i0norat& D)(+
'+s)rarea (erioadei (ri')l)i canalF
canal %
H acesta se i0nor+ -i se )r'+re-te a(ari*ia a
do)+ front)ri (e canal)l 7& Cicl)l a(oi se reia c) (ri')l canal& #entr) '+s)rarea (erioadei
(e oricare canal se consider+ al0orit')l (re,entat .n (ri'a (arte a sec*i)nii&Mn 'od
si'ilar! ca,)l de fa*+ (oate fi e3tins la orice n)'+r de canale! cre-terea n)'+r)l)i d)c/nd
la sc+derea ratei c) care se act)ali,ea,+ infor'a*iile le0ate de frecven*a lor&
/.3.! Actualizarea datelor
Act)ali,area datelor a(are .n fi0)ra A&%@ ca -i )n transfer .ntre do)+ ,one (arta4ate&
Act)ali,area re(e,int+ o co(iere a datelor din ,ona din (artea drea(t+ .n ,ona din (artea
st/n0+&
1igura 3(..0 !ele dou moduri de actualizare a datelor
Mn fi0)ra A&77 s)nt (re,entate cele do)+ re0i')ri de f)nc*ionare a 'ecanis')l)i
de act)ali,are: nor'al -i calibrarea 'otoarelor& Mn 'od)l de f)nc*ionare nor'al+ se face o
co(iere a datelor la o frecven*+ de %D,& Aceast+ frecven*+ (oate fi ob*in)t+ folosind )n
circ)it e3tern! )n ti'er intern sa) circ)it)l de RCC& Circ)it)l de RCC are avanta4)l c+
n) este folosit de alt+ co'(onent+ sa) de c+tre (ro0ra'&
Mn ca,)l .n care se dore-te o calibrare a 'otoarelor valoriile '+s)rate vor fi
transferate i'ediat ce a) fost calc)late& #entr) aceasta la fiecare 'odificare a factor)l)i
de )'(lere al #N$ are loc )n r+s()ns care c)(rinde tensi)niile -i frecven*ele '+s)rate&
87
/.3./ Calibrare motoare
#roced)ra de calibrare (res)()ne
folosirea factor)l)i de )'(lere al #N$
care co'and+ vite,a 'otoarelor& >actor)l
de )'(lere va l)a valoarea initial+ %::[!
-i va contin)a s+ scad+ at/t ti'( c/t t)ra*ia
'otor)l)i este diferit+ de ,ero& Mn ca,)l .n
care s?a a4)ns la :! 'otor)l se consider+
o(rit! -i factor)l de )'(lere se setea,+ la
,ero& #roced)ra este eviden*iat+ .n fi0)ra
A&78 -i treb)ie re(etat+ (entr) fiecare
'otor .n (arte&
Calibrarea are rol)l de a stabili
interval)l de valori (entr) #N$ care
(rod)ce rotirea 'otor)l)i& Ca -i re,)ltat se
eli'in+ ,onele c) factor de )'(lere 'ic! .n
care 'otor)l are t)ra*ie :&
Mn loc)l decre'ent+rii factor)l)i de
)'(lere se (oate (orni de la valoarea ,ero!
-i a(oi s+ se incre'ente,e c/t ti'( t)ra*ia este ,ero& Aceast+ variant+ a al0orit')l)i
(rod)ce )n (ra0 al factor)l)i de )'(lere 'ai 'are dec/t varianta care (res)()ne
decre'entarea& E3(lica*ia const+ .n fa(t)l c+ (entr) a se ()ne ini*ial .n 'i-care bobina
rotor)l)i este nevoie de )n i'()ls de tensi)ne 'ai 'are& "dat+ ob*in)t+ 'i-carea de
rota*ie! se (oate red)ce factor)l de )'(lere c) c/teva (rocente! f+r+ a se constata o(rirea
'otor)l)i&
/.3.1 6nlnuirea comenzilor pe ,(+
Mn fi0)ra A&7A se (re,int+ 'od)l .n care (oate fi cresc)t+ (erfor'an*a
transfer)rilor (e U5E (rin .nl+n*)irea co'e,ilor& >iecare co'and+ este identificat+
(rintr?)n cod )nic )r'at+ de )n n)'+r c)nosc)t de ar0)'ente& Mn e3e'(l)l )r'+tor s?a
considerat trans'isia )n)i n)'+r de 8 co'en,i (e 'a0istrala serial+! fiecare co'and+
fiind de di'ensi)ne variabil+& >iecare dre(t)n06i are di'e)nea de % octet& 5e folose-te
)n vector )nde vor fi co(iate co'en,iile! l)n0i'ea fiind e0al+ c) s)'a di'ensi)nilor
co'en,ilor .n ca,)l 'a3i' de .nl+n*)ire&Mn ca,)l e3tre' n)'+r 'a3i' de .nl+n*)iri este
e0al c) n)'+r)l de co'en,i de ie-ire (e 'a0istrala serial+& N)'+r)l (oate fi red)s dac+
e3isten*a )nor co'en,i de ie-ire este e3cl)siv+& #ointer?)l se folose-te (entr) a indica
loca*ia )r'+toare )nde se (oate co(ia infor'a*ia&
La (ri')l (as se co(ia,+ (ri'a co'and+ -i se incre'entea,+ (o,i*ia (ointer)l)i c)
8! re(re,ent/nd n)'+r)l de octe*i ')ta*i& Ac*i)ni si'ilare se e3ec)t+ -i (entr)
)r'+toarele do)+ co'en,i! (ointer?)l indic/nd la final loca*ia de d)(+ ar0)'ent)l
co'en,ii 8& "(era*ia (oate fi e3tins+ (/n+ la co(ierea )n)i n)'+r de %:78 de octe*i! dac+
se folse-te 'od)l b)l1& #rinci(al)l avanta4 al .nl+n*)irii .l constit)ie fa(t)l c+ (rintr?)n
sin0)r transfer de U5E se vor trans'ite 'ai ')lte date& Un de,avanta4 'inor este
re(re,entat de lo0ica de decodificare a 'esa4)l)i! care (res)()ne .'(+r*irea acest)ia .n
88
1igura 3(.;0 !alibrare motor
to1ensFco'en,iH .n f)nc*ie de cod)l aflat (e (ri')l octet -i 'ani()larea individ)al+ a
fiec+rei co'en,i&
#entr) a se tri'ite -i date care n) constit)ie co'en,i! sa) a c+ror l)n0i'e este
variabil+! treb)ie ca infor'a*iile s+ fie .'(ac6etate& Mn acest sens! se va folosi )n cod de
'esa4 s(ecial! (entr) a codifica infor'a*iile care n) constit)ie co'en,i& #e )r'+tor)l
octet se va s(ecifica n)'+r)l de bCtes al 'esa4)l)i! iar .n )r'+torii octe*i se vor co(ia
datele efective& Mn acest ca, (entr) a se ()tea descifra 'esa4)l este nevoie s+ se citeasc+
(ri'i doi octe*i! (ri')l este folosit (entr) a 'arca )n 'esa4 s(ecial! iar )r'+tor)l (entr)
a s(ecifica n)'+r)l de ar0)'ente co'(onente&
" alt+ abordare (entr) 'esa4ele s(eciale (res)()ne .ncadrarea datelor .ntre )n cod
s(ecial -i )n 'arcator de finalFase'+n+tor bn .n CH& #entr) a se incl)de 'arcator)l de
sf/r-it .n cor()l 'esa4)l)i se va ado(ta o te6nic+ si'ilar+ caracterelor esca(e din C&
Li(sa 'arcator)l)i de final va (er'ite citirea .ntre0)l)i b)ffer de intrare al U5E! ceea ce
(oate d)ce la (ierderea co'en,iilor care n) vor 'ai fi inter(retate&
#entr) introd)cerea 'esa4elor de di'ensi)ne variabil+! (ri'a abordare este 'ai
si0)r+ -i 'ai )-or de i'(le'entat&
8A
1igura 3(.30 Jnlnuirea comenziilor pe +S"
1. "roiectare de detaliu -i implementare
Mn fi0)ra 9&% se (re,int+ sc6e'a 0eneral+ a a(lica*iei& $icrocontroller?)lF)CH este
(re,entat ca o co'(onent+ se(arat+! c) rol .n control)l trafic)l)i infor'a*iei& 5+0e*iile
indic+ direc*iile de circ)la*ie ale datelor& 5en,orii -i ele'entele de ac*ionare s)nt
(re,entate ca -i co'(onente se(arate! dar o (arte s)nt )nit+*i din interior)l )C! divi,area
fiind f+c)t+ astfel doar (entr) a eviden*ia rol)l lor diferit .n siste'&
Mn fi0)ra 9&7 se (re,int+ str)ct)ra a(lica*iei din ()nct de vedere al de(enen*elor de
co'(onte 6ardLare -i softLare& A(lica*ia de fa*+ are ca -i ba,+ )n e3e'(l) oferit de
$icroc6i(! .n care se folose-te tableta (entr) a controla A LED?)ri! a citi 7 b)toane -i )n
(oten*io'etr) de (e (lac+& Cod)l de c)lori s?a folosit (entr) a eviden*ia ,onele care a)
(res)()s de,voltare! sa) care a) av)t nevoie doar de doc)'entare -i testare&
Mn (artea s)(erioar+ a i'a0inii s)nt (re,enate c) oran0e fi-ierele create (entr)
reali,area f)nc*ionalit+*ilor (ro()se& Divi,area (e fi-iere are rol)l de a (er'ite o 0r)(are
a al0orit'ilor folosi*i (entr) .nde(linirea )n)i tas1& >i-ier)l mainDef(4 con*ine o serie de
variabile e3terne! vi,ibile din 'ai ')lte fi-iere! (rec)' -i .nca(s)larea acces)l)i (entr)
datele folosite de 'ai ')lte 'od)le (rin folosirea de 'acro?)ri& #entr) .nde(linirea )nei
f)nc*ionalit+*i se folo-te (erec6ea de fi-iere &6 -i&c& Mn fi-ier)l 6eader s)nt redefini*i
re0i-trii folosi*iF(entr) o den)'ire )nifor'+H -i (ara'etrii de confi0)rare& Mn fi-ier)l
s)rs+ se 0+se-te cod)l efectiv& ain(c este fi-ier)l (rinci(al! -i folose-te f)nc*ionalit+*i
din rest)l 'od)lelor& Con*ine ini*iali,+riile 'od)lelor -i b)cla (rinci(al+&
Android AccessorC >ra'eLor1 -i U5E 5tac1 s)nt cele do)+ libr+rii care
reali,ea,+ co')nicarea (e (rotocol)l Andoid "(en AccessorC& A(lica*ia folose-te cele
89
1igura 6(/0 Sc4ema general a aplicaiei
do)+ libr+rii a'intite! .'(re)n+ c) $icroc6i( #eri(6eral LibrarCF$#LH! care este folosit
(entr) acces)l la 'od)lele de ba,+ ale 'icrocontroller?)l)i& $#L folose-te cod scris .n
A5$ sa) .n C& oate libr+riile a) fost folosite ca atare! fiind nevoie doar inte0rarea lor .n
(roiect -i testarea f)nc*ionalit+*ilor&
>olosirea 'od)lelor a (res)()s anali,a 'od)l)i de o(erare -i a interde(enden*elor
e3istente! (entr) a se folosi c/t 'ai eficient )n n)'+r 'ini' de astfel de co'(onente&
#artea de 6ardLare a (res)()s desi0n?)l folosind )nelte c)' ar fi falstad&co'2circ)it!
(rototi(i,area (e breadboard -i .'(ri'area efectiv+ a 'onta4)l)i (e o (lac+&
1igura 6(.0Dependenele aplicaiei

-.1 Modulul de DAC
Acest 'od)l are o adres+ fi3+ :3;:! (inii de A:? A7 find li(i*i la QND& Acest
'od)l este )n convertor (e %7 bi*i asi0)r/nd astfel )n interval de A:<; de valori& Ie-irea
este (ro(or*ional+ c) intrarea! din aceast+ ca),+ este sensibil la valoarea intr+rii&
5?a) i'(le'entat f)nc*iile de scriere .n re0istr) -i .n EER"$ (rec)' -i de citire
a re0istr)l)i -i a 'e'oriei& $e'oria nevolatil+ (oate fi folosit+ (entr) a se (ro0ra'a o
sin0)r+ dat+ 'od)l)l! (entr) ca a(oi acesta s+ (+stre,e valoriile -i d)(+ o re(ornire a
siste')l)i&
5e'n+t)rile celor do)+ f)nc*ii de scriere void KriteDA!%egister7unsigned int
DA!*alue, unsigned s4ort PoKerDoKnOption: -i res(ectiv a void
8;
KriteDA!%egisterAnd))P%O7unsigned int DA!*alue, unsigned int
PoKerDoKnOption: s)nt identice! (ri'a valoare fiind )n n)'+r .ntre :? A:<9! iar cea dea
do)a valoare re(re,int+ o(*i)nea de (oLer doLn! (entr) a se ob*ine 6i06 i'(edance dac+
se dore-te& I'(le'entarea acestor 'etode )r'+re-te Reference $an)al?)l de la
(rod)c+tor&
>)nc*ia de citire din DAC n) este folosit+! se'n+t)ra ei fiind "OO$
readDA!%egisterA'D))P%O 7"FT) i.cb=teLM:! -i ret)rnea,+ )n boolean (entr) a
se'nali,a dac+ o(era*ia s?a e3ec)tat sa) n) c) s)cces! iar re,)ltat)l este de()s .n
i7cbCteUV&
Mn fi0)ra 9&8 se (re,int+ 'od)l .n care se (oate scrie .n re0istrele circ)it)l)i de
DAC! f+r+ salvarea .n EE#R"$& Mn (ri')l octet se (reci,ea,+ adresa dis(o,itiv)l)i!
.'(re)n+ c) ti()l o(era*iei! .n acest ca, este )na de scriere& Mn octet)l al doilea -i al
treilea se (re,int+ valoriile care treb)ie .nc+rcate .n re0istre! de interes fiind DA!
%egister, care va re(re,enta valoarea ie-iriiW ti()l o(era*iei se s(ecific+ (rin 1ast ode
!ommand( >iecare bCte se va confir'aFAc1H de c+tre DAC& #entr) a se salva .n
EE#R"$! .n loc)l bit)l)i de sto( se re(et+ con*in)t)l octe*iilor 7 -i 8 de (e fi0)r+&
-.2 Modulul de 9nput Capture
5?a ales folosirea i'er 7 ca -i ba,+ de ti'( (e %; bi*i! c) )n (rescaler de %;! -i a
.ntrer)(erilor de la canal)l 7! res(ectiv 8 de la In()t Ca(t)re& A' ales folosirea )nei
abord+ri de ti( state 'ac6ine state (entr) a se (er'ite '+s)rarea c.t 'ai e3act+ a do)+
frecven*e folosind )n sin0)r ti'er&
5e definesc 'acro?)rile (entr) (ri'a s)rs+ sampleI!.Start -i sampleI!.Stop ,
res(ectiv sampleI!;Start -i sampleI!;Stop, (entr) a do)a s)rs+ de frecven*+ -i se
folose-te o variabil+ care va trece (rin cele A st+ri& Ca -i e3e'(lificare se folose-te tabel)l
9&%! abordarea fiind si'ilar+ c) cea (ro()s+ .n sec*i)nea A&;&7&
#entr) '+s)rarea l)i IC7! variabila va l)a 'ai .nt/i valoarea sampleI!.Start!
odat+ c) (ri')l risin0 ed0eW la )r'+tor)l eveni'ent (e IC7 va trece .n sampleI!.Stop( Mn
ti'()l .n care variabila a av)t )na din cele do)+ valori en)'erate 'ai s)s! orice
eveni'ent de (e IC8 va fi ()r -i si'(l) i0norat& Mn sampleI!.Stop, doar )n eveni'ent (e
IC8 va deter'ina tran,i*ia .n sampleI!;Start, evol)*ia fiind si'ilar+ (entr) IC8&
Detec*ia o(ririi )n)ia dintre 'otoare se face folosind detectarea condi*iei de
overfloL de la ba,a de ti'(! ca, .n care se verific+ dac+ variabila este sampleI!.Start
sa) sampleI!;Start ! (entr) a se deter'ina s)rsa& 5e va trece a(oi la canal)l )r'+tor .n
starea de start! (entr) a se evita blocarea al0orit')l)i&
8J
1igura 6(;0 Scrierea 8n registre, fr salvare 8n ))P%O
stare actual rising edge stare urmtoare Observaii
sa'(leIC75tart
IC7 sa'(leIC75to( resetea,+ i'er)l
IC8
(+stra,+ starea
act)al+
sa'(leIC75to(
IC8 sa'(leIC85tart
(reia valoarea din
i'er -i .l resetea,+
IC7
(+stra,+ starea
act)al+
sa'(leIC85tart
IC7
(+stra,+ starea
act)al+
IC8 sa'(leIC85to( resetea,+ i'er)l
sa'(leIC85to(
IC8
(+stra,+ starea
act)al+
IC7 sa'(leIC75tart
(reia valoarea din
i'er -i .l resetea,+
Tabelul 6(/0 )voluia strilor pentru implementarea input capture
Mn contin)are voi (re,enta cod)l (entr) I5R de in()t ca(t)re (entr) (ri')l canal:
1 | #if CaptureMotor1INTLevel == IC_INT_PRIOR_4
2 | void __ISR(CaptureMotor1INTVetor, ipl4)
I!putCapture2Routi!e(void){
" | INTClear#la$(INT_IC2);
4 | %ufferTe&p= CaptureMotor1ReadCapture()& '(####;
) | if(*a&pleIC(== *a&pleIC2Start){
+ | Ti&erValueRe$= '; ,, re*et t-e ti&er
. | *a&pleIC(= *a&pleIC2Stop; ,, $o to !e(t *tate
/ | }else
0 | if(*a&pleIC(== *a&pleIC2Stop){
1'| val1IC2= %ufferTe&p; Ti&erValueRe$= '; *a&pleIC(=
11| *a&pleIC"Start;}
12| if(CaptureMotor1Co!trolRe$.ICOV)
1"| val1IC2= I!CapOV#L;
14| }
1)| #e!dif
! -i cod)l (entr) I5R a ti'er?)l)i:
1 | void __ISR(_TIM1R_2_V1CTOR, ipl1) Ti&er2Routi!e(void){
2 | INTClear#la$(INT_T2);
" | if((*a&pleIC(== *a&pleIC2Start) ||(*a&pleIC(==
*a&pleIC2Stop)){
4 | *a&pleIC(= *a&pleIC"Start; val1IC2= Ti&erOV#LI!Cap;
) | }else
+ | if((*a&pleIC(== *a&pleIC"Start) ||(*a&pleIC(==
*a&pleIC"Stop)){
. | *a&pleIC(= *a&pleIC2Start; val1IC"= Ti&erOV#LI!Cap;
/ | }
0 | }
8@
-.3 Modulul de $:M
Mn cadr)l acest)i 'od)l! s(re deosebire de celelalte! n) s)nt alte f)nc*ii dec/t cea
de set )(! nefiind necesare .ntrer)(eri! tot)l fiind controlat de 6ardLare&
Cod)l (entr) f)nc*ia de set?)( este )r'+tor)l:
1 | Motor*2iretio!Co!fi$Pi!*345
2 | MotorSpeedP6MCo!fi$Pi!*345
" | *etMotor*2iretio!3145
4 | P6M_PRRe$_#R17= $etPR_#or_P6M3P6M_de*ired_fre89 145
) | Ope!Ti&er#orMotor*3MotorCo!fi$*9 P6M_PRRe$_#R1745
+ | Ope!OCMotor13Motor1Co!fi$*9 '9'45,,P6M &otor 1
. | Ope!OCMotor23Motor2Co!fi$*9 '9'45,,P6M &otor 2
#inii de o)t()t ai 'od)l)i de #N$ treb)ie 'arca*i ca fiind de ie-ire&Mn f)nc*ia de
'ai s)s se setea,+ doar frecven*a ba,ei de ti'(! factor)l de )'(lere (entr) 'otoare fiind
fi3at la ,ero&
-.* Modulul de ADC
Active b)ffer Inde3 Valoare
:
: c6annelA'as%
% c6annel@'as%
7 c6annelA'as7
8 c6annel@'as7
A c6annelA'as8
9 c6annel@'as8
; c6annelA'asA
J c6annel@'asA
%
@ c6annelA'as%
< c6annel@'as%
%: c6annelA'as7
%% c6annel@'as7
%7 c6annelA'as8
%8 c6annel@'as8
%A c6annelA'asA
%9 c6annel@'asA
Tabelul 6(.0 1olosirea buffer<elor de la AD!
Mn fi0)ra 9&7 se (re,int+ 'od)l .n care s)nt folosite cele %9 b)ffere (entr)
e-antionarea alternativ+ a do)+ canale& "rdinea se salvare a celor do)+ canale e-antionate
8<
este alternativ+& La )n 'o'ent dat se (oate l)cra c) o sin0)r+ ,on+! fiind dis(onibile fie
re0istrele :? J! fie @? %9& Mn .ntrer)(ere se citesc cele A valori (entr) fiecare canal din
,ona activ+! valoarea canal)l)i fiind 'edia lor& $od)l)l n) se (oate folosi .n ca,)l de
fa*+ la valoarea 'a3i'+! deoarece (rod)ce blocarea rest)l)i (erifericelor! c6iar dac+ are o
(rioritate 'ai 'ic+ dec/t rest)l&
-.- Modulul de .3CC
Mn contin)are se (re,int+ o (arte a void set+p%T!!N/secI'T7:, care reali,ea,+
confi0)rarea 'od)l)l)i -i cod)l 6andler?)l)i de .ntrer)(ere void
NNIS%7N%T!!N*)!TO%, ipl@S%S: %tccIsr7void:(
1| RtI!it();
2| while(Rt:etCl;Stat()!= RTCC_CL<_ON);
"| RtC-i&e1!a%le();
4| RtSet=lar&RptCou!t(2)));
)| RtSet=lar&Rpt(RTCC_RPT_S1C);
+| Rt=lar&1!a%le();
Mn acest cod are loc o ini*iali,are a 'od)l)i de RCC! )r'at+ (rin L6ile?)l care
testea,+ dac+ este conectat oscilator)l e3tern& Ur'+toarele A instr)c*i)ni s)nt folosite
(entr) a seta alar' -i re(etarea ei nedefinit+F f)nc*ia de c6i'eH&
1 | #if RTCCLevel== INT_PRIORIT>_L1V1L_.
2 | void __ISR(_RTCC_V1CTOR, ipl.SRS) RtI*r(void)
" | {
4 | INTClear#la$(INT_RTCC);
) | SetI!putCapture1(:et#re8Motor1());
+ | SetI!putCapture2(:et#re8Motor2());
. | SetVolta$e?att(:etC-a!!el4?att());
/ | SetVolta$eSu!t(:etC-a!!el/Su!t());
0 | &LedRTCCTo$$le();
1'| rt_1*eINTR= TR@1;
11| }
12| #e!dif
Dandler?)l de .ntrer)(ere al RCC este cel care controlea,+ sc6i'b)l de date de
la -i s(re U5E& Acest l)cr) se reali,ea,+ (rin cele A a(el)ri de 'acro -i 'arcarea fla0?
)l)i rtcc_1secINTR c) RUE& Variabila boolean+ se folose-te .n b)cla (rinci(al+ din
'ain (entr) .nc+rcarea efectiv+ a datelor (e 'a0istral+& #entr) a se ob*ine o frecven*+
'ai 'are va treb)i 'odificat re(etarea alar'ei la RCC=R#=DAL>=5EC! ceea ce va
d)bla frecven*a de tri'itere a datelor& o00le?)l LED?)l)i are sco( de verificare vi,)al+&
-.5 $roramul principal
Mn contin)are voi (re,enta (ro0ra')l (rinci(al (rin eviden*ierea ,onelor
i'(ortante (entr) .n*ele0erea al0orit')l)i& E)c+*iile de cod (ot s+ fie diferite fa*+ de cele
din cod)l a(lica*iei! deoarece )nele linii de cod a) fost .nl+t)rate (entr) a se ()tea
)r'+rii 'ai )-or lo0ica a(lica*iei&
A:
1.3.1 (tructura comenziilor
Co'en,iile s)nt definite folosind o en)'erare! .n loc)l )nor tC(edef2'acro (entr)
o 0r)(are vi,)al+ 'ai eficient+&
1 |typedef e!u& _=CC1SSOR>_21MO_COMM=N2S
2 |{
" | COMM=N2_$etCo!fi$_=2C = '('19
4 | COMM=N2_$etCo!fi$_#u*e*_P6M = '('29
) | COMM=N2_$etCo!fi$_I!putCapture = '('"9
+ | COMM=N2_$etValue_I!putCapture = '('49
. | COMM=N2_$etValue_Volta$e = '(')9
/ | COMM=N2_*etValue_P6M = '('+9
0 | COMM=N2_*-ut2oA! = '('.9
1'| COMM=N2_i!itialP6MCo!fi$ = '('/9
11| COMM=N2_fi!i*-edP6MCo!fi$ = '('09
12| COMM=N2_$etCo!fi$_Motor*I2 = '('=9
1"| COMM=N2_*et2iretio!Motor = '('?9
14| COMM=N2_=PP_CONN1CT = '(#1,
1)| COMM=N2_=PP_2ISCONN1CT = '(##
1+|} =CC1SSOR>_21MO_COMM=N2S;
! iar l)n0i'iile s)nt fi3e:
1 | #defi!e Co&&a!d_$etValue_Volta$e_SiBe 4
Co'an
d+
Ar0
%
Ar0
7
Ar0
8
Ar0
A
Ar0
9
Ar0
;
Ar0
J
Ar0
@
% ADC
5i,e
UV
ref
V cV
ref
d
7 >re`
(roc
>#LL$U
L
>#LLDI
V
>#LL"DI
V
>#EDIV "C
si,e
>re`
"C
"C
(resc
8 IC
(resc
IC
si,e
Event
si,e
A D>re`
IC

%
L>re`
IC %
D>re`
IC

7
L>re`
IC

7
9 DU
-)nt
LU
-)nt
DU
batterC
LU
batterC
; DD)tC
'otor

%
LD)tC
'otor

%
DD)tC
'otor

7
LD)tC
'otor
7
J
@
<
%: ID
'otor

%
ID
'otor

7
%% Dir
'otors
79A
799
Tabelul 6(;0 !omenziile trimise 8ntre tablet i u!
Mn tabel)l 9&8 se (re,int+ str)ct)ra co'en,iilor& " (arte a acestor co'en,i s)nt de
ti()l fla0! -i n) a) ar0)'ente! cont/nd doar ID lor! c)' ar fi J!@!<& #entr) (ara'etrii care
oc)(+ 'ai ')lt de )n octet s?a folosit DAr0 res(ectiv LAr0 (entr) (artea s)(erioar+
A%
res(ectiv inferioar+ a ar0)'ent)l)i& Co'en,iile a) str)ct)r+ -i l)n0i'e fi3+&
#ac6etele de intrare -i de ie-ire n) s)nt altceva dec/t )n -ir de bCtes! l)cr)
eviden*iat (rin cod)l care )r'ea,+:
1| typedef *trut __attri%ute__((pa;ed))
2| {
"| ?>T1 o&&a!d;
4| ?>T1 data[M=C_COMM=N2_2=T=_SiBe];
5| }=CC1SSOR>_=PP_P=C<1T out$oi!$_pa;et5;
5tr)ct)ra (recedent+ (oate fi folosit+ ca atare sa) se (oate considera c+ este
for'at+ dintr?)n vector de bCtes! a-a c)' se folose-te .n cod)l )r'+tor:
1 | errorCode = =!droid=ppRead(devie_-a!dle, (?>T1*)&o&&a!d_pa;et,
(26OR2)sizeof(o&&a!d_pa;et));
2 |swith(o&&a!d_pa;et!"o&&a!d)
" | {
4 | #se COMM=N2_*etValue_P6M$
) | o&&a!dSiBe= Co&&a!d_*etValue_P6M_SiBe% 1;
+ | if(i!itialP6Mo!fi$== TR@1){
. | rt_1*eINTR= TR@1;
/ | SetI!putCapture1(:et#re8Motor1());
0 | SetI!putCapture2(:et#re8Motor2());
1'| SetVolta$e?att(:etC-a!!el4?att());
11| SetVolta$eSu!t(:etC-a!!el/Su!t());
12| }
1"| &'e#(;
14| #se COMM=N2_i!itialP6MCo!fi$$
1)| &'e#(;
1+| #se COMM=N2_fi!i*-edP6MCo!fi$$
1.| &'e#(;
1/| #se COMM=N2_*et2iretio!Motor$
10| &'e#(;
2'| #se COMM=N2_*-ut2oA!$
21| &'e#(;
22| #se COMM=N2_=PP_2ISCONN1CT$
2"| &'e#(;
24| def#)lt$
,,1rror9 u!;!oA! o&&a!d
2)| 21?@:_1RROR(D1rrorE u!;!oA! o&&a!d reeivedD);
2+| &'e#(;
2.| }
Mn ti'()l citiri c) AndroidApp%ead, (e 'a0istrala U5E (ot e3ista 'ai ')lte
co'en,i .nl+n*)ite& #rin verificarea (ri')l)i octet! care indic+ l)n0i'ea (ri'ei co'en,i!
se deter'in+ n)'+r)l de bCtes r+'a-i (entr) (rocesare -i adresa din cadr)l vector)l)i de
)nde se va contin)a (rocesarea&
1| *iBe!= o&&a!dSiBe;
2| relative=ddre**I!Co&&a!dPa;et%= o&&a!dSiBe;
*| if(*iBe!= ')
4| &e&pF(o&&a!d_pa;et,&read_%uffer[relative=ddre**],*iBe);
1.3.2 &rimiterea datelor ctre tablet
Mn ca,)l .n care se tri'it 'esa4e la vite,+ 'a3i'+! f+r+ a folosi .nt/r,ierea de o
sec)nd+ se (rod)ce .nc+l,irea tabletei& #entr) a se li'ita n)'+r)l de 'esa4e tri'ise .n
A7
b)cla (rinci(al+ din 'ain se verific+ dac+ a trec)t o sec)nd+ de la )lti'a trans'isie:
1| if(rt_1*eINTR== #=LS1)
2| o+ti+)e;
5e verific+ dac+ s)nt -i alte o(era*ii de scriere .n a-te(tare! iar .n ca, ne0ativ se va
()tea tri'ite 'esa4)l dorit& #entr) a cre-te eficien*a .n coada de 'esa4e (ot fi ()se 'ai
')lte 'esa4e! fiecare de di'ensi)ne definit+&
1| if(AriteI!Pro$re** == #=LS1){
2| out$oi!$_pa;et.o&&a!d = COMM=N2_$etValue_I!putCapture;
"| out$oi!$_pa;et.data[']= ....
4| &e&pF(&Arite_%uffer[adre*a6rite], (?>T1*)&out$oi!$_pa;et,
Co&&a!d_$etValue_I!putCapture_SiBe% 1);
)| adre*a6rite%= Co&&a!d_$etValue_I!putCapture_SiBe% 1;
+| }
Mn final are loc -i scrierea (ro(ri),is+! (rec)' -i 'arcarea fa(t)l)i c+ a av)t loc o
scriereFKriteInProgress H:
1| if(AriteI!Pro$re**== #=LS1){
2| rt_1*eINTR= #=LS1;
"| AriteI!Pro$re**= TR@1;
4| errorCode = =!droid=pp6rite(devie_-a!dle, Arite_%uffer,
adre*a6rite);
)| }
1.3.! 7uncia de trimitere a datelor ctre Android
Mn contin)are se va (re,enta 'od)l .n care se tri'it datele c+tre tableta Android!
fiind eviden*iate -i fi-ierele .n care s)nt definite f)nc*iile res(ective! (entr) a se ()tea
)r'+rii nivel)rile ')lti(le de redirect+ri care a(ar ca )r'are a e3isten*ei laCer?)rilor&
usb4host4android.c:: AndroidApp%ead7void- 4andle, "FT)- data, D>O%D
size: ( 5e face o (arc)r0ere a n)'+r)l)i de dis(o,itive Android -i fiecare va fi
notificat& #ara'etr)l 4andle re(re,int+ infor'a*ia (ri'it+ la conectara
dis(o,itiv)l)i! iar data este )n b)ffer )nde va fi de(o,itat+ infor'a*ia& Dac+ la
acest nivel se face verificarea de device la nivel de Android! la )r'+tor)l nivel de
redirectare se va face verificarea de adresa! RK2K b)sC! stare:
usb4host4android4protocol4v&.c::AndroidApp%eadNPv/7void- 4andle,
"FT)- data, D>O%D size:( 5e folose-te o redirectare la:
usb4host.c::"FT) +S"5ost%ead7 "FT) deviceAddress, "FT)
endpoint, "FT) -pData, D>O%D size :! )nde se va verifica la
nivel de ti( de end(oint -i starea )lti')l)i transfer& 5e va face o
no)+ redirectare la o 'etod+ din acela-i fi-ier
void =U5E=InitReadF U5E=END#"IN=IN>"
](End(oint! E\E ](Data! N"RD si,e H care va face
.nc+rcarea efectiv+ a re0istrelor c) valorile necesare&
1.3./ Iniializarea comunicaiei pe ,(+ -i A28
5e folosesc f)nc*iile: +S"5ostInit7unsigned long flag: -i AndroidAppStart
7Om=DeviceInfo:! (entr) reali,area ini*iali,+riilor necesare&Mn cadr)l (ri'ei f)nc*ii se
folose-te str)ct)ra usbDeviceInfo (entr) a se vedea dac+ e3ist+ sa) treb)ie alocat
A8
End(oint?)l :! sin0)r)l care se folose-te 'o'entan .n a(lica*ie& Are loc -i o ini*iali,are a
variabilelor folosite (entr) 'en*inerea adreselor -i starea end(oint?)l)i c)rent! (rec)' -i
ini*iali,area stivei de eveni'ente&
Mn cadr)l celei de?a do)a f)nc*ii se ini*iali,ea,+ str)ct)riile:
ANDR"ID=ACCE55"R\=IN>"R$AI"N! care con*ine infor'a*ii le0ate de
(rod)c+tor! 'odel! descriereW ANDR"ID=DEVICE=DAA care con*ine infor'a*ii le0ate
de driver! (rotocol! stare! adreseW ANDR"ID=#R""C"L=V%=DEVICE=DAA se
ini*iali,ea,+ c) infor'a*ii le0ate de adresa device?)l)i! starea acest)ia! n)'+r)l end(oint?
)l)i de intrare -i de ie-ire! (rec)' -i starea liniilor RK -i K&
5.6.5 USBTask()= keep the stack running
C)(rinde do)+ a(el)ri de f)nc*ii: +S"5ostTasH7: -i AndroidTasH7:( #ri'a f)nc*ie
are rol)l de a asi0)ra (rocesarea )lti')l)i eveni'ent din stiv+! -i de a notifica a(lica*ia&
>)nc*ia void AndroidTasHs7 void: verific+ dac+ dis(o,itiv)l conectat s)(ort+
'od)l accesori)& 5e folose-te AndroidTasHsNPv/7: (entr) a itera (este n)'+r)l de
dis(o,itive conectate! verific/nd la fiecare descrierea -i dac+ (oate .ntra .n 'od)l
accesori)& Mn ca, afir'ativ se a(elea,+ f)nc*ia de call bac1 din fi-ier)l (rinci(al
+S"NApplicaion)vent5andler ! folosit (entr) a seta fla0?)ri care 'arc6ea,+
desco(erirea )n)i no) dis(o,itiv&
1.3.5 Iniializarea plcii de dezvoltare
>)nc*ia initPI!7: are rol)l de a ini*iali,a (latfor'a de de,voltare s+ f)nc*ione,e la
o frecven*+ de ;:$D,& Mn fi-ier)l DARDNARE=#R">ILE=#IC87$KA;:>9%7L&6 se
definesc (ara'etrii de f)nc*ionare c)' ar fi frecven*a de ba,+ a siste')l)i! frecven*a
(entr) (eriferice! -i o serie de fla0?)ri (entr) a se'nala (erifericele folosite de a(lica*ie&
-.; /oica eneral a aplicaiei
>olosind ca -i s)(ort e3(lica*iile din ca(itolele anterioare .n contin)are se va
(re,enta lo0ica de ansa'bl) a a(licaiei& 5e va folosi (se)docod (entr) e3e'(lificare:
1 | i!iGialiBare_&odule345
2 | ativare_i!treruperi345
" | A-ile314H
4 | @S?Ta*;*345
) | if3devie_atta-ed == #=LS14 o!ti!ue5
+ | if3readFToRead == TR@14=!droid=ppRead345
. | =!droid=ppI*ReadCo&plete345
/ | A-ile3*iBe I '4proe*eaBJ_o&e!Bi345
0 | readFToRead= True5
1'| if3o!!eted_to_app == #=LS14o!ti!ue5
11| if3o!fi$*Se!dO<== #=LS14*e!d_o!fi$*345
12| if3AriteI!Pro$re**== TR@1 4
1"| =!droid=ppI*6riteCo&plete34 5
14| if3rt_1*eINTR== #=LS14o!ti!ue5
1)| if3AriteI!Pro$re**== #=LS14=!droid=pp6rite345
1+| K
A(lica*ia este for'at+ din do)+ (+r*i: ini*iali,area 'od)lelor folosite -i b)cla
AA
(rinci(al+ care r)lea,+ la infinit&
Mn (artea de ini*iali,are se confi0)rea,+ fiecare 'od)l -i se activea,+ 0lobal
.ntrer)(erile&
>iecare itera*ie a b)clei va a(ela +S"TasH (entr) a 'en*ine f)nc*ionarea stivei
U5E& Mn ca,)l .n care n) este ata-at nici)n dis(o,itiv (e 'a0istral+ se contin)+ c) itera*ia
)r'+toare& 5(re deosebire de linia 9! .n linia %: se verific+ dac+ s?a (ri'it 'esa4)l de
conectare de la a(lica*ia Android& ei .n acest ca, se contin)+ c) itera*ia )r'+toare .n ca,
ne0ativ&
$ecanis')l de citire este (re,entat .n liniile ; -i J! iar cel de scriere .n liniile %8 -i
%9& $ecanis')l de citire verific+ la fiecare (as dac+ )lti'a o(era*ie de citire s?a e3ec)tat
c) s)cces! .ns+ (entr) Lrite se folo-te )n fla0! verificarea fiind f+c)t+ doar dac+ a av)t loc
o scriere (recedent+& Mn ca,)l .n care s?a citit cel ()*in o co'and+ .n linia @ se va (rocesa
-ir)l de octe*i (ri'it! iar .n r/nd)l )r'+tor se 'arc6ea,+ ter'inarea (roces+rii! ceea ce
(er'ite citirea )nei noi valori&
>iecare dis(o,itiv conectat (e 'a0istral+ va (ri'i infor'a*iile le0ate de
confi0)ra*ia 'icrocontroller?)l)i: di'ensi)nea re0istrelor! frecven*ele folosite! (rocede)
eviden*iat .n linia %%&
#entr) a n) se (rod)ce o .nc+rcare a 'a0istralei c) infor'a*ii des(re t)ra*ii -i
tensi)ni! se folose-te o .nt/r,iere de 'ini' o sec)nd+ fa*+ de )lti')l transfer& La
frecven*e 'ari ale transfer)l)i dins(re 'icrocontroller s(re Android s?a constat o cre-tere
a te'(erat)rii tabletei! -i (erfor'an*e 'ai sc+,)te&
Un 'ecanis' care n) a fost (re,entat .n (se)docod este cel de sc6i'bare a
direc*iei 'otoarelor& 5e folose-te 'ecanis')l din linia %A (entr) a verifica c+ a trec)t cel
()*in o sec)nd+ .ntre o(rirea 'otoarelor -i sc6i'barea direc*iei! c) sco()l de a (rote4a
()ntea D de sc)rt?circ)it& "rice instr)c*i)ne aflat+ d)(+ linia %A va fi e3ec)tat+ o dat+ la
o sec)nd+&
A9
3. &estare -i validare
Verificarea RCC s?a f+c)t folosind D$CI! )n (l)0?in (entr) NetEeans! folosind
ca -i ba,+ de ti'( )n ti'er (e 87 de bi*i! ali'entat direct de la ceas)l siste')l)i la
@:$D,& Mn .ntrer)(erea de la RCC o dat+ la o sec)nd+ se cite-te ti'er)l a(oi acesta se
reini*iali,ea,+& C)rbele ob*i)te s)nt relativ line! iar abaterea astfel calc)lat+ este de 7&79e?
;! ceea ce re(re,int+ o (erioad+ de %&::::;99 sec)nde (entr) RCC&
Mn fi0)rile ;&% -i ;&7 se (re,int+ 0raficele (entr) f)nc*ionarea e3tre'+: al+t)ri de o
s)rs+ de c+ld)r+ sa) folosind )n ventilator .ndre(tat s(re oscilator&
Mn fi0)ra ;&8 s?a anali,at oscilator)l circ)it)l)i de ti'( real! 'odel L>
KAL::7<<9! al fir'ei IYD! d)(+ ce a fost ad+)0at )n condensator de 77:(>! in (aralel
cel)i e3stent! C%9 de (e (lac+& 5?a ob*in)t o frecven*+ a(ro(iat+ de 87 J;@D,&
A;
1igura ?(.0 1uncionarea cu o surs de cldur
1igura ?(/0 1unctionarea cu o surs rcire
Al+t)ri de anali,a circ)it)l)i de RCC s?a) st)diat -i diferen*ele .ntre valoarea
afi-at+ (e tablet+ -i '+s)rat+ folosind oscilosco()l! (entr) divi,or)l de tensi)neFfi0)ra
;&AH -i (entr) -)ntFfi0)ra ;&9H! diferen*ele fiind nese'nificative&
Mn fi0)ra ;&9 c) 0alben se (re,int+ tensi)nea (e -)nt d)(+ filtrarea folosind
condensator)l iar c) ro-) se (re,int+ se'nal)l dac+ n) se folose-te filtrare& >recven*a
v/rf)rilor de cons)' este identic+ c) cea de la ac*ionarea 'otoarelor c) se'nal)l
dre(t)n06i)lar al #N$&
AJ
1igura ?(;0 Analiza folosind osciloscopul
1igura ?(30 *aloarea msurat pe osciloscop7st9nga: i 3- tensiunea msurat de
plac7dreapta:P pentru divizorul de tensiune
Ie-irea circ)it)l)i DAC a fost anali,at+ folosind oscilosco()l! f+r+ a se ob*ine
diferen*e notabile .ntre valoarea dorit+ -i cea '+s)rat+& De ase'enea for'a este )na
liniar+! f+r+ fl)ct)a*ii! (otrivit+ astfel (entr) a fi folosit+ ca -i referin*+&
A@
1igura ?(60 *aloarea msurat pe unt folosind osciloscopul7st9nga: i tableta7dreapta:
1igura ?(?0 Ieirea circuitului de DA!
;. Manual de instalare i utilizare
;.1. 9nstalare
Mn contin)are se vor e3(lica 'od)l .n care se reali,ea,+ 'onta4)l cablat asociat
'icrocontroller?)l)i -i (a-ii necesari instal+rii a(lica*iei&
5.1.1 Instalare hard9are
#entr) a se ()tea reali,a 'onta4)l s)nt necesare: o (lac+ de ti( Cerebot87$KA! A
re,isten*e! % condensator! do)+ 'otoare! s)(ort)rile necesare -i cabl)ri (entr) conectic+&
#laca de ti( Cerebot87$KA! (oate fi sc6i'bat+ )-or c) alt ti( de (lac+! de la
Di0ilent care are 'icrocontroller de ti( #IC 87$K! fiind necesare doar 'ici 'odific+ri!
care (ot fi )-or desco(erite (rin co'(ararea celor do)+ Reference $an)al& Mn contin)are
se va (re,enta 'onta4)l&
5c6e'a circ)it)l)i de '+s)rare a fost (re,entat+ .n fi0)ra A&%& Ea c)(rinde A
re,isten*e de % GP! le0ate .n serie! -i av/nd rol de divi,or de tensi)ne& Condensator)l are
rol de nete,ire a fl)ct)a*iilor de tensi)ne! -i are valoarea de AJ:: f>! fiind (rod)s de
5A$K"N& e)nt)l este )n)l i'(rovi,at! c) A borne! c.te do)+ (entr) (l)s res(ectiv 'in)s
-i are o re,isten*+ de :&@P '+s)rat+ c) ()ntea N6eatstone&
Deoarece ac)')latorii act)ali s)nt de ca(acitate 'ic+ se reco'and+ ali'entarea
(l+cii (rin alt circ)it& #oate fi folosit .n acest sens cabl)l U5E folosit la (ro0ra'are sa) o
s)rs+ de la Di0ilentF care se conectea,+ la 77:VH sa) A baterii de %&9V& #entr) ali'entarea
(l+cii se vor folosi tensi)ni c)(rinse .ntre 8&;V? 9V DC! iar cons)')l de c)rent este .ntre
79:'A -i 8::'A&
Mn fi0)ra J&% se (re,int+ sc6e'a 0eneral+ de 'onta4& N) se insist+ e3act (e (inii
)nde se conectea,+ (erifericele! fiind eviden*iat doar (ort)l& #entr) a afla (o,i*ia (inilor
se va folosi tabel)l J&7& >irele de ali'entare folosesc conven*ia: ro-) la Vcc -i ne0r) la
QND& Mn ca,)l conect+rii circ)it)l)i de '+s)r+ la (lac+ se folosesc 8 fire: ne0r)! alb -i
ro-)& #e aceast+ sc6e'+ se folosesc alte c)lori (entr) a se deosebi de circ)it)l de
ali'entare& C)loarea albastr+ folosit+ la conectarea 'otoarelor -i (entr) U5E are rol)l de
a ar+ta c+ este vorba des(re o 0r)(are de fire! res(ectiv des(re o 'a0istral+&
ensi)nea 0enerat+ de DAC se conectea,+ la ADC ca -i referin*+ e3tern+ (rin
do)+ fire: ro-) -i ne0r)& "scilator)l c) `)art,! 'odel)l L> KAL::7<<9 al fir'ei IYD!
din (o,i*ia K7 este re(re,entat .n ,ona central+ folosind o i'a0ine defa)lt& #entr)
f)nc*ionarea corect+ are nevoie de li(irea .n (aralel c) C%9 a )n)i condensator de 77: (>&
Mn tabel)l J&% se (re,int+ (o,i*ia 4)'(er?ilor care infl)en*ea,+ .n 'od direct
a(lica*ia& Rest)l 4)'(er?ilor (ot fi .n orice (o,i*ie! -i n) vor infl)en*a f)nc*ionarea
nor'al+& 5e (ot folosi .n (aralel cabl)l de (ro0ra'are2de(anare conectat la #C -i la X%% -i
o ali'entare de la o s)rs+ e3tern+ (entr) (lac+&
A<
1igura @(/0 Sc4ema general de monta2
X)'(er #o,i*ie E3(lica*ii
X%: Ie-irea de la DAC
X%7 E3ternal (oLer
Ali'entare de la o s)rs+
e3tern+ (rin X%8! X%A sa) X%@
X%; VEU5"N Ali'entare U5E
X#9 Conectat Detectare s)(ra?c)ren*i (e
U5E
X#; Dost
5elec*ie .ntre ali'entarea
X%J -i X%9F'icro U5E! (e
verso?)l (l+ciiH
X#A? X#G 8&8V Ali'entare (eriferice la
8&79V
Rest)l #o,i*ie defa)lt N) infl)en*ea,+ a(lica*ia
Tabelul @(/0 Poziie 2umpers
9:
Mn tabel)l J&7 se (re,int+ 'od)l de conectare al (erifericelor la (lac+&
#in #$odF(erifericH #in Cerebot E3(lica*ii
DAC QNDF Ne0r)H XG :J
Referin*a (entr) ADC
DAC Referin*+F Ro-)H XG :@
QND circ)it '+s)r+FNe0r)H XX :7
Circ)it)l e3tern de '+s)r+ Volta4 -)ntFRo-)H XX :<
Volta4 divi,or bateriiFAlbH XX :J
$otor % DE9 XD :%? XD:; $otoarele a) nevoie de
s)rs+ e3tern+ de ali'entare
$otor 7 DE9 XD :J? XD%7
ablet+ Android X%J Conectare tablet+ folosind
cabl) U5E
Tabelul @(.0 $egarea pinilor de la !erebot la pinii perifericelor(
5.1.2 Instalare soft9are
#entr) a se ()tea r)la a(lica*ia de fa*+ este nevoie s+ fie instalat $#LAE K v%&%:
sa) o variant+ 'ai no)+W instalarea $icroc6i( A((lication LibrarC nefiind necesar+& Ca -i
site' de o(erare a' folosit NindoLs J! (e ;A de bi*i& Libr+ria de #IC C folosit+ are
versi)nea 7&:7&
>olosind o(*i)nea de PacHage care (oate fi 0+sit+ (rintr?)n clic1 drea(ta (e (roiect
se va ob*ine o co(ie (ortabil+ a (roiect)l)i& 5tr)ct)ra de directoare d)(+ de,ar6ivare
difer+ de o str)ct)r+ clasic+ de (roiect! deoarece toate de(enden*ele s)nt co(iate local&
#entr) a se (ro0ra'a ')crocontroller?)l se vor e3ec)ta (a-ii:
%& 5e va de,ar6iva cod)l s)rs+& >ie !0Q1older TestQAndroid App calea )nde s?a
reali,at de,ar6ivarea& Mn folder)l Andoid App se va 0+si director)l scr care con*ine
a(lica*ia -i toate de(enden*ele&
7& 5e va i'(orta cod)l s)rs+ aflat .n !0Q1older TestQAndroid AppQsrcQAndroid
AccessoriesQ"asic !ommunication Demo L%IM R v.Q1irmKare
8& >olosind clic1 drea(ta (e (roiect -i Properties se va verifica c+ .n (artea drea(t+
.n ,ona !onfiguration ti()l Device ?)l)i este #IC87$KA;:>9%7LFfi0)ra J&7!
'arca4)l _%H& 5e va verifica ca la !ompiler Toolc4ains s+ fie selectat )n C87F_7H&
Mn (artea st/n0+ la !ategories se verific+ c+ #IC87$KA;:>9%7L=#I$ este
activF.ncon4)rat c) U -i VHF_8H& Mn ca, contrar .n (artea de 4os la anage
configurationsF_AH se va ()tea activaF_9H&
A& 5e vor salva 'odific+rile (rin OH F_;H&
9& 5e va (ro0ra'a 'icrocontroller?)l folosind o(*i)nea aHe and program device
main pro2ect&
Un (ri' indici) as)(ra s)cces)l)i (ro0ra'+rii .l constit)ie a(rinderea l)i LED7 la
)n interval de % sec)nd+&
9%
1igura @(.0 Proprietiile proiectului
Mn fi0)ra J&8 se (re,int+ b)id (at6W c+ile anali,ate (entr) incl)de s)nt fie locale!
ob*in)te .n )r'a de,ar6iv+rii cod)l)i -i aflate .n !0Q1older TestQAndroid App W sa) s)nt
fi-iere aflate .n s)rsele co'(ilator)l)i !0QProgram 1iles 7#A?:Qicroc4ipQmplabc;.(
;.2 Manualul utilizatorului
Utili,ator)l va treb)i s+ ac*ione,e .ntrer)(+tor)l 5N%F (entr) a (er'ite ali'entarea
'icrocontroller?)l)iH -i s+ conecte,e tableta folosind U5E?)l&
97
1igura @(;0 Structura de directoare analizat pentru include
:. Concluzii
Aceast+ r)bric+ c)(rinde 8 cate0orii! -i an)'e: )n re,)'at! re,)ltatele
e3(eri'entale ob*in)te -i (osibile de,volt+ri2 .'b)n+t+*iri&
<.1 .ezumat
5iste')l de fa*+ are (rinci(alele atrib)*ii de a 'onitori,a cons)')l de c)rent din
circ)it -i de ac*iona 'otoarele& Interac*i)nea c) )tili,ator)l se face (rintr?o tablet+!
folosind U5E -i (rotocol)l Android "(en AccessorC&
5e folosesc do)+ canale analo0ice (entr) '+s)rarea tensi)nii de (e -)nt -i de (e
divi,or)l de tensi)ne& e)nt)l fiind de valoare c)nosc)t+ se va transfor'a c+derea de
tensi)ne .n c)rent& Ca -i volta4 de referin*+ se folose-te ie-irea circ)it)l)i de DAC! care
este fi3at+ la %&9V&
>recven*ele 'ini'e ale 'otoarelor ce (ot fi '+s)rate a) valoarea de 8:D,& 5e
'+soar+ t)ra*iile efective! .nainte de red)ctor)l de %:%<& La t)ra*ii 'ai 'ici dec/t li'ita
inferioar+ se constat+ o(rirea 'otor)l)i deoarece cores()nde )n)i factor de )'(lere al
#N$ s)b (ra0)l 'ini' de f)nc*ionare&
#entr) calc)larea cons)')l)i total .n circ)it se folose-te )n circ)it de RCC
(entr) a salva o dat+ la o sec)nd+ valoriile '+s)rate care a(oi vor fi tri'ise (e U5E -i
.ns)'ate (e tablet+& #rinci(alele date care sosesc de la tablet+ s)nt cele referitoare la
factor)l de )'(lere (entr) #N$&
#entr) a se asi0)ra inde(enden*a -i (ortabilitatea! .naintea conect+rii )n)i
dis(o,itiv (e U5E se tri'it (ara'etrii 'icrocontroller?)l)i: di'ensi)nea re0istrelor care
con*in re,)ltatele -i frecve*ele de l)cr) (entr) ceas)l siste' -i cel al (erifericelor (rec)'
-i factorii de divi,are (entr) se'nalele de ceas folosite de (eriferice&
<.2 .ezultate obinute
Mn fi0)ra @&% se (re,int+ co'(ortarea circ)it)l)i de RCC .n condi*ii nor'ale!
'+s)rat folosind oscilator)l (rinci(al de @:$D,& e6nica de '+s)rare folosit+ a fost
descris+ .n ca(itol)l ;! -i se ba,ea,+ (e ac)rate*ea cristal)i (rinci(al de (e (lac+& Abaterea
98
1igura A(/0 *aloare %T!! msurat 8n condiii normale
frecven*ei '+s)rat+ .n acest nod este de 7&79(('! valoare care se .ncadrea,+ .n li'ita
reco'andat+ de (rod)c+tor de g7:(('& C) toate acestea valoriile obtin)te (entr)
interval)l de o sec)nd+ s)nt .n 4)r)l valorii de %&::::;99sec& >recven*a diferit+ a
oscilator)l)i sec)ndar este confir'at+ de fi0)ra ;&8 )nde valoarea '+s)rat+ este de
87&@<GD,& >)nc*ionarea .n (re,en*a )nei s)rse de c+ld)r+Ffi0)ra ;&%H sa) de r+cireF;& 7H
(rod)ce efecte vi,ibile .n ceea ce (rive-te frecven*a de f)nc*ionare! a-a c)' s(ecific+ -i
(rod)c+tor)l& As(ect)l )nifor' al 0raficelor! (rec)' -i eroarea 'ai 'ic+ de %:e?;!
reco'and+ folosirea RCC ca -i ba,+ de ti'( (entr) '+s)r+&
Diferen*ele .ntre valoriile de tensi)ne '+s)rate (e 'icrocontroller?)l -i oscilosco(
s)nt 'ai 'ici de ordin)l :!::%! l)cr) vi,ibil .n fi0)rile ;&A! -i ;&9& #ot s+ a(ar+ )nele
diferen*e 'o'entane 'ai 'ari! .n s(ecial la valoarea de (e -)nt! care a-a c)' se observ+
.n i'a0inea ;&9 (re,int+ 'ici fl)ct)a*ii& #entr) calibrare s?a folosit '+s)rarea )nei
tensi)ni stabileFie-irea de la DACH folosind ADC de (e (lac+W .n acest ca, erorile a) fost
s)b (ra0)l de :&::%& N) se reco'and+ folosirea de(an+rii (entr) a citi valoarea '+s)rat+!
deoarece fiecare (as de de(anare (rod)ce o fl)ct)a*ie se'nificativ+ .n cons)')l de
c)rent& #entr) verificare se (oate folosi tri'ierea valorii (e UAR&
>)nc*ia de calibrare a 'otoarelor ob*ine diferen*e .ntre cele do)+ t)ra*ii ale
'otoarelor de ;D,! ceea ce re(re,int+ o abatere de 8[ .ntre 'otoare& " ca),+ (osibil+ o
re(re,int+ diferen*ele .ntre cele do)+ ()n*i D! care n) re)-esc s+ (rod)c+ ie-iri identice
c6iar dac+ co'en,iile s)nt identiceF a) fost conectate acela-i #N$H& #entr) co'(ensare!
se folose-te o b)cl+ .nc6is+ de re0la4 i'(le'entat+ .n softLare?)l de (e tablet+& $otor)l
care are t)ra*ie 'ai 'are va fi .ncetinit (entr) a a4)n0e la t)ra*ia cel)i lent&
#entr) testare s?a folosit )n sin0)r 'icrocontroller -i o sin0)r+ tablet+! (rec)' -i
)n sin0)r circ)it de '+s)r+& #osibilitatea (ort+rii cod)l)i (entr) (laca de de,voltare a fost
testat+ folosind )n alt #C -i )r'+rind (a-ii din sec*i)nea J&%&7&
<.3 $osibile dezvoltri i !mbuntiri ulterioare
" (ri'+ de,voltare ar ()tea fi introd)cerea )n)i R"5& Acest l)cr) ad)ce c) sine
o serie de (roble'e c)' ar fi fa(t)l c+ stiva de Android2U5E treb)ie ada(tat+ (entr)
'edi)l ')lti?tas1in0& Aceast+ (roble'+ este tratat+ .n Integrating icroc4ip $ibraries
Kit4 a %eal<Time Operating S=stem, )n a((lication note oferit de $icroc6i(& Avanta4ele
evidente s)nt: o 'ai 'are 'od)laritate a cod)l)i -i eviden*ierea ')lt 'ai clar+ a
de(enden*elor .ntre 'od)le (rin folosirea co,ilor! sa) a se'afoarelor& Mn acest sens s?a
instalat (e (lac+ >reeR"5! -i s?a) r)lat )nele a(lica*ii de test! f+r+ a instala -i libr+ria de
U5E&
" alt+ de,voltare le0at+ tot de siste'ele de o(erare o constit)ie instalarea )nei
versi)ni de Lin)3& Acest l)cr) face (osibil+ folosirea )n)i n)'+r 'are de (ro0ra'e
scrise .n C (entr) Lin)3 -i destinate ini*ial (entr) #C! s+ fie folosite -i aici& Instalarea
)n)i 1ernel clasic de Lin)3 (e confi0)ra*ia act)al+ este a(roa(e i'(osibil+! .n (rinci(al
datorit+ 'e'oriei li'itate! a-a c)' se arat+ (e for)')l U7@V! dar o versi)ne 'ini'al+ de
Lin)3! ada(tat+ (entr) e'bedded! ar ()tea fi instalat+&
>olosirea cod)l)i scris .n asa'blare constit)ie .ntotdea)na o .'b)n+t+*ire! .ns+
(entr) aceasta este necesar+ o anali,+ a'+n)n*it+ a cod)l)i! (entr) a identifica ,onele
care 'erit+ .'b)n+t+*ite& 5e (oate folosi .n acest sens Le0ea l)i A'da6l&
9A
Ca -i o alt+ .'b)n+t+*ire! o anali,+ 'ai a'+n)n*it+ a cod)l)i ar ()tea d)ce la o
red)cere a di'ensi)nii )nor variabile! sa) la eli'inarea altora& De ase'enea c/'()rile
str)ct)rilor (ot fi s(ecificate de ce di'ensi)ne s+ fie! .'(iedic/nd astfel s+ se 'ai fac+
alinierea&
" alt+ .'b)n+t+*ire o constit)ie folosirea ,onelor critice& Mn a(lica*ie! .n
confi0)ra*ia de fa*+! n) se folosesc ,one critice (entr) a se accesa variabilele i'(ortante
(entr) a(lica*ie& 5in0)r)l 'ecanis' de (rotec*ie fiind folosirea nivelelor ')lti(le de
(riorit+*i (entr) .ntrer)(eri! c) nivel)l cel 'ai ridicat (entr) RCC& Cel 'ai si'(l) 'od
de i'(le'entare a ,onelor critice .l constit)ie de,activarea 0eneral+ a .ntrer)(erilor la
intrarea .n I5R -i reactivarea lor la ie-irea din 6andler&
#entr) a se red)ce cons)')l de c)rent se (oate folosi 'icrocontroller?)l .n 'od)l
de slee(! at)nci c.nd n) s)nt date de (rocesat& #entr) aceasta! ar treb)i di'in)at+ de
ase'ena -i frecven*a c) care se intr+ .n .ntrer)(erile fiec+r)i 'od)l! s+ fie c.t 'ai
a(ro(iat+ de %: D,! (entr) a se reali,a %: '+s)r+tori .ntre do)+ transfer)ri (e 'a0istrala
de U5E&
>)nc*iile a c+ror d)rat+ de e3ec)*ie este 'are! (ot fi .'(+r*ite .ntre 'ai ')lte st+ri
-i la fiecare a(el s+ se fac+ doar )n (as din al0orit'& Astfel se red)ce d)rata a(el)l)i
f)nc*iei dar cre-te co'(le3itatea .n ceea ce (rive-te .n*ele0erea cod)l)i -i 'entenan*a l)i&
#entr) a se .'b)n+*ii -i 'ai ')lt ti'()l 0eneral de e3ec)*ie -i 'ain loo(?)l (oate fi
divi,at .n st+ri -i vor fi a(elate an)'ite f)nc*ii doar dac+ a fost )n eveni'ent&
Ca -i o .'b)n+t+*ire a cod)l)i! se (oate sc6i'ba vi,ibilitatea variabilelor -i se (ot
se'nala cele accesibile din 'ai ')lte s)rse c) volatile& De ase'nea se (ot folosi ')lt
'ai intens (ointeri& Res(ectarea )n)i standard ind)strial c)' ar fi $I5RA sa) c6iar
AN5I C ar fi binevenit+&
#entr) cre-terea 'od)larit+*ii .n ana'bl) se (oate folosi )n ecran tactil! care s+ ne
(er'it+ reali,area confi0)ra*iilor (l+cii& Astfel se (oate selecta n)'+r)l de 'otoare din
siste'! dac+ se dore-te conectarea la acela-i ")t()t Co'(are! ce res)rse 6ardLare se vor
folosiF.n ca,)l .n care se (oate ale0e .ntre do)+ 'od)le si'ilareH! diverse frecven*e de
l)cr)& Acest l)cr) ar d)ce la o ada(tare ')lt 'ai b)n+ la cerin*e! -i o confi0)rare ra(id+
(entr) )n n)'+r 'are de a(lica*ii&
99
0ibliora+ie
U%V hAndroid 5erial #orth! 6tt(:22LLL&(ro0sr(&'oonfr)it&co'2_2android?
serial2A9A@;<J9:@&
U7V hAndroid Q% 5erial to U5E Cableh! 6tt(:22LLL&instr)ctables&co'2id2Android?Q%?
5erial?Cable2&
U8V h$icrobrid0eh! 6tt(:22code&0oo0le&co'2(2'icrobrid0e2&
UAV hA'arinoh! 7::<! 6tt(:22LLL&a'arino?tool1it&net2inde3&(6(2docs&6t'l&
U9V h)torial: Android to $icrocontroller via El)etoot6h! 7:%%!
6tt(:22LLL&rCandeben6a'&co'2icatO%A&
U;V h6e Android Deb)0 Erid0e FADEHh! 7:%%!
6tt(:22LLL&androida)t6oritC&co'2abo)t?android?deb)0?brid0e?adb?7%9%:2&
UJV hA closer loo1 at Qoo0lejs o(en accessorC develo('ent 1ith! 7:%%!
LLL&ro'font&co'27:%%2:92%%2a?closer?loo1?at?0oo0les?o(en?accessorC?develo('ent?
1it2&
U@V hAndroid "(en AccessorC Develo('ent Gith! 7:%%!
6tt(:22develo(er&android&co'20)ide2to(ics2)sb2ad1&6t'l&
U<V h$icroc6i(Zs AccessorC >ra'eLor1 for AndroidFt'Hh! $icroc6i(! 7:%%&
U%:V hA Eri06t Idea: Android "(en Accessoriesh! 7:%%! 6tt(:22android?
develo(ers&blo0s(ot&co'27:%%2:92bri06t?idea?android?o(en?accessories&6t'l&
U%%V hQoo0le I2" 7:%%: Android "(en AccessorC A#I and Develo('ent Git FADGHh!
7:%%! 6tt(:22LLL&Co)t)be&co'2Latc6ivOsJs,c(Kf7rE&
U%7V hQoo0le I2" 7:%%: GeCnote DaC "ne h! 7:%%! 6tt(:22LLL&Co)t)be&co'2Latc6i
feat)reO(laCer=e'beddedkvO"3,)cL4>EEs_l&
U%8V hDar'an to brin0 Android inte0ration to cars&&& finallCh! 7:%%!
LLL&a)toblo0&co'27:%%2:J2%926ar'an?to?brin0?android?inte0ration?to?cars?finallC2&
U%AV Nic1las Doc6C! Gevin Ze''erC! Eernd Nert6erand Roland \& 5ie0Lart !hElectric
Ve6icle ravel "(ti'i,ationmC)sto'er 5atisfaction Des(ite Reso)rceConstraintsh!
I))) .C/. Intelligent *e4icles S=mposium! Alcaln de Denares! 7:%7&
U%9V Roland 5ie0Lart! Illa6 R& No)rba16s6 !hIntrod)ction to A)tono'o)s $obile
Robotsh! $I #ress! Ca'brid0e! %
st
edition! 7::A&
U%;V hi'ersh! $icroc6i(! 7:%%&
U%JV h")t()t Co'(areh! $icroc6i(! 7:%%&
U%@V hIn()t Ca(t)reh! $icroc6i(! 7:%%&
U%<V hInter?Inte0rated Circ)ito FI7CoHh! $icroc6i(! 7:%%&
U7:V h%:?bit Analo0?to?Di0ital Converter FADCHh! $icroc6i(! 7:%%&
U7%V h"scillators Reference $an)alh! $icroc6i(! 7:%%&
U77V hReal?i'e Cloc1 and Calendar FRCCHh! $icroc6i(! 7:%%&
U78V hInterr)(ts Reference $an)alh! $icroc6i(! 7:%%&
U7AV Zoltan >rancisc Ear)c6 !h5iste'e de I2Eh! Edit)ra Albastr+! Cl)4?Na(oca! edi*ia %!
7:::&
U79V Ear)c6 Zoltan >rancisc !hINER>AA U5Eh! UCN! Cl)4?Na(oca! L)crare de
laborator&
U7;V hU5E "Q and E'bedded Dosth! $icroc6i(! 7::@&
U7JV hU5E E'bedded Dost 5tac1 #ro0ra''erZs Q)ideh! $icroc6i(! 7::@&
U7@V h#IC87 Lin)3 2 eCos C6allen0eh! 7:%%!
6tt(:22LLL&'icroc6i(&co'2for)'s2'7<878J&as(3&
9;
Anexa 1.
,L
L #ileE MardAareProfile N PIC"2MC4+'#)12L PIMO-
L 2e*riptio!E @*ed to *peifF %oard *etti!$*
L,
#if!def M=R26=R1_PRO#IL1_PIC"2MC4+'#)12L_PIM_M
#defi!e M=R26=R1_PRO#IL1_PIC"2MC4+'#)12L_PIM_M
,LL ?oard defi!itio!
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL,
,, T-e*e defi!tio!* Aill tell t-e &ai!34 fu!tio! A-i- %oard i*
,, urre!tlF *eletedO T-i* Aill alloA t-e appliatio! to add
,, t-e orret o!fi$uratio! %it* a* Aell* u*e t-e orret
,, i!itialiBatio! fu!tio!* for t-e %oardO T-e*e defitio!* are
o!lF
,, re8uired i! t-e *ta; provided de&o*O T-eF are !ot re8uired i!
,, fi!al appliatio! de*i$!O
#defi!e 21MO_?O=R2 PIC"2MC4+'#)12L_PIM
#defi!e 1CPLOR1R_1+
,,#defi!e R@N_=T_4/MMP
,,#defi!e R@N_=T_24MMP
#defi!e R@N_=T_+'MMP

,, Variou* lo; value*
#if defi!ed3R@N_=T_4/MMP4
#defi!e :etSF*te&Clo;34 4/''''''@L
#defi!e :etPerip-eralClo;34 4/''''''@L
#defi!e :etI!*trutio!Clo;34 3:etSF*te&Clo;34 , 24 QQQ
#elif defi!ed3R@N_=T_24MMP4
#defi!e :etSF*te&Clo;34 24''''''@L
#defi!e :etPerip-eralClo;34 24''''''@L
#defi!e :etI!*trutio!Clo;34 3:etSF*te&Clo;34 , 24 QQQ
#elif defi!ed3R@N_=T_+'MMP4
#defi!e :etSF*te&Clo;34 +'''''''@L
#defi!e :etPerip-eralClo;34 +'''''''@L ,, 6ill %e
divided doA!
#defi!e :etI!*trutio!Clo;34 3:etSF*te&Clo;34 , 24 QQQ
#el*e
#error C-oo*e a *peed
#e!dif
#defi!e 21MO_?O=R2_N=M1_STRIN: DPIC"2MC4+'#)12L PIMD
,LL MardAare u*e9 t-e value* are!Rt u*ed i! pratie
LLLLLLLLLLLLLLLL,
#defi!e I!putCaptureC-a!!el2
#defi!e I!putCaptureC-a!!el" "
#defi!e =2C1 1
#defi!e OutputCo&pare2 2
#defi!e OutputCo&pare" "
#defi!e Ti&er2#orI!putCapture 2
#defi!e Ti&er"#orOutputCo&pare "
#defi!e RTCC1*e 1
#defi!e I2CC-a!!el1#or2=C 1
,LL I!terrupt* level
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL,
9J
#defi!e CaptureMotor1INTLevel IC_INT_PRIOR_4
#defi!e CaptureMotor2INTLevel IC_INT_PRIOR_4
#defi!e Ti&er#orICINTLevel T1_INT_PRIOR_1
#defi!e INTLevel=2C =2C_INT_PRI_"
#defi!e RTCCLevel INT_PRIORIT>_L1V1L_.
,LL I,O pi! defi!itio!*
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL,
#defi!e INP@T_PIN 1
#defi!e O@TP@T_PIN '
#e!dif ,,M=R26=R1_PRO#IL1_PIC"2MC4+'#)12L_PIM_M
Anexa 2.
,L
L #ileE I!putCapO-
L 2e*riptio!E 2efi!e pu%li fu!tio!5 redefi!e u*ed re$i*ter*
L
L Created o! Mar- +9 2'129 0E)4 PM
L,
#i!lude DMardAareProfileO-D
#if!def I!putCap_M
#defi!e I!putCap_M
#defi!e *a&pleIC2Start 1
#defi!e *a&pleIC2Stop 2
#defi!e *a&pleIC"Start "
#defi!e *a&pleIC"Stop 4
#defi!e Ti&erOV#LI!Cap 1
#defi!e I!CapOV#L 2
,, N Capture 1verF ri*e ed$e
,, N 1!a%le apture i!terrupt*
,, N @*e Ti&er 2 *oure
,, N I!terrupt o! everF ed$e of i!tere*t
#defi!e IC*etti!$* IC_1V1R>_RIS1_12:1 | IC_INT_1C=PT@R1 |
IC_TIM1R2_SRC | IC_#12:1_RIS1 | IC_ON
,LL
L 6ill prepare t-e I!put Capture for -a!!el 2 a!d "9 u*i!$ a* t-e
ti&e %a*e Ti&er 2
L 6e u*e a pre*aler for Ti&er 29 i! order to $et *&all
fre8ue!ie*9 arou!d "'MP
L 6e Aill u*e i!terrupt* a*oiated Ait- t-e i!put apture a!d t-e
ti&er
L,
void *et@pI!putCap();
#ifdef I!putCaptureC-a!!el2
#defi!e CaptureMotor1Port1!a%le &PORT2SetPi!*2i$italI!31SS
045 ,, IC2 for t-e fir*t &otor
#defi!e Ope!CaptureMotor1 Ope!Capture2
#defi!e SetPrioritFICMotor1 SetPrioritFI!tIC2
#defi!e 1!a%leINTICMotor1 1!a%leI!tIC2
#defi!e CaptureMotor1INTVetor _INP@T_C=PT@R1_2_V1CTOR
#defi!e CaptureMotor1INT?it INT_IC2
#defi!e CaptureMotor1ReadCapture &IC2ReadCapture
#defi!e CaptureMotor1Co!trolRe$ IC2CON%it*
#e!dif
#if defi!ed3I!putCaptureC-a!!el"4
9@
#defi!e CaptureMotor2Port1!a%le &PORTCSetPi!*2i$italI!31SS
145 ,, a!d IC" for t-e *eo!d &otor
#defi!e Ope!CaptureMotor2 Ope!Capture"
#defi!e SetPrioritFICMotor2 SetPrioritFI!tIC"
#defi!e 1!a%leINTICMotor2 1!a%leI!tIC"
#defi!e CaptureMotor2INTVetor _INP@T_C=PT@R1_"_V1CTOR
#defi!e CaptureMotor2INT?it INT_IC"
#defi!e CaptureMotor2ReadCapture &IC"ReadCapture
#defi!e CaptureMotor2Co!trolRe$ IC"CON%it*
#e!dif
#if defi!ed3Ti&er2#orI!putCapture4
#defi!e Ope!Ti&er#orIC Ope!Ti&er2
#defi!e Ti&er#orICCo!fi$* T2_ON | T2_SO@RC1_INT|
T2_PS_1_"2
#defi!e Ti&er#orICSetPrioritF &T2SetI!tPrioritF
#defi!e Ti&er#orICSetSu%PrioritF &T2SetI!tSu%PrioritF
#defi!e Ti&er#orICINT1!a%le &T2I!t1!a%le
#defi!e Ti&erValueRe$ TMR2
#e!dif
#e!dif
Anexa 3.
,L
L #ileE I!putCapO
L 2e*riptio!E Co!tai!* t-e ode to *a&ple tAo -a!!el*
L,
#i!lude Spli%O-I
#i!lude DI!putCapO-D
#i!lude DOO,MardAareProfileO-D
u!*i$!ed i!t %ufferTe&p;
,LT*ee &ai!OL,
e(ter! u!*i$!ed i!t val1IC2;
e(ter! u!*i$!ed i!t val1IC";
e(ter! ?>T1 !rI&pul*uriIC2;
e(ter! ?>T1 !rI&pul*uriIC";
e(ter! ?>T1 !r1ve!t*1, !r1ve!t*2;
?>T1 *a&pleIC(= *a&pleIC2Start;
void *et@pI!putCap(){
CaptureMotor1Port1!a%le;
CaptureMotor2Port1!a%le;
,, 1!a%le I!put Capture Module 2
Ope!CaptureMotor1(IC*etti!$*);
SetPrioritFICMotor1(CaptureMotor1INTLevel | IC_INT_S@?_PRIOR_"); ,,
PrioritF 4
1!a%leINTICMotor1;
,, 1!a%le I!put Capture Module "
Ope!CaptureMotor2(IC*etti!$*);
SetPrioritFICMotor2(CaptureMotor1INTLevel | IC_INT_S@?_PRIOR_2); ,,
PrioritF 4
1!a%leINTICMotor2;
9<
,, 6e u*e ti&er 2 for &ea*uri!$ t-e i!put apture
Ope!Ti&er#orIC(Ti&er#orICCo!fi$*, '(####); ,, Ae u*e a pre*aler of
"2 to $et fre8 over "'MB
Ti&er#orICSetPrioritF(Ti&er#orICINTLevel); ,, Aill -ave a fre8 of
"O.)M-B for a Perip- lo; of +'M-B a!d T= 2++O. !*
Ti&er#orICSetSu%PrioritF(2);
Ti&er#orICINT1!a%le(TR@1);
}
,LL
L 6e u*e a *tate &a-i!e to fi$ure out if it i* ti&e to read t-e value
or !ot
L,
#if CaptureMotor1INTLevel == IC_INT_PRIOR_4
void __ISR(CaptureMotor1INTVetor, ipl4) I!putCapture2Routi!e(void){
INTClear#la$(INT_IC2);
%ufferTe&p= CaptureMotor1ReadCapture()& '(####;
!rI&pul*uriIC2%%; ,, Aill ou!t !o &at-er i! A-at
*tate Ae are

if(*a&pleIC(== *a&pleIC2Start){
Ti&erValueRe$= '; ,, re*et t-e ti&er
*a&pleIC(= *a&pleIC2Stop; ,, $o to !e(t *tate
}else
if(*a&pleIC(== *a&pleIC2Stop){
val1IC2= %ufferTe&p;
Ti&erValueRe$= '; ,, re*et t-e ti&er
*a&pleIC(= *a&pleIC"Start; ,, $o to !e(t *tate
}
if(CaptureMotor1Co!trolRe$.ICOV)
val1IC2= I!CapOV#L;
}
#e!dif
,LL
L 6e u*e a *tate &a-i!e to fi$ure out if it i* ti&e to read t-e value
or !ot
L,
#if CaptureMotor2INTLevel == IC_INT_PRIOR_4
void __ISR(CaptureMotor2INTVetor, ipl4) I!putCapture"Routi!e(void){
INTClear#la$(CaptureMotor2INT?it);
%ufferTe&p= CaptureMotor2ReadCapture()& '(####;
!rI&pul*uriIC"%%; ,, Aill ou!t !o &at-er i! A-at
*tate Ae are

if(*a&pleIC(== *a&pleIC"Start){
Ti&erValueRe$= '; ,, re*et t-e ti&er
*a&pleIC(= *a&pleIC"Stop; ,, $o to !e(t *tate
}else
if(*a&pleIC(== *a&pleIC"Stop){
val1IC"= %ufferTe&p;
Ti&erValueRe$= '; ,, re*et t-e ti&er
*a&pleIC(= *a&pleIC2Start; ,, $o to !e(t *tate
}
if(CaptureMotor2Co!trolRe$.ICOV)
val1IC"= I!CapOV#L;
}
#e!dif
,LL
;:
L if I -ave overfloA t-i* &ea!* Ae do!Rt -ave i!put o! IC2 or IC"
L,
#if Ti&er#orICINTLevel == T1_INT_PRIOR_1
void __ISR(_TIM1R_2_V1CTOR, ipl1) Ti&er2Routi!e(void){
INTClear#la$(INT_T2);
if((*a&pleIC(== *a&pleIC2Start) ||(*a&pleIC(== *a&pleIC2Stop)){
*a&pleIC(= *a&pleIC"Start;
val1IC2= Ti&erOV#LI!Cap;
}else
if((*a&pleIC(== *a&pleIC"Start) ||(*a&pleIC(==
*a&pleIC"Stop)){
*a&pleIC(= *a&pleIC2Start;
val1IC"= Ti&erOV#LI!Cap;
}
}
#e!dif
Anexa *.
,*
L #ileE 2=CO-
L =ut-orE ela!o
L 2e*riptio!E 2efi!e* t-e *etti!$* u*ed %F t-e 2=C5 e!u&erate t-e
pu%li fu!tio!*
L Created o! Mar- +9 2'129 1'E'" PM
L,
#if!def 2=C_M
#defi!e 2=C_M
,, Clo; Co!*ta!t*
#defi!e I2C_CLOC<_#R17 4''''' ,,T-e I2C o! t-e %oard
*upport a &ediu& *peed 31''< or 4''< %p*49
,, 2=C Co!*ta!t*
#defi!e 2=C_I2C_?@S I2C1
#defi!e 2=C_=22R1SS '(+' ,, '%11''''' MPC4.2)
2=C
#defi!e dutFCileMa(2=C '('###
,LL
L 6rite* t-e 2=C re$i*ter9 %ut do!Rt Arite t-e 11PROM
L It doe*!Rt !eed t-e reead o&&a!d to verifF t-e R2> %it9 %eau*e
Ae do!Rt u*e 11PROM
L
L -p#'#. 2=CValue = 12 %it value U'N 4'0)V or U'(''''N '('###V
L -p#'#. PoAer2oA!Optio! I! $e!eral Ae u*e '(' for !or&al u*e
L,
void Arite2=CRe$i*ter(u!*i$!ed i!t 2=CValue, u!*i$!ed *-ort
PoAer2oA!Optio!);
,LL
L I reo&a!d to u*e a read o&&a!d a!d verifF t-e R2> %it
L See t-e previou* de*riptio! for t-e para&
L -p#'#. 2=CValue
L -p#'#. PoAer2oA!Optio!
L,
void Arite2=CRe$i*ter=!d11PROM(u!*i$!ed i!t 2=CValue, u!*i$!ed i!t
PoAer2oA!Optio!);
;%
,LL
L N112 R16OR<9 IT 2O6SNRT 6OR< PROP1RL>
L Read t-e *etti!$U1 %FteV9 o!te!t of t-e 2=C Re$i*terU2 %FteV9
a!d t-e! t-e o!te!t of t-e 11PROM U2 %FteV
L -p#'#. i2%Fte
L -'et)'+
L,
?OOL read2=CRe$i*ter=N211PROM(?>T1 i2%Fte[)]);
,LL
L 6ill *et t-e 2=C to t-e de*ired value
L -p#'#. valRe$ *-ould %e a value %etAe! ' a!d 4'0)O =t 4'0) i*
"O2)V t-e output3t-e value of t-e %oard4
L,
void *et@p2=C(u!*i$!ed *-ort valRe$);
#e!dif
Anexa -.
,*
L #ileE 2=CO
L =ut-orE ela!o
L 2e*riptorE T-e ode for t-e 2=C
L Created o! Mar- +9 2'129 1'E'" PM
L,
#i!lude Spli%O-I
#i!lude D2=CO-D
#i!lude DMardAareProfileO-D
,,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
,,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
,, Loal Support Routi!e*
,,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
,,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL
#u!tio!E
?OOL StartTra!*fer3 ?OOL re*tart 4
Su&&arFE
Start* 3or re*tart*4 a tra!*fer to,fro& t-e 11PROMO
2e*riptio!E
T-i* routi!e *tart* 3or re*tart*4 a tra!*fer to,fro& t-e 11PROM9
Aaiti!$ 3i!
a %lo;i!$ loop4 u!til t-e *tart 3or reN*tart4 o!ditio! -a*
o&pletedO
;7
Preo!ditio!E
T-e I2C &odule &u*t -ave %ee! i!itialiBedO
Para&eter*E
re*tart N If #=LS19 *e!d a DStartD o!ditio!
N If TR@19 *e!d a DRe*tartD o!ditio!
Retur!*E
TR@1 N If *ue**ful
#=LS1 N If a olli*io! oured duri!$ Start *i$!ali!$
1(a&pleE
SodeI
StartTra!*fer3#=LS145
S,odeI
Re&ar;*E
T-i* i* a %lo;i!$ routi!e t-at Aait* for t-e %u* to %e idle a!d
t-e Start
3or Re*tart4 *i$!al to o&pleteO
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL,
?OOL StartTra!*fer( ?OOL re*tart )
{
I2C_ST=T@S *tatu*;
,, Se!d t-e Start 3or Re*tart4 *i$!al
if(re*tart)
{
I2CRepeatStart(2=C_I2C_?@S);
}
else
{
,, 6ait for t-e %u* to %e idle9 t-e! *tart t-e tra!*fer
while( !I2C?u*I*Idle(2=C_I2C_?@S) );
if(I2CStart(2=C_I2C_?@S) != I2C_S@CC1SS)
{
2?PRINT#(D1rrorE ?u* olli*io! duri!$ tra!*fer StartW!D);
'et)'+ #=LS1;
}
}
,, 6ait for t-e *i$!al to o&plete
do
{
*tatu* = I2C:etStatu*(2=C_I2C_?@S);
} while ( !(*tatu* & I2C_ST=RT) );
'et)'+ TR@1;
}
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;8
LLLLLLLL
#u!tio!E
?OOL Tra!*&itO!e?Fte3 ?>T1 data 4
Su&&arFE
T-i* tra!*&it* o!e %Fte to t-e 11PROMO
2e*riptio!E
T-i* tra!*&it* o!e %Fte to t-e 11PROM9 a!d report* error* for a!F
%u*
olli*io!*O
Preo!ditio!E
T-e tra!*fer &u*t -ave %ee! previou*lF *tartedO
Para&eter*E
data N 2ata %Fte to tra!*&it
Retur!*E
TR@1 N 2ata Aa* *e!t *ue**fullF
#=LS1 N = %u* olli*io! oured
1(a&pleE
SodeI
Tra!*&itO!e?Fte3'(==45
S,odeI
Re&ar;*E
T-i* i* a %lo;i!$ routi!e t-at Aait* for t-e tra!*&i**io! to
o&pleteO
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL,
?OOL Tra!*&itO!e?Fte( ?>T1 data )
{
,, 6ait for t-e tra!*&itter to %e readF
while(!I2CTra!*&itterI*ReadF(2=C_I2C_?@S));
,, Tra!*&it t-e %Fte
if(I2CSe!d?Fte(2=C_I2C_?@S, data) == I2C_M=ST1R_?@S_COLLISION)
{
2?PRINT#(D1rrorE I2C Ma*ter ?u* Colli*io!W!D);
'et)'+ #=LS1;
}
,, 6ait for t-e tra!*&i**io! to fi!i*-
while(!I2CTra!*&i**io!Ma*Co&pleted(2=C_I2C_?@S));
'et)'+ TR@1;
}
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL
#u!tio!E
void StopTra!*fer3 void 4
;A
Su&&arFE
Stop* a tra!*fer to,fro& t-e 11PROMO
2e*riptio!E
T-i* routi!e Stop* a tra!*fer to,fro& t-e 11PROM9 Aaiti!$ 3i! a
%lo;i!$ loop4 u!til t-e Stop o!ditio! -a* o&pletedO
Preo!ditio!E
T-e I2C &odule &u*t -ave %ee! i!itialiBed X a tra!*fer *tartedO
Para&eter*E
No!eO
Retur!*E
No!eO
1(a&pleE
SodeI
StopTra!*fer345
S,odeI
Re&ar;*E
T-i* i* a %lo;i!$ routi!e t-at Aait* for t-e Stop *i$!al to
o&pleteO
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL,
void StopTra!*fer( void )
{
I2C_ST=T@S *tatu*;
,, Se!d t-e Stop *i$!al
I2CStop(2=C_I2C_?@S);
,, 6ait for t-e *i$!al to o&plete
do
{
*tatu* = I2C:etStatu*(2=C_I2C_?@S);
} while ( !(*tatu* & I2C_STOP) );
}
,LL
L 6rite* t-e 2=C re$i*ter9 %ut do!Rt Arite t-e 11PROM
L It doe*!Rt !eed t-e reead o&&a!d to verifF t-e R2> %it9 %eau*e Ae
do!Rt u*e 11PROM
L
L -p#'#. 2=CValue = 12 %it value U'N 4'0)V or U'(''''N '('###V
L -p#'#. PoAer2oA!Optio! I! $e!eral Ae u*e '(' for !or&al u*e
L,
void Arite2=CRe$i*ter(u!*i$!ed i!t 2=CValue, u!*i$!ed *-ort
PoAer2oA!Optio!){
?>T1 i22ata[1'];
I2C_._?IT_=22R1SS Slave=ddre**;
i!t I!de(;
i!t 2ataSB;
;9
?OOL Sue** = TR@1;
,, I!itialiBe t-e data %uffer
I2C_#ORM=T_._?IT_=22R1SS(Slave=ddre**, 2=C_=22R1SS, I2C_6RIT1);
i22ata['] = Slave=ddre**.%Fte;
i22ata[1] = '(4'| (PoAer2oA!Optio!& ((1// 1)| (1// 2)));
,, C29 C19 C'= '1' 6rite2=C Re$i*ter9 a!d P219 P2'= '' for !or&al &ode
of poAer doA!
i22ata[2] = (2=CValue& '('##')"" 4; ,, 2=C output -i$- %Fte
i22ata["] = (2=CValue& '('''#)// 4; ,, 2=C output loA
%Fte 312 %it* i! total4
2ataSB = 4;
,, Start t-e tra!*fer to Arite data to t-e 11PROM
if( !StartTra!*fer(#=LS1) )
{
while(1);
}
,, Tra!*&it all data
I!de( = ';
while( Sue** && (I!de( / 2ataSB) )
{
,, Tra!*&it a %Fte
if (Tra!*&itO!e?Fte(i22ata[I!de(]))
{
,, =dva!e to t-e !e(t %Fte
I!de(%%;
,, VerifF t-at t-e %Fte Aa* a;!oAled$ed
if(!I2C?Fte6a*=;!oAled$ed(2=C_I2C_?@S))
{
2?PRINT#(D1rrorE Se!t %Fte Aa* !ot a;!oAled$edW!D);
Sue** = #=LS1;
}
}
else
{
Sue** = #=LS1;
}
}
,, 1!d t-e tra!*fer 3-a!$ -ere if a! error oured4
StopTra!*fer();
if(!Sue**)
{
while(1);
}
}
,LL
L I reo&a!d to u*e a read o&&a!d a!d verifF t-e R2> %it
L See t-e previou* de*riptio! for t-e para&
L -p#'#. 2=CValue
L -p#'#. PoAer2oA!Optio!
L,
void Arite2=CRe$i*ter=!d11PROM(u!*i$!ed i!t 2=CValue, u!*i$!ed i!t
PoAer2oA!Optio!){
;;
?>T1 i22ata[1'];
I2C_._?IT_=22R1SS Slave=ddre**;
i!t I!de(;
i!t 2ataSB;
?OOL Sue** = TR@1;
,, I!itialiBe t-e data %uffer
I2C_#ORM=T_._?IT_=22R1SS(Slave=ddre**, 2=C_=22R1SS, I2C_6RIT1);
i22ata['] = Slave=ddre**.%Fte;
i22ata[1] = '(+'| (PoAer2oA!Optio!& ((1// 1)| (1// 2)));
,, C29 C19 C'= '11 6rite2=C Re$i*ter a!d 11PROM5 a!d P219 P2'= '' for
!or&al &ode of poAer doA!
i22ata[2] = (2=CValue& '('##')"" 4; ,, 2=C output -i$- %Fte
i22ata["] = (2=CValue& '('''#)// 4; ,, 2=C output loA
%Fte 312 %it* i! total4
i22ata[4] = '(+'| (PoAer2oA!Optio!& ((1// 1)| (1// 2)));
,, C29 C19 C'= '11 6rite2=C Re$i*ter a!d 11PROM5 a!d P219 P2'= '' for
!or&al &ode of poAer doA!
i22ata[)] = (2=CValue& '('##')"" 4; ,, 2=C output -i$- %Fte
i22ata[+] = (2=CValue& '('''#)// 4; ,, 2=C output loA
%Fte 312 %it* i! total4
2ataSB = .;
,, Start t-e tra!*fer to Arite data to t-e 11PROM
if( !StartTra!*fer(#=LS1) )
{
while(1);
}
,, Tra!*&it all data
I!de( = ';
while( Sue** && (I!de( / 2ataSB) )
{
,, Tra!*&it a %Fte
if (Tra!*&itO!e?Fte(i22ata[I!de(]))
{
,, =dva!e to t-e !e(t %Fte
I!de(%%;
,, VerifF t-at t-e %Fte Aa* a;!oAled$ed
if(!I2C?Fte6a*=;!oAled$ed(2=C_I2C_?@S))
{
2?PRINT#(D1rrorE Se!t %Fte Aa* !ot a;!oAled$edW!D);
Sue** = #=LS1;
}
}
else
{
Sue** = #=LS1;
}
}
,, 1!d t-e tra!*fer 3-a!$ -ere if a! error oured4
StopTra!*fer();
if(!Sue**)
{
while(1);
;J
}
}
?OOL read2=CRe$i*ter=N211PROM(?>T1 i2%Fte[)]){
?>T1 i22ata[1'];
I2C_._?IT_=22R1SS Slave=ddre**;
i!t I!de(;
i!t 2ataSB;
?OOL Sue** = TR@1;
,, I!itialiBe t-e data %uffer
I2C_#ORM=T_._?IT_=22R1SS(Slave=ddre**, 2=C_=22R1SS, I2C_R1=2);
i22ata['] = Slave=ddre**.%Fte;
2ataSB = 1;
,, Start t-e tra!*fer to read t-e 11PROMO
if( !StartTra!*fer(#=LS1) )
{
while(1);
}
,, =ddre** t-e 11PROMO
I!de( = ';
while( Sue** & (I!de( / 2ataSB) )
{
,, Tra!*&it a %Fte
if (Tra!*&itO!e?Fte(i22ata[I!de(]))
{
,, =dva!e to t-e !e(t %Fte
I!de(%%;
}
else
{
Sue** = #=LS1;
}
,, VerifF t-at t-e %Fte Aa* a;!oAled$ed
if(!I2C?Fte6a*=;!oAled$ed(2=C_I2C_?@S))
{
2?PRINT#(D1rrorE Se!t %Fte Aa* !ot a;!oAled$edW!D);
Sue** = #=LS1;
}
}
,, Read t-e 2=C re$i*ter
I!de( = ';
while( Sue** & (I!de( / )) )
{
if(I2CReeiver1!a%le(2=C_I2C_?@S, TR@1) == I2C_R1C1IV1_OV1R#LO6)
{
2?PRINT#(D1rrorE I2C Reeive OverfloAW!D);
Sue** = #=LS1;
}
else
{
while(!I2CReeived2ataI*=vaila%le(2=C_I2C_?@S));
;@
i2%Fte[I!de(] = I2C:et?Fte(2=C_I2C_?@S);
I2C=;!oAled$e?Fte(2=C_I2C_?@S, TR@1);
I!de(%%;
}
}
,, 1!d t-e tra!*fer 3*top -ere if a! error oured4
StopTra!*fer();
if(!Sue**)
{
while(1);
}
if((i2%Fte[']& ('(/')== 1))
'et)'+ TR@1;
else
'et)'+ #=LS1;
}
void *et@p2=C(u!*i$!ed *-ort valRe$){
@INT"2 atualClo;;
,, I!itialiBe de%u$ &e**a$e* 3A-e! *upported4
2?INIT();
#if defi!ed3I2CC-a!!el1#or2=C4
,, Set t-e I2C %audrate
atualClo; = I2CSet#re8ue!F(2=C_I2C_?@S, :etPerip-eralClo;(),
I2C_CLOC<_#R17);
if ( a%*(atualClo;!I2C_CLOC<_#R17) " I2C_CLOC<_#R17,1' )
{
2?PRINT#(D1rrorE I2C1 lo; fre8ue!F 3Yu4 error e(eed*
1'YYOW!D, (u!*i$!ed)atualClo;);
}
,, 1!a%le t-e I2C %u*
I2C1!a%le(2=C_I2C_?@S, TR@1);
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,
,,,,,,,,,,,,,,,, Te*tarea
fu!tiilor ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,,,,,
Arite2=CRe$i*ter=!d11PROM(valRe$, '); ,,1O)V
I2C1!a%le(2=C_I2C_?@S, #=LS1); ,, a!d !oA Ae Aill di*a%le it
#e!dif

}
Anexa 5.
,*
L #ileE =2C*et@pO-
L =ut-orE ela!o
L 2e*riptio!E 2efi!e* t-e para&eter* u*ed %F t-e =2C5 redefi!e* t-e
u*ed re$i*ter*5 e!u&erate t-e pu%li fu!tio!*
;<
L Created o! Mar- +9 2'129 /E4+ PM
L,
#i!lude DMardAareProfileO-D
#if!def =2C*et@p_M
#defi!e =2C*et@p_M
,, defi!e *etup para&eter* for Ope!=2C1'
,, Tur! &odule o! | i! idle &ode | ouput i! i!te$er
| tri$$er &ode auto | e!a%le auto*a&ple
#defi!e P=R=M1 =2C_MO2@L1_ON | =2C_I2L1_CONTIN@1| =2C_#ORM=T_INT:
| =2C_CL<_=@TO | =2C_=@TO_S=MPLIN:_ON
,, =2C ref e(ter!al | di*a%le off*et te*t | e!a%le
*a! &ode | perfor& / *a&ple* A-it- avera$e | u*e dual %uffer* | do
!ot u*e alter!ate &ode
#defi!e P=R=M2 =2C_VR1#_1CT_1CT | =2C_O##S1T_C=L_2IS=?L1 |
=2C_SC=N_ON | =2C_S=MPL1S_P1R_INT_/ | =2C_=LT_?@#_ON |
=2C_=LT_INP@T_O##
,, u*e =2C P? lo; | *et *a&ple ti&e | &a(i&=
12. 3=2CSZ 14L2
#defi!e P=R=M" =2C_CONV_CL<_P?| =2C_S=MPL1_TIM1_12|
=2C_CONV_CL<_"2TF
,, Sa! #1 | Sa! #2
#defi!e P=R=M4 1N=?L1_=N4_=N=| 1N=?L1_=N/_=N=
,, S;ip all %ut =!alo$ 4| =!alo$ /
#defi!e P=R=M) S<IP_SC=N_=N'| S<IP_SC=N_=N1| S<IP_SC=N_=N2|
S<IP_SC=N_=N"| W
S<IP_SC=N_=N)| S<IP_SC=N_=N+| S<IP_SC=N_=N.| W
S<IP_SC=N_=N0| S<IP_SC=N_=N1'| S<IP_SC=N_=N11|
S<IP_SC=N_=N12| S<IP_SC=N_=N1"| S<IP_SC=N_=N14| S<IP_SC=N_=N1)
,LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL Met-od* *i$!ature
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL,
,LL
L 6ill prepare t-e =2C to Aor; Ait- i!terrupt*
L 6ill u*e dou%le %uffer* a!d Aill &a;e 4 *a&ple* for ea-
-a!!el9 a!d Aill *ave t-e avera$e
L 6ill u*e t-e i!ter!al ou!ter for *a&pli!$
L =uto o!vert a!d auto *a&pli!$E i! t-i* &ode Aill *a&ple a!d
o!vert for t-e de*ired ti&e a!d t-e! Aill re*tart t-e proe**
L,
void *et@p=2C();
#if defi!ed3=2C14
#defi!e Clo*e=2C Clo*e=2C1'
#defi!e SetC-a!!el=2C SetC-a!=2C1'
#defi!e Ope!Co!fi$=2C Ope!=2C1'
#defi!e Co!fi$ureINT=2C Co!fi$I!t=2C1'
#defi!e INTCo!fi$=2C =2C_INT_ON| INTLevel=2C|
=2C_INT_S@?_PRI_2
#defi!e 1!a%le=2C 1!a%le=2C1'
#defi!e =2CVeor _=2C_V1CTOR
#defi!e =2CClearINT#la$ &=21ClearI!t#la$
#defi!e Read=2C=tive?uffer Read=tive?uffer=2C1'
#defi!e Read=2CSta; Read=2C1'
#e!dif
#e!dif
J:
Anexa ;.
,L
L #ileE =2C*et@pO
L 2e*riptio!E T-e ode for t-e =2C
L,
#i!lude D=2C*et@pO-D
#i!lude DMardAareProfile N PIC"2MC4+'#)12L PIMO-D
#i!lude Spli%O-I
,LL
L T-e &et-od u*ed to o!fi$ure t-e =2C
L,
,LT*ee &ai!O for delaratio!L,
e(ter! volatile u!*i$!ed i!t -a!!el4, -a!!el/;
u!*i$!ed i!t -a!!el4&a*1, -a!!el4&a*2, -a!!el4&a*", -a!!el4&a*4;
u!*i$!ed i!t -a!!el/&a*1, -a!!el/&a*2, -a!!el/&a*", -a!!el/&a*4;
void *et@p=2C(){
Clo*e=2C();{ ,, e!*ure t-e =2C i* off %efore *etti!$ t-e
o!fi$uratio!
,, Ae u*e o!lF M@C =9 a!d =N1 a* e(ter!al $rou!d
SetC-a!!el=2C( =2C_CM'_N1:_S=MPL1=_=N1 );
Ope!Co!fi$=2C( P=R=M1, P=R=M2, P=R=M", P=R=M4, P=R=M) ); ,,
o!fi$ure =2C u*i!$ para&eter defi!e a%ove
Co!fi$ureINT=2C(INTCo!fi$=2C);
}1!a%le=2C(); ,, 1!a%le t-e =2C
}
,LL
L T-e i!terrupt -a!dler for =2C9 Ae u*e a level " for i!terrupt
L,
#if INTLevel=2C == =2C_INT_PRI_"
void __ISR(=2CVeor, ipl") =2CMa!dler(void){
=2CClearINT#la$();
u!*i$!ed i!t off*et = / * ((0Read=2C=tive?uffer() &
'('1)); ,, deter&i!e A-i- %uffer i* idle a!d reate a! off*et
,, :N2 Pri&a *o!da Sa! #1
Sa! #2 Sa! #" Sa! #4
,,#defi!e P=R=M4 1N=?L1_=N1_=N= | 1N=?L1_=N"_=N=|
1N=?L1_=N/_=N=| 1N=?L1_=N0_=N=| 1N=?L1_=N14_=N=| 1N=?L1_=N1)_=N=
-a!!el4&a*1= Read=2CSta;(off*et);
-a!!el/&a*1= Read=2CSta;(off*et% 1);
-a!!el4&a*2= Read=2CSta;(off*et% 2);
-a!!el/&a*2= Read=2CSta;(off*et% ");
-a!!el4&a*"= Read=2CSta;(off*et% 4);
-a!!el/&a*"= Read=2CSta;(off*et% ));
-a!!el4&a*4= Read=2CSta;(off*et% +);
-a!!el/&a*4= Read=2CSta;(off*et% .);
-a!!el4= (-a!!el4&a*1% -a!!el4&a*2% -a!!el4&a*"%
-a!!el4&a*4)"" 2;
-a!!el/= (-a!!el/&a*1% -a!!el/&a*2% -a!!el/&a*"%
-a!!el/&a*4)"" 2;
}
#e!dif
Anexa <.
,*
L #ileE P6MMotor*O-
J%
L =ut-orE ela!o
L 2e*riptio!E 1!u&erate t-e pu%li fu!tio!5 redefi!e* t-e u*ed
re$i*ter*
L Created o! Mar- +9 2'129 0E1" PM
L,
#i!lude DMardAareProfileO-D
#if!def P6MMotor*_M
#defi!e P6MMotor*_M
#defi!e P6M_de*ired_fre8 )''' ,, )<MB*
,LL
L It u*e* Ti&er " a* ti&e %a*e a!d Output o&pare 2X " a* P6MO
L Mere Ae do!Rt u*e i!terrupt*9 everFt-i!$ i* do!e i! -ardAare
L,
void *et@pP6M();
,LL
L = *&all fu!tio! u*ed to alulate t-e value Ait- Aill %e *ave
i! a re$i*ter9 %a*ed o! t-e value* of de*ired fre8ue!F9 t-e pre*aler9
a!d t-e perip-eral lo;
L -p#'#. de*ired#re8
L -p#'#. pre*aler
L -'et)'+
L,
u!*i$!ed i!t $etPR_#or_P6M(u!*i$!ed i!t de*ired#re8, u!*i$!ed i!t
pre*aler);
,LL
L @*ed to *et t-e diretio! of t-e &otor*
L 6ill *et t-e diretio! i! opo**ite9 %eau*e t-e &otor* are
&o!ted %a; to %a;
L -p#'#. diretio! ' or 1
L Tpre %efore t-e e!a%le *i$!al *-ould %e *topped3t-e P6M output4
L,
void *etMotor*2iretio!(?>T1 diretio!);
#defi!e Set2utFMotor1 Set2COC2P6M
#defi!e Set2utFMotor2 Set2COC"P6M
#if defi!ed3OutputCo&pare"4
#if defi!ed3OutputCo&pare"4
#defi!e Motor12iretio!Pi! +
#defi!e Motor22iretio!Pi! .
#defi!e Motor1SpeedP6MPi! 1
#defi!e Motor2SpeedP6MPi! 2
#defi!e Motor*2iretio!Port L=T2
#defi!e &PortMotor*2iretio!Set2i$italOut3(4
&PORT2SetPi!*2i$italOut3(4 ,, -ere i* t-e *a&e port for diretio! a!d
for *peed3P6M4
#defi!e &PortMotor*SpeedP6MSet2iretio!Out3(4
&PORT2SetPi!*2i$italOut3(4
#defi!e Motor*2iretio!Co!fi$Pi!*34
&PortMotor*2iretio!Set2i$italOut331SS Motor12iretio!Pi!4|31SS
Motor22iretio!Pi!44 ,, diretio! for &otor*
#defi!e MotorSpeedP6MCo!fi$Pi!*34
&PortMotor*SpeedP6MSet2iretio!Out331SS Motor1SpeedP6MPi!4| 31SS
Motor2SpeedP6MPi!44 ,, *peed of t-e &otor* ,,_R21| _R22 3P6M output4
#defi!e Ope!OCMotor1 Ope!OC2
#defi!e Motor1Co!fi$* OC_ON | OC_TIM1R_MO211+ |
J7
OC_TIM1R"_SRC | OC_P6M_#=@LT_PIN_2IS=?L1
#defi!e Ope!OCMotor2 Ope!OC"
#defi!e Motor2Co!fi$* OC_ON | OC_TIM1R_MO211+ |
OC_TIM1R"_SRC | OC_P6M_#=@LT_PIN_2IS=?L1
#e!dif
#e!dif

#if defi!ed3Ti&er"#orOutputCo&pare4
#defi!e Ope!Ti&er#orMotor* Ope!Ti&er"
#defi!e MotorCo!fi$* T"_ON | T"_SO@RC1_INT|
T"_PS_1_1
#e!dif
#e!dif
Anexa =.
,L
L #ileE P6MMotor*O
L 2e*riptio!E T-e ode for t-e P6M9 i! t-i* a*e o!lF t-e *et@p
fu!tio!
L,
#i!lude Spli%O-I
#i!lude DP6MMotor*O-D
#i!lude DMardAareProfileO-D
u!*i$!ed i!t P6M_PRRe$_#R17, dutF;
,L
L #ir*t Ae Aill *et up t-e pi!* t-e! t-e ti&er a!d t-e output o&pare
L,
void *et@pP6M(){
Motor*2iretio!Co!fi$Pi!*(); ,, diretio! for &otor*
MotorSpeedP6MCo!fi$Pi!*(); ,, *peed of t-e &otor* ,,_R21| _R22
3P6M output4
*etMotor*2iretio!(1);
P6M_PRRe$_#R17= $etPR_#or_P6M(P6M_de*ired_fre8, 1);
Ope!Ti&er#orMotor*(MotorCo!fi$*, P6M_PRRe$_#R17); ,, 1+%it SF*!
&ode9 pe!tru o freve!ta de
Ope!OCMotor1(Motor1Co!fi$*, ',');,,P6M &otor 1
Ope!OCMotor2(Motor2Co!fi$*, ',');,,P6M &otor 2
}
u!*i$!ed i!t $etPR_#or_P6M(u!*i$!ed i!t de*ired#re8, u!*i$!ed i!t
pre*aler){
'et)'+ :etPerip-eralClo;(),(pre*aler* de*ired#re8);
};
i!li!e __attri%ute__((alAaF*_i!li!e)) void *etMotor*2iretio!(?>T1
diretio!){
Motor*2iretio!Port&= '(####1 ((1// Motor12iretio!Pi!)|(1//
Motor22iretio!Pi!));
Motor*2iretio!Port|= ((diretio!& 1)// Motor12iretio!Pi!)| ((1//
Motor22iretio!Pi!)1((diretio!& 1)// Motor22iretio!Pi!));
}
Anexa 1>.
,L
L #ileE rt_1*eINTRO-
L =ut-orE ela!o
L 2e*riptio!E 1!u&erate t-e pu%li fu!tio!5 %eau*e it i* o!lF a
J8
RTCC9 Ae do!Rt redefi!e t-e re$i*ter*9 o!lF *o&e &aro*O
L Created o! Mar- 2+9 2'129 .E42 PM
L,
#i!lude DMardAareProfileO-D
#if!def rt_1*eINTR_M
#defi!e rt_1*eINTR_M
,LL
L 6ill *et t-e i!ter!al RTCC to a fre8ue!F of 1MB i!terrupt
$e!eratio!
L 6e do!Rt u*e date a!d ti&e %eau*e -ere it i* u*ele**
L 6e u*e i!ter!al i!terrupt
L,
void *et@pRTCC_1*eINT();
#ifdef RTCC1*e
#defi!e L12RTCCTe*t ?IT_11
#defi!e &SetLedRTCCOut2ir34
H&PORT?SetPi!*2i$italOut3L12RTCCTe*t45K
#defi!e &LedRTCCO!34 H&PORT?Set?it*3L12RTCCTe*t45K
#defi!e &LedRTCCOff34 H&PORT?Clear?it*3L12RTCCTe*t45K
#defi!e &LedRTCCTo$$le34 H&PORT?To$$le?it*3L12RTCCTe*t45K
#defi!e RTCC_I!trrupt2i*a%le34 HRt=lar&2i*a%le345K ,,
HINT1!a%le3INT_RTCC9 INT_2IS=?L1245K
#defi!e RTCC_I!terrupt1!a%le34 HRt=lar&1!a%le345K ,,
HINT1!a%le3INT_RTCC9 INT_1N=?L1245K ,, it i* all %F default i!
Set@pRt_1*eINTR
#e!dif
#e!dif
Anexa 11.
,L
L #ileE rt_1*eINTRO-
L 2e*riptio!E T-e ode for t-e RTCC9 for te*t it i* u*ed a! o!%oard
L12
L,
#i!lude Spli%O-I
#i!lude Drt_1*eINTRO-D
#i!lude D:e!eriTFpe2ef*O-D
#i!lude DMardAareProfileO-D
#i!lude D&ai!2efO-D
#i!lude DI!putCapO-D
e(ter! ?OOL rt_1*eINTR;
void *et@pRTCC_1*eINT(){
&SetLedRTCCOut2ir(); ,, o!lF to *ee o! a PIN
t-e fre8ue!F
&LedRTCCOff();
,,RtSetCali%ratio!3N1245 ,, if Ae !eed
ali%ratio!9 ould %e *et A-e! t-e RTCC i* tur!ed off
RtI!it(); ,, i!it t-e RTCC
while(Rt:etCl;Stat()!= RTCC_CL<_ON); ,, Aait for t-e SOSC to
JA
%e atuallF ru!!i!$ a!d RTCC to -ave it* lo; *oure
,, ould Aait -ere at
&o*t "2&*
,, *et ti&e a!d date 3!ot !ee*arF if Ae u*e o!lF to $e!erate 1
*eo!d i!terrupt4
,, RtOpe!3'(1.'4''''9 '('/1''+'49 '45,, ti&e i* MS%E -our9
&i!9 *e9 r*vdO date i* MS%E Fear9 &o!9 &daF9 AdaFO
,, plea*e !ote t-at t-e
r*vd field -a* to %e ' i! t-e ti&e field[
RtC-i&e1!a%le(); ,, rollover of t-e alar& A-e!
it i* dere&e!ted to '9 it \u&p* to '(##
RtSet=lar&RptCou!t(2))); ,, if Ae u*e D-i&eD Ae ould
u*e -ere a!F !u&%er a!d *tilAe Ail $et u!i!terrupted repeat*
RtSet=lar&Rpt(RTCC_RPT_S1C); ,, o!e alar& everF
*eo!d
,, *et t-e alar& 3!ot !ee*arF if Ae u*e o!lF to $e!erate 1
*eo!d i!terrupt4
,, RtSet=lar&Ti&e2ate3'(1.'4)'''9 '('/1''+'445
Rt=lar&1!a%le(); ,, e!a%le t-e alar&
INTSetVetorPrioritF(INT_RTCC_V1CTOR, RTCCLevel);
,, *et t-e RTCC prioritF i! t-e INT o!troller
INTSetVetorSu%PrioritF(INT_RTCC_V1CTOR,
INT_S@?_PRIORIT>_L1V1L_1); ,, *et t-e RTCC *u%NprioritF i! t-e
INT o!troller
INT1!a%le(INT_RTCC, INT_1N=?L12);
,, e!a%le t-e RTCC eve!t i!terrupt* i! t-e INT o!trollerO
&LedRTCCO!();
}
,LL
L I!terrupt -a!dler Ait- Seo!d re$i*ter *et
L,
#if RTCCLevel== INT_PRIORIT>_L1V1L_.
void __ISR(_RTCC_V1CTOR, ipl.SRS) RtI*r(void)
{
,, o!e Ae $et i! t-e RTCC ISR Ae -ave to lear t-e RTCC
i!t fla$
INTClear#la$(INT_RTCC);
,, Aill opF t-e value* fro& i!terrupt3li;e IC9 =2C4 to t-e
varia%le* A-it- Aill %e *e!d over @S?
,, Ae do!Rt verifF if t-e value* -a!$e*9 Ae o!lF a*ure
t-at Ae -ave a 1 *eo!d fre8
SetI!putCapture1(:et#re8Motor1());
SetI!putCapture2(:et#re8Motor2());
SetVolta$e?att(:etC-a!!el4?att());
SetVolta$eSu!t(:etC-a!!el/Su!t());
SetNr1ve!t*Motor1(:etNrI&pul*uri1());
SetNr1ve!t*Motor2(:etNrI&pul*uri2());
&LedRTCCTo$$le();
rt_1*eINTR= TR@1;
}
#e!dif
J9
Anexa 12.
,*
L #ileE &ai!2efO-
L =ut-orE ela!o
L 2e*riptio!E 1!u&erate t-e varia%le* u*ed %F *everal &odule*5
defi!e* *o&e &aro* u*ed %F *everal *oure file*5 defi!e* t-e o&&a!d
*iBe
L Created o! Mar- 119 2'129 1'E2" PM
L,
#if!def &ai!2ef_M
#defi!e &ai!2ef_M
#i!lude D=2C*et@pO-D
#i!lude DI!putCapO-D
#i!lude DP6MMotor*O-D
#i!lude D2=CO-D
#i!lude Drt_1*eINTRO-D
#i!lude DI!putCapO-D
,, Aill %e delared i! t-e &ai! file
e(ter! volatile u!*i$!ed i!t val1IC2;
e(ter! volatile u!*i$!ed i!t val1IC";
e(ter! volatile ?>T1 !rI&pul*uriIC2;
e(ter! volatile ?>T1 !rI&pul*uriIC";
e(ter! volatile ?>T1 !r1ve!t*1, !r1ve!t*2;
e(ter! volatile u!*i$!ed i!t i!putCapture1;
e(ter! volatile u!*i$!ed i!t i!putCapture2;
e(ter! volatile u!*i$!ed i!t volta$eSu!t;
e(ter! volatile u!*i$!ed i!t volta$e?att;
e(ter! volatile u!*i$!ed i!t -a!!el4;
e(ter! volatile u!*i$!ed i!t -a!!el/;
,,#defi!e 21?@:_MO21 1
#defi!e Co&&a!d_$etCo!fi$_=2C_SiBe " ,, A-itout t-e
o&&a!d I23!a&e49 o!lF t-e data
#defi!e Co&&a!d_$etCo!fi$_#u*e*_P6M_SiBe /
#defi!e Co&&a!d_$etCo!fi$_I!putCapture_SiBe "
#defi!e Co&&a!d_$etValue_Volta$e_SiBe 4
#defi!e Co&&a!d_$etValue_I!putCapture_SiBe +
#defi!e Co&&a!d_*etValue_P6M_SiBe 4
#defi!e Co&&a!d_*-ut2oA!_SiBe '
#defi!e COMM=N2_i!itialP6MCo!fi$_SiBe '
#defi!e COMM=N2_fi!i*-edP6MCo!fi$_SiBe '
#defi!e Co&&a!d_=pp_2i*o!!et_SiBe '
#defi!e Co&&a!d_=pp_Co!!et_SiBe '
#defi!e COMM=N2_$etCo!fi$_Motor*I2_SiBe 2
#defi!e COMM=N2_*et2iretio!Motor_SiBe 1
#defi!e M=C_COMM=N2_2=T=_SiBe / ,, A-itout t-e
o&&a!d I2 o!lF t-e data
#defi!e 2=C_1dot)V 1/0' ,, t-e value
Ait- *-ould %e put i! 2=C re$i*ter to -ave Vout= 1O)V at Vi!= "O2)V
typedef e!u& _MotorC-a!$e2iretio!State*{
I2L1= 1, ,,I2L1= C-a!$ed
NeedToC-a!$e= 2,
J;
C-a!$eNoA= ",
}MotorC-a!$e2iretio!State*;
,, *o&e $etter* for value* alulated i! i!terrupt*
#defi!e :et#re8Motor134 val1IC2
#defi!e :et#re8Motor234 val1IC"
#defi!e :etC-a!!el/Su!t34 -a!!el/
#defi!e :etC-a!!el4?att34 -a!!el4
#defi!e :etNrI&pul*uri134 !rI&pul*uriIC2
#defi!e :etNrI&pul*uri234 !rI&pul*uriIC"
,, *o&e *etter*9 for varia%le* A-it- Aill %e *e!d over @S?
#defi!e SetI!putCapture13value4 Hi!putCapture1= value5K
#defi!e SetI!putCapture23value4 Hi!putCapture2= value5K
#defi!e SetVolta$eSu!t3value4 Hvolta$eSu!t= value5K
#defi!e SetVolta$e?att3value4 Hvolta$e?att= value5K
#defi!e SetNr1ve!t*Motor13value4H!r1ve!t*1= value5 value= '5K ,,
read a!d after Ae &a;e a re*et
#defi!e SetNr1ve!t*Motor23value4H!r1ve!t*2= value5 value= '5K ,,
read a!d after Ae &a;e a re*et
,, *o&e $etter*9 u*ed to *e!d value* o! t-e @S?
#defi!e :etI!putCapture134 i!putCapture1
#defi!e :etI!putCapture234 i!putCapture2
#defi!e :etVolta$eSu!t34 volta$eSu!t
#defi!e :etVolta$e?att34 volta$e?att
#defi!e :etNr1ve!t*Motor134 !r1ve!t*1
#defi!e :etNr1ve!t*Motor234 !r1ve!t*2
,LL
L 6ill *e!d t-e o!fi$uratio! to =!droid9 u*i!$ t-e o&&a!d* of
t-e tFpeE COMM=N2_$etCo!fi$_((((
L Preo!ditio!E T-e @S? &u*t %e *et up %efore
L Po*to!ditio!E No!e9 it -ave !o *ide efet*
L,
void *e!dCo!fi$To=!droid();
#e!dif
Anexa 13.
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL
@S? =!droid =e**orF %a*i de&o Ait- ae**orF i! -o*t &ode
T-e ode for t-e appliatio!5
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL,
,, I!lude file*
#i!lude S*tdioO-I
#i!lude D@S?,u*%O-D
#i!lude D@S?,u*%_-o*t_a!droidO-D
#i!lude DCo&pilerO-D
JJ
#i!lude DMardAareProfileO-D
#i!lude D&ai!2efO-D
,, If a &a(i&u& urre!t rati!$ -a*!Rt %ee! defi!ed9 t-e! defi!e )''&=
%F default
#if!def M=C_=LLO612_C@RR1NT
#defi!e M=C_=LLO612_C@RR1NT 3)''4 ,, Ma(i&u&
poAer Ae a! *upplF i! &=
#e!dif
,, 2efi!e a de%u$ error pri!ti!$
#defi!e 21?@:_1RROR3a4 Nop345 Nop345 Nop345
,, Co!fi$uratio! %it* for t-e devieO Plea*e refer to t-e devie
data*-eet for ea- devie
,, to deter&i!e t-e orret o!fi$uratio! %it *etti!$*
#ifdef __C"'__
#if defi!ed3__PIC24#]2)+:?11'__4
_CON#I:2(#NOSC_PRIPLL & POSCMO2_MS & PLL_0+MMP_ON & PLL2IV_2IV2)
,, Pri&arF MS OSC Ait- PLL9 @S?PLL ,2
_CON#I:1(]T=:1N_O## & #62T1N_O## & ICS_P:(2) ,, ]T=: off9
Aat-do$ ti&er off
#elif defi!ed3__PIC24#]+4:?''4__4
_CON#I:1(62TPS_PS1 & #6PS=_PR"2 & 6IN2IS_O## & #62T1N_O## &
ICS_P:(1 & :6RP_O## & :CP_O## & ]T=:1N_O##)
_CON#I:2(POSCMO2_MS & I2C1S1L_PRI & IOL16=>_O## & OSCIO#NC_ON &
#C<SM_CS2CM2 & #NOSC_PRIPLL & PLL0+MMP_ON & PLL2IV_2IV2 & I1SO_ON)
_CON#I:"(6P#P_6P#P' & SOSCS1L_SOSC & 6@TS1L_L1: & 6P2IS_6P2IS &
6PC#:_6PC#:2IS & 6P1N2_6P1N2M1M)
_CON#I:4(2S62TPS_2S62TPS" & 2S62TOSC_LPRC & RTCOSC_SOSC &
2S?OR1N_O## & 2S62T1N_O##)
#elif defi!ed3__PIC24#]2)+:?1'+__4
_CON#I:1( ]T=:1N_O## & :CP_O## & :6RP_O## & CO1_O## &
#62T1N_O## & ICS_P:(2)
_CON#I:2( '(#.## & I1SO_O## & #C<SM_CS2CM2 & OSCIO#NC_O## &
POSCMO2_MS & #NOSC_PRIPLL & PLL2IV_2IV" & IOL16=>_ON)
#elif defi!ed3__PIC24#]2)+2=21'__4 || defi!ed3__PIC24#]2)+:?21'__4
_CON#I:1(#62T1N_O## & ICS_P:(2 & :6RP_O## & :CP_O## &
]T=:1N_O##)
_CON#I:2(POSCMO2_MS & IOL16=>_ON & OSCIO#NC_ON & #C<SM_CS2CM2 &
#NOSC_PRIPLL & PLL0+MMP_ON & PLL2IV_2IV2 & I1SO_O##)
#elif defi!ed3IOIO4
_CON#I:1(#62T1N_O## & ICS_P:(2 & :6RP_O## & :CP_O## &
]T=:1N_O##)
_CON#I:2(POSCMO2_NON1 & IOL16=>_ON & OSCIO#NC_ON & #C<SM_CS2CM2
& #NOSC_#RCPLL & PLL0+MMP_ON & PLL2IV_NO2IV & I1SO_O##)
#elif defi!ed3__d*PIC""1P)12M@/1'__4 || defi!ed3PIC241P)12:@/1'_PIM4
_#OSCS1L(#NOSC_#RC);
_#OSC(#C<SM_CS1CM2 & OSCIO#NC_O## & POSCM2_CT);
_#62T(#62T1N_O##);
#e!dif
#elif defi!ed3 __PIC"2MC__ 4
#pra$&a o!fi$ @PLL1N = ON ,, @S? PLL 1!a%led
#pra$&a o!fi$ #PLLM@L = M@L_1) ,, PLL Multiplier
#pra$&a o!fi$ @PLLI2IV = 2IV_2 ,, @S? PLL I!put 2ivider
#pra$&a o!fi$ #PLLI2IV = 2IV_2 ,, PLL I!put 2ivider
#pra$&a o!fi$ #PLLO2IV = 2IV_1 ,, PLL Output 2ivider
J@
#pra$&a o!fi$ #P?2IV = 2IV_1 ,, Perip-eral Clo; divi*or
#pra$&a o!fi$ #62T1N = O## ,, 6at-do$ Ti&er
#pra$&a o!fi$ 62TPS = PS1 ,, 6at-do$ Ti&er Po*t*ale
,,#pra$&a o!fi$ #C<SM = CS2CM2 ,, Clo; SAit-i!$ X
#ail Safe Clo; Mo!itor
#pra$&a o!fi$ OSCIO#NC = O## ,, CL<O 1!a%le
#pra$&a o!fi$ POSCMO2 = 1C ,LL =N2ROI2E 61 u*e
2i*era Dlo;DL,
#pra$&a o!fi$ I1SO = O## ,, I!ter!al,1(ter!al
SAit-Nover
#pra$&a o!fi$ #SOSC1N = ON ,LL =N2ROI2E Seo!darF
O*illator 1!a%le for RTCC L,
#pra$&a o!fi$ #NOSC = PRIPLL ,, O*illator Seletio!
#pra$&a o!fi$ CP = O## ,, Code Protet
#pra$&a o!fi$ ?6P = O## ,, ?oot #la*- 6rite Protet
#pra$&a o!fi$ P6P = O## ,, Pro$ra& #la*- 6rite
Protet
#pra$&a o!fi$ IC1S1L = ICS_P:(2 ,, IC1,IC2 Co&& C-a!!el
Selet
#pra$&a o!fi$ 21?@: = ON ,, ?a;$rou!d 2e%u$$er
1!a%le
#el*e
#error Ca!!ot defi!e o!fi$uratio! %it*O
#e!dif
,, C"' a!d C"2 1(eptio! Ma!dler*
,, If Four ode $et* -ere9 Fou eit-er tried to read or Arite
,, a N@LL poi!ter9 or Four appliatio! overfloAed t-e *ta;
,, %F -avi!$ too &a!F loal varia%le* or para&eter* delaredO
#if defi!ed3__C"'__4
void _ISR __attri%ute__((__!o_auto_p*v__)) _=ddre**1rror(void)
{
21?@:_1RROR(D=ddre** errorD);
while(1){}
}
void _ISR __attri%ute__((__!o_auto_p*v__)) _Sta;1rror(void)
{
21?@:_1RROR(DSta; errorD);
while(1){}
}
#elif defi!ed3__C"2__4
void _$e!eral_e(eptio!_-a!dler(u!*i$!ed au*e, u!*i$!ed *tatu*)
{
u!*i$!ed lo!$ addre** = _CP'_:1T_1PC();
21?@:_1RROR(De(eptio!D);
while(1){}
}
#e!dif
,,2efi!itio!* of t-e variou* appliatio! o&&!a!d* t-at a! %e *e!t
typedef e!u& _=CC1SSOR>_21MO_COMM=N2S
{
COMM=N2_$etCo!fi$_=2C = '('1,
COMM=N2_$etCo!fi$_#u*e*_P6M = '('2,
J<
COMM=N2_$etCo!fi$_I!putCapture = '('",
COMM=N2_$etValue_I!putCapture = '('4,
COMM=N2_$etValue_Volta$e = '('),
COMM=N2_*etValue_P6M = '('+,
COMM=N2_*-ut2oA! = '('.,
COMM=N2_i!itialP6MCo!fi$ = '('/, ,, u*ed to alulate
t-e loAer li&it for P6M at t-e de*ired fre8
COMM=N2_fi!i*-edP6MCo!fi$ = '('0,
COMM=N2_$etCo!fi$_Motor*I2 = '('=,
COMM=N2_*et2iretio!Motor = '('?,
COMM=N2_=PP_CONN1CT = '(#1,
COMM=N2_=PP_2ISCONN1CT = '(##
} =CC1SSOR>_21MO_COMM=N2S;
,,Creatio! of t-e data pa;et t-at i* $oi!$ to %e *e!tO I! t-i* e(a&ple
,, t-ere i* \u*t a o&&a!d ode a!d a o!e %Fte dataO
typedef *trut __attri%ute__((pa;ed))
{
?>T1 o&&a!d;
?>T1 data[M=C_COMM=N2_2=T=_SiBe];
}=CC1SSOR>_=PP_P=C<1T;
,,Loal prototFpe*
#if defi!ed3__C"2__4
*tati void I!itPIC"2(void);
#e!dif
,,loal varia%le*
*tati ?>T1 read_%uffer[+4];
*tati ?>T1 Arite_%uffer[+4];
*tati ?>T1 adre*a6rite= '; ,, poi!ter to t-e !e(t loatio! A-ere Aill
%e put t-e o&&a!d
*tati =CC1SSOR>_=PP_P=C<1T out$oi!$_pa;et;
*tati void* devie_-a!dle = 2344;
*tati ?OOL devie_atta-ed = #=LS1;
*tati -ar &a!ufaturer[] = DMiro-ip Te-!olo$F I!OD;
*tati -ar &odel[] = D?a*i =e**orF 2e&oD;
*tati -ar de*riptio![] = 21MO_?O=R2_N=M1_STRIN:;
*tati -ar ver*io![] = D2O'D;
*tati -ar uri[] = D-ttpE,,AAAO&iro-ipOo&,a!droidD;
*tati -ar *erial[] = DN,=D;
volatile u!*i$!ed i!t -a!!el4, -a!!el/;
volatile u!*i$!ed i!t val1IC2, val1IC";
volatile u!*i$!ed i!t i!putCapture1= '(####, i!putCapture2= '(####;
volatile u!*i$!ed i!t volta$eSu!t= '(##, volta$e?att= '(##;
volatile ?>T1 !rI&pul*uriIC2= ';
volatile ?>T1 !rI&pul*uriIC"= ';
volatile ?>T1 !r1ve!t*1=', !r1ve!t*2= ';
?OOL rt_1*eINTR= #=LS1;
?OOL o!fi$*Se!dO<= #=LS1; ,, if Ae ould *e!d t-e o!fi$* *etti!$9
Aill %e re*et A-e! t-e devie i* di*o!!eted
?OOL i!itialP6Mo!fi$= #=LS1; ,, if it i* true Aill i$!ore t-e 1 *eo!d
rate tra!*&it9 a!d Aill tra!*&it A-e! it -ave t-e data
MotorC-a!$e2iretio!State* !eedToC-a!$eMotor2iretio!= I2L1;
?>T1 de*ired2iretio!#orMotor*;
=N2ROI2_=CC1SSOR>_IN#ORM=TION &F2evieI!fo =
{
@:
&a!ufaturer,
sizeof(&a!ufaturer),
&odel,
sizeof(&odel),
de*riptio!,
sizeof(de*riptio!),
ver*io!,
sizeof(ver*io!),
uri,
sizeof(uri),
*erial,
sizeof(*erial)
};
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
#u!tio!E
i!t &ai!3void4
Su&&arFE
&ai! fu!tio!
2e*riptio!E
&ai! fu!tio!
Preo!ditio!E
No!e
Para&eter*E
No!e
Retur! Value*E
i!t N e(it ode for &ai! fu!tio!
Re&ar;*E
No!e
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLL,
i!t &ai!(void)
{
26OR2 *iBe = ';
?>T1 o&&a!dSiBe = '(''; ,, %eau*e our o&&a!d* -ave differe!t
*iBe*
?OOL readFToRead = TR@1;
?OOL AriteI!Pro$re** = #=LS1;
?>T1 errorCode;
?>T1 relative=ddre**I!Co&&a!dPa;et= ';
=CC1SSOR>_=PP_P=C<1T* o&&a!d_pa;et = 2344;
?OOL o!!eted_to_app = #=LS1;
?OOL !eed_to_di*o!!et_fro&_app = #=LS1;
#if defi!ed3__PIC"2MC__4
I!itPIC"2();
#e!dif
@%
#if defi!ed3__d*PIC""1P)12M@/1'__4 || defi!ed 3__PIC241P)12:@/1'__4
,, Co!fi$ure t-e devie PLL to o%tai! +' MIPS operatio!O T-e rF*tal
,, fre8ue!F i* /MMBO 2ivide /MMB %F 29 &ultiplF %F +' a!d divide %F
,, 2O T-i* re*ult* i! #o* of 12'MMBO T-e CP@ lo; fre8ue!F i*
,, #F = #o*,2 = +'MMBO 6ait for t-e Pri&arF PLL to lo; a!d t-e!
,, o!fi$ure t-e au(illiarF PLL to provide 4/MMB !eeded for @S?
,, Operatio!O
PLL#?2 = "/; ,L M = +' L,
CL<2IV%it*.PLLPOST = '; ,L N1 = 2 L,
CL<2IV%it*.PLLPR1 = '; ,L N2 = 2 L,
OSCT@N = ';
,L I!itiate Clo; SAit- to Pri&arF
L O*illator Ait- PLL 3NOSC= '("4L,
__%uilti!_Arite_OSCCONM('('");
__%uilti!_Arite_OSCCONL('('1);
while (OSCCON%it*.COSC != '(");
,, Co!fi$uri!$ t-e au(iliarF PLL9 *i!e t-e pri&arF
,, o*illator provide* t-e *oure lo; to t-e au(iliarF
,, PLL9 t-e au(iliarF o*illator i* di*a%ledO Note t-at
,, t-e =@C PLL i* e!a%ledO T-e i!put /MMB lo; i* divided
,, %F 29 &ultiplied %F 24 a!d t-e! divided %F 2O 6ait till
,, t-e =@C PLL lo;*O
=CL<CON" = '(24C1;
=CL<2IV" = '(.;
=CL<CON"%it*.1N=PLL = 1;
while(=CL<CON"%it*.=PLLC< != 1);
TRIS?%it*.TRIS?) = ';
L=T?%it*.L=T?) = 1;
#e!dif
,, i!itialiBatio!
*et@pI!putCap();
,,*et@p2=C32=C_1dot)V45 ,, *-ould %e all o!lF o!e %eau*e it
Arite* t-e value i! 11PROM A-it- i*!Rt affeted %F a re*et
*et@pP6M();
*et@p=2C();
*et@pRTCC_1*eINT();
INT1!a%leSF*te&MultiVetoredI!t();
INT1!a%leI!terrupt*();
@S?I!itialiBe(');
=!droid=ppStart(&&F2evieI!fo);
while(1)
{
,,<eep t-e @S? *ta; ru!!i!$
@S?Ta*;*();
@7
,,If t-e devie i*!Rt atta-ed Fet9
if(devie_atta-ed == #=LS1)
{
!eed_to_di*o!!et_fro&_app = #=LS1;
o!!eted_to_app = #=LS1;
*iBe = ';
,,Co!ti!ue to t-e top of t-e A-ile loop to *tart t-e -e;
over a$ai!O
o+ti+)e;
}
,,If t-e ae**orF i* readF9 t-e! t-i* i* A-ere Ae ru! all of
t-e de&o ode
if(readFToRead == TR@1)
{
errorCode = =!droid=ppRead(devie_-a!dle,
(?>T1*)&read_%uffer, (26OR2)sizeof(read_%uffer));
,,If t-e devie i* atta-ed9 t-e! let* Aait for a o&&a!d
fro& t-e appliatio!
if( errorCode != @S?_S@CC1SS)
{
,,1rror
21?@:_1RROR(D1rror trFi!$ to *tart readD);
}
else
{
readFToRead = #=LS1;
}
}
*iBe = ';
relative=ddre**I!Co&&a!dPa;et= ';
if(=!droid=ppI*ReadCo&plete(devie_-a!dle, &errorCode, &*iBe) ==
TR@1)
{
,,6eRve reeived a o&&a!d over t-e @S? fro& t-e =!droid
devieO
if(errorCode == @S?_S@CC1SS)
{
,,MaF%e proe** t-e data -ereO MaF%e proe** it
*o&eA-ere el*eO
o&&a!d_pa;et = (=CC1SSOR>_=PP_P=C<1T*)&read_%uffer['];
,,readFToRead= TR@15 Aill %e *et after t-e &e**a$e it
i* %ea! di$e*t9 t-e *iBe i* Bero
}
else
{
,,1rror
21?@:_1RROR(D1rror trFi!$ to o&plete read re8ue*tD);
}
}
while(*iBe " ')
{
if(o!!eted_to_app == #=LS1)
@8
{
if(o&&a!d_pa;et!"o&&a!d == COMM=N2_=PP_CONN1CT)
{
o!!eted_to_app = TR@1;
!eed_to_di*o!!et_fro&_app = #=LS1;
o&&a!dSiBe= Co&&a!d_=pp_Co!!et_SiBe% 1;
,,*iBeN= Co&&a!d_=pp_Co!!et_SiBeZ 15,, realulate
t-e *iBe9 u*i!$ t-e relative *iBe of t-e o&&a!d
,,relative=ddre**I!Co&&a!dPa;etZ=
Co&&a!d_=pp_Co!!et_SiBeZ 15
}
}
else
{
if(o!fi$*Se!dO<== TR@1)
swith(o&&a!d_pa;et!"o&&a!d)
{
#se COMM=N2_*etValue_P6M$
if(sizeof(o&&a!d_pa;et!" data)"=
Co&&a!d_*etValue_P6M_SiBe){ ,, ould %e &ore t-a! o!e
o&&a!d
Set2utFMotor1((o&&a!d_pa;et!"
data[']// /)| o&&a!d_pa;et!" data[1]); ,, Ae &a;e a 1+ %it fro& tAo /
%it
Set2utFMotor2((o&&a!d_pa;et!"
data[2]// /)| o&&a!d_pa;et!" data["]);
o&&a!dSiBe= Co&&a!d_*etValue_P6M_SiBe%
1;
if(i!itialP6Mo!fi$== TR@1){
rt_1*eINTR= TR@1; ,, Aill fore
to tra!*&it t-e data fa*ter
SetI!putCapture1(:et#re8Motor1());
SetI!putCapture2(:et#re8Motor2());
SetVolta$e?att(:etC-a!!el4?att());
SetVolta$eSu!t(:etC-a!!el/Su!t());
}
,,*iBeN= Co&&a!d_*etValue_P6M_SiBeZ 15
,,relative=ddre**I!Co&&a!dPa;etZ=
Co&&a!d_*etValue_P6M_SiBeZ 15
}
&'e#(;
#se COMM=N2_i!itialP6MCo!fi$$
if(sizeof(o&&a!d_pa;et!" data)"=
COMM=N2_i!itialP6MCo!fi$_SiBe){ ,, ould %e &ore t-a! o!e
o&&a!d
o&&a!dSiBe=
COMM=N2_i!itialP6MCo!fi$_SiBe% 1;
i!itialP6Mo!fi$= TR@1;
RTCC_I!trrupt2i*a%le(); ,, Ae Aill
$e!erate &a!ual t-e *a&pli!$ rate
*et@p2=C(2=C_1dot)V); ,, -ere it i* a
$ood plae to i!itialiBe al*o t-e 2=C to %e *ure it i* o; t-e volta$e
refere!e
}
&'e#(;
#se COMM=N2_fi!i*-edP6MCo!fi$$
@A
if(sizeof(o&&a!d_pa;et!" data)"=
COMM=N2_fi!i*-edP6MCo!fi$_SiBe){ ,, ould %e &ore t-a!
o!e o&&a!d
o&&a!dSiBe=
COMM=N2_fi!i*-edP6MCo!fi$_SiBe% 1;
i!itialP6Mo!fi$= #=LS1; ,, Ae are
fi!i*-ed Ait- t-e D%ur*tD &ode
RTCC_I!terrupt1!a%le(); ,, t-e
*a&pli!$ rate Aill %e $e!erate i! auto &ode at 1MB
}
&'e#(;
#se COMM=N2_*et2iretio!Motor$
if(sizeof(o&&a!d_pa;et!" data)"=
COMM=N2_*et2iretio!Motor_SiBe){ ,, ould %e &ore t-a!
o!e o&&a!d
o&&a!dSiBe=
COMM=N2_*et2iretio!Motor_SiBe% 1;
Set2utFMotor1('); ,, %efore Ae *top t-e
P6M*9 a!d t-e!9 after a *eo!d Ae -a!$e t-e *i$!
Set2utFMotor2(');
de*ired2iretio!#orMotor*=
o&&a!d_pa;et!"data['];
!eedToC-a!$eMotor2iretio!=
NeedToC-a!$e;
}
&'e#(;
#se COMM=N2_*-ut2oA!$
if(sizeof(o&&a!d_pa;et!" data)"=
Co&&a!d_*-ut2oA!_SiBe){
,LL
L =N2ROI2E
L T-e ode to *-ut doA! t-e *F*te&
L #or !oA Ae Aill *-ut doA! %ot- &otor*
L,
Set2utFMotor1(');
Set2utFMotor2(');
o&&a!dSiBe= Co&&a!d_*-ut2oA!_SiBe% 1;
,,*iBeN= Co&&a!d_*-ut2oA!_SiBeZ 15
,,relative=ddre**I!Co&&a!dPa;etZ=
Co&&a!d_*-ut2oA!_SiBeZ 15
}
&'e#(;
#se COMM=N2_=PP_2ISCONN1CT$
if(sizeof(o&&a!d_pa;et!" data)"=
Co&&a!d_=pp_2i*o!!et_SiBe){
!eed_to_di*o!!et_fro&_app = TR@1;
o&&a!dSiBe=
Co&&a!d_=pp_2i*o!!et_SiBe% 1;
,,*iBeN= Co&&a!d_=pp_2i*o!!et_SiBeZ 15
,,relative=ddre**I!Co&&a!dPa;etZ=
Co&&a!d_=pp_2i*o!!et_SiBeZ 15
}
&'e#(;
def#)lt$
,,1rror9 u!;!oA! o&&a!d
@9
21?@:_1RROR(D1rrorE u!;!oA! o&&a!d
reeivedD);
&'e#(;
}
}
,, =!d &ove t-e poi!ter to t-e !e(t pa;et 3t-i* Aor;*
%eau*e
,, all o&&a!d pa;et* are 2 %Fte*O If varia%le pa;et
*iBe
,, t-e! !eed to -a!dle &ovi!$ t-e poi!ter %F t-e *iBe of
t-e
,, o&&a!d tFpe t-at arrivedO
*iBe!= o&&a!dSiBe;
relative=ddre**I!Co&&a!dPa;et%= o&&a!dSiBe;
if(*iBe!= ')
&e&pF(o&&a!d_pa;et,
&read_%uffer[relative=ddre**I!Co&&a!dPa;et], *iBe);
if(!eed_to_di*o!!et_fro&_app == TR@1)
{
&'e#(;
}
}
if(*iBe == ')
{
readFToRead = TR@1;
}
if(o!!eted_to_app == #=LS1)
{
,,If t-e app -a*!Rt told u* to *tart *e!di!$ data9 letR*
!ot do a!Ft-i!$ el*eO
o+ti+)e;
}
,, 61 TR> TO S1N2 TM1 CON#I:S
,, =t fir*t ru! Ae &ove i! t-e %uffer t-e o!fi$*3a loal o!e45
-ere Aill %e put t-e loal %uffer o!tai! i! t-e output %uffer
,, =t *eo!d ru! Ae Aill verifF if -ave %ee! *e!d Ait- *ue*
t-e i!fo*9 a!d if *o Ae Aill *et a fla$
,, ?eau*e t-e fla$ eill %e *et o!lF at t-e *eo!d pa**9 t-e
pro$ra& ou!ter Ao!Rt $o furt-er9 %eau*e of t-e o!ti!ue *tate&e!t
adre*a6rite= ';
if(o!fi$*Se!dO<== #=LS1){
,, If t-ere i* a Arite alreadF i! pro$re**9 Ae !eed to
-e; it* *tatu*
if( AriteI!Pro$re** == TR@1 )
{
if(=!droid=ppI*6riteCo&plete(devie_-a!dle, &errorCode,
&*iBe) == TR@1)
{
AriteI!Pro$re** = #=LS1;
if(errorCode != @S?_S@CC1SS)
{
,,1rror
21?@:_1RROR(D1rror trFi!$ to o&plete AriteD);
}else
@;
o!fi$*Se!dO<= TR@1;
}
}else{
*e!dCo!fi$To=!droid(); ,, Ae Aill prepare t-e output
%uffer A-ir all t-e o!fi$*
AriteI!Pro$re**= TR@1;
errorCode = =!droid=pp6rite(devie_-a!dle, Arite_%uffer,
adre*a6rite);
if( errorCode != @S?_S@CC1SS )
{
21?@:_1RROR(D1rror trFi!$ to *e!d %utto! updateD);
}
}
}
if(o!fi$*Se!dO<== #=LS1)
o+ti+)e;
,, if Ae are -ere after all t-e o!ti!ue *tate&a!t &aF%e Ae
-ave *&t- to *e!d9 Ae Aill u*e a loal %uffer
,, If t-ere i* a Arite alreadF i! pro$re**9 Ae !eed to -e;
it* *tatu*
if( AriteI!Pro$re** == TR@1 )
{
if(=!droid=ppI*6riteCo&plete(devie_-a!dle, &errorCode,
&*iBe) == TR@1)
{
AriteI!Pro$re** = #=LS1;
if(!eed_to_di*o!!et_fro&_app == TR@1)
{
o!!eted_to_app = #=LS1;
!eed_to_di*o!!et_fro&_app = #=LS1;
}
if(errorCode != @S?_S@CC1SS)
{
,,1rror
21?@:_1RROR(D1rror trFi!$ to o&plete AriteD);
}
}
}
if((!eed_to_di*o!!et_fro&_app == TR@1) && (AriteI!Pro$re** ==
#=LS1))
{
out$oi!$_pa;et.o&&a!d = COMM=N2_=PP_2ISCONN1CT;
,,out$oi!$_pa;etOdata = '5
AriteI!Pro$re** = TR@1;
errorCode = =!droid=pp6rite(devie_-a!dle,
(?>T1*)&out$oi!$_pa;et, Co&&a!d_=pp_2i*o!!et_SiBe% 1);
if( errorCode != @S?_S@CC1SS )
{
21?@:_1RROR(D1rror trFi!$ to *e!d %utto! updateD);
}
}else
,, it i*!Rt t-e ti&e to *e!d *&t-9 Ae Aill Aait a little
@J
&ore
if(rt_1*eINTR== #=LS1)
o+ti+)e;
if(!eedToC-a!$eMotor2iretio!== C-a!$eNoA){
*etMotor*2iretio!(de*ired2iretio!#orMotor*);
!eedToC-a!$eMotor2iretio!= I2L1; ,, do !ot -a!$e t-e
order of t-e tAo if*
}
if(!eedToC-a!$eMotor2iretio!== NeedToC-a!$e){
!eedToC-a!$eMotor2iretio!= C-a!$eNoA; ,, Ae Aill Aait
&i!i&u& 1 *e
}
,, If Ae !eed up update t-e i!putCapture o! t-e =!droid devie
a!d Ae are!Rt
,, alreadF %u*F i! a Arite9 t-e! Ae a! *e!d t-e !eA %utto!
dataO
,, if33i!putCapNeed@pdate == TR@14XX 3AriteI!Pro$re**== #=LS144
if(AriteI!Pro$re** == #=LS1)
{
out$oi!$_pa;et.o&&a!d = COMM=N2_$etValue_I!putCapture;
out$oi!$_pa;et.data[']= :etI!putCapture1() "" /;
,, Ae *e!d t-e fir*t value9 folloAed %F t-e *eo!d o!e
out$oi!$_pa;et.data[1]= :etI!putCapture1() & '(''##;
out$oi!$_pa;et.data[2]= :etI!putCapture2() "" /;
out$oi!$_pa;et.data["]= :etI!putCapture2() & '(''##;
out$oi!$_pa;et.data[4]= :etNr1ve!t*Motor1()& '(''##;
out$oi!$_pa;et.data[)]= :etNr1ve!t*Motor2()& '(''##;
&e&pF(&Arite_%uffer[adre*a6rite], (?>T1*)&out$oi!$_pa;et,
Co&&a!d_$etValue_I!putCapture_SiBe% 1);
adre*a6rite%= Co&&a!d_$etValue_I!putCapture_SiBe% 1;
,, AriteI!Pro$re** = TR@15
}
,,If Ae !eed up update t-e pot *tatu* o! t-e =!droid devie a!d
Ae are!Rt
,, alreadF %u*F i! a Arite9 t-e! Ae a! *e!d t-e !eA pot dataO
if(AriteI!Pro$re** == #=LS1)
{
out$oi!$_pa;et.o&&a!d = COMM=N2_$etValue_Volta$e;
out$oi!$_pa;et.data[']= :etVolta$eSu!t() "" /;
out$oi!$_pa;et.data[1]= :etVolta$eSu!t() & '(''##;
out$oi!$_pa;et.data[2]= :etVolta$e?att() "" /;
out$oi!$_pa;et.data["]= :etVolta$e?att() & '(''##;
&e&pF(&Arite_%uffer[adre*a6rite], (?>T1*)&out$oi!$_pa;et,
Co&&a!d_$etValue_Volta$e_SiBe% 1);
adre*a6rite%= Co&&a!d_$etValue_Volta$e_SiBe% 1;
,, AriteI!Pro$re** = TR@15
}
,, at t-e e!d Ae trF to Arite *&t-9 ould %e lo;ed %F t-e !eed
of deo!et fro& t-e app
if(AriteI!Pro$re**== #=LS1){
rt_1*eINTR= #=LS1; ,, Aill %e *et %F t-e RTCC
@@
AriteI!Pro$re**= TR@1;
errorCode = =!droid=pp6rite(devie_-a!dle, Arite_%uffer,
adre*a6rite);
if( errorCode != @S?_S@CC1SS )
{
21?@:_1RROR(D1rror trFi!$ to *e!d pot updateD);
}
}
} ,,A-ile314 &ai! loop
}
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
#u!tio!E
?OOL @S?_=ppliatio!2ata1ve!tMa!dler3 ?>T1 addre**9 @S?_1V1NT
eve!t9 void Ldata9 26OR2 *iBe 4
Su&&arFE
Ma!dle* @S? data appliatio! eve!t*
2e*riptio!E
Ma!dle* @S? data appliatio! eve!t*
Preo!ditio!E
No!e
Para&eter*E
?>T1 addre** N addre** of t-e devie au*i!$ t-e eve!t
@S?_1V1NT eve!t N t-e eve!t t-at -a* ourred
voidL data N data a**oiated Ait- t-e eve!t
26OR2 *iBe N t-e *iBe of t-e data i! t-e data field
Retur! Value*E
?OOL N Retur! TR@1 of t-e eve!t Aa* proe**edO Retur! #=LS1 if t-e
eve!t
Aa*!Rt -a!dledO
Re&ar;*E
No!e
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLL,
?OOL @S?_=ppliatio!2ata1ve!tMa!dler( ?>T1 addre**, @S?_1V1NT eve!t,
void *data, 26OR2 *iBe )
{
'et)'+ #=LS1;
}
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
#u!tio!E
?OOL @S?_=ppliatio!1ve!tMa!dler3 ?>T1 addre**9 @S?_1V1NT eve!t9
void Ldata9 26OR2 *iBe 4
Su&&arFE
@<
Ma!dle* @S? appliatio! eve!t*
2e*riptio!E
Ma!dle* @S? appliatio! eve!t*
Preo!ditio!E
No!e
Para&eter*E
?>T1 addre** N addre** of t-e devie au*i!$ t-e eve!t
@S?_1V1NT eve!t N t-e eve!t t-at -a* ourred
voidL data N data a**oiated Ait- t-e eve!t
26OR2 *iBe N t-e *iBe of t-e data i! t-e data field
Retur! Value*E
?OOL N Retur! TR@1 of t-e eve!t Aa* proe**edO Retur! #=LS1 if t-e
eve!t
Aa*!Rt -a!dledO
Re&ar;*E
No!e
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLL,
?OOL @S?_=ppliatio!1ve!tMa!dler( ?>T1 addre**, @S?_1V1NT eve!t, void
*data, 26OR2 *iBe )
{
swith( eve!t )
{
#se 1V1NT_V?@S_R17@1ST_PO61R$
,, T-e data poi!ter poi!t* to a %Fte t-at repre*e!t* t-e
a&ou!t of poAer
,, re8ue*ted i! &=9 divided %F tAoO If t-e devie Aa!t*
too &u- poAer9
,, Ae re\et itO
if (((@S?_V?@S_PO61R_1V1NT_2=T=*)data)!"urre!t /=
(M=C_=LLO612_C@RR1NT , 2))
{
'et)'+ TR@1;
}
else
{
21?@:_1RROR( DWrW!LLLLL @S? 1rror N devie re8uire* too
&u- urre!t LLLLLWrW!D );
}
&'e#(;
#se 1V1NT_V?@S_R1L1=S1_PO61R$
#se 1V1NT_M@?_=TT=CM$
#se 1V1NT_@NS@PPORT12_21VIC1$
#se 1V1NT_C=NNOT_1N@M1R=T1$
#se 1V1NT_CLI1NT_INIT_1RROR$
#se 1V1NT_O@T_O#_M1MOR>$
#se 1V1NT_@NSP1CI#I12_1RROR$ ,, T-i* *-ould !ever %e
$e!eratedO
#se 1V1NT_21T=CM$ ,, @S? a%le -a* %ee!
deta-ed 3dataE ?>T19 addre** of devie4
#se 1V1NT_=N2ROI2_21T=CM$
<:
devie_atta-ed = #=LS1;
o!fi$*Se!dO<= #=LS1; ,, if a!ot-er
devie Aill %e o!!eted
'et)'+ TR@1;
&'e#(;
,, =!droid Speifi eve!t*
#se 1V1NT_=N2ROI2_=TT=CM$
devie_atta-ed = TR@1;
devie_-a!dle = data;
'et)'+ TR@1;
def#)lt $
&'e#(;
}
'et)'+ #=LS1;
}
,
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL
#u!tio!E
void I!itPIC"23void4
Su&&arFE
I!itialiBe t-e PIC"2 ore to t-e orret &ode* a!d lo; *peed*
=l*o e!a%le* &ulti vetor i!terrupt
2e*riptio!E
I!itialiBe t-e PIC"2 ore to t-e orret &ode* a!d lo; *peed*
Preo!ditio!E
O!lF ru!* o! PIC"2
Para&eter*E
No!e
Retur! Value*E
No!e
Re&ar;*E
No!e
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLL,
#if defi!ed3__PIC"2MC__4
*tati void I!itPIC"2(void)
{
i!t value;
#if defi!ed3R@N_=T_+'MMP4
,, @*e OSCCON default
#el*e
OSCCONCLR = '("/''''''; ,,PLLO2IV
#if defi!ed3R@N_=T_4/MMP4
OSCCONS1T = '('/''''''; ,,PLLO2IV ,2
#elif defi!ed3R@N_=T_24MMP4
<%
OSCCONS1T = '(1'''''''; ,,PLLO2IV ,4
#el*e
#error Ca!!ot *et OSCCON
#e!dif
#e!dif
value = S>ST1MCo!fi$6aitState*=!dP?( :etSF*te&Clo;() );
,, 1!a%le t-e a-e for t-e %e*t perfor&a!e
C-e<*e$'Ca-eO!();
,, INT1!a%leSF*te&MultiVetoredI!t345
,, Aill %e *et later
,L=N2ROI2E 6e let ]T=: e!a%le for de%u$$i!$
L
L,
,,22PCON%it*O]T=:1N = '5
value = OSCCON;
while (!(value & '(''''''2'))
{
value = OSCCON; ,, 6ait for PLL lo; to *ta%iliBe
}
,, INT1!a%leI!terrupt*345
,, Aill %e *et later
}
#e!dif
,LL
L 6ill *e!d t-e o!fi$uratio! to =!droid9 u*i!$ t-e o&&a!d* of t-e
tFpeE COMM=N2_$etCo!fi$_((((
L Preo!ditio!E T-e @S? &u*t %e *et up %efore
L Po*to!ditio!E No!e9 it -ave !o *ide efet*
L Retur!E 6ill retur! true if all t-e o!fi$* Aere *e!d Ait- *ue*9
a!d fal*e if !ot
L,
void *e!dCo!fi$To=!droid(){
?>T1 *iBe6-itoutI2C&d;
?>T1 i!de(= '; ,, folo*it pe!tru parur$erea ta%loului de o!fi$*
?>T1 !rOfTrF= 1; ,, *e va i!era de 1 ori *a *e tri&ita
o!fi$urarile
?OOL all#la$*= #=LS1; ,, Aill %e a! =N2 of t-e fla$*O;Tra!*&itUV
?>T1 o!fi$*[4][M=C_COMM=N2_2=T=_SiBe% 2]={ ,,SiBeZ 1 for t-e I2
a!d a!ot-er o!e for t-e *iBe
{COMM=N2_$etCo!fi$_=2C, Co&&a!d_$etCo!fi$_=2C_SiBe,
1', (1// ))| (()"" /)& '(1#), ), ', ', ', ', '}, ,, I29 di&
data9 =2C*iBe9 Vref i!tre$ X Vref fratio!al parte do&i!a!ta9 Vref
fratio!al
{COMM=N2_$etCo!fi$_#u*e*_P6M, Co&&a!d_$etCo!fi$_#u*e*_P6M_SiBe,
/', 1), 2, 1, 1, 1+, P6M_de*ired_fre8,1'', 1}, ,, I29 di&
data9 #re8 a ri*talului de pe plaaL 1''<MB9 #PLLM@L9 #PLL2IV9
#PLLO2IV9 #P?2IV9 OutCo&p re$ *iBe9 OutCo&p fre8 L1''MB9 T"_PS_1_1
{COMM=N2_$etCo!fi$_I!putCapture, Co&&a!d_$etCo!fi$_I!putCapture_SiBe,
<7
"2, 1+, /, ', ', ', ', '}, ,, I29 di& data9 Pre*aler
T2_PS_1_1+9 di& i! %iti a reBultatului9 di& i! %it* of t-e !u&%er of
eve!t*
{COMM=N2_$etCo!fi$_Motor*I2, COMM=N2_$etCo!fi$_Motor*I2_SiBe,
1, 2, ', ', ', ', ', '} ,, I29 id &otor 13Ait- IC2 a!d OC249
id &otor 23Ait- IC" a!d OC"4
};
while((!rOfTrF)" '&& (all#la$*== #=LS1)){
!rOfTrF!! ;
all#la$*= TR@1; ,, if re&ai! true it &ea!* t-at all o!fi$*
-ave %ee! *e!d Ait- *ue**
,, Ae -ave to *e!d " o!fi$* arraF*9 A-it- &ea!* " o&&a!d*
Ait- data
,, at everF *tep Ae *e!d t-e o&&a!dZ data t-e! Ae trF to *ee
if t-ere Aa* o&pleted t-e la*t Arite o! =!droid
fo'(i!de(= '; i!de(/ 4; i!de(%%){
*iBe6-itoutI2C&d= o!fi$*[i!de(][1];
out$oi!$_pa;et.o&&a!d = o!fi$*[i!de(]['];
&e&pF(out$oi!$_pa;et.data, &o!fi$*[i!de(][2],
*iBe6-itoutI2C&d);
&e&pF(&Arite_%uffer[adre*a6rite], (?>T1*)&out$oi!$_pa;et,
*iBe6-itoutI2C&d% 1);
adre*a6rite%= *iBe6-itoutI2C&d% 1;
}
}
}
<8