Documente Academic
Documente Profesional
Documente Cultură
AL REPUBLICII MOLDOVA
UNIVERISITATEA TEHNICĂ A MOLDOVEI
FACULTATEA ELECTRONICĂ ȘI TELECOMUNICAȚII
Departamentul TELECOMUNICAȚII ȘI SISTEME ELECTRONICE
Proiect de an
La obiectul Microprocesoare
Tema: Matrice LED 8x25 Pralel Sincron
________________________ Namolovan A.
semnătura nume, prenume
Chisinău 2023
1
Cuprins
1. Scopul proiectului.........................................................................
2. Cite ceva despre Arduino UNO.........................................................3-7
3. Capitolul 1- Descrierea unității periferice.........................................7-11
4. Capitolul 1.2- Elaborarea interfeței...................................................12-1
5. Capitolul 1.3- Schema funcționară completă.....................................
6. Capitolul 1.4- Descrierea interacțiunii între CPU-Int.-Per.Unit........
7. Capitolul 2- Programul.......................................................................
2
Scopul proiectului este familarizarea cu interactiunea dintre
microprocesor,interfata si unitate periferica. Pentru aceasta vom folosi Arduino
UNO ,Interfata care va fi paralel-sincron si unitatea periferica care va fi LED 8x25.
Sarcina proiectari este urmatoarea: Folosind matricea LED 8x25 a se afisa o oare care
animatie.
3
Informatii generale
Arduino uno controler construit pe ATmega328 (descriere tehnică, pdf ). Platforma are 14 intrări digitale ( 6 dintre care pot
fi utilizate ca SHIM ), 6 intrări analogice, generator de cuarț de 16 MHz, conector USB, conector de alimentare, conector
ICSP și buton de resetare. Pentru a funcționa, trebuie să conectați platforma la computer prin cablu USB sau să o alimentați
folosind adaptorul sau bateria AC / DC.
Spre deosebire de toate plăcile anterioare care utilizează microcontrolerul USB FTDI pentru comunicații USB, un
nou Arduino Uno utilizează microcontroler ATmega8U2 (descriere tehnică, pdf).
Caracteristici
Microcontroler ATmega328
Tensiune de lucru 5V
Intrări analogice 6
RAM 2 Kb ( ATMega328 )
Eeprom 1 Kb ( ATMega328 )
Schema:
4
Fig. 1.1.2 Schema de referinta.
Putere
Arduino uno poate primi energie printr-o conexiune USB sau de la o sursă de alimentare
externă. Sursa de alimentare este selectată automat.
Constatări de putere:
VIN. Intrarea este utilizată pentru a furniza energie de la o sursă externă ( în absența a 5 V de
la un conector USB sau o altă sursă de alimentare reglabilă ). Furnizarea de alimentare are loc
prin această ieșire.
5
5V. O sursă de tensiune reglabilă utilizată pentru alimentarea microcontrolerului și a
componentelor de pe placă. Sursa de alimentare poate fi furnizată de la ieșirea VIN prin
regulatorul de tensiune sau de la conectorul USB sau o altă sursă de tensiune reglabilă de 5
V.
3V3. Tensiune la ieșire 3.3 În generat de regulatorul încorporat pe placă. Consumul maxim
de curent este de 50 mA.
Gnd. Constatări la sol.
Memorie
Microcontrolerul ATmega328 are o memorie flash de 32 kB, din care 0,5 kB sunt utilizate
pentru stocarea încărcătorului, precum și 2 kB de RAM ( SRAM ) și 1 Kb EEPROM. ( care
este citit și înregistrat folosind Bibliotecile EEPROM).
Intrări și ieșiri
Fiecare dintre cele 14 concluzii digitale Uno poate fi configurat ca intrare sau ieșire folosind
funcții pinMode ( ), digitalWrite ( ), și digitalRead ( ), . Rezultatele funcționează la o tensiune
de 5 V. Fiecare ieșire are un rezistor de încărcare (, în mod implicit, este dezactivat ) 20-50
kOhm și poate trece până la 40 mA. Unele concluzii au funcții speciale:
I2C: 4 ( SDA ) și 5 ( SCL ). Prin constatări, I2C ( TWI ) este conectat, pentru a cărui
creare Biblioteca de sârmă.
6
Software automat ( ) repornire
Uno proiectat astfel încât înainte de a scrie noul cod, repornirea să fie efectuată de Arduino
pe computerul propriu-zis și nu prin apăsarea butonului de pe platformă. Una dintre liniile de
cip ATmega8U2 DTR care controlează fluxul de date ( DTR ) este conectată la resetarea
repornirii la microcontrolerul ATmega328 prin condensator 100 nF. Activarea acestei linii,
adică semnalizare la nivel scăzut, repornește microcontrolerul. Programul Arduino, folosind
această funcție, încarcă codul cu clicul butonului Încărcare în mediul de programare în sine.
Feed-ul de semnal de nivel scăzut pe linia DTR este coordonat cu începutul înregistrării
codului, ceea ce reduce timpul de încărcare a încărcătorului.
Funcția are o altă aplicație. Anulați repornirile de fiecare dată când vă conectați la Arduino pe
un computer cu Mac X sau Linux ( prin USB ). Următoarea jumătate de secundă după
repornire este un bootloader. În timpul programării, mai mulți dintre primii octeți de cod sunt
întârziați pentru a evita primirea de date incorecte de către platforma ( pe lângă noul cod de
program ). Dacă se efectuează o singură depanare a schiței înregistrate pe platformă sau orice
alte date sunt introduse la prima pornire, asigurați-vă că programul de pe computer se
așteaptă într-o secundă înainte de a transfera datele.
Pe Uno, este posibil să opriți linia de resetare automată prin ruperea liniei corespunzătoare.
Contactele microschain de la ambele capete ale liniei pot fi conectate pentru a restabili. Linia
este etichetată « RESET-EN ». De asemenea, este posibil să opriți repornirea automată prin
conectarea unui rezistor de 110 ohmi între o sursă de 5 V și această linie.
Caracteristici fizice
Lungimea și lățimea plăcii de circuit imprimat Uno este de 6,9 și, respectiv, 5,3 cm.
Conectorul USB și conectorul de alimentare depășesc limitele acestor dimensiuni. Patru găuri
din placă vă permit să îl fixați la suprafață. Distanța dintre concluziile digitale 7 și 8 este de
0,4 cm, deși între alte concluzii este de 0,25 cm.
7
Capitolul 1
Descrierea unității periferice
Lipirea matricei LED este un lucru complex. Exista o multime de moduri de a face acest
lucru si aici vom prezenta 2 metode.
Prima metodă este este ca în figura de mai sus 1.1. , așa noi am obținut un rezultat frumos de
lipire a matricei LED. Mai întâi trebuie să conectăm toate cablurile pozitive ale LED-urilor în
coloane și conductorul negativ în rânduri.
Acum faceți acest lucru luând cablul pozitiv al primului LED și îndoiți-l în jos la celelalte
LED-uri, lipiți pinii care se ating unul de celălalt, de aici luați ultimul cablu pe care l-ați lipit
și îndoiți-l din nou și repetați până când aveți toate cablurile pozitive conectate în coloană,
apoi tăiați cablurile pe care nu le-ați folosit.
Acum partea dificilă este conectarea pinilor negativi într-un rând, deoarece nu îi puteți îndoi
și lipi așa cum ați făcut cu cablurile pozitive. Acum am folosit jumperi mici de la un fir solid
și le conectăm așa cum puteți vedea în imagine.A doua metodă este să începeți la fel ca în
primul mod, dar singura diferență este în conectarea pinilor negativi. Această metodă
economisește mult timp și este mult mai simplă.
Trucul este să puneți niște bandă sau altceva pe conexiunile coloanelor pentru a le izola de
pinii negativi și dacă faceți asta puteți îndoi și cablurile negative și le conectați așa cum ați
făcut cu cele pozitive.
8
Capitolul 1.2
Elaborarea interfeței
Acest afișaj atrage mult curent, de aceea trebuie să rulăm modulul de la sursa de
alimentare externă în loc de alimentarea de 5V de la placa Arduino. Trebuie să
utilizați un adaptor de putere extern de 5V, 3A, conectat la Pinul 5V și GND al plăcii
Arduino.
Deoarece Registru 74HC595 necesită mult transfer de date, trebuie să se conecteze la
pinii SPI hardware de pe un microcontroler. Pentru plăcile Arduino, cum ar fi UNO /
Nano, acei pini sunt digitali 13 ( SCK ), 12 ( MISO ), 11 ( MOSI ) și 10 ( SS ).
Conectați CLK, CS, DIN Pin de 8x32 LED Dot Matrix Display la Arduino pin digital 13,
10, 11.
Utilizăm Registru 74HC595. Dacă doriți să faceți mai multe afișaje cu lanțuri de margarete
pentru a crea un afișaj mai mare, conectați DOUT-ul primului afișaj la DIN-ul următorului
afișaj. VCC, GND, CLK și CS vor fi partajate între afișaje.
Controlul modulului Registru 74HC595 este o sarcină complexă și necesită o mulțime de
linii de cod. Din fericire, biblioteca MD_Parola este disponibilă pentru a elimina acele
complexități, astfel încât să putem emite comenzi simple pentru controlul afișajului.
9
Fig.1.2.2Diagrama logica a Registrului 74HC595
Capitolul 1.3
Schema funcționară completă
10
Fig 1.3.1 Schema funcționară completă a matricei LED
11
Capitolul 1.4
Descrierea interacțiunii între componente
Comunicare
Biblioteca SoftwareSerial poate crea un transfer de date consistent prin oricare dintre rezultatele
digitale ale lui Uno.
ATmega328 acceptă interfețele I2C ( TWI ) și SPI. Arduino include biblioteca Wire pentru o
ușurință de utilizare a I2C.
Programare
Platforma este programată folosind software-ul Arduino. Din meniu Instrumente > Board «
Arduino Uno » ( este selectat în funcție de microcontrolerul instalat ).
Programul:
Porniți un LED
Să încercăm să pornim un LED. În primul rând, indicăm rezultatele plăților utilizate
( linia de ceas este clockPin, datele sunt dataPin, zăvorul este patchPin ).
12
continuare, trimitem date în formă binară. De exemplu, trimiteți octetul 0b10000000 (
primul LED ) va trebui să se aprindă. La sfârșit am stabilit INALT pe zăvorul
( terminăm transmiterea datelor ).
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, LOW);
}
void loop() {
digitalWrite(latchPin, LOW); // начинаем передачу данных
shiftOut(dataPin, clockPin, LSBFIRST, 0b10000000);
digitalWrite(latchPin, HIGH); // прекращаем передачу данных
}
Dacă în shiftOut ( ) schimba LSBFIRST pe MsbfirST, apoi se va porni nu primul, ci
ultimul LED din lanțul de circuite.
Când lucrați cu mai multe LED-uri, nu este foarte convenabil să scrieți constant trei
linii de cod pentru fiecare LED individual. Prin urmare, vom emite codul ca funcție și
vom clipi un al treilea LED.
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, LOW);
}
void loop() {
setByte(0b00100000);
delay(1000);
setByte(0b00000000);
delay(1000);
}
Animatie LED
13
O altă schiță.
byte path[4] = {
B11000011,
B00111100,
B00100100,
B00011000
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
for (int i = 0; i < 4; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, path[i]);
digitalWrite(latchPin, HIGH);
delay(250);
}
for (int i = 0; i < 4; i++) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, path[3 - i]);
digitalWrite(latchPin, HIGH);
delay(250);
}
}
B calea [ ] indicăm secvența LED-urilor pornite și oprite. Între aceste secvențe va
apărea animație.
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
byte byteToSend = 0; //Создаем пустой байт B00000000
for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится
позиция изменяемого бита
byteToSend = 0; // Обнуляем байт при каждом проходе
bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим
B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д.
14
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем
сигнал при помощи MSBFIRST, грузим с первого бита
digitalWrite(latchPin, HIGH);
delay(50);
}
}
Concluzie
Bibliografie
1)https://www.techopedia.com/definition/2874/microprocessor
2)https://www.instructables.com/810-LED-Matrix-with-4017/
3)https://www.tutorialspoint.com/microprocessor/
microprocessor_8086_overview.htm
4)https://en.wikipedia.org/wiki/Intel_8086#/media/File:Intel_C8086.jpg
5)https://www.techopedia.com/definition/2874/microprocessor
6)https://www.elprocus.com/ic-4017-pin-configuration-application/
15