Mapa weba | Pretraga:

Ukratko o sabirnici
I2C (izgovara se Eye-Squared-See) je dvožicani serijski protokol kojeg je Philips razvio ranih 1980-ih godina. I2C (skracenica od Inter-Integrated Circuit) je dvosmjeran i razvijen je za jednostavnu i ucinkovitu kontrolu eksternih modula.

Prednosti I2C sabirnice
Potrebne su samo dvije žice
Multi-master sistem
Velike brzine prijenosa podataka (od 100 kbits/sec do 3.4 Mbits/sec)
Veliki broj uredaja koji se mogu spojiti na istu sabirnicu (7 bitno adresiranje)

C51 funkcija

Prvo je potrebno deklarirati pozive i pinove koji se koriste za I2C komunikaciju:

  1. // deklaracija pinova za komunikaciju
  2. #define SDATA       P1_0         // Serial data
  3. #define SCLK        P1_1         // Serial clock
  4.  
  5.  
  6.  
  7. // deklaracija funkcija
  8.  
  9. void i2c_start (void);                     // Šalje I2C START naredbu
  10. void i2c_stop (void);                      // Šalje I2C STOP naredbu
  11. void i2c_write (unsigned char input_data); // Piše podatke na sabirnicu
  12. unsigned char i2c_read (void);             // Cita podatke sa sabirnice
  13.  


Nakon toga se mogu pozivati sljedece funkcije:

  1. void i2c_start (void)
  2. {
  3.         SDATA = HIGH;
  4.         SCLK = HIGH;
  5.         SDATA = LOW;
  6.         SCLK = LOW;
  7. }
  8.  
  9. void i2c_stop (void)
  10. {
  11.         unsigned char input_var;
  12.  
  13.         SCLK = LOW;
  14.         SDATA = LOW;
  15.         SCLK = HIGH;
  16.         SDATA = HIGH;
  17.         input_var = SDATA;
  18. }
  19.  
  20. void i2c_write (unsigned char output_data)
  21. {
  22.         unsigned char index;
  23.  
  24.         for(index = 0; index < 8; index++)
  25.         {
  26.  
  27.         SDATA = ((output_data & 0x80) ? 1 : 0);
  28.         output_data  <<= 1;
  29.                 SCLK = HIGH;
  30.                 SCLK = LOW;
  31.         }
  32.  
  33.         index = SDATA;
  34.         SCLK = HIGH;
  35.         SCLK = LOW;
  36. }
  37.  
  38. unsigned char i2c_read (void)
  39. {
  40.         unsigned char index, input_data;
  41.  
  42.         index = SDATA;
  43.  
  44.         input_data = 0x00;
  45.         for(index = 0; index < 8; index++)
  46.         {
  47.                 input_data <<= 1;
  48.                 SCLK = HIGH;
  49.           input_data |= SDATA;
  50.                 SCLK = LOW;
  51.         }
  52.  
  53.    return input_data;
  54. }

Primjer upotrebe funkcije za upisivanje podatka (0x90) na I2C BUS.

  1. i2c_start();
  2. i2c_write(0x90);
  3. i2c_stop();
Ispiši stranicu Pošalji stranicu prijatelju PHP Smarty Postgres Apache