Kodētāja sgp 1 0196 elektroinstalācijas shēma. Kodētāja pievienošana PIC mikrokontrolleram

Beidzot es saņēmu šo brīnišķīgo vērpjot, un tagad es vēlos jums pastāstīt, kā ar to strādāt. Mans kodētājs (EC12E24204A9) ir apmēram šāds:

Kodētājam ir trīs tapas: Common, A un B. Common parasti vienmēr ir savienots ar zemi, bet pārējie divi - ar jebkuru mikrokontrollera tapu. Tapas A un B jāpievelk pie pozitīvās barošanas avota caur rezistoriem apmēram 10 kOhm, lai izslēgtu viltus trauksmes signālus. Es neiesaku izmantot iekšējo mikrokontrollera pievilkšanu. Viņa ir ļoti vāja. Lai parādītu, kā tas darbojas, pakarināsim vēl 8 gaismas diodes. (piezīme: ja tiek izmantoti mega16, mega32 un vecāki, tad jtag ir jāizslēdz, pretējā gadījumā puse no gaismas diodēm nedeg)
Tātad mēs saņēmām šādu shēmu:


Pagrieziet kodētāja pogu pa labi - gaisma darbojas pa labi. Pagriezieties pa kreisi - gaisma iet pa kreisi. Kā darbojas kodētājs? Mēs izdomāsim. Nav nekā sarežģīta. Apskatīsim zemāk redzamos grafikus.
Pagriežot kodētāju vienā virzienā, signāls izskatās šādi:

Citam:

Rodas jautājums, kā mikrokontrolleris var atšķirt kodētāja rotācijas virzienu?

Ir divi populāri kodētāja aptaujas algoritmi:

  • Pārtraukt aptauju
  • Aptauja, salīdzinot kodētāja iepriekšējo stāvokli un pašreizējo

Katrai no šīm aptaujas metodēm ir savas priekšrocības un trūkumi. Es izmēģināju abus un izvēlējos otro metodi. Laba lieta par aptauju ar pārtraukumiem ir tā, ka jūs varat nodrošināt tūlītēju atbildi uz kodētāja pogas pagriešanu. Bet ir arī nopietns trūkums. Piemēram, kontakta atlēciens. Lai to apspiestu, protams, varat izmantot dažādus programmatūras un aparatūras rīkus, taču es neuztraucos. Sīkāk apskatīsim otro aptaujas algoritmu. Darbības laikā mikrokontrolleris nepārtraukti nolasa datus no tapām, uz kurām karājas kodētājs, un salīdzina izlasīto ar iepriekšējā nolasījuma rezultātu. Atkarībā no stāvokļu salīdzināšanas rezultātiem programma izdara secinājumus par rotācijas virzienu. Programmā ir komentāri, domāju, ka ar tiem pietiks, lai saprastu algoritmu. Ja jums ir kādi jautājumi, varat uzdot, kā vienmēr, komentāros.

Inkrementālais kodētājs izskatās kā potenciometrs, bet atšķirībā no potenciometra tam nav gala pozīciju, tas var griezties abos virzienos neierobežotu apgriezienu skaitu. Jāņem vērā arī tas, ka inkrementālais kodētājs negriežas tik vienmērīgi kā potenciometrs, bet gan soļos. To var redzēt automašīnas radio, osciloskops, mūzikas centrs, veļas mazgājamā mašīna un cits aprīkojums, kur parametra pielāgošana tiek veikta plašās robežās. Protams, parametrus var mainīt arī, izmantojot pogas, piemēram, lai mūzika kļūtu skaļāka par 20 vērtībām, kontrolējot pogu, tā jānospiež 20 reizes, un, vadot kodētāju, pagrieziet to plkst. noteiktu leņķi, atkarībā no apstrādes algoritma.

Inkrementālais kodētājs apzīmē divus kontaktus, kuru aizvēršanas secība ir atkarīga no rotācijas virziena.


Patiesībā inkrementālais kodētājs pārveido vārpstas rotāciju par elektriskiem impulsiem kas satur informāciju par rotācijas virzienu.

Izveidosim testa shēmu, kas parādīta attēlā iepriekš, un izveidosim savienojumu ar tapām A un B osciloskops, uzvilkšanas rezistori - 4,7K.
Pagriezīsim kodētāju pulksteņrādītāja virzienā.


Tagad pretēji pulksteņrādītāja virzienam.


Oscilogrammas parāda, ka atkarībā no rotācijas virziena mainās kontaktu aizvēršanas secība. Bet priekšpuse ne vienmēr izrādās tik skaista.


Tā kā kontakti ir mehāniski, tie ir pakļauti atsitienam, tas ir, aizveroties materiālu elastības dēļ, rodas vairāki nekontrolēti īssavienojumi un atveres, ko var redzēt iepriekš esošajā oscilogrammā.

Ir divi veidi, kā tikt galā ar atlēcienu, pirmais sastāv no kondensatoru un rezistoru pievienošanas, kā parādīts attēlā zemāk.


Tā kā atlēciens ir īslaicīga parādība, to viegli izdzēš kondensators.


Oscilogramma parāda, ka pēc kondensatoru uzstādīšanas fasādes kļuva mazāk stāvas, un atlēciens pazuda.

Otrs veids- programmatūra, un tas viss ir atkarīgs no kodētāja izvades aptaujas īstenošanas. Ja kodētāja statusu uzrauga ārēji pārtraukumi, tad pēc pārtraukuma iedarbināšanas ir jāveic 20-30 milisekundes aizkavēšanās, kuras laikā MC nereaģēs uz izvades stāvokļa izmaiņām, tas ir, nejutīs atlēcienu. Ja kodētāja tapu aptauja tiek veikta uz taimera, tad intervālam starp aptaujām jābūt ilgākam par atlēciena ilgumu, tām pašām 20-30 milisekundēm.

padomāsim datu apstrādes metodes, kas nāk no kodētāja.
Pirmā metode ir tāda, ka mēs savienojam vienu no kodētāja kājiņām ar ārējo pārtraukumu izvadi un iestatām to pārtraukšanai uz krītošās malas. Pārtraukumā mēs pārbaudām otras kājas stāvokli, un, ja tas ir nulle, tad rotācija notiek vienā virzienā, pretējā gadījumā otrā. Zemāk ir kods, kas ievieš šo metodi AVR.
#iekļaut ISR (INT2_vect) (ja (PINB un 0X02) (PORTB | = (1<<0); } else { PORTB &= ~(1<<0); } //антидребезг _delay_ms(20); //сбрасываем флаг прерывания вызванный дребезгом GIFR = (1<Kad kodētājs ir pagriezts uz vienu pusi, iedegas gaismas diode, un, kad kodētājs tiek pagriezts uz otru, tas nodziest.

Otra metode ir salīdzinot pašreizējo stāvokli ar iepriekšējo... Izteiksim impulsa vilciena loģikas līmeņus kā nulles un vienības.


Tad mēs iegūstam ierobežotu skaitu kodētāja stāvokļu. Pirmais cipars ir kodētāja pirmās izvades loģikas līmenis, otrais - otrās izejas loģikas līmenis.

Pieņemsim, ka pēdējais stāvoklis, kurā atradās kodētājs, ir vienāds ar trim, ja nākamais stāvoklis ir vienāds ar vienu, tad tas griežas vienā virzienā, ja divi, tad otrā. Izrādās, ka jūs varat noteikt pāreju no viena stāvokļa uz citu un noteikt rotācijas virzienu, taču visvienkāršākā ieviešana ir tad, kad pārejat no 11 uz 01 un 10. Zemāk ir kods, kas ievieš aprakstīto AVR algoritmu,
#define F_CPU 8000000UL #include #iekļaut uint8_t last_state = 0; ISR (TIMER0_COMP_vect) (// abas kodētāja tapas ir savienotas ar porta B 2. un 3. tapu // lasiet to stāvokli uint8_t current_state = (PINB & 0x06) >> 1; // ņemiet vērā pāreju tikai tad, ja iepriekšējais stāvoklis ir 11 // un ja tas nav vienāds ar jauno, ja ((last_state == 3) && (last_state! = Current_state)) (// ja jaunais stāvoklis ir 01 - ieslēdziet LED, ja (current_state == 1) (PORTB | = 0x01;) // ja jaunais stāvoklis ir 10 - izslēdziet LED, ja (current_state == 2) (PORTB & = ~ 0x01;)) // izejot no pārtraukuma, pašreizējais stāvoklis kļūst par iepriekšējo last_state = strāvas_valsts;) int main (void) (// divas ieejas DDRB kodētāja pievienošanai & = ~ 0x06; // izvelciet ieejas barošanas avotā ; // iestatiet taimeri atiestatīt sakritības dēļ TCCR0 = (1<Tas ir viss.
Kodētājs nopircis

Kodētāja KY-040 modulis ir mehānisks rotācijas leņķa sensors, kas pārvērš rotējoša objekta (piemēram, vārpstas) griešanās leņķi elektriskos signālos, kas ir nobīdīti par 90 grādiem viens pret otru. Šim modulim ir trīs tapas - CLK, DT un SW. Signāli, kas pārvietoti par 90 grādiem viens pret otru, parādās precīzi uz CLK un DT tapām, pagriežot pulksteņrādītāja virzienā / pretēji pulksteņrādītāja virzienam, SW tapu izmanto, lai iegūtu kodētāja centrālās ass stāvokli, kas darbojas kā poga.

Tātad, neiedziļinoties ķēdes kodētāja ierīces detaļās (tas būs atsevišķs raksts), savienosim to ar Arduino Uno plati. Kodētāja moduļa savienojuma shēma kopā ar daudzciparu septiņu segmentu indikatoru:

Mums pietiks, ja analizēsim signālu stāvokli, ko sniedz CLK un DT tapas, tāpēc ir neliela shēma, kas parādīs, kā signāli tiek mainīti, griežoties vienā vai otrā virzienā.

No diagrammas var redzēt, ka katru reizi, kad signāls A (kodētāja CLK tapa) pāriet no augsta uz zemu, tiek nolasīts B signāla stāvoklis (kodētāja DT tapa). Ja signāls B dod augstu signāla līmeni, tas nozīmē, ka kodētāja rotācija notiek pulksteņrādītāja virzienā. Ja signāls B dod zemu signāla līmeni, pārejot signālam A no zema uz augstu, tas nozīmē, ka kodētāja rotācija notiek pretēji pulksteņrādītāja virzienam. Izlasot abus šos signālus programmā, jūs varat noteikt rotācijas virzienu, arī skaitot signāla B impulsus, varat palielināt vai samazināt programmatūras impulsu skaitītāju.

Lai nolasītu signālus A un B, kā arī signālus no kodētāja centrālās ass (atcerieties - tas darbojas kā poga), varat izmantot tālāk aprakstīto struktūru. Šo dizainu var iebūvēt skicē, pievienojot tai dažādas funkcijas, visu ierobežo tikai izstrādātāja vēlme un iztēle. Struktūras pamatteksts ir pietiekami labi komentēts, skices teksta vienkāršības labad var noņemt papildu komentārus. Tātad kodētāja signālu lasīšanas un pārveidošanas struktūra noderīgos datos:

// Pagaidu mainīgie signāla līmeņu saglabāšanai // saņemti no kodētāja neparakstīts char encoder_A, encoder_B, encoder_A_prev; // Mainīgais, lai izsekotu pogu klikšķus - // kodētāja statiskā boola centrālā ass SW_State = false; void setup () (// Iepriekš iestatīti // Mainīgas deklarācijas // Inicializēt portus utt.) void loop () (// Savienojiet CLK ar Arduino tāfeles 3. tapu // Savienojiet DT ar 4. tapu Arduino panelī // Lasīt kodētāja izvadi // (! Encoder_A && encoder_A_prev) (// Ja signāla līmenis B ir augsts, ja (kodētājs_B) (// Tas nozīmē, ka rotācija notiek pulksteņrādītāja virzienā // Šeit jūs varat ievietot palielinājuma darbību // Šeit jūs varat ievietot dažus savus // datu apstrādes darbības vajadzīgajā virzienā) // Ja signāla līmenis ir zems (// Tas nozīmē, ka rotācija ir pretēji pulksteņrādītāja virzienam // Šeit jūs varat ievietot samazināšanas operāciju // Šeit jūs varat ievietot dažas savas // datu apstrādes darbības vajadzīgajā virzienā)) // Lietošanai noteikti jāsaglabā pašreizējā signāla līmeņa A stāvoklis izmantojot šo vērtību nākamajā programmas skenēšanas ciklā encoder_A_prev = encoder_A; // Mēs strādājam ar kodētāja centrālo asi - pogu // Šis koda gabals veido sava veida pārslēgšanas sprūdu // Lasiet 2. tapas vērtību uz Arduino plates // pie kuras ir pievienots kodētāja SW tapa // Ja centrālā ass ir nospiesta, tad SW signāls būs zems, ja (! DigitalRead (2)) (// Ja mainīgais SW_State ir iestatīts uz false, tad iestatiet to uz true, ja (! SW_State) (// Un atcerieties stāvoklis SW_State = true;) // Un otrādi - ja mainīgais SW_State ir iestatīts uz true, // tad atiestatiet to uz false false (// Un atcerieties stāvokli SW_State = false;)))

Tālāk ir parādīta skice kodētāja signālu apstrādei un skaitītāja vērtības parādīšanai displejā. Šajā skicē ir iebūvēta kodētāja signālu lasīšanas un konvertēšanas struktūra, kas tika aprakstīta iepriekš.

#include "LedControl.h" / * * Mēs savienojam LedControl.h bibliotēku * un izveidojam LedControl klases objektu *, savukārt 7 segmentu displejs ar MAX72xx draiveri * ir jāpievieno Arduino platei šādi: * Arduino -> Displeja modulis MAX72xx * Arduino -> Displeja modulis MAX72xx * Arduino -> Displeja modulis MAX72xx * Arduino -> Displeja modulis MAX72xx * Arduino -> Displeja modulis MAX72xx * Arduino -> Kodētāja modulis * Arduino -> Kodētāja kodētājs Modulis * / LedControl lc = LedControl (12, 11, 10, 1); // Nosauciet portālu adreses uz Arduino tāfeles const int Dir = 4; const int Solis = 3; const int Slēdzis = 2; // Skaitītājs ir mainīgais skaitītāja vērtības saglabāšanai statiskā garā Counter = 0; // SW_State - karoga sprūda centrālās ass statiskās bool nospiešanas izsekošanai SW_State = false; // Pagaidu mainīgie kodētāja signālu līmeņu saglabāšanai unsigned char encoder_A, encoder_B, encoder_A_prev; void setup () (// Ierīce (7 segmentu displejs) tiek izņemta no miega režīma lc.shutdown (0, false); // Iestatiet displeja spilgtumu uz 8 // Kopējie iespējamie spilgtuma režīmi no 0 līdz 15 lc. setIntensity (0, 8); // Notīrīt displeju lc.clearDisplay (0); // Kodētāja portu konfigurēšana pinMode (Dir, INPUT); pinMode (Step, INPUT); pinMode (Switch, INPUT);) void loop () (// Nolasiet kodētāja izeju vērtības // Un saglabājiet tos mainīgajos encoder_A = digitalRead (Step); encoder_B = digitalRead (Dir); // Ja signāla līmenis A ir zems, // un iepriekšējais cikls bija augsts, ja (! Encoder_A && encoder_A_prev) (// Ja signāla līmenis B ir augsts, ja (kodētājs_B) (// Tas nozīmē, ka rotācija ir pulksteņrādītāja virzienā // Mūsu nosacījums: // Ja skaitītāja vērtība ir lielāka par vai vienāds ar maksimālo skaitu, ja (skaitītājs> = 99999999) (// atiestatiet skaitītāja vērtību skaitītājs = 0;) cits (// pretējā gadījumā palieliniet ikreiz, kad noklikšķināt par vienu skaitītāju ++;)) // ja signāla līmenis B ir zems (// Zn Nolasa rotāciju pretēji pulksteņrādītāja virzienam // Ja skaitītāja vērtība ir mazāka vai vienāda ar nulli, ja (Skaitītājs<= 0) { //проинициализировать значение максимальным числом Counter = 99999999; } else { //Иначе декрементировать при каждом щелчке на единицу Counter --; } } } //Обязательно нужно сохранить состояние текущего уровня сигнала А //для использования этого значения в следующем цикле сканирования программы encoder_A_prev = encoder_A; //Работаем с центральной осью энкодера - кнопкой //Этот кусок кода образует собой как бы перекидной триггер //Считываем значение пина 2 на плате Arduino //которомый проименован как Switch //Если центральная ось нажата - то сигнал Switch будет иметь низкий уровень if(!digitalRead(Switch)) { //Если переменная SW_State установлена в false то установить её в true if(!SW_State) { //И запомнить состояние SW_State = true; } //И наоборот - если переменная SW_State установлена в true, //то сбросить её в false else { //И запомнить состояние SW_State = false; } } //Часть программы которая заполняет разряды //семисегментного дисплея значением счетчика long intCounter = Counter; int divCounter; for(int i = 0; i < 8; i ++) { divCounter = intCounter % 10; intCounter = intCounter / 10; if(intCounter == 0 && SW_State) { if(divCounter == 0) { if(i == 0) { lc.setChar(0, 0, "0", false); } else { lc.setChar(0, i, " ", false); } } else { lc.setDigit(0, i, divCounter, false); } } else { lc.setDigit(0, i, divCounter, false); } } }

Video, kā tas darbojas:


Mēs ceram, ka jums patika šī raksta materiāls, atstājiet savus jautājumus, vēlmes un kritiku zemāk esošajos komentāros.

  • Izmantojot rūpnieciskos optiskos kodētājus Arduino
Lūdzu, iespējojiet javascript, lai komentāri darbotos.

Lai īstenotu demonstrācijas projektu, mums ir nepieciešams:

  • 24 pozīciju kodētājs;
  • 16 gaismas diodes (3 mm);
  • LED draiveris A6276;
  • mikrokontrolleris PIC18F2550.

Kodētājs ir mūsdienīgs un oriģināls digitālo ierīču vadības elements, un pēc izskata tas ir līdzīgs mainīgam pretestībai (skat. Attēlu zemāk). Vēl viens šīs vadības nosaukums ir leņķa sensors, rotācijas sensors. Vārpstas griešanos papildina klikšķi, piemēram, 24 klikšķi uz vienu apgriezienu. Kodētājam ir 3 tapas - A, B, C, un to izmanto ātrai datu ievadīšanai digitālajās ierīcēs. Dažos modeļos ir iebūvēta poga, kuru iedarbina, nospiežot kodētāja vārpstu (tiek pievienota vēl viena izeja).

Kodētāja darbības princips

Pagriežot vienu klikšķi, piemēram, pa labi, vispirms tiek aizvērts kontakts A + C, pēc tam - B + C. Kad vārpsta griežas šajā klikšķī, kontakti atveras tādā pašā secībā. Pagriežot vārpstu citā virzienā, slēgšanas secība ar kontaktu C mainās, t.i. pagriežoties pa kreisi, vispirms tiek aizvērts B + C, pēc tam A + C.

Izmantojot kodētāju mikrokontrolleru projektos, iespējams, izmantojot vienu un to pašu kodētāju, tiek ieviesti vairāki dažādi datu ievades veidi, tomēr tas prasa zināmu atgriezenisko saiti un vizualizāciju, lai lietotājs zinātu, kādu informāciju viņš ievada un kādā stāvoklī kodētājs atrodas.

Shematiska diagramma

Kodētāja tapas A un B ir savienotas ar mikrokontrollera pieslēgvietām RB4 un RB5, kodētāja tapa C ir pievienota zemei. Ir vērts atzīmēt, ka pievilkšanas rezistori jāpievieno A un B tapu signālu līnijām. Kodētājs nav nejauši pievienots norādītajām mikrokontrollera I / O līnijām: pirmkārt, portam B ir iebūvēti uzvilkšanas rezistori, un mums nav jāpievieno ārējie, otrkārt, mikrokontrollera B portam ir ļoti noderīga funkcija - "interrupt -on -change" - pārtraukums uz līmeņa maiņu, kas ļaus mums uzraudzīt kodētāja statusu.

Ievades datu vizualizēšanai tiek izmantotas 16 parastās 3 mm gaismas diodes, un tās atradīsies uz PCB ap uzstādīto kodētāju. Gaismas diodes ir savienotas ar mikroshēmu A6276.

A6276 ir 16 bitu sērijas LED draiveris. Vadītājā ir 16 bitu CMOS nobīdes reģistrs, saistītie aizbīdņi un draiveri, lai vadītu gaismas diodes, un var vadīt vairāk gaismas diodes, nekā to atļauj mikrokontrolleris. Turklāt draiveri var vadīt, izmantojot SPI saskarni, kas vēl vairāk samazina izmantoto I / O līniju skaitu un padara projektu mērogojamu.

Mikrokontrollera programmatūra mūsu problēmas risināšanai ir salīdzinoši vienkārša. Ir 3 darbības režīmi (informācijas ievade) un atgriezeniskā saite:

  • 360 ° pozicionēšanas režīms - šajā režīmā gaismas diodes norāda kodētāja pašreizējo "pozīciju", lietotājs var pagriezt kodētāja vārpstu pa kreisi un pa labi jebkurā leņķī;
  • "Skaļuma / līmeņa" režīms - šajā režīmā gaismas diodes norāda pašreizējo vērtību starp ievades diapazona minimālo un maksimālo līmeni (piemēram, skaļuma līmeni audio ierīcēs);
  • 3 pozīciju rotācijas pārslēgšanas režīms - šajā režīmā lietotājs var izvēlēties tikai trīs pozīcijas, pagriežot kodētāja vārpstu pa kreisi / pa labi.

Projekta demonstrācija

Lejupielādes

Ir atrodams ZIP arhīvs ar projektu MPLAB vidē un avota kodu Hitech C, kā arī iespiedshēmas plates shematiskā diagramma un topoloģija.

Šajā demonstrācijas projektā mēs aplūkosim uzdevumu savienot pārī vadību, ko sauc par kodētāju, ar PIC mikrokontrolleri.

Lai īstenotu demonstrācijas projektu, mums ir nepieciešams:

  • 24 pozīciju kodētājs;
  • 16 gaismas diodes (3 mm);
  • LED draiveris;
  • mikrokontrolleris.

Kodētājs ir mūsdienīgs un oriģināls digitālo ierīču vadības elements, un pēc izskata tas ir līdzīgs mainīgam pretestībai (skat. Attēlu zemāk). Vēl viens šīs vadības nosaukums ir leņķa sensors, rotācijas sensors. Vārpstas griešanos papildina klikšķi, piemēram, 24 klikšķi uz vienu apgriezienu. Kodētājam ir 3 tapas - A, B, C, un to izmanto ātrai datu ievadīšanai digitālajās ierīcēs. Dažos modeļos ir iebūvēta poga, kuru iedarbina, nospiežot kodētāja vārpstu (tiek pievienota vēl viena izeja).

Kodētāja darbības princips

Pagriežot vienu klikšķi, piemēram, pa labi, vispirms tiek aizvērts kontakts A + C, pēc tam - B + C. Kad vārpsta griežas šajā klikšķī, kontakti atveras tādā pašā secībā. Pagriežot vārpstu citā virzienā, slēgšanas secība ar kontaktu C mainās, t.i. pagriežoties pa kreisi, vispirms tiek aizvērts B + C, pēc tam A + C.

Izmantojot kodētāju mikrokontrolleru projektos, iespējams, izmantojot vienu un to pašu kodētāju, tiek ieviesti vairāki dažādi datu ievades veidi, tomēr tas prasa zināmu atgriezenisko saiti un vizualizāciju, lai lietotājs zinātu, kādu informāciju viņš ievada un kādā stāvoklī kodētājs atrodas.


Shematiska shēma: kodētāja pievienošana PIC mikrokontrolleram (noklikšķiniet, lai palielinātu)

Kodētāja tapas A un B ir savienotas ar mikrokontrollera pieslēgvietām RB4 un RB5, kodētāja tapa C ir pievienota zemei. Ir vērts atzīmēt, ka pievilkšanas rezistori jāpievieno A un B tapu signālu līnijām. Kodētājs nav nejauši pievienots norādītajām mikrokontrollera I / O līnijām: pirmkārt, portam B ir iebūvēti uzvilkšanas rezistori, un mums nav jāpievieno ārējie, otrkārt, mikrokontrollera B portam ir ļoti noderīga funkcija - "interrupt -on -change" - pārtraukums uz līmeņa maiņu, kas ļaus mums uzraudzīt kodētāja statusu.

Ievades datu vizualizēšanai tiek izmantotas 16 parastās 3 mm gaismas diodes, un tās atradīsies uz PCB ap uzstādīto kodētāju. Gaismas diodes ir savienotas ar mikroshēmu A6276.

Mikroshēma ir LED draiveris ar 16 bitu sērijas informācijas ievadi. Vadītājā ir 16 bitu CMOS nobīdes reģistrs, saistītie aizbīdņi un draiveri, lai vadītu gaismas diodes, un var vadīt vairāk gaismas diodes, nekā to atļauj mikrokontrolleris. Turklāt draiveri var vadīt, izmantojot SPI saskarni, kas vēl vairāk samazina izmantoto I / O līniju skaitu un padara projektu mērogojamu.

Mikrokontrollera programmatūra mūsu problēmas risināšanai ir salīdzinoši vienkārša. Ir 3 darbības režīmi (informācijas ievade) un atgriezeniskā saite:

  • 360 ° pozicionēšanas režīms - šajā režīmā gaismas diodes norāda kodētāja pašreizējo "pozīciju", lietotājs var pagriezt kodētāja vārpstu pa kreisi un pa labi jebkurā leņķī;
  • "Skaļuma / līmeņa" režīms - šajā režīmā gaismas diodes norāda pašreizējo vērtību starp ievades diapazona minimālo un maksimālo līmeni (piemēram, skaļuma līmeni audio ierīcēs);
  • 3 pozīciju rotācijas pārslēgšanas režīms - šajā režīmā lietotājs var izvēlēties tikai trīs pozīcijas, pagriežot kodētāja vārpstu pa kreisi / pa labi.

Projekta demonstrācija