Како и зошто да читате листови со податоци ако микроконтролерите се вашето хоби

Како и зошто да читате листови со податоци ако микроконтролерите се вашето хоби

Микроелектрониката е модерно хоби во последните години благодарение на магичниот Arduino. Но, тука е проблемот: со доволно интерес, можете брзо да го надраснете DigitalWrite(), но што да направите следно не е сосема јасно. Програмерите на Arduino вложија многу напор за да ја намалат бариерата за влез во нивниот екосистем, но надвор од него сè уште има темна шума од груби кола кои се недостапни за аматерот.

На пример, листови со податоци. Изгледа дека имаат се, земете го и искористете го. Но, нивните автори очигледно не си поставуваат задача да ги популаризираат микроконтролерите; Понекогаш се чинидека намерно злоупотребуваат неразбирливи поими и кратенки кога опишуваат едноставни работи за што повеќе да ги збунат неупатените. Но, не е сè толку лошо; ако сакате, ковчегот се отвора.

Во оваа статија ќе го споделам искуството на специјалист за хуманитарни науки кој комуницира со листови со податоци за цели на хоби. Текстот е наменет за аматери кои пораснале од панталоните Arduino; претпоставува одредено разбирање на принципите на работа на микроконтролерите.

Ќе почнам со традиционалното

Трепка LED на Arduino

И веднаш кодот:

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

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

"Што е ова? – Ќе праша софистициран читател. – Зошто пишувате нешто во регистарот за внесување PINB? Тоа е само за читање!“ Навистина, Arduino документација, како и повеќето едукативни написи на Интернет, наведува дека овој регистар е само за читање. Така мислев и самата додека не ја препрочитав податоци до Atmega328p, подготвувајќи ја оваа статија. И таму:

Како и зошто да читате листови со податоци ако микроконтролерите се вашето хоби

Ова е релативно нова функционалност, не беше на Atmega8, не секој знае за тоа или не е спомнат поради заостаната компатибилност. Но, тоа е сосема погодно за демонстрирање на идејата дека листовите со податоци вреди да се читаат за да се искористат сите можности на чипот, вклучително и малку познатите. И ова не е единствената причина.

Зошто инаку да се читаат листови со податоци?

Обично, инженерите на Arduino, играјќи доволно со LED диоди и AnalogWrites, почнуваат да поврзуваат секакви модули и чипови на таблата, за кои веќе има напишани библиотеки. Порано или подоцна, се појавува библиотека која не работи како што треба. Потоа аматерот почнува да го чепка за да го поправи, а потоа ...

И таму се случува нешто сосема неразбирливо, па мора да отидете на Google, да прочитате бројни упатства, да извадите делови од нечиј соодветен код и конечно да ја постигнете вашата цел. Ова дава моќно чувство на достигнување, но во реалноста процесот е како повторно да се измисли тркалото со обратно инженерство на мотоцикл. Покрај тоа, разбирањето за тоа како функционира овој велосипед не се зголемува. Знам, бидејќи го правев тоа сам прилично долго време.

Ако наместо оваа возбудлива активност потрошив неколку дена проучувајќи ја документацијата Atmega328, ќе заштедив огромно време. На крајот на краиштата, ова е прилично едноставен микроконтролер.

Така, треба да ги читате листовите со податоци барем за да замислите како микроконтролерот генерално работи и што може да направи. И понатаму:

  • за проверка и оптимизирање на библиотеките на другите луѓе. Тие често се напишани од истите аматери кои повторно го измислуваат тркалото; или, напротив, авторите намерно ги прават претерано непостојани. Нека биде трипати поголем и побавен, но дефинитивно ќе работи;

  • да може да користи чипови во проект за кој никој нема напишано библиотека;

  • за полесно да мигрирате од една МК линија во друга;

  • за конечно да го оптимизирате вашиот стар код, кој не се вклопуваше во Arduino;

  • да научи како да контролира кој било чип директно преку неговите регистри, без да се мачи со проучување на структурата на неговите библиотеки, доколку ги има.

Зошто да пишувате директно во регистрите кога има HAL и LL?

Речник
HAL, слој со висока апстракција – библиотека за контролирање на микроконтролер со високо ниво на апстракција. Ако треба да го користите интерфејсот SPI1, едноставно го конфигурирате и овозможувате SPI1 без да размислувате кои регистри се одговорни за што.
LL, API на ниско ниво – библиотека која содржи макроа или структури со регистерски адреси, што ви овозможува да им пристапите по име. DDRx, PORTx, PINx на Atmega се LL.

Спорови на тема „HAL, LL или регистри“ редовно се појавуваат во коментарите на Habré. Без да барам пристап до астралното знаење, едноставно ќе го споделам моето аматерско искуство и размислувања.

Откако повеќе или помалку ја сфатив Atmega и читајќи написи за чудесноста на STM32, купив половина дузина различни табли - Discovery и Blue Pills, па дури и само чипови за моите домашни производи. Сите тие две години собираа прашина во кутија. Понекогаш си велев: „Тоа е тоа, јас го совладувам STM овој викенд“, го лансираше CubeMX, генерирав поставување за SPI, го погледнав добиениот ѕид на текст, великодушно зачинет со авторски права на STM и решив дека ова е некако премногу. .

Како и зошто да читате листови со податоци ако микроконтролерите се вашето хоби

Се разбира, можете да дознаете што напиша CubeMX овде. Но, во исто време е јасно дека запомнувањето на сите формулации и потоа рачно пишување е нереално. И да го дебагирам ова, ако случајно заборавам да означам поле во коцката, тоа е сосема во ред.

Поминаа две години, уште ги лижам усните ST MCU Пронаоѓач за сите видови на вкусни, но надвор од моето разбирање, чипс, и случајно наидов прекрасна статија, иако за STM8. И одеднаш Сфатив дека сето ова време тропам на отворена врата: регистрите на СТМ се подредени на ист начин како и на кој било друг МК, а коцката не е потребна за работа со нив. Дали воопшто беше можно?..

HAL и конкретно STM32CubeMX е алатка за професионални инженери кои тесно соработуваат со STM32 чипови. Главната карактеристика е високото ниво на апстракција, способноста за брзо мигрирање од еден MCU во друг, па дури и од едно јадро во друго, додека останува во линијата STM32. Хобистите ретко наидуваат на вакви проблеми - нашиот избор на микроконтролери, по правило, е ограничен на асортиманот AliExpress и често мигрираме помеѓу радикално различни чипови - се префрламе од Atmega на STM, од STM на ESP или што и да е ново, нашите кинески пријатели фрли на нас. HAL нема да помогне овде, а неговото проучување ќе изеде многу време.

LL останува - но од него до регистрите има половина чекор. Лично, сметам дека е корисно пишувањето на моите макроа со регистерски адреси: повнимателно го проучувам листот со податоци, размислувам што ќе ми треба во иднина, а што дефинитивно не, подобро ги структурирам своите програми и, генерално, надминувањето помага во меморирање .

Покрај тоа, постои нијанса со популарниот STM32F103 - има две некомпатибилни LL верзии за него, едната официјална од STM, втората од Leaf Labs, користена во проектот STM32duino. Ако напишете библиотека со отворен код (а јас имав точно таква задача), мора или да направите две верзии или директно да пристапите до регистрите.

Конечно, елиминирањето на LL, според мене, ја олеснува миграцијата, особено ако ја планирате од самиот почеток на проектот. Претеран пример: ајде да напишеме Arduino трепка во Atmel Studio без 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++);
    } 
}

За овој код да трепка LED на кинеска табла со STM8 (од ST Visual Desktop), доволно е да смените две адреси во него:

#define DDR_B 0x5007
#define OUT_B 0x5005

Да, јас користам функција за поврзување на ЛЕР на одредена табла, ќе трепка многу бавно, но ќе се случи!

Какви видови листови со податоци постојат?

Во написите и на форумите, и руски и англиски, „листите со податоци“ значат каква било техничка документација за чипови, а јас го правам истото во овој текст. Формално, тие се само еден вид ваква документација:

Податоци – Перформансни карактеристики, тактички и технички карактеристики. Задолжително за која било електронска компонента. Позадинските информации се корисни за да се чуваат при рака, но нема многу што да се чита во нив смислено. Сепак, поедноставните чипови често се ограничени на лист со податоци за да не се произведуваат непотребни документи; во овој случај Упатство за употреба е вклучен овде.

Упатство за употреба – самите упатства, здрава книга од 1000+ страници. Детално е опишана работата на сè што е набиено во чипот. Главниот документ за совладување на микроконтролерот. За разлика од податоци, инструкциите се напишани за широк опсег на MK, тие содржат многу информации за периферни уреди кои не се достапни во вашиот специфичен модел.

Прирачник за програмирање или Прирачник за комплет инструкции – инструкции за уникатни команди на микроконтролерот. Дизајниран за оние кои програмираат на асемблерски јазик. Авторите на компајлерот активно го користат за да го оптимизираат кодот, така што во општ случај нема да ни треба. Но, гледањето овде е корисно за општо разбирање, за некои специфични команди како што се излегување од прекин, како и за активно користење на дебагерот.

Белешка за апликација – корисни совети за решавање конкретни проблеми, често со примери на код.

Погрешен лист – опис на случаи на нестандардно однесување на чипот со опции за заобиколување, доколку ги има.

Што има во листовите со податоци

Директно до Податоци можеби ќе ни требаат следните делови:

Резиме на уредот – првата страница од листот со податоци накратко го опишува уредот. Многу корисно во ситуации кога некаде сте нашле чип (го видовте во продавница, го залемивте, наидовте на спомнување) и сакате да разберете што е тоа.

Општ опис – подетален опис на можностите на чиповите од линијата.

Пинаути – дијаграми со пинаут за сите можни пакувања со чипови (кој игла е на кој крак).

Опис на игла – опис на намената и можностите на секој пин.

Мапа на меморија – Малку е веројатно дека ќе ни треба мапа на адреси во меморијата, но понекогаш таа вклучува и табела со адреси на блок регистри.

Регистрирајте мапа – табелата со адреси на регистерските блокови, по правило, се наоѓа во листот со податоци и во Реф прирачник - само смени (адресни поместувања).

Електрични карактеристики – во овој дел првенствено не интересира апсолутни максимални оценки, наведувајќи ги максималните оптоварувања по чип. За разлика од неуништливиот Atmega328p, повеќето MK не ви дозволуваат да поврзете сериозни оптоварувања со пиновите, што станува непријатно изненадување за Arduinists.

Информации за пакетот – цртежи на достапни футроли, корисни при дизајнирање на вашите табли.

Упатство за употреба структурно се состои од делови посветени на одредени периферни уреди наведени во нивниот наслов. Секое поглавје може да се подели на три дела:

Преглед, Вовед, Карактеристики – преглед на периферните можности;

Функционален опис, Упатство за употреба или едноставно главниот блок на делот - детален текстуален опис на принципите на периферниот уред и како да го користите;

Регистри – опис на контролните регистри. Во едноставни случаи како што се GPIO или SPI, ова може да биде сосема доволно за да започнете со користење на периферните уреди, но честопати сепак треба да ги прочитате претходните делови.

Како да читате листови со податоци

Листовите со податоци, по навика, ве плашат со нивниот волумен и изобилството од неразбирливи зборови. Всушност, сè не е толку страшно ако знаете неколку лајф хакови.

Намести добар PDF читач. Листовите со податоци се напишани во славната традиција на хартиени упатства; тие се одлични за печатење, вметнување со пластични обележувачи и шиење. Хипертекст во нив е забележан во трагови. За среќа, барем структурата на документот е дизајнирана со обележувачи, па затоа е многу неопходен соодветен читач со лесна навигација.

Листот со податоци не е учебник на Stroustrup; тој содржи нема потреба да читате сè. Ако го искористивте претходниот совет, само пронајдете го саканиот дел во лентата за обележувачи.

Листови со податоци, особено Референтни прирачници, може да ги опише можностите на не конкретен чип, туку целата линија. Ова значи дека половина, па дури и две третини од информациите не се релевантни за вашиот чип. Пред да ги проучувате регистрите TIM7, проверете се Општ опис, Дали го имаш?

Знај Англиски доволно за основно ниво. Листовите со податоци се состојат половина од термини непознати за просечниот мајчин говорник и половина од едноставни структури за поврзување. Има и одлични кинески листови со податоци на кинески англиски јазик, каде што половината се исто така термини, а втората половина се случаен сет на зборови.

Ако се сретнете непознат збор, не обидувајте се да го преведете користејќи англиско-руски речник. Ако сте збунети хистереза, тогаш преводот „хистереза“ нема да ве загрее. Користете Google, Stack Overflow, Wikipedia, форуми, каде што ќе биде бараниот концепт објаснето со едноставни зборови со примери.

Најдобар начин да се разбере она што го читате е проверка во акција. Затоа, чувајте ја при рака таблата за дебагирање со која се запознавате, или уште подобро две, во случај нешто да сè уште погрешно сте разбрале и сте виделе магичен чад.

Добра навика е да го држите при рака вашиот лист со податоци кога читање нечиј туторијал или проучување на туѓа библиотека. Сосема е можно во него да најдете пооптимално решение за вашиот проблем. И обратно - ако не можете да разберете од листот со податоци како всушност работи регистарот, побарајте го на Google: најверојатно, некој веќе опишал сè со едноставни зборови или оставил јасен код на GitHub.

Речник

Некои корисни зборови и симболи ќе ви помогнат брзо да се навикнете на листовите со податоци. Она што го запамтив во последните неколку дена, дополнувања и корекции се добредојдени.

Електрична енергија
ВЦЦ, Вдд – „плус“, храна
Vss, Vee – „минус“, земја
тековната – струја
напон - Напон
да потоне струја – работи како „земја“ за надворешно оптоварување
за извор на струја – напојување надворешно оптоварување
висок мијалник/извор игла – игла со зголемена „толеранција“ на оптоварување

IO
H, Високо – на пинот Vcc
L, Ниско – на Vss пинот
Висока импеданса, Здраво-З, лебдат – нема ништо на иглата, „висок отпор“, тој е практично невидлив за надворешниот свет.
слабо повлекување нагоре, слабо повлекување надолу – вграден отпорник за повлекување/спуштање, приближно еднаков на 50 kOhm (видете го листот со податоци). Се користи, на пример, за да се спречи влезната игла да виси во воздухот, предизвикувајќи лажни аларми. слаб - затоа што е лесно да го „прекинеш“.
притисни повлече – излезен режим на пинови, во кој се префрла помеѓу Високо и Ниско – редовен OUTPUT од Arduino.
отворен одвод – означување на излезниот режим во кој пинот може да биде или НискоИли Висока импеданса/лебдечки. Покрај тоа, скоро секогаш ова не е „вистински“ отворен одвод; има заштитни диоди, отпорници и што уште не. Ова е едноставно ознака за режимот земја/нема.
вистински отворен одвод - но ова е вистински отворен одвод: иглата води директно до земјата ако е отворена или останува во неизвесност ако е затворена. Тоа значи дека, доколку е потребно, преку него може да се помине напон поголем од Vcc, но максимумот сепак е наведен во листот со податоци во делот Апсолутни максимални оценки/напон.

Интерфејси
во серија – поврзани во серија
да се синџирува – составете чипови во синџир користејќи сериско поврзување, зголемувајќи го бројот на излези.
префрлат – shift, обично означува малку поместување. Соодветно, да се префрлат во и да се префрли надвор – примајте и пренесувајте податоци малку по бит.
бравата – брава што го покрива баферот додека битови се префрлаат низ него. Кога преносот е завршен, вентилот се отвора и битовите почнуваат да работат.
да се заклучи – изведете префрлање бит-по-бит, преместете ги сите битови на вистинските места.
двоен тампон, регистар во сенка, однапред вчитан регистар – ознаки за историја, кога регистарот мора да може да прифаќа нови податоци, но да ги чува до одреден момент. На пример, за PWM да работи правилно, неговите параметри (работен циклус, фреквенција) не треба да се менуваат додека не заврши тековниот циклус, но веќе може да се пренесат нови параметри. Според тоа, сегашните се чуваат на регистар во сенка, а нови паѓаат во однапред вчитан регистар, се запишува во соодветниот регистар на чипови.

Секакви работи
прескалер – фреквентен прескалер
да се постави малку – поставете го битот на 1
за да се исчисти/ресетира малку - ресетирајте го битот на 0 (ресетирање – Функција за лист со податоци STM)

Што е следно

Општо земено, овде беше планиран практичен дел со демонстрација на три проекти на STM32 и STM8, направени специјално за овој напис со помош на листови со податоци, со светилки, SPI, тајмери, PWM и прекини:

Како и зошто да читате листови со податоци ако микроконтролерите се вашето хоби

Но, има многу текст, па проектите се испраќаат во вториот дел.

Вештината за читање листови со податоци ќе ви помогне со вашето хоби, но веројатно нема да ја замените комуникацијата во живо со колегите хобисти на форуми и разговори. За таа цел, сепак треба пред се да го подобрите вашиот англиски јазик. Затоа, оние што ќе завршат со читање ќе добијат специјална награда: две бесплатни часови во Скајенг со првото плаќање со користење на кодот HABR2.

Извор: www.habr.com

Додадете коментар