Differences

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

Link to this comparison view

pm:lab:lab6-2021 [2021/04/17 20:17]
jan.vaduva [5. Exerciții]
pm:lab:lab6-2021 [2021/04/22 13:43] (current)
dumitru.brigalda
Line 1: Line 1:
-===== Laboratorul ​5: I2C (Inter-Integrated Circuit) =====+===== Laboratorul ​6: I2C (Inter-Integrated Circuit) =====
 Acest laborator acoperă noțiunea de I2C. Pentru aprofundarea acestui topic, consultați [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] și {{https://​en.wikipedia.org/​wiki/​I%C2%B2C|Inter-Integrated Circuit}}. Acest laborator acoperă noțiunea de I2C. Pentru aprofundarea acestui topic, consultați [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf|Datasheet ATmega328P]] și {{https://​en.wikipedia.org/​wiki/​I%C2%B2C|Inter-Integrated Circuit}}.
  
Line 49: Line 49:
 </​note>​ </​note>​
  
-===== 3. Regiștrii ​configurare I2C =====+===== 3. Registre ​configurare I2C =====
  
 Arduino poate funcționa atât în modul I2C Master cât și I2C Slave. Arduino poate funcționa atât în modul I2C Master cât și I2C Slave.
Line 82: Line 82:
 {{ pm:​lab:​master_sender_bb.png?​500 }} {{ pm:​lab:​master_sender_bb.png?​500 }}
  
-**Master_reader_example**+**Master Writer** 
 +<code c> 
 +#include <​Wire.h>​ 
 + 
 +void setup() 
 +
 +  Wire.begin();​ // join i2c bus (address optional for master) 
 +
 + 
 +byte x = 0; 
 + 
 +void loop() 
 +
 +  Wire.beginTransmission(4);​ // transmit to device #4 
 +  Wire.write("​x is "​); ​       // sends five bytes 
 +  Wire.write(x); ​             // sends one byte   
 +  Wire.endTransmission(); ​   // stop transmitting 
 + 
 +  x++; 
 +  delay(500);​ 
 +
 +</​code>​ 
 + 
 +**Slave Reader** 
 +<code c> 
 +#include <​Wire.h>​ 
 + 
 +void setup() 
 +
 +  Wire.begin(4); ​               // join i2c bus with address #4 
 +  Wire.onReceive(receiveEvent);​ // register event 
 +  Serial.begin(9600); ​          // start serial for output 
 +
 + 
 +void loop() 
 +
 +  delay(100);​ 
 +
 + 
 +// function that executes whenever data is received from master 
 +// this function is registered as an event, see setup() 
 +void receiveEvent(int howMany) 
 +
 +  while(1 < Wire.available()) // loop through all but the last 
 +  { 
 +    char c = Wire.read();​ // receive byte as a character 
 +    Serial.print(c); ​        // print the character 
 +  } 
 +  int x = Wire.read(); ​   // receive byte as an integer 
 +  Serial.println(x); ​        // print the integer 
 +
 +</​code>​ 
 + 
 + 
 +**Master Reader**
 <code c> <code c>
 #include <​Wire.h>​ #include <​Wire.h>​
Line 103: Line 157:
 </​code>​ </​code>​
  
-**Slave_writer_example**+**Slave Writer**
  
 <code c> <code c>
Line 128: Line 182:
 ===== 5. Exerciții ===== ===== 5. Exerciții =====
  
-**Task 0** Folosiți codul Arduino pentru a implementa ​exemplu ​Master Reader/​Slave Writer ​astfel încât ​să activăm transmisiunea ​la apăsarea ​unui buton de pe Master iar pe Slave în momentul în care transmisiunea este recepționată ​se aprinde ​un led.+**Task 0** Folosiți codul Arduino pentru a implementa ​un Master Reader ​și un Slave Writer. Master-ul va avea atașat un led, iar Slave-ul un buton. Master-ul trebuie să interogheze Slave-ul despre starea butonului și să aprindă/stingă led-ul în funcție de starea butonului (apăsat/​neapăsat). Cele două board-uri vor comunica pe I2C. Pentru realizarea comunicării,​ Master-ul trebuie să facă request de citire a 3 caractere, iar Slave-ul să răspundă cu starea butonului: "​ON!"​ sau "​OFF"​. 
 +{{ :​pm:​lab:​lab_i2c_task0.png?​500 |}} 
 + 
 +**Task 1** Folosiți codul Arduino pentru a implementa un Master ​Writer ​și un Slave Reader. Master-ul va avea atașate 2 butoane, iar Slave-ul un led. Master-ul trebuie ​să trimită Slave-ului una din cele 2 comenzi: "​ON!"​ sau "​OFF"​. Cele două board-uri vor comunica pe I2C. Pentru realizarea comunicării, ​la apăsarea ​primului ​butonMaster-ul trebuie să trimită comanda "​ON!", ​iar la apăsarea butonului 2, comanda "​OFF"​. În funcție de comanda ​recepționată, Slave-ul va aprinde/​stinge ​led-ul. 
 +{{ :​pm:​lab:​lab_i2c_task1.png?500 |}}
  
-**Task 1** Folosiți codul Arduino pentru a implementa exemplu Master Writer/Slave Reader astfel încât să activăm transmisiunea la apăsarea unui buton de pe Master iar pe Slave în momentul în care transmisiunea este recepționată se aprinde un led.+<​hidden>​ 
 +{{https://​www.tinkercad.com/​things/​aWsNXOGkVBR|Soluție Task0 șTask1}} 
 +</hidden>
  
 +<​hidden>​
 **Task 2** Folosiți codul Arduino pentru a implementa un ceas digital folosind un model de LCD pornind de la codul disponibil: [[https://​www.tinkercad.com/​things/​i5JAD1DytMu-copy-of-arduino-digital-clock-without-rtc-module/​editel?​sharecode=NA25XBlf6CdMtIZ9UNoAWGDuaUopZQh8aAye2WJZUEU|Arduino LCD Digital Clock]] **Task 2** Folosiți codul Arduino pentru a implementa un ceas digital folosind un model de LCD pornind de la codul disponibil: [[https://​www.tinkercad.com/​things/​i5JAD1DytMu-copy-of-arduino-digital-clock-without-rtc-module/​editel?​sharecode=NA25XBlf6CdMtIZ9UNoAWGDuaUopZQh8aAye2WJZUEU|Arduino LCD Digital Clock]]
 +</​hidden>​
  
 ===== 6. Resurse ===== ===== 6. Resurse =====
pm/lab/lab6-2021.1618679854.txt.gz · Last modified: 2021/04/17 20:17 by jan.vaduva
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