Kā un kāpēc lasīt datu lapas, ja mikrokontrolleri ir jūsu hobijs

Kā un kāpēc lasīt datu lapas, ja mikrokontrolleri ir jūsu hobijs

Mikroelektronika pēdējos gados ir moderns hobijs, pateicoties maÄ£iskajam Arduino. Bet Å”eit ir problēma: ar pietiekamu interesi jÅ«s varat ātri izaugt no DigitalWrite(), taču nav Ä«sti skaidrs, ko darÄ«t tālāk. Arduino izstrādātāji ir pielikuÅ”i daudz pūļu, lai samazinātu barjeru, kas traucē iekļūt savā ekosistēmā, taču ārpus tās joprojām ir tumÅ”s skarbu shēmu mežs, kas amatieriem nav pieejams.

Piemēram, datu lapas. Å Ä·iet, ka viņiem viss ir, ņem un izmanto. Bet to autori acÄ«mredzami neizvirza sev uzdevumu popularizēt mikrokontrollerus; Dažkārt Ŕķietka viņi apzināti ļaunprātÄ«gi izmanto nesaprotamus terminus un saÄ«sinājumus, aprakstot vienkārÅ”as lietas, lai pēc iespējas vairāk mulsinātu nezinātājus. Bet ne viss ir tik slikti, ja vēlas, zārks atveras.

Å ajā rakstā es dalÄ«Å”os humanitāro zinātņu speciālista pieredzē, sazinoties ar datu lapām hobija nolÅ«kos. Teksts paredzēts amatieriem, kas izauguÅ”i no Arduino biksēm, tas paredz zināmu izpratni par mikrokontrolleru darbÄ«bas principiem.

SākŔu ar tradicionālo

Arduino mirgo gaismas diode

Un uzreiz kods:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Kas tas ir? ā€“ jautās izsmalcināts lasÄ«tājs. ā€“ Kāpēc jÅ«s kaut ko rakstāt PINB ievades reÄ£istrā? Tas ir paredzēts tikai lasÄ«Å”anai!ā€ TieŔām, Arduino dokumentācija, tāpat kā lielākā daļa izglÄ«tojoÅ”o rakstu internetā, norāda, ka Å”is reÄ£istrs ir tikai lasāms. Es pats tā domāju, lÄ«dz es to pārlasÄ«ju datu lapas uz Atmega328p, gatavojot Å”o rakstu. Un tur:

Kā un kāpēc lasīt datu lapas, ja mikrokontrolleri ir jūsu hobijs

Å Ä« ir salÄ«dzinoÅ”i jauna funkcionalitāte, tā nebija Atmega8, ne visi par to zina vai nav pieminēta atpakaļejoŔās saderÄ«bas dēļ. Bet tas ir diezgan piemērots, lai demonstrētu domu, ka datu lapas ir vērts lasÄ«t, lai izmantotu visas mikroshēmas iespējas, tostarp mazpazÄ«stamās. Un tas nav vienÄ«gais iemesls.

Kāpēc gan vēl lasīt datu lapas?

Parasti Arduino inženieri, pietiekami spēlējuÅ”i ar gaismas diodēm un AnalogWrites, sāk pieslēgt pie tāfeles visādus moduļus un mikroshēmas, kurām jau ir rakstÄ«tas bibliotēkas. Agri vai vēlu parādās bibliotēka, kas nedarbojas tā, kā vajadzētu. Tad amatieris sāk Ä·erties pie tā, lai to salabotu, un tad...

Un tur notiek kaut kas pilnÄ«gi nesaprotams, tāpēc jums ir jāiet uz Google, jāizlasa daudzas apmācÄ«bas, jāizvelk kāda piemērota koda daļas un beidzot jāsasniedz savs mērÄ·is. Tas rada spēcÄ«gu sasnieguma sajÅ«tu, taču patiesÄ«bā process ir kā riteņa izgudroÅ”ana no jauna, apgriežot motociklu. Turklāt izpratne par to, kā Å”is velosipēds darbojas, nepalielinās. Es zinu, jo es pats to darÄ«ju diezgan ilgu laiku.

Ja Ŕīs aizraujoŔās nodarbes vietā pāris dienas bÅ«tu pavadÄ«jis, pētot Atmega328 dokumentāciju, es bÅ«tu ietaupÄ«jis milzÄ«gi daudz laika. Galu galā Å”is ir diezgan vienkārÅ”s mikrokontrolleris.

Tādējādi jums ir jāizlasa datu lapas vismaz, lai iedomāties, kā mikrokontrolleris kopumā darbojas un ko tas var darīt. Un tālāk:

  • lai pārbaudÄ«tu un optimizētu citu cilvēku bibliotēkas. Tos bieži raksta tie paÅ”i amatieri, kuri izgudro riteni no jauna; vai, gluži pretēji, autori apzināti padara tos pārmērÄ«gi muļķīgus. Lai tas bÅ«tu trÄ«sreiz lielāks un lēnāks, bet tas noteikti darbosies;

  • prast izmantot čipus projektā, kuram neviens nav rakstÄ«jis bibliotēku;

  • lai jums bÅ«tu vieglāk migrēt no vienas MK lÄ«nijas uz citu;

  • lai beidzot optimizētu savu veco kodu, kas neietilpa Arduino;

  • lai uzzinātu, kā vadÄ«t jebkuru mikroshēmu tieÅ”i caur tā reÄ£istriem, neapgrÅ«tinot tās bibliotēku struktÅ«ras izpēti, ja tādas ir.

Kāpēc rakstÄ«t tieÅ”i uz reÄ£istriem, ja ir HAL un LL?

Glossary
HAL, augstas abstrakcijas slānis ā€“ bibliotēka mikrokontrollera vadÄ«Å”anai ar augstu abstrakcijas lÄ«meni. Ja jums ir jāizmanto SPI1 saskarne, vienkārÅ”i konfigurējiet un iespējojiet SPI1, nedomājot par to, kuri reÄ£istri par ko ir atbildÄ«gi.
LL, zema lÄ«meņa API ā€“ bibliotēka, kurā ir makro vai struktÅ«ras ar reÄ£istru adresēm, kas ļauj tām piekļūt pēc nosaukuma. DDRx, PORTx, PINx uz Atmega ir LL.

StrÄ«di par tēmu ā€œHAL, LL vai reÄ£istriā€ regulāri rodas komentāros par HabrĆ©. Nepretendējot uz piekļuvi astrālajām zināŔanām, es vienkārÅ”i padalÄ«Å”os ar savu amatieru pieredzi un pārdomām.

Vairāk vai mazāk izdomājis Atmega un izlasÄ«jis rakstus par STM32 brÄ«niŔķīgumu, nopirku pusduci dažādu dēļu - Discovery, un Blue Pills un pat tikai čipsus saviem paÅ”taisÄ«tajiem produktiem. Viņi visi divus gadus savāca putekļus kastē. Dažkārt es sev teicu: ā€œTas ir viss, es Å”ajā nedēļas nogalē apgÅ«stu STM,ā€ palaida CubeMX, Ä£enerēja SPI iestatÄ«jumus, apskatÄ«ja iegÅ«to teksta sienu, kas bija dāsni papildināta ar STM autortiesÄ«bām, un nolēma, ka tas ir kaut kā par daudz. .

Kā un kāpēc lasīt datu lapas, ja mikrokontrolleri ir jūsu hobijs

Protams, jÅ«s varat izdomāt, ko CubeMX Å”eit rakstÄ«ja. Bet tajā paŔā laikā ir skaidrs, ka atcerēties visus formulējumus un pēc tam tos rakstÄ«t ar roku ir nereāli. Un, lai to atkļūdotu, ja es nejauÅ”i aizmirstu atzÄ«mēt rÅ«tiņu kubā, tas ir pilnÄ«gi pareizi.

Ir pagājuÅ”i divi gadi, es joprojām laizu lÅ«pas ST MCU meklētājs par visādiem garŔīgiem, bet ārpus manas sapraÅ”anas čipsiem, un nejauÅ”i uzgāju brÄ«niŔķīgs raksts, lai gan par STM8. UN pēkŔņi Sapratu, ka visu Å”o laiku esmu klauvējis pie atvērtām durvÄ«m: STM reÄ£istri ir sakārtoti tāpat kā jebkura cita MK reÄ£istri, un darbam ar tiem Cube nav nepiecieÅ”ams. Vai tas vispār bija iespējams? ..

HAL un Ä«paÅ”i STM32CubeMX ir rÄ«ks profesionāliem inženieriem, kuri cieÅ”i sadarbojas ar STM32 mikroshēmām. Galvenā iezÄ«me ir augsts abstrakcijas lÄ«menis, spēja ātri migrēt no viena MCU uz otru un pat no viena kodola uz otru, vienlaikus paliekot STM32 lÄ«nijā. Hobisti reti sastopas ar Ŕādām problēmām - mÅ«su mikrokontrolleru izvēle, kā likums, aprobežojas ar AliExpress sortimentu, un mēs bieži migrējam starp radikāli atŔķirÄ«gām mikroshēmām - mēs pārejam no Atmega uz STM, no STM uz ESP vai jebkuru jaunu lietu, ko piedāvā mÅ«su Ä·Ä«nieÅ”u draugi. met uz mums. HAL te nepalÄ«dzēs, un tā pētÄ«Å”ana paēdÄ«s daudz laika.

LL paliek - bet no tās lÄ«dz reÄ£istriem ir pussolis. Man personÄ«gi Ŕķiet noderÄ«gi rakstÄ«t savus makro ar reÄ£istru adresēm: rÅ«pÄ«gāk izpētu datu lapu, domāju, kas man bÅ«s vajadzÄ«gs nākotnē un kas noteikti nebÅ«s, labāk strukturēju savas programmas, un vispār pārvarÄ“Å”ana palÄ«dz iegaumēt. .

Turklāt ar populāro STM32F103 ir nianse - tam ir divas nesaderÄ«gas LL versijas, viena amatpersona no STM, otra no Leaf Labs, izmantota STM32duino projektā. Ja jÅ«s rakstāt atvērtā pirmkoda bibliotēku (un man bija tieÅ”i tāds uzdevums), jums ir jāizveido divas versijas vai tieÅ”i jāpiekļūst reÄ£istriem.

Visbeidzot, LL likvidÄ“Å”ana, manuprāt, vienkārÅ”o migrāciju, it Ä«paÅ”i, ja to plānojat jau paŔā projekta sākumā. PārspÄ«lēts piemērs: ierakstÄ«sim Arduino blink programmā Atmel Studio bez LL:

#include <stdint.h>

#define _REG(addr) (*(volatile uint8_t*)(addr))

#define DDR_B 0x24
#define OUT_B 0x25

int main(void)
{
    volatile uint32_t k;

    _REG(DDR_B) |= (1<<5);

    while(1)
    {
        _REG(OUT_B) |= (1<<5);
        for (k=0; k<50000; k++);
        _REG(OUT_B) &= ~(1<<5);
        for (k=0; k<50000; k++);
    } 
}

Lai Ŕis kods mirgotu LED uz ķīnieŔu plates ar STM8 (no ST Visual Desktop), pietiek ar to, lai tajā nomainītu divas adreses:

#define DDR_B 0x5007
#define OUT_B 0x5005

Jā, es izmantoju LED pieslēgÅ”anas funkciju uz konkrētas plates, tas mirgos ļoti lēni, bet tas notiks!

Kādi datu lapu veidi pastāv?

Rakstos un forumos gan krievu, gan angļu valodā "datu lapas" nozÄ«mē jebkuru mikroshēmu tehnisko dokumentāciju, un es daru to paÅ”u Å”ajā tekstā. Formāli tie ir tikai viens Ŕādas dokumentācijas veids:

Datu lapa ā€“ Veiktspējas raksturojums, taktiskās un tehniskās Ä«paŔības. Obligāti jebkurai elektroniskai sastāvdaļai. Fona informāciju ir noderÄ«gi paturēt pie rokas, taču tajā nav daudz ko lasÄ«t pārdomāti. Tomēr vienkārŔākas mikroshēmas bieži aprobežojas ar datu lapu, lai neradÄ«tu nevajadzÄ«gus dokumentus; Å”ajā gadÄ«jumā Uzziņu rokasgrāmata ir iekļauts Å”eit.

Uzziņu rokasgrāmata ā€“ paÅ”as instrukcijas, veselÄ«ga grāmata ar 1000+ lappusēm. SÄ«ki aprakstÄ«ts viss, kas ir saspiests mikroshēmā, darbs. Galvenais dokuments mikrokontrollera apgÅ«Å”anai. AtŔķirÄ«bā no datu apkopojums, instrukcijas ir rakstÄ«tas plaÅ”am MK klāstam, tajās ir daudz informācijas par perifērijas ierÄ«cēm, kas nav pieejamas jÅ«su konkrētajā modelÄ«.

ProgrammÄ“Å”anas rokasgrāmata vai Instrukciju komplekta rokasgrāmata ā€“ instrukcijas unikālām mikrokontrollera komandām. Paredzēts tiem, kas programmē Assembly valodā. Kompilatoru autori to aktÄ«vi izmanto, lai optimizētu kodu, tāpēc kopumā mums tas nebÅ«s vajadzÄ«gs. Bet Å”eit aplÅ«koÅ”ana ir noderÄ«ga vispārÄ«gai izpratnei, dažām specifiskām komandām, piemēram, izieÅ”anai no pārtraukuma, kā arÄ« aktÄ«vai atkļūdotāja lietoÅ”anai.

PiezÄ«me par piemēroÅ”anu ā€“ noderÄ«gi padomi konkrētu problēmu risināŔanai, bieži vien ar kodu piemēriem.

Kļūdu lapa ā€“ nestandarta mikroshēmas darbÄ«bas gadÄ«jumu apraksts ar risinājuma iespējām, ja tādas ir.

Kas ir datu lapās

TieŔi uz Datu lapa mums var būt vajadzīgas Ŕādas sadaļas:

IerÄ«ces kopsavilkums ā€“ datu lapas pirmajā lapā Ä«si aprakstÄ«ta ierÄ«ce. Ä»oti noder situācijās, kad kaut kur atradi mikroshēmu (veikalā ieraudzÄ«ji, pielodēji, sastapis pieminÄ“Å”anu) un vēlies saprast, kas tas ir.

VispārÄ«gs apraksts ā€“ sÄ«kāks apraksts par čipu iespējām no lÄ«nijas.

Pinouts ā€“ visu iespējamo mikroshēmu iepakojumu izgrieÅ”anas diagrammas (kura tapa atrodas uz kuras kājas).

Pin Apraksts ā€“ katras tapas mērÄ·a un iespēju apraksts.

atmiņas karte ā€“ diez vai mums vajadzēs adreÅ”u karti atmiņā, bet dažkārt tajā ir arÄ« reÄ£istru bloku adreÅ”u tabula.

ReÄ£istrēties karte ā€“ reÄ£istru bloku adreÅ”u tabula, kā likums, atrodas datu lapā un iekŔā Atsauces rokasgrāmata ā€“ tikai maiņas (adreÅ”u nobÄ«des).

Elektriskās raksturojums ā€“ Å”ajā sadaļā mÅ«s galvenokārt interesē absolÅ«ti maksimālie vērtējumi, norādot maksimālās slodzes uz mikroshēmu. AtŔķirÄ«bā no neiznÄ«cināmā Atmega328p, lielākā daļa MK neļauj pieslēgt pie tapām nopietnas slodzes, kas kļūst par nepatÄ«kamu pārsteigumu arduinistiem.

Informācija par iepakojumu ā€“ pieejamo korpusu rasējumi, kas noder, veidojot savus dēļus.

Uzziņu rokasgrāmata strukturāli sastāv no sadaļām, kas veltītas konkrētām perifērijas ierīcēm, kas norādītas to nosaukumā. Katru nodaļu var iedalīt trīs daļās:

Pārskats, Ievads, ApkalpoÅ”ana ā€“ perifērijas spēju pārskats;

Funkcionālā Apraksts, LietoÅ”anas rokasgrāmata vai vienkārÅ”i sadaļas galvenais bloks - detalizēts teksta apraksts par perifērijas ierÄ«ces darbÄ«bas principiem un lietoÅ”anu;

ReÄ£istri ā€“ kontroles reÄ£istru apraksts. VienkārÅ”os gadÄ«jumos, piemēram, GPIO vai SPI, ar to var pietikt, lai sāktu lietot perifērijas ierÄ«ces, taču bieži vien jums joprojām ir jāizlasa iepriekŔējās daļas.

Kā lasīt datu lapas

Datu lapas aiz ieraduma biedē ar savu apjomu un nesaprotamo vārdu pārpilnÄ«bu. PatiesÄ«bā viss nav tik biedējoÅ”i, ja zini dažus dzÄ«ves hackus.

Komplekts labs PDF lasÄ«tājs. Datu lapas ir uzrakstÄ«tas krāŔņās papÄ«ra instrukciju tradÄ«cijās, tās lieliski var izdrukāt, ievietot ar plastmasas grāmatzÄ«mēm un Ŕūt. Hiperteksts tajos tiek novērots nelielos daudzumos. Par laimi, vismaz dokumenta struktÅ«ra ir veidota ar grāmatzÄ«mēm, tāpēc piemērots lasÄ«tājs ar ērtu navigāciju ir ļoti nepiecieÅ”ams.

Datu lapa nav Stroustrup mācÄ«bu grāmata; tā satur nevajag visu lasÄ«t. Ja izmantojāt iepriekŔējo padomu, vienkārÅ”i atrodiet vajadzÄ«go sadaļu grāmatzÄ«mju joslā.

ÄŖpaÅ”i datu lapas Atsauces rokasgrāmatas, var raksturot nevis konkrētas mikroshēmas iespējas, bet visa lÄ«nija. Tas nozÄ«mē, ka puse vai pat divas treÅ”daļas informācijas neattiecas uz jÅ«su mikroshēmu. Pirms TIM7 reÄ£istru izpētes reÄ£istrējieties VispārÄ«gs apraksts, vai tev tas ir?

Zināt Angļu pietiekami, lai pamata lÄ«menis. Datu lapās ir puse no terminiem, kas vidusmēra valodai nav pazÄ«stami, un puse no vienkārŔām savienojoŔām struktÅ«rām. Ir arÄ« lieliskas Ä·Ä«nieÅ”u datu lapas Ä·Ä«nieÅ”u angļu valodā, kur puse ir arÄ« termini, bet otrā puse ir nejauÅ”a vārdu kopa.

Ja sanāk nepazÄ«stams vārds, nemēģiniet to tulkot, izmantojot angļu-krievu vārdnÄ«cu. Ja esat apmulsis histerēze, tad ar tulkojumu ā€œhisterēzeā€ siltāks nebÅ«s. Izmantojiet Google, Stack Overflow, Wikipedia, forumus, kur bÅ«s vajadzÄ«gā koncepcija izskaidrots vienkārÅ”os vārdos ar piemēriem.

Labākais veids, kā saprast lasÄ«to, ir pārbaudi darbÄ«bā. Tāpēc turiet pa rokai atkļūdoÅ”anas dēli, ar kuru jÅ«s iepazÄ«staties, vai vēl labāk divus, ja tomēr kaut ko pārpratāt un ieraudzÄ«jāt maÄ£iskus dÅ«mus.

Tas ir labs ieradums, kad jÅ«su datu lapa ir ērti pieejama lasot kāda pamācÄ«bu vai studējot kāda cita bibliotēku. PilnÄ«gi iespējams, ka tajā atradÄ«si optimālāku savas problēmas risinājumu. Un otrādi - ja no datu lapas nevarat saprast, kā reÄ£istrs patiesÄ«bā darbojas, meklējiet to Google tÄ«klā: visticamāk, kāds jau visu ir aprakstÄ«jis vienkārÅ”iem vārdiem vai atstājis skaidru kodu GitHub.

Glossary

Daži noderīgi vārdi un simboli, kas palīdzēs ātri pierast pie datu lapām. Ko atcerējos pēdējās pāris dienās, papildinājumi un labojumi ir apsveicami.

Elektrība
VDC, vdd - "plus", ēdiens
Vss, Vee ā€“ ā€œmÄ«nussā€, zeme
strāva ā€“ strāva
spriegums - spriegums
nogremdēt strāvu ā€“ strādāt kā ā€œzemeā€ ārējai slodzei
lai iegÅ«tu strāvu ā€“ jaudas ārējā slodze
augsta izlietne/avota tapa ā€“ tapa ar palielinātu slodzes ā€œtoleranciā€.

IO
H, augsts ā€“ uz Vcc tapas
L, zems ā€“ uz Vss tapas
Augsta pretestÄ«ba, Sveiks-Z, peldoÅ”s ā€“ uz tapas nekā nav, ā€œaugsta pretestÄ«baā€, tā ir praktiski neredzama ārpasaulei.
vāja pievilkÅ”anās, vājÅ” novilkt ā€“ iebÅ«vēts uzvilkÅ”anas/nolaižamā rezistors, aptuveni lÄ«dzvērtÄ«gs 50 kOhm (skatÄ«t datu lapu). To izmanto, piemēram, lai nepieļautu, ka ievades tapa karājas gaisā, radot viltus trauksmes. VājÅ” - jo viņu ir viegli ā€œpārtrauktā€.
stumt vilkt ā€“ tapas izvades režīms, kurā tas pārslēdzas augsts Šø Zems - regulāra IZEJA no Arduino.
atvērta kanalizācija ā€“ izvades režīma apzÄ«mējums, kurā var bÅ«t tapa vai nu ZemsVai Augsta pretestÄ«ba/peldoÅ”s. Turklāt gandrÄ«z vienmēr tā nav ā€œÄ«staā€ atvērta kanalizācija; ir aizsargdiodes, rezistori un kas cits. Tas ir vienkārÅ”i zemējuma/nav režīma apzÄ«mējums.
patiesa atvērta kanalizācija - bet Ŕī ir Ä«sta atvērta notekcaurule: tapa ved tieÅ”i uz zemi, ja tā ir atvērta, vai paliek nekustÄ«gā stāvoklÄ«, ja tā ir aizvērta. Tas nozÄ«mē, ka nepiecieÅ”amÄ«bas gadÄ«jumā caur to var izlaist spriegumu, kas lielāks par Vcc, bet maksimums tomēr ir norādÄ«ts datu lapā sadaļā AbsolÅ«ti maksimālie nomināli/spriegums.

Saskarnes
sērijās ā€“ savienots virknē
pie ķēdes ā€“ salikt čipus ķēdē, izmantojot seriālo savienojumu, palielinot izeju skaitu.
maiņa ā€“ maiņa, parasti apzÄ«mē mazliet maiņu. RespektÄ«vi, pāriet iekŔā Šø lai pārvietotos ārā ā€“ saņemt un pārsÅ«tÄ«t datus pa bitiem.
aizÅ”aujamais ā€“ fiksators, kas nosedz buferi, kamēr biti tiek pārvietoti caur to. Kad pārsÅ«tÄ«Å”ana ir pabeigta, vārsts atveras un uzgaļi sāk darboties.
lai pulkstenis iekŔā ā€“ veiciet pārsÅ«tÄ«Å”anu pa bitiem, pārvietojiet visus bitus uz pareizajām vietām.
dubultais buferis, ēnu reÄ£istrs, priekÅ”ielādÄ“Å”anas reÄ£istrs ā€“ vēstures apzÄ«mējumi, kad reÄ£istram ir jāspēj pieņemt jaunus datus, bet tos turēt lÄ«dz zināmam brÄ«dim. Piemēram, lai PWM darbotos pareizi, tā parametri (darba cikls, frekvence) nedrÄ«kst mainÄ«ties lÄ«dz paÅ”reizējā cikla beigām, bet jau var pārsÅ«tÄ«t jaunus parametrus. AttiecÄ«gi paÅ”reizējie tiek turēti plkst ēnu reÄ£istrs, un iekrÄ«t jaunas priekÅ”ielādÄ“Å”anas reÄ£istrs, tiek ierakstÄ«ts attiecÄ«gajā mikroshēmu reÄ£istrā.

Visādas lietas
prescaler ā€“ frekvences priekÅ”skalotājs
lai mazliet iestatÄ«tu ā€“ iestatiet bitu uz 1
lai mazliet notīrītu/atiestatītu - atiestatīt bitu uz 0 (atiestatīt - STM datu lapas funkcija)

Kas ir nākamais

Kopumā Å”eit tika plānota praktiskā daļa ar trÄ«s STM32 un STM8 projektu demonstrāciju, kas izstrādāti speciāli Å”im rakstam, izmantojot datu lapas, ar spuldzēm, SPI, taimeriem, PWM un pārtraukumiem:

Kā un kāpēc lasīt datu lapas, ja mikrokontrolleri ir jūsu hobijs

Bet teksta ir daudz, tāpēc projekti tiek sūtīti uz otro daļu.

Prasme lasÄ«t datu lapas palÄ«dzēs jÅ«su hobijam, taču maz ticams, ka tā aizstās tieÅ”o saziņu ar citiem hobijiem forumos un tērzÄ“Å”anas sarunās. Å im nolÅ«kam vispirms vēl jāuzlabo angļu valoda. Tāpēc tie, kas pabeigs lasÄ«t, saņems Ä«paÅ”u balvu: divas bezmaksas nodarbÄ«bas Skyeng ar pirmo iemaksu, izmantojot kodu HABR2.

Avots: www.habr.com

Pievieno komentāru