## Digital input/output

1. “=” is operation for giving a value and “==” is operation for logical comparison. the first is used in mathematic operations and the last for checking logical condition.

Example:

```counter = counter + 1;
// Variable is given a new value,
// which is larger by 1 than previous value

counter == counter + 1
// Equality operation that is never true,
// this operation makes no sense

if (i=1)  // Always true because variable i is given simultaneously a value of 1
if (i==1) // Logical condition check. True if i value was already 1

for (i = 0; i == 10; i++) {}
// variable i is initialized to 0 and the loop will continue
// until condition i == 10 is met```

## Sensors

1. ATmega128 analog-digital converter has 10 bit resolution which means voltage being measured is converted to range 0 … 210-1 or 0 … 1023. The samples in range have no unit but they correspond to real voltage range. Converter accuracy is ±2 samples. The smallest measurable voltage change depends on measurement range setup. This can be calculated from formula: i = Vref/1024 (V), where Vref is initialized by ADMUX register and reference voltage connected to AVCC pin (used if set in ADMUX register). As voltage in AVCC pin cannot be differ more than 0,3 V from controller working voltage (5 V by default), then the best possible resolution can be achieved when controller inner AREF = 2,56 V voltage reference is used. Then the smallest measurable voltage change is i = 2560 / 1024 = 2,5 mV.
2. One ADC conversion will take place during 13 ADC clock cycles. According to datasheet, recommended ADC working frequency is 50kHz - 200kHz that corresponds to conversion process length 65 - 260 us. The first coversion takes more time than the following conversions and will take 25 ADC clock cycles to complete. This corresponds to conversion time 500 us. Converter working frequency is set by ADCSRA register where ADPS0..2 bits set the prescaler value. High prescaler value will yield to low ADC working frequency.
3. ATmega128 ADC sisendpinge piirkond on maksimaalselt (0 - Vcc) V, kus Vcc tähistab protsessori tööpinget, mis antud juhul võib olla 2,7 - 5,5 V. Seda piirkonda annab järelikult muuta kui muuta Vcc-d pinge taset. Et seda kasutada tuleb väline toitepinge Vcc ühendada viigu AVCC sisendisse, kusjuures soovituslikult ühendada kondensaator AREF viigule, et vähendada võimalikku müra. Märkuseks olgu öeldud, et selline Vcc ühendamine AVCC ei ole eriti soovitatav kui väline toitepinge kõigub. Teine võimalus sisendpinge piirkonna muutmiseks on kasutada ATmega128 spetsiaalset 2,56V sisemist võrdluspinget. Mõlemal juhul tuleb seadistada ADMUX registrit.
4. PTC puhul elemendi takistus suureneb temperatuuri tõustes, NTC puhul aga on vastupidi - temperatuuri tõustes takistus väheneb. NTC eelisteks loetakse järgnevaid aspekte: hea tundlikkus temperatuuri kõikumistele, hea signaali-müra suhe, lihtne kasutada, odav hind.
5. Pingejaguri eesmärk nagu nimigi ütleb on jagada pinget mõõteahelas. Sõltuvalt valitud takistite suhtest väheneb väljundpinge väärtus. Sellega loob pingejagur võimaluse kasutada suurema pingevahemikuga sensoreid mikrokontrolleri ADC sisendis.
6. Võimalusi on mitmeid, aga üks lihtsaim variante on pingejaguri takistite väärtused võtta võrdseks R1=R2= 10 kΩ, sel juhul saab ADC maksimaalne sisendväärtus olla 5 V. Lisaks tuleb elektriliselt seadistada AVCC väljaviigule ka 5 V võrdluspinge ning ADMUX registris olevatele REFS1 ja REFS0 bittidele tuleb anda väärtused vastavalt 1 ja 0.
7. Võttes lihtsuse mõttes läbivaks vooluks 1 mA, siis takisti R1, mis on potentsiomeetri ja maa vahel, otstel on 1 V ning seega tema väärtuseks on 1 Ω. Teise takisti R2, mis on potentsiomeetri ja 5 V vahel, otstel on 3 V ning seega tema väärtuseks on 3 Ω. Potensiomeetri enda väärtuseks jääb sel juhul 1 Ω.
8. Ultraheli kaugusanduri tööd mõjutavad järgmised tegurid
• Temperatuur. Kuna kõrgema temperatuuriga liiguvad õhumolekulid kiiremini, siis seda kiiremini suudavad need helilainet edasi kanda.
• Õhuniiskus. Kõrgema õhuniiskusega õhk sisaldab rohkem molekule ruumalaühiku kohta, mis tähendab, et heli edasikandjaid on rohkem ehk heli liigub kiiremini niiskemas õhus.
9. Näiteid valgussensoritest: fototakisti, fotodiood, fototransistor. Kui fototakisti puhul valguse intensiivsus mõjutab otseselt materjali elektrilist takistuslikku omadust, siis fototransistori puhul valgus tekitab baasi voolu, mida transistor tema tugevusele vastavalt võimendab.
10. Kaugust saab mõõta veel järgmiste meetoditega
• Valguse levimise aja mõõtmine. Mõõdetakse aega, mis kulus (laser)valgusel objektini ja tagasi läbimiseks. Teades valguse kiirust, saab arvutada distantsi.
• Laser koos kaameraga. Pilditöötlusega leitakse lasertäpi asukohta pildil. Kaamera paigutus laseri suhtes ja täpi asukoha järgi pildil abil saab leida objekti kauguse

## Motors

1. H-silda kasutatakse alalisvoolumootori kahtepidi juhtimiseks. H-sild koosneb neljast sümmeetrilisest voolu lülitavast transistorist millega saab mõlemale mootori harjale rakendada kahtepidist pinget. Korraga on avatud vaid ühed diagonaalis asetsevad transistorid.
2. RC-servomootri võlli asend sõltub mootorile antavast PWM signaali laiusest. 1,5 ms kõrge poolperioodi puhul on võll keskasendis.
3. Uni- ja bipolaarsete samm-mootorite erinevus seisneb mähiste kommuteerimises. Esimesel juhul rakendatakse täis-sammu puhul korraga pinge vaid ühele mähisele ja seda ühtepidi. Teisel juhul rakendatakse täis-sammu puhul korraga pinge kahele mähisele ja seda olenevalt sammust mõlematpidi. Unipolaarsetel samm-mootoritel on lihtsam ajur, kuid bipolaarsed on efektiivsemad.
4. Pool-samme saab samm-mootoris tekitada korraga üht või mitut mähist kommuteerides, nii et rootor asetub kord ühe mähisega risti, kord kahe mähise vahele. Mikro-samme saab tekitada üht või mitut mähist PWM signaaliga moduleerides, nii et rootor saab jääda igasse asendisse kahe mähise vahel.
5. Alalisvoolumootori pöörlemiskiirust juhitakse PWM režiimi kasutades, kus mootorile ei anta mitte pidevat voolu vaid katkendlikku - olenevalt soovitavast kiirusest.
6. 70% moduleerimisperioodi ajast peab mootorile pinget rakendama, 30% ajast mitte. Nii lihtne seos kehtib vaid ilma koormuseta mootori puhul. Täpsemaks reguleerimiseks tuleb kasutada koodrit.
7. Enamasti on mootorite juures kasutusel kvadratuurkoodrid millel on kaks 90° faasinihkega väljundit. Jälgides kumb väljund muudab enne nivood saab teada pöörlemissuuna.
8. Alalisvoolumootori elektriliseks pidurdamiseks tuleb selle harjadele rakendada elektriline koormus (hoidudes mähiste ülekuumenemisest võib ka lühist rakendada), mistõttu mootorile, mis toimib pööreldes elektrigeneraatorina, rakendub pöörlemist pidurdav jõud.
9. Kuna samm-mootori rootoril on massist tingitud inertsus, siis liigkiirel kommuteerimisel ei jõua rootor piisavalt kiiresti pöörduda, et järgmist, ülejärgmist jne. sammu teha. Tulemusena rootor lihtsalt väriseb.
10. Dünaamiline elektrimootori pidurdamine on sisuliselt elektrilise pidurdamine, kuid selle lisaga, et mootori/generaatori tekitatud elektrivoolu kasutatakse millekski kasulikuks - näiteks akude laadimiseks.

## Communication interfaces

1. UART kaader koosneb startbitist, 0-7 andmebitist, vahel ka paarsuse bitist ja 1-2 stoppbitist.
2. Boodikiirus näitab edastatavate sümbolite arvu ühes sekundis.
3. Täisdupleksside korral saab andmeid edastada ja võtta korraga, pooldupleksside korral vaid vaheldumisi või ühtepidi.
4. Leidub näiteks SPI liidese kiirendusandur ADIS16003, I2C liidesega temperatuuriandur TC74 ja I2C liidesega valgustugevuse andur ISL29001.
5. USART liidesel on lisaks taktsignaal millega sünkroonis edastatakse ja loetakse andmeid. Tänu sellele on USART kiirem kui UART.
6. SPI liideses kasutatakse nagu USART puhulgi edastavat, vastuvõtvat ja taktsignaali andmeviiku. Lisaks ka kiibi valiku signaali, et andmeedastussessiooni algust ja lõppu tähistada. SPI puhul on andmete formaat vaba - puuduvad igasugu start-, stopp- ja paarsusebitid.