PopaLepo

c3pmp

Jan 15th, 2021 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. intrare-iesire
  2. cand programezi placa, folosestii pini rx si tx, la fel si cand vrei sa citesti ceva de pe interfata seriala, prin serial monitor.
  3. pe chipset avem niste pini cu o numerotare, pe placa avem alti pini conectati cu alt naming convention, pe langa asta e important sa tinem minte partea cu registri ddr port pin.
  4. unii pini de pe arduino au si functionalitati multiple.
  5. pinul 21 e folosit si pentru intrerupere int0 sau pentru serial clock de la interfata de transmisie SPI.
  6.  
  7. ex buton alimentat, conectat la ground, punem rezistenta, in montaj avem rezistenta de tip pulldown pentru ca daca nu e apasat butonul, nivelul de intrare va fi ground. in momentul in care apesi butonul o sa ai 5v, un 1 pe intrare si daca vrei sa si vezi poti sa folosesti ledul de pe placa.
  8.  
  9. daca ar fi sa luam un osciloscop sa vedem ce se intampla pe un semnal cand apasam un buton, avem niste oscilatii foarte mari, pana se stabilizeaza o sa vedem niste oscilatii, ar trebui sa filtram, sa eliminam oscilatiile respective. sunt niste module de la digilent numite Pmod btn care rezolva aceasta problema. daca nu avem niste module mai bune, trebuie sa rezolvam noi problema asta prin software. ce ar insemna asta?
  10.  
  11. exemplu cod. facem filtrarea prin software si verificam pana cand nu se mai modifica. astepti pana cand citesti acelasi state (high sau low pe buton) de minim 10 ori, sau timp de minim 10ms.
  12.  
  13. i/o pe mai multi pini
  14. ce ne intereseaza? daca avem un keypad de 4 linii si 3 coloane, daca legam direct fire inseamna minim 12 pini pe care ii folosim, ceea ce e destul de mult, putem sa aveam keypad mai mare. 64 de locatii in care folosesti 64 de pini de pe placuta ceea ce depaseste limitarile. se merge pe varianta in care ai conexiuni pt fiecare row / rand si conexiuni pentru fiecare coloana. Ideea : la modul in care sunt conectate intern, daca apesi un buton de pe keypad faci o legatura directa intre o linie si o coloana. trebuie sa verificam unde o fost apasat butonul, pe care dintre coloane.
  15. Setam randurile pe 1, prin rezistenele interne de tip pull up si coloanele le setam tot pe 1. dupa aceea facem o baleiere, le setam pe rand pe 0 si asa putem verifica coloana care o fost apasata.
  16.  
  17. poza desenata
  18. coloanele le punem pe rand, de ex prima coloana e 0 si restul sunt 1. liniile sunt conectate la sursa de curent, sunt toate pe 1 logic. am un switch-urile de pe keypad si daca apas pe switch o sa fac conexiune directa, am conectat row1 cu column1 pentru primul switch. in momentul in care am inchis switch, daca pe prima linie am 0. apas pe wswitch, inchid conexiunea, facem baleierea asta si punem pe rand pe coloane alte valori diferite pentru a vedea exact care dintre butoanele de pe aceeasi linie a fost apasat si asa se face verificarea. randurile pe 1. coloanele by default initial state e 0. scriem un for si le apucam pe 0 si citesti, vezi daca a devenit randul 0 inseamna ca acolo e switch apasat, stii ca esti in forul respectiv si zici da a fost apasat primul switch de la coloana 1 randul 1 si ai un mapping in cod unde stii cifra care corespunde si afisezi efectiv cifra 1.
  19.  
  20. ce avantaje am avea folosind partea de arduino cu digitalwrite, read sau daca folosim direct porturile la nivel de hardware. putem sa controlam la nivel de un intreg port (8 locatii fizice simultan le putem controla mai direct si mai usor). avantajul folosirii directe prin registru e dat si prin faptul ca avem o viteza mult mai mare (scrierea si citirea de aproape 10 ori mai rapide). poti sa citesti mai multi pini simultan daca folosesti ddra sau ddrb. dezavantaje: abordarea e dependenta de hardware, n-o sa fie neaparat portabila intre placi diferite. trebuie sa stii exact bitii unde sunt si care sunt pe placuta, trebuie sa fii atent sa te uiti pe data sheet care unde ii. unele porturi pot sa fie rezervate si nu e o idee foarte buna sa le modificam sa scriem acolo.
  21.  
  22. exemplu de control al pinilor i/o folosind porturile. vrem sa legam 8 leduri, pinii de la 8 la 22 care corespund porta, vrem sa aprindem ledurile din 2 in 2. prima data cele pare, apoi cele impare cu delay de 1sec
  23.  
  24. setez folosind ddra ca si output cu ddra toti pe 1 so cu porta se aprind ledurile in loop
  25.  
  26.  
  27.  
Add Comment
Please, Sign In to add comment