- Configurare și cerințe hardware
- Circuitul de interfață cu LED-uri și butoane N76E003
- N76E003 Diagrama Pin-Out
- Program simplu de control GPIO pentru N76E003
- Programarea N76E003 și verificarea ieșirii
În tutorialul nostru anterior, am folosit un program de bază intermitent cu LED-uri pentru a începe cu ghidul N76E003, am învățat deja cum să configurăm Keil IDE și să configurăm mediul pentru programarea unității de microcontroler nuvoton N76E003. Este timpul să vă deplasați puțin mai departe și să utilizați interfața de bază GPIO pentru controlul hardware-ului suplimentar. Dacă sunteți interesat, puteți verifica și alte tutoriale GPIO cu microcontroler care sunt enumerate mai jos-
- STM32 Nucleo64 cu CubeMx și TrueSTUDIO - control LED
- STM8S cu control Cosmic C GPIO
- PIC cu MPLABX LED Blink Tutorial
- MSP430 cu Code Composer Studio - Control LED simplu
Deoarece în tutorialul nostru anterior, am folosit doar un LED pentru a clipi folosind un pin IO ca ieșire. În acest tutorial, vom învăța cum să folosim un alt pin IO ca intrare și să controlăm un LED suplimentar. Fără a pierde mult timp, să evaluăm ce fel de configurare hardware avem nevoie.
Configurare și cerințe hardware
Deoarece un comutator trebuie utilizat ca intrare, primul lucru pe care îl avem nevoie este un buton. De asemenea, avem nevoie de un LED suplimentar care să fie controlat de acel buton. În afară de aceste două, avem nevoie și de un rezistor pentru a limita curentul cu LED-uri și un rezistor suplimentar pentru scopurile de tragere de-a lungul butonului. Acest lucru va fi demonstrat în continuare în secțiunea schematică. Componentele de care avem nevoie -
- Un buton (orice fel de comutator momentan specific - comutator tactil)
- Orice culoare a LED-ului
- Rezistor de 4.7k pentru tragere în jos
- Rezistor 100R
Ca să nu mai vorbim, în afară de componentele de mai sus, avem nevoie de placa de dezvoltare bazată pe microcontroler N76E003, precum și de programatorul Nu-Link. În plus, sunt necesare și fire de conectare și de conectare pentru conectarea tuturor componentelor, așa cum se arată mai jos.
Circuitul de interfață cu LED-uri și butoane N76E003
După cum putem vedea în schema de mai jos, LED-ul de testare aflat în interiorul plăcii de dezvoltare este conectat la portul 1.4 și un LED suplimentar este conectat la portul 1.5. Rezistorul R3 este utilizat pentru a limita curentul LED.
În pinul 1.6, este conectat un buton numit SW. Ori de câte ori butonul este apăsat, pinul va deveni ridicat. În caz contrar, va deveni redus cu rezistența de tragere R1 de 4,7K. Puteți afla mai multe despre rezistențele pull-up și pull-down dacă sunteți nou la acest concept.
Pinul este, de asemenea, un pin legat de program, accesat de programator. Este folosit pentru a trimite date de program. Cu toate acestea, vom vedea motivul din spatele selectării acelor pini, precum și vom obține informații corecte despre maparea pinilor N76E003.
N76E003 Diagrama Pin-Out
Diagrama PIN N76E003 poate fi văzut în continuare image-
După cum putem vedea, fiecare pin are mai multe funcții și poate fi utilizat în scopuri diferite. Să luăm un exemplu. Pinul 1.7 poate fi utilizat ca întrerupere sau intrare analogică sau ca operațiune de intrare-ieșire de uz general. Astfel, dacă vreun pin este folosit ca pin I / O, atunci funcționalitatea respectivă nu va fi disponibilă.
Datorită acestui fapt, pinul 1.5 care este utilizat ca pin de ieșire cu LED, va pierde PWM și alte funcționalități. Dar aceasta nu este o problemă, deoarece nu este necesară o altă funcționalitate pentru acest proiect. Motivul din spatele alegerii pinului 1.5 ca ieșire și pinului 1.6 ca intrare, din cauza celei mai apropiate disponibilități a pinilor GND și VDD pentru o conexiune ușoară.
Cu toate acestea, în acest microcontroler din 20 de pini, 18 pini pot fi folosiți ca pin GPIO. Pinul 2.0 este folosit în mod dedicat pentru resetarea intrării și nu poate fi folosit ca ieșire. În afară de acest pin, toți pinii pot fi configurați în modul descris mai jos.
Conform fișei tehnice, PxM1.n și PxM2.n sunt două registre care sunt utilizate pentru a determina operațiunea de control a portului I / O. Acum, a scrie și a citi un port GPIO este cu totul altceva. Deoarece scrierea într-un registru de control al portului modifică starea de blocare a portului, în timp ce citirea portului obține starea stării logice. Dar pentru citirea unui port, acesta trebuie setat într-un mod de intrare.
Program simplu de control GPIO pentru N76E003
Programul complet utilizat în acest tutorial poate fi găsit în partea de jos a acestei pagini, explicația codului este următoarea.
Setarea pinului ca intrare
Să începem mai întâi cu intrarea. După cum sa discutat chiar înainte, pentru a citi starea unui port, acesta trebuie setat ca intrare. Prin urmare, deoarece am selectat P1.6 ca pin al comutatorului de intrare, l-am notat prin linia de mai jos a fragmentului de cod.
#define SW P16
Același pin trebuie setat ca intrare. Astfel, în funcția de configurare, pinul este setat ca intrare folosind linia de mai jos.
void setup (void) {P14_Quasi_Mode; P15_Quasi_Mode; P16_Input_Mode; }
Această linie P16_Input_Mode; este definit în fișierul de antet Function_define.h din „BSP include library” care setează bitul pin ca P1M1- = SET_BIT6; P1M2 & = ~ SET_BIT6 . SET_BIT6 este de asemenea definită în același fișier antet AS-
#define SET_BIT6 0x40
Setarea pinilor ca ieșire
La fel ca pinul de intrare, pinul de ieșire utilizat de LED-ul de test integrat și LED-ul extern 1 este, de asemenea, definit în prima secțiune a codului cu PIN-urile respective.
#define Test_LED P14 #define LED1 P15
Acei pini sunt setați ca ieșire în funcția de configurare folosind liniile de mai jos.
void setup (void) { P14_Quasi_Mode; // Ieșire P15_Quasi_Mode; // Ieșire P16_Input_Mode; }
Aceste linii sunt, de asemenea, definite în fișierul antet Function_define.h unde setează bitul pin ca P1M1 & = ~ SET_BIT4; P1M2 & = ~ SET_BIT4 . SET_BIT6 este de asemenea definită în același fișier antet AS-
#define SET_BIT4 0x10
Bucla Infinite While
Un hardware, dacă este conectat la alimentare și funcționează perfect, ar trebui să dea ieșire continuu, aplicația nu se oprește niciodată. Face același lucru pentru vremuri infinite. Aici apare funcția unei bucle while infinite. Aplicația din bucla while rulează infinit.
în timp ce (1) { Test_LED = 0; sw_delay (150); Test_LED = 1; sw_delay (150); if (SW == 1) {LED1 = 0; } else {LED1 = 1; }}}
Bucla while de mai sus clipește ledul conform valorii sw_delay și verifică, de asemenea, starea SW. Dacă comutatorul este apăsat, P1.6 va fi ridicat și, astfel, când este apăsat, starea de citire va fi 1. În această situație, pentru moment, comutatorul este apăsat și portul P1.6 rămâne ridicat, LED1 va aprinde.
Programarea N76E003 și verificarea ieșirii
La începutul tutorialului N76E003, am învățat cum să programăm N76E003 deja, așa că vom repeta aceiași pași aici pentru a programa placa noastră. Codul s-a compilat cu succes și a returnat 0 avertisment și 0 erori și a clipit folosind metoda intermitentă implicită de Keil.
După cum puteți vedea în imaginea de mai sus, LED-ul nostru extern se aprinde când apăs butonul. Funcționarea completă a proiectului poate fi găsită în videoclipul legat mai jos. Sper că ți-a plăcut tutorialul și ai învățat ceva util dacă ai întrebări, lasă-le în secțiunea de comentarii de mai jos. De asemenea, puteți utiliza forumurile noastre pentru a pune alte întrebări tehnice.