Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:vstoica:darius.stefan [2024/05/17 22:57]
darius.stefan
pm:prj2024:vstoica:darius.stefan [2024/05/27 02:37] (current)
darius.stefan [Download]
Line 25: Line 25:
 </​note>​ </​note>​
  
-===== Lista Piese =====+===== Listă ​Piese =====
  
 <note tip> <note tip>
Line 49: Line 49:
 - butoane - butoane
 </​note>​ </​note>​
 +
 +===== Hardware Desgin =====
 +Pentru partea de tablă de șah am ales să-mi construiesc un PCB care să încorporeze LED-urile, switch-urile și regiștrii PISO. De pe acest PCB mă conectez la un Arduino NANO, aflat pe un breadboard alături de 2 butoane și un display OLED (care compun ceasul de șah), dar și de modulul microSD pe care se salveaza mutările.
 +
 +Schema electrică:
 +
 +-regiștrii,​ înseriați câte 4, dar comandați de același semnal de LATCH și CLOCK:
 +
 +{{:​pm:​prj2024:​vstoica:​easyeda_ffu6putgzf.png?​700|}}
 +
 +-switch-urile Reed, conectate cu rezistențe de pull-down:
 +
 +{{:​pm:​prj2024:​vstoica:​easyeda_yutrmva9ox.png?​700|}}
 +
 +-LED-urile, care au câte un condensator de decoupling de 100nF:
 +
 +{{:​pm:​prj2024:​vstoica:​easyeda_clyhdzo22h.png?​700|}}
 +
 +Design-ul PCB-ului l-am făcut cu EasyEDA. Este un design în 2 layere care sunt conectate între ele de unele borne ale componentelor:​
 +
 +{{:​pm:​prj2024:​vstoica:​easyeda_qj22l3xv9p.png?​700|}}
 +
 +Am scos la imprimantă top layer-ul și bottom layer-ul PCB-ului și l-am transferat pe o placă de textolit laminată cu cupru. Am corodat placa cu persulfat de sodiu și am început să lipesc piesele.
 +
 +{{:​pm:​prj2024:​vstoica:​pcb7.jpeg?​200|}}
 +{{:​pm:​prj2024:​vstoica:​pcb6.jpeg?​200|}}
 +{{:​pm:​prj2024:​vstoica:​pcb5.jpeg?​200|}}
 +
 +{{:​pm:​prj2024:​vstoica:​pcb4.jpeg?​200|}}
 +{{:​pm:​prj2024:​vstoica:​pcb3.jpeg?​200|}}
 +{{:​pm:​prj2024:​vstoica:​pcb2.jpeg?​200|}}
 +
 +{{:​pm:​prj2024:​vstoica:​pcb1.jpeg?​200|}}
 +{{:​pm:​prj2024:​vstoica:​switch.jpg?​200|}}
 +{{:​pm:​prj2024:​vstoica:​respcond.jpg?​200|}}
 +
 +Pe breadboard componentele sunt conectate astfel:\\
 +- cele 2 butoane sunt conectate la pinii D2 și D3 ai Arduino-ului pentru a folosi întreruperile externe INT0 și INT1, folosind rezistențele interne de pull-up\\
 +- display-ul OLED este conectat la 5V, la GND, la A4 - SDA și la A5 - SCL\\
 +- modulul de card microSD este conectat la 5V, la GND, la D10 - CS, la D11 - MOSI, la D12 - MISO și la D13 - SCK\\
 +- ceilalți pini: D4 - intrare de la primii 4 regiști, D7 - intrare de la ceilalți 4 regiștri, D5 - ieșire de ceas pentru regiștri, D6 - ieșire de latch pentru regiștri
 +- de pe breadboard se conectează la 5V și la GND și PCB-ul, pinii de CLK_INH ai regiștrilor se conectează tot la GND\\
 +{{ :​pm:​prj2024:​vstoica:​wacth_schem.png?​600 |}}
  
 ===== Software Design ===== ===== Software Design =====
Line 55: Line 98:
 <note tip> <note tip>
 Descrierea codului aplicaţiei (firmware): Descrierea codului aplicaţiei (firmware):
-  * mediu de dezvoltare ​(if any) (e.g. AVR Studio, CodeVisionAVR) +  * mediu de dezvoltare: PlatformIO 
-  * librării ​şi surse 3rd-party (e.gProcyon AVRlib) +  * librării: Arduino.h, SSD1306Ascii.h, SSD1306AsciiWire.h,​ Wire.h, SD.h, SPI.h
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate+
 </​note>​ </​note>​
 +
 +Din punct de vedere software am implementat proiectul ca pe un automat de stări. Am realizat aceasta cu ajutorul unui vector de funcții, câte una pentru fiecare stare.\\
 +{{:​pm:​prj2024:​vstoica:​state_pattern.png?​300 |}}\\
 +Am pornit de la framework-ul Arduino cu (setup() și loop()). În loop() se rulează funcția care desemnează starea curentă care se actualizează cu starea returnată de aceasta. Tot în loop se afișează și pe display-ul OLED timpul rămas pentru jucătorul comun.\\
 +{{:​pm:​prj2024:​vstoica:​loop_chess.png?​300|}}\\
 +După acest exemplu de pe Wokwi, [[https://​wokwi.com/​projects/​306024460940476993]],​ am făcut o funcție care citește din ieșirile regiștrilor înseriați prezența pieselor pe tabla de șah în 2 valori unsigned int pe 32 de biți. Când LATCH este 0 regiștri copiază valorile pe care le primesc la intrările paralele. Apoi LATCH trece pe 1, iar prin toggle pe CLK se citește câte un bit de pe ieșirea serială.\\
 +{{ :​pm:​prj2024:​vstoica:​readboard.png?​500 |}}\\
 +Pentru GPIO am folosit configurare cu regiștri ca la laborator. Pentru apăsarea butoanelor de pe breadboard am folosit întreruperile externe INT0 și INT1 care comută jucătorul curent.\\
 +{{ :​pm:​prj2024:​vstoica:​buttons_config1.png?​400 |}}\\
 +{{ :​pm:​prj2024:​vstoica:​buttons_config2.png?​300 |}}\\
 +Pentru ceas am configurat TIMER1 de pe microcontroller în modul CTC astfel încât să genereze câte o întrerupere la fiecare 1 secundă.
 +{{ :​pm:​prj2024:​vstoica:​timer1_config2.png?​300 |}}
 +{{ :​pm:​prj2024:​vstoica:​timer1_config1.png?​300 |}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
 <note tip> <note tip>
-Care au fost rezultatele obţinute ​în urma realizării proiectului vostru.+Nu am reușit să lipesc LED-urile, fiind prea mici am stricat câteva topindu-le când am încercat să le lipesc pe PCB. Am dezlipit și niște circuit de pe PCB în încercarea de a le lipi și m-am lăsat păgubaș. \\ 
 +Îmi pare rău de ele, erau mișto la aspect și foarte ușor de programat :((. \\ 
 + 
 +{{ :​pm:​prj2024:​vstoica:​woking_led.jpg?​200 |}} 
 + 
 +{{ :​pm:​prj2024:​vstoica:​failedled.jpg?​300 |}} 
 + 
 +În ceea ce privește tabla de șah, regiștrii funcționează ok, însă switch-urile cam dau rateuri, se sparg foarte ușor, având un înveliș de sticlă, și cele 2 piese care ar trebui să facă contact când apropii magnetul de switch devin prea îndepărtate/​fac mereu contact. Nu am reușit să joc un meci de șah :(.\\ 
 + 
 +{{ :​pm:​prj2024:​vstoica:​rezultat.jpg?​500 |}} 
 + 
 +Ceasul funcționează corect totuși :).
 </​note>​ </​note>​
  
 ===== Concluzii ===== ===== Concluzii =====
 +Ar fi fost mai ușor dacă mă apucam mai din timp de PCB poate-l comandam de la vreo farbică.\\ 
 +Trebuia să găsesc altă soluție pentru detectarea pieselor, ceva mai puțin sensibil. \\ 
 +Poate era mai bine doar să simulez căsuțele de pe placă cu niște switch-uri simple. 
 +Cam așa ceva: [[https://​wokwi.com/​projects/​398615863123489793]]
 ===== Download ===== ===== Download =====
  
 <note warning> <note warning>
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +{{:pm:prj2024:vstoica:pmdarius.rar|}}
- +
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**.+
 </​note>​ </​note>​
  
Line 81: Line 147:
  
 <​note>​ <​note>​
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**.+[[https://​www.ti.com/​lit/​ds/​symlink/​sn74hc165.pdf?​ts=1716707719745&​ref_url=https%253A%252F%252Fwww.google.pl%252F]]\\ 
 +[[https://​docs.wokwi.com/​parts/​wokwi-74hc165]]\\ 
 +[[https://​www.studiopieters.nl/​arduino-nano-pinout/​]] 
 </​note>​ </​note>​
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2024/vstoica/darius.stefan.1715975854.txt.gz · Last modified: 2024/05/17 22:57 by darius.stefan
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0