Kura tapa ir mcu. Kas ir sistēmas administrators? Web serveris uz NodeMCU LED matricas vadībai

Power-On Reset (POR) ķēde nodrošina, ka mikrokontrolleris sāk darboties tikai tad, kad Vcc spriegums sasniedz drošu līmeni. Kā parādīts attēlā. 24, iebūvētais taimeris, kura pulksteni nodrošina iebūvētais sargsuņa ģenerators, aiztur MCU palaišanu kādu laiku pēc ieslēgšanas sliekšņa sprieguma Vpot sasniegšanas neatkarīgi no sprieguma Vcc pieauguma ātruma (sk. 26. att.). .

6. tabulā parādīti SUT1 un SUT0 bitu iestatījumi, ko izmanto, lai iestatītu palaišanas procedūras aizkaves perioda ilgumu. Lietotājam tiek dota iespēja izvēlēties sākuma laika aizkavi. Iestatījums SUT 1/0 = 00, kas liek MCU startēt 5 pulksteņa ciklos, tiek izmantots, ja tiek izmantots ārējais pulksteņa signāls, kas tiek pievadīts XTAL1 kontaktam. Šī iestatīšana nodrošina ātru palaišanu no izslēgšanas vai enerģijas taupīšanas režīma, ja šajos režīmos ir pulksteņa signāls. Sīkāka informācija sadaļā Programmēšana.

Ja iebūvētā palaišanas aizkave ir pietiekama, tad RESET var pieslēgt Vcc tieši vai caur ārēju slodzes rezistoru. Turot tapu zemu, kamēr tiek pielikts spriegums, ieslēgšanas atiestatīšanas periodu var pagarināt. Šādas pulksteņa piemērs ir dots. Rīsi. 27.

Rīsi. 25. MCU sākotnējā palaišana. RESET tapa, kas savienota ar Vcc, strauji palielinās Vcc

Rīsi. 26. MCU sākotnējā palaišana. RESET tapa savienota ar Vcc, lēns Vcc pieaugums

12

Savienojami rezistori (gan iekšējie, gan ārējie) nepieciešami tikai MCU INPUT tapām? Turpretim MCU tapa, kas konfigurēta kā IZEJA, "zina, kādā līmenī tā atrodas", jo tā kontrolē - "peldošai" MCU IZVES tapai, kas piesaistīta kādai citas ķēdes ieejai, nav nozīmes, jo MCU tapas stāvoklis var būt tikai augsts vai zems. .. vai man ir taisnība? Tagad, kad MCU sāk darboties vai avarē, var būt izdevīgi, lai līnija "MCU izeja uz IC ievadi" būtu saistīta ar šo kanālu, lai nodrošinātu, ka neviena IC ievade nekad neplūst.

Varbūt es šeit vienkārši atbildēju uz savu jautājumu... uzvilkšanas/nolaišanas rezistorus var izmantot gan uz ieejas, gan izejas tapām, atkarībā no pielietojuma?

  • 5 atbildes
  • Kārtošana:

    Aktivitāte

16

Pull un pop parasti tiek izmantoti, lai nodrošinātu, ka līnijai ir noteikts stāvoklis, nevis tā ir aktīva. Tos izmanto ieejās, lai novērstu peldošās līnijas, ātri pārslēgtos starp augstu un zemu un vidēju "nenodefinētu" reģionu. Izvades parasti nav vajadzīgas.

Taču lielākā daļa mcu tapu ir GPIO, un dažreiz startēšanas laikā tās tiek definētas kā ieejas, nevis izejas. Kā jau teicāt, dažreiz nevēlaties, lai startēšanas laikā IC kontakta ievade peldētu, it īpaši, piemēram, atiestatīšanas tapa, ko parasti izmantotu ar sava mikrokontrollera GPIO.

Tas ir tad, kad lietojat Vāja Auklas vilkšana vai izslēgšana. Tā kā tie ir vāji un jūs izvēlaties noklusējuma stāvokli, tie netraucē jūsu ķēdei (ja ieejas signālam vienmēr ir jābūt zemam un pēc tam tiek pacelts augsts, jūs izvēlaties vāju izslēgtu un otrādi), taču tie nedaudz velk. pašreizējo. Tāpēc izvēlaties darbam pietiekami vāju (augstāku, vājāku) rezistoru.

Vēl viena parasta izvades iestatīšana, kurā tiek izmantota pievilkšanās (vai retāk atspiešanās) ir Atveriet kanalizāciju vai atvērts savācējs savienojumiem. Tie rada tikai zemu savienojumu vai atbrīvo līniju, atstājot to peldošu. Pievilkšanās tiek izmantota, lai līnija nonāktu augstā loģiskā stāvoklī.

0

Jūs minējāt Open Drain un Open Collector savienojumus, tie neattiecas uz mikrokontrolleriem, vai ne? Vai Mossets vienkārši tiek izmantots loģikas līmeņa iestatīšanai? Es gribēju noskaidrot, vai mikrokontrolleris var vadīt līniju ar augstu spiedes pretestību. - vispārīgs purpura bruņurupucis 16. oktobris 17 2017-10-16 12:00:41

7

Jums ir šīs tiesības; Uz izejām pievilkšanās parasti nav vajadzīgas, taču tās var noderēt drošībai iekraušanas laikā utt.

Vēl viens iemesls, lai izmantotu izvades uzvilkšanu: ja katram savienojumam ir vairākas izejas, kas savienotas ar vairākiem cita MPU, jūs tiešām negribas viens brauc VCC un otrs brauc 0V pa vienu un to pašu vadu! Tātad jūs vai nu izsauciet izeju uz 0 V, vai atspējojiet izvadi (iespējams, iestatot to kā ieeju). Kad visas izejas ir atspējotas, vads tiek uzvilkts līdz "1" (Vcc). To sauc par "vadu UN" signālu. (Jūs varat veikt to pašu braukšanu ar "1" vai izslēgtu, ja R ir nolaists, tad to sauc par vadu VAI).

Šim modelim ir vairākas izmantošanas iespējas, tostarp ļaujot jebkuram MPU signalizēt par kļūdu vai ieslēgt LED, vai ļaut tiem pēc kārtas nosūtīt ziņojumus viens otram pa vienu vadu.

2

Atbilde: Tas ir atkarīgs no mikrokontrolleru saimes un noklusētā Power On Reset pozīcijas. Ja mikrokontrolleri var konfigurēt tikai kā kontakta "izeju" vai "ieeju", tas parasti nozīmē, ka izvadei tiek izmantots totempola draiveris, kas nozīmē, ka tā būtībā ir CMOS vārtu izeja, un tādā gadījumā izvade vienmēr tiek virzīta uz sliedēm, tāpēc nav iemesla to pasīvi ietekmēt. Vienīgā reize, kad izvadei ir jēga izmantot pievilkšanas/novilkšanas iespējas, ir tad, kad tā ir konfigurēta kā Open Collector/Open Drain topoloģija. Daudz biežāk ir iekšējie uzvilkšanas/novilkšanas parametri, kas ir piemērojami tikai tad, ja tapa ir konfigurēta kā ievade. Ja varat garantēt, ka jūsu sistēmas ievadi vienmēr kaut kas virza, tas aizņem mazliet jaudas.

3

Kā jūs minējāt, ievades stāvokli var nodrošināt, izmantojot pievilkšanas/novilkšanas rezistorus uz tapām, kuras paredzēts izvadīt.

Tas ir paredzēts, lai samazinātu MCU zibspuldzi / atteici, bet darbosies tikai, lai aizsargātu pret augstas pretestības apstākļiem (pamatā tapa nejauši tiek konfigurēta kā ievade).

SPI (Serial Peripheral Interface) ir sērijas sinhronās datu pārraides standarts pilna dupleksa režīmā, ko izstrādājusi Motorola, lai nodrošinātu vienkāršu un lētu mikrokontrolleru un perifērijas ierīču saskarni. SPI dažreiz sauc arī par četru vadu interfeisu. SPI ir sinhrons protokols, kurā katra pārraide tiek sinhronizēta ar kopējo pulksteņa signālu, ko ģenerē resursdatora ierīce (procesors). Uztvērēja perifērija (slave) sinhronizē bitu secības saņemšanu ar pulksteņa signālu. Vairākas mikroshēmas var pieslēgt vienai mikroshēmu galvenā perifērijas interfeisam. Vadītājs izvēlas pārraidāmo pakārtoto ierīci, aktivizējot mikroshēmas atlases signālu pakārtotā mikroshēmā. Perifērijas ierīces, kuras nav atlasījis procesors, nepiedalās SPI pārraidē.
SPI izmanto četrus digitālos signālus:

  • MOSI vai SI – master output, slave input (angļu: Master Out Slave In). Kalpo datu pārsūtīšanai no galvenās ierīces uz vergu;
  • MISO vai SO – master input, slave output (angļu: Master In Slave Out). Kalpo datu pārsūtīšanai no pakārtotās ierīces uz galveno ierīci.
  • SCK vai SCLK – seriālais pulksteņa signāls (angļu valodā Serial CLocK). Kalpo, lai pārraidītu pulksteņa signālu vergu ierīcēm.
  • C.S. vai SS – mikroshēmu atlase, vergu izvēle (Chip Select, Slave Select) Parasti mikroshēmas atlase tiek veikta zemā loģiskā līmenī.

Atkarībā no polaritātes un pulksteņa fāzes kombinācijām ir iespējami četri SPI darbības režīmi.

SPI režīms Laika diagramma
SPI0 režīms

SPI1 režīms
Aktīvā impulsa līmenis ir augsts.

SPI2 režīms

Vispirms noklikšķinot, pēc tam bīdot.

SPI3 režīms
Aktīvā impulsa līmenis ir zems.
Pirmā maiņa, tad snap.

Tabulā ir pieņemts:

  • MSB - vissvarīgākais bits;
  • LSB — vismazāk nozīmīgais bits.

Master ir jāpielāgojas režīmam, ko izmanto vergs.
Veicot datu apmaiņu, izmantojot SPI interfeisu, mikrokontrolleris var darboties kā galvenais (Master režīms) vai kā vergs (Slave režīms). Šajā gadījumā lietotājs var iestatīt šādus parametrus:

  • darba režīms saskaņā ar tabulu;
  • pārraides ātrums;
  • pārraides formāts (no vismazāk nozīmīgā bita uz lielāko bitu vai otrādi).

Divu mikrokontrolleru savienošana galvenā-pakalpojuma struktūrā, izmantojot SPI interfeisu, tiek veikta saskaņā ar šādu shēmu.

SCK, CS tapas galvenajam mikrokontrolleram ir izejas, bet pakārtotajam mikrokontrollerim ir ieejas.

Datu pārsūtīšana tiek veikta šādi. Ierakstot uz galvenā mikrokontrollera SPI datu reģistru, tiek iedarbināts SPI moduļa pulksteņa ģenerators, un dati bitu pa bitam sāk izvadīt uz MOSI tapu un attiecīgi uz vergu mikrokontrollera MOSI tapu. Pēc pašreizējā baita pēdējā bita izdošanas pulksteņa signāla ģenerators apstājas, vienlaikus iestatot karogu “Pārsūtīšanas beigas” uz “1”. Ja tiek atbalstīti un iespējoti pārtraukumi no SPI moduļa, tiek ģenerēts pārtraukuma pieprasījums. Pēc tam galvenais mikrokontrolleris var sākt pārraidīt nākamo baitu vai, pieliekot vergu SS ieejai loģisko “1” sprieguma līmeni, pārslēgt to gaidstāves stāvoklī.

Vienlaikus ar datu pārsūtīšanu no galvenā uz pakārtoto ierīci, pārraide notiek arī pretējā virzienā, ar nosacījumu, ka vergu SS ieejā ir zems spriegums. Tādējādi katrā maiņas ciklā notiek datu apmaiņa starp ierīcēm. Katra cikla beigās pārtraukuma karodziņš ir iestatīts uz “1” gan galvenajā, gan pakārtotajā mikrokontrollerā. Saņemtie baiti tiek saglabāti saņemšanas buferos vēlākai lietošanai.

Saņemot datus, saņemtais baits jānolasa no SPI datu reģistra, pirms maiņu reģistrā nonāk nākamā baita pēdējais bits. Pretējā gadījumā pirmais baits tiks zaudēts.

SS tapa ir paredzēta, lai atlasītu aktīvo pakārtoto ierīci, un tā vienmēr ir ievade vergu režīmā. Katru reizi, kad SS tapa tiek lietota loģikai 1, SPI modulis tiek atiestatīts. Ja datu pārsūtīšanas laikā notiek izmaiņas šīs tapas stāvoklī, gan sūtīšana, gan saņemšana tiks nekavējoties pārtraukta, un nosūtītie un saņemtie baiti tiks zaudēti.

Ja mikrokontrolleris ir Master režīmā, datu pārsūtīšanas virzienu caur SS tapu nosaka lietotājs. Ja tapa ir konfigurēta kā izeja, tā darbojas kā vispārēja pielietojuma tapa un neietekmē SPI moduļa darbību. Parasti šajā gadījumā to izmanto, lai kontrolētu mikrokontrollera SS tapu, kas darbojas vergu režīmā.

Ja tapa ir konfigurēta kā ieeja, tai jābūt paceltai augstu, lai SPI modulis darbotos pareizi. Zema līmeņa sprieguma pievienošana šai ievadei no jebkuras ārējās ķēdes SPI modulis uztvers kā mikrokontrolleri kā vergu (un dati tiks pārsūtīti uz to).

SPI interfeisa izmantošanas piemērs STM32 mikrokontrolleriem ir labi aprakstīts

Vēl viens interesants un pat noderīgs projekts NodeMCU ir WiFi kontrolēts svārsts. Protams, mēs visi katru dienu redzam šādas ierīces pilsētas ielās. Piemēram, svārsts tiek plaši izmantots transportā, lai parādītu maršruta numuru, nākamo pieturu un visu veidu uzmācīgu reklāmu. Tipisks rādītājs ir LED matrica ar skenēšanas vadības ķēdi un mikrokontrolleri. Tekstu, kas rāpo pa šo matricu, var saglabāt lokāli vai dinamiski atjaunināt, izmantojot WiFi vai GSM. Protams, ja ir tik jaudīga platforma kā NodeMCU (vai jebkura cita ESP8266), atzīmi var izveidot mājās. Ir jēga to uzstādīt kaut kur sabiedriskā vietā, piemēram, skolā. Caur šādu informācijas dēli būs ērti ziņot skolas iekšējās ziņas, temperatūru aiz loga vai pat izcilnieku vārdus! Mūsu laboratorijā mēs uzstādījām zīmogu logā pirmajā stāvā. Ar šīs IoT ierīces palīdzību novēlējām visiem garāmgājējiem laimīgu Jauno gadu un Ziemassvētkus :)

1. LED matricas pievienošana NodeMCU

Mēs strādāsim ar gataviem matricas moduļiem, kurus kontrolē MAX7219 mikroshēma. Mēs jau esam detalizēti rakstījuši par šādu moduļu darbību vienā no Arduino platformas nodarbībām -. Īsumā, katram šādam modulim ir 10 kontakti. Pieci vienā pusē un tie paši otrā pusē. Tas tiek darīts, lai moduļus varētu savienot vienu pēc otra ķēdē. Pie ievades mums ir:
  • divi kontakti barošanai: zemējums GND un +5V;
  • trīs kontakti SPI kopnei: CS, DIN, CLK;
Pieņemsim, ka mēs vēlamies izveidot četru šādu moduļu darba līniju. Mēs ņemam pirmo moduli un savienojam to ar NodeMCU saskaņā ar shēmu:
8x8 LED matrica ar MAX7219 VCC GND DIN C.S. CLK
NodeMCU +5V GND D7 D8 D5
Pēc tam mēs savienojam pārējos trīs ar pirmo moduli:
Statīva izskats:
Četru atsevišķu moduļu vietā ir lietderīgi izmantot gatavu komplektu, piemēram, šo:

2. Programma MAX7219 vadīšanai uz NodeMCU

Mēģināsim palaist ložņu līniju uz matricām, pagaidām bez iespējas attālināti izveidot savienojumu ar NodeMCU. Tas nozīmē, ka ložņu līnija griezīs kādu statisku tekstu. Būtībā tas ir kods no . Vienīgais, kas ir mainījies, ir ķēdes izmērs. Šeit mēs izmantojam nevis sešas matricas, bet tikai četras. #iekļauts #iekļauts #iekļauts Max72xxPanel matrica = Max72xxPanel(D8, 4, 1); neparakstīts garš ticker_next; String tape = "Sveiks no RobotClass!"; int starplikas = 1; int platums = 5 + starplikas; void setup(void)( matrix.setIntensity(7); ) void handleTicker())( for (int i = 0 ; i< width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while (x + width - spacer >= 0 && burts >= 0) ( if (burts< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); delay(50); } } void loop(void){ handleTicker(); } Подаем питание и на матрице начинает двигаться бегущая строка с текстом «Hello from RobotClass!»

3. Web serveris uz NodeMCU, lai kontrolētu LED matricu

Tagad pievienosim programmai tīmekļa serveri, kas parādīs vienu HTML lapu ar ložņu teksta ievadīšanas lauku un pogu. #iekļauts #iekļauts #iekļauts #iekļauts #iekļauts #iekļauts const char* ssid = "ESP"; //sākt WiFi punktu ESP ESP8266WebServer server(80); // startēt serveri portā 80 Max72xxPanel matrica = Max72xxPanel(D8, 4, 1); neparakstīts garš ticker_next; String tape = "RobotClass"; int starplikas = 1; int platums = 5 + starplikas; // HTML lapa index.html const char page = " " "Biržas kontrole" "" "
" "" "" "
" "" ""; // funkcija tiek izsaukta, kad klients nospiež pogu void handleSubmit() ( tape = server.arg("text"); server.send(200, "text/html", page); ) void handleRoot() ( if ( server.hasArg("teksts")) ( handleSubmit(); ) else ( server.send(200, "text/html", lapa); ) ) void setup(void)( delay(1000); WiFi. softAP(ssid );< width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; // центровка по вертикали while (x + width - spacer >= 0 && burts >= 0) ( if (burts< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW, 1); server.handleClient(); } letter--; x -= width; } matrix.write(); delay(50); } } void loop(void){ server.handleClient(); handleTicker(); } Загружаем программу на Node MCU и подаем питание. По-умолчанию, бегущая строка будет крутить текст «RobotClass». Чтобы его изменить, необходимо подключиться к WiFi точке «ESP» и зайти через браузер по адресу: http://127.0.0.1/ В ответ появится страница с полем для ввода текста бегущей строки и кнопкой «Set text». Вводим в поле новый текст, жмем кнопку и смотрим на бегущую строку! Your browser does not support the video tag.

4. Biržas krievu valodā

Pašreizējā formā mūsu ierīce neatbalsta krievu valodu. Ja mēģināsit ievadīt tekstu krievu valodā, uz matricas burtu vietā parādīsies utf8 kodi. Lai to labotu, mums ir nepieciešama papildu funkcija utf2rus. Turklāt programmai pievienosim WiFi punkta paroli. #iekļauts #iekļauts #iekļauts #iekļauts #iekļauts #iekļauts const char* ssid = "ESP"; const char* pwd = "makemyday"; // WiFi punkta parole ESP8266WebServer server(80); Max72xxPanel matrica = Max72xxPanel(D8, 4, 1); neparakstīts garš ticker_next; String tape = "RobotClass.ru"; int starplikas = 1; int platums = 5 + starplikas; const char page = " " "" "" "Biržas kontrole" "" "
" "" "" "
" "" ""; String utf8rus(Virknes avots)( int i,k; Virknes mērķis; neparakstīta char n; char m = ( "0", "\0" ); k = avots.length(); i = 0; while (i< k) { n = source[i]; i++; if (n >= 0xC0) ( slēdzis (n) ( gadījums 0xD0: ( n = avots[i]; i++; if (n == 0x81) ( n = 0xA8; pārtraukums; ) if (n >= 0x90 && n<= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n<= 0x8F) n = n + 0x6F; break; } } } // switch m = n; target = target + String(m); } return target; } void handleSubmit(){ tape = utf8rus(server.arg("text")); server.send(200, "text/html", page); } void handleRoot() { if (server.hasArg("text")) { handleSubmit(); } else { server..softAP(ssid, pwd); server.on("/", handleRoot); server.begin(); matrix.setIntensity(7); } void handleTicker(){ for (int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while (x + width - spacer >= 0 && burts >= 0) ( if (burts< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW, 1); server.handleClient(); } letter--; x -= width; } matrix.write(); delay(50); } } void loop(void){ server.handleClient(); handleTicker(); } Готово! Теперь устройство готово к непрерывной эксплуатации. Осталось сделать крепление для матрицы и поставить бегущую строку на видное место. Чертежи подходящего крепления можно найти тут:

Pamatojoties uz iepriekšējiem ierakstiem un dažiem pēc specifikāciju izlasīšanas, iespējams, radās jautājums - kas ir šis otrs noslēpumainais MCU procesors, kas darbojas ar 100 MHz? Kāpēc tas ir vajadzīgs? Kā to izmantot?
Tikmēr MCU loma dažos gadījumos ir ārkārtīgi svarīga. Tie, kas ir mēģinājuši izmantot Edison darbam ar dažādiem sensoriem, iespējams, jau ir pamanījuši, ka Intel Edison nesniedz reāllaika reakciju uz viņu rādījumiem, strādājot no Linux. Un šeit MCU nāk palīgā. Ir pienācis laiks nedaudz parunāt par šo iegulto mikrokontrolleri, tā arhitektūru, lietojumprogrammām un apsvērt praktisku piemēru.

Sākot ar versiju 2.1, Intel Edison programmatūra ir pievienojusi iespēju izmantot iebūvēto mikrokontrolleri.

Apsveriet sistēmu mikroshēmā, ko izmanto Intel Edison Compute Module:

Intel Edison Compute Module izmantotajā mikroshēmā ir divi procesori:

  1. Divkodolu Intel Atom procesors, kas darbojas ar 500 MHz. Apzīmēts kā resursdatora centrālais procesors.
  2. Mikrokontrolleris ar Minute IA arhitektūru, kas darbojas ar 100 MHz. Apzīmēts kā MCU.
Apskatīsim tuvāk mikrokontrolleri. Minute IA skaitļošanas kodols ir energoefektīva arhitektūra, kuras pamatā ir 486, ar pievienotām instrukcijām Pentium saderībai. Papildus skaitļošanas kodolam mikrokontrolleris satur ievades/izvades apakšsistēmu (GPIO, I2C, High Speed ​​​​UART, DMA) un SRAM. Mikrokontrollerim ir piekļuve visiem GPIO portiem Edison Compute Module. Kopējais koda un datu SRAM apjoms ir 192 kB. Mikrokontrolleris darbina Viper OS reāllaika operētājsistēmu no WindRiver.

Mikrokontrollera lietojumprogramma darbojas virs Viper kodola un kontrolē ar MCU savienotās perifērijas ierīces neatkarīgi no Intel Atom procesora. Piemēram, tas var kontrolēt GPIO portus, mijiedarboties ar sensoriem, izmantojot I2C vai UART protokolu, un sazināties ar Intel Atom procesoru.

Kāpēc Intel Edison ir nepieciešams mikrokontrolleris?

Es izceltu divas jomas, kurās var izmantot iegulto mikrokontrolleri:
  1. Darbs ar I/O portiem un saskarnēm ar reāllaika reakciju.
  2. Energoefektivitāte.
Intel Atom procesors un standarta Yocto Linux izplatīšana neļauj ieviest lietojumprogrammas ar reāllaika reakciju. Uzdevumu plānotājs var novērst lietojumprogrammu, tādējādi radot nepieņemamu un neparedzamu latentumu. Mikrokontrolleris darbina vienu aplikāciju un reāllaika operētājsistēmu, tāpēc ir iespējams nodrošināt reāllaika reakciju. Tas ir nepieciešams daudziem sensoriem, kur sakaru protokols ir atkarīgs no stingras īsu laika intervālu ievērošanas. Lai tos savienotu bez iebūvēta mikrokontrollera, būtu jāizmanto atsevišķs mikrokontrolleris, kurā ieviestu visu funkcionalitāti darbam ar šādiem sensoriem. Piemērs risinājumam Intel Edison ar ārēju mikrokontrolleri ir SparkFun Block Intel Edison - Arduino paplašināšanas plate.

Izmantojot mikrokontrolleri, varat palielināt energoefektivitāti lietojumprogrammās, kurās galvenais procesors var būt miega stāvoklī un mikrokontrolleris gaida noteiktu notikumu (piemēram, sensora sliekšņa vērtību pārsniegšanu).
Ja nepieciešams, mikrokontrolleris pamodina galveno procesoru. Ieviešanas piemērs ir sniegts rakstā MCU SDK un API izmantošana: koda piemēri.

Kā piemēru darbam ar Intel Edison mikrokontrolleri apsveriet iespēju pievienot ultraskaņas attāluma sensoru HC-SR04. Mēs parādīsim izmērīto attālumu Grove LCD RGB fona apgaismojuma rakstzīmju ekrānā.



Sensoram ir 4 izejas:
  • Vcc- 5V.
  • Trig- Trigera signāls sensoram. Mikrokontrolleris sensoram piegādā 10 mikrosekunžu impulsu. Sensors sāk mērīšanas procesu.
  • Atbalss- Atbalss signāls no sensora uz mikrokontrolleru. Impulsa ilgums ir proporcionāls izmērītajam attālumam.
  • Gnd- Zeme.
Šādi darba process ar sensoru izskatās osciloskopa ekrānā:

  • 1 kanāls- Trig
  • 2. kanāls- Atbalss
Mikrokontrolleris nosūta impulsu uz Trig. Pēc tam sensors reaģē ar impulsu uz Atbalss.
Impulsa ilgums ir proporcionāls izmērītajam attālumam.
Izmērīto attālumu aprēķina, izmantojot formulu (ņemta no sensora specifikācijas):
attālums (cm) = atbalss impulsa ilgums (mikrosekundēs) / 58
Saskaņā ar specifikāciju sensors var izmērīt attālumus no 2 līdz 400 cm.
Impulsa ilguma mērīšana ar prognozētu kļūdu bez reāllaika būs problemātiska.
Mērīšanas procesu, piemēram, var iepriekš plānot plānotājs, un mērījumu rezultāts būs nepareizs.

HC-SR04 pievienošana Intel Edison mikrokontrollerim


Izmantotās sastāvdaļas:

  • Edisona skaitļošanas modulis
  • Edisona Arduino padome
  • Grove Basic Shield
  • Rakstzīmju ekrāns Grove LCD RGB fona apgaismojums
  • Ultraskaņas attāluma sensors HC-SR04
  • Maizes dēlis
Pirmkārt, mēs savienojam Edison Compute Module ar Edison Arduino plati. Pēc tam mēs savienojam Grove Basic Shield paplašināšanas plati ar Edison Arduino plati. Grove LCD RGB fona apgaismojums tiek savienots ar Grove Basic Shield I2C galveni.

Ultraskaņas tuvuma sensors HC-SR04 tiek savienots ar Grove Basic Shield šādi:

  • Vcc līdz +5V.
  • Trig piespraust #3.
  • Atbalss piespraust #4.
  • Gnd uz Gnd.
3., 4. tapas tiek atlasītas nejauši, to vietā var izmantot citus.

Intel Edison programmaparatūras atjauninājums

Mikrokontrolleru atbalsts ir pieejams Intel Edison® Board programmaparatūras programmatūras laidiena versijā 2.1 un jaunākā versijā. Ja jūsu programmaparatūra ir vecāka, tā ir jāatjaunina.

Pašreizējo programmaparatūras versiju var uzzināt ar komandu:
# configure_edison --version
Šis piemērs tika izveidots programmaparatūras versijā 146.

Programmaparatūras atjaunināšanas process ir detalizēti aprakstīts rakstā Mirgojoša Intel Edison. Personīgi es parasti izmantoju sadaļā aprakstīto metodi Alternatīva mirgošanas metode.
Pirms programmaparatūras instalēšanas uzmanīgi izlasiet instrukcijas.

Intel Edison pievienošana, izmantojot Ethernet, izmantojot USB

Lai strādātu ar Edison no MCU SDK vides, ir jāizveido tīkla savienojums.
Lai to izdarītu, jums, piemēram, jāpievieno USB kabelis vidējam mikro-USB portam (slēdzim jābūt iestatītam uz mikro-USB portiem).
Operētājsistēmā Linux tīkls ir konfigurēts ar komandu:
# ifconfig usb0 192.168.2.2
Intel Edison IP adrese: 192.168.2.15
Savienojuma process ir sīkāk aprakstīts rakstā Savienojuma izveide ar Intel® Edison plati, izmantojot Ethernet, izmantojot USB.

MCU SDK

Lai izveidotu lietojumprogrammas, kas darbosies ar iegulto mikrokontrolleru, ir izlaista starpplatformu izstrādes vide MCU SDK, kuras pamatā ir Eclipse. Instalēšanas process ir detalizēti apskatīts rakstā MCU SDK instalēšana.
MCU SDK ļauj izveidot, apkopot, lejupielādēt un atkļūdot mikrokontrolleru lietojumprogrammas.

Mijiedarbība ar MCU

Lai mijiedarbotos ar Linux mikrokontrolleri, ir pieejamas vairākas saskarnes:
/dev/ttymcu0 — datu apmaiņas kanāls. Izmantojot Linux, varat strādāt, izmantojot standarta failu operācijas. No mikrokontrollera programmas apmaiņa tiek veikta, izmantojot host_send un host_receive funkcijas.
/dev/ttymcu1 — kanāls, pa kuru mikrokontrolleris sūta atkļūdošanas ziņojumus ar funkciju debug_print.
/sys/devices/platform/intel_mcu/log_level — ļauj iestatīt atkļūdošanas ziņojumu līmeni (fatal, error, brīdinājums, info, atkļūdošana).

Programma priekš Linux

Neliels Python skripts, kas saņems datus no iebūvētā mikrokontrollera un parādīs tos rakstzīmju displejā. Lai strādātu ar rakstzīmju displeju, mēs izmantosim Jhd1313m1 moduli no UPM bibliotēkas.

Show_distance.py skripts:

importēšanas laiks, imports pyupm_i2clcd RET_ERROR = -1, ja __name__ == "__main__": lcd = pyupm_i2clcd.Jhd1313m1(6, 0x3E, 0x62) ar open("/dev/ttymcu0", "w: while True") kā: f.write("get_distance\n") # Sūtīt komandu uz MCU f.flush() line = f.readline() # Lasīt atbildi no MCU, -1 = KĻŪDAS vērtība = int(line.strip("\n\r \t ")) lcd.clear() ja vērtība == RET_ERROR: lcd.setColor(255, 0, 0) # RED lcd.write("ERROR") else: lcd.setColor(0, 255, 0) # GREEN lcd.write("%d cm" % (vērtība,)) time.sleep(1)

Programma mikrokontrolleram

Programmai uz mikrokontrollera, saņemot no saimniekdatora komandu get_distance, ir jāizmēra attālums un jānosūta rezultāts resursdatoram (attālums centimetros vai kļūdas gadījumā -1).
Portu iestatīšana Edison Arduino panelī:
./init_DIG.sh -o 3 -d izeja ./init_DIG.sh -o 4 -d ievade
Atgādināšu, ka mikrokontrolleris strādā ar Edison Compute Module GPIO portiem, kas atšķiras no numerācijas Edison Arduino Board. Atbilstības tabula ir dota, piemēram, raksta Gaismas diodes mirgošana, izmantojot MCU, beigās.

Programma mikrokontrolleram MCU SDK:

#include "mcu_api.h" #include "mcu_errno.h" // Arduino paplašinājuma PIN = 3 #define TRIG 12 // Arduino paplašinājuma PIN = 4 #define ECHO 129 // No HC-SR04 datu lapas #define MIN_DISTANCE MAX_D #define MIN_DISTANCE MAX_D #define 400 #define MAX_WAIT 10000 #define RET_ERROR -1 int get_distance() ( // Sūtīt Trig signālu uz HC-SR04 gpio_write(TRIG, 1); mcu_delay(10); gpio_write(TRIG, 0); // Nolasīt atbalss signālu no HC -SR04 int i = 0 while ((gpio_read(ECHO) == 0) && (i< MAX_WAIT)) { mcu_delay(1); i++; } unsigned long t0 = time_us(); if (gpio_read(ECHO) == 0 || i == MAX_WAIT) { return RET_ERROR; } i = 0; while ((gpio_read(ECHO) == 1) && (i < MAX_WAIT)) { mcu_delay(1); i++; } unsigned long t1 = time_us(); if (gpio_read(ECHO) == 1 || i == MAX_WAIT) { return RET_ERROR; } unsigned long distance = (t1 - t0) / 58; if (MIN_DISTANCE < distance && distance < MAX_DISTANCE) { return distance; } else { return RET_ERROR; } } #define MAX_BUF 255 unsigned char buf; void mcu_main() { // Setup Trig as OUTPUT gpio_setup(TRIG, 1); // Initially set Trig to LOW gpio_write(TRIG, 0); // Setup Echo as INPUT gpio_setup(ECHO, 0); while (1) { unsigned int len; len = host_receive(buf, MAX_BUF); if ((len >= 12) && (strncmp(buf, "get_distance", 12) == 0)) (neparakstīts int distance; distance = get_distance(); len = mcu_snprintf(buf, MAX_BUF, "%d\n", distance); host_send (buf, len);