Zbernica i2c: EEPROM: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace  | 
				|||
| Riadok 46: | Riadok 46: | ||
[[Súbor:i2c_address.png|400px|center]]  | [[Súbor:i2c_address.png|400px|center]]  | ||
==   | |||
=== 3. Inicializácia ===  | |||
Pri tvorbe programu pre modul budeme využívať už hotovú knižnicu <code>i2cmaster</code> dostupnú odtiaľto http://senzor.robotika.sk/mmp/src/i2c/  | Pri tvorbe programu pre modul budeme využívať už hotovú knižnicu <code>i2cmaster</code> dostupnú odtiaľto http://senzor.robotika.sk/mmp/src/i2c/  | ||
Najprv je potrebné zbernicu inicializovať:  | Najprv je potrebné zbernicu inicializovať:  | ||
| Riadok 60: | Riadok 62: | ||
</source>  | </source>  | ||
=== 4. Zápis ===  | |||
[[Súbor:i2c_write.png|600px|center]]  | |||
Zápis je jednoduchší, preto ním začneme:  | |||
<source lang="c">  | |||
A   |        // zapis hodnotu  0x41 ('A') to EEPROM address 00 (Byte Write)   | ||
     i2c_start_wait( (EEPROM_ADDR << 1) | I2C_WRITE);     // set device address and write mode  | |||
     i2c_write(0x00);                                     // write address = 0  | |||
     i2c_write(0x41);                                     // write value 0x41 to EEPROM  | |||
     i2c_stop();                                          // set stop conditon = release bus  | |||
</source>  | </source>  | ||
<div style='text-align: center;'>  | |||
[[File:EEPROM_ReadValue.png]]<br>  | |||
''Postupnosť pre čítanie hodnoty z EEPROM pamäte.''  | |||
</div>  | |||
<div style='text-align: center;'>  | <div style='text-align: center;'>  | ||
[[File:  | [[File:EEPROM_WriteValue.png]]<br>  | ||
''  | ''Postupnosť pre zápis hodnoty do obvodu 8591.''  | ||
</div>  | </div>  | ||
===   | === 5. Čítanie ===  | ||
[[Súbor:i2c_read.png|600px|center]]  | [[Súbor:i2c_read.png|600px|center]]  | ||
| Riadok 123: | Riadok 103: | ||
[[Súbor:i2c_readRandom.png|400px|center]]  | [[Súbor:i2c_readRandom.png|400px|center]]  | ||
<source lang="c">  | <source lang="c">  | ||
  /*  Precitame hodnotu zapisanu v predchadzajucom kroku z EEPROM addresy 0   */  | |||
//  |      i2c_start_wait( (EEPROM_ADDR << 1) | I2C_WRITE);     // set device address and write mode  | ||
     i2c_write(0x00);                        // write address = 5  | |||
     i2c_rep_start(Dev24C02+I2C_READ);       // set device address and read mode  | |||
     val = i2c_readNak();                    // read one byte from EEPROM  | |||
     i2c_stop();  | |||
     for(;;);  | |||
</source>  | |||
Program je samozrejme vhodné doplniť o zobrazenie prečítanej hodnoty v termináli cez sériové rozhranie.    | |||
[[Category:DVPS]][[Category:AVR]][[Category:MMP]][[Category:I2C]][[Category:MIPS]]  | [[Category:DVPS]][[Category:AVR]][[Category:MMP]][[Category:I2C]][[Category:MIPS]]  | ||
Verzia z 19:05, 13. apríl 2023
Oboznámenie so zbernicou i2c
Úlohy:
- Pripojte k procesoru pamäť podľa schémy zapojenia
 - Schému upravte tak, aby adresa zariadenia bola ?? - určí cvičiaci
 - Zapíšte na prvé pamäťové miesto (adresa 0x00) znak 'A'
 - Prečítajte, či je znak správne zapísaný
 - Prečítajte obsah celej pamäte a vypíšte ho na terminál PC
 - Zapíšte do pamäte 10 bytov nejakej informácie a zistite, ako dlho trvá zápis jedného byte, t.j. aká veľká musí byť prestávka medzi jednotlivými zápismi.
 
Literatúra
- Official I2C Specification Version 6 http://www.nxp.com/documents/user_manual/UM10204.pdf
 - Official List of assigned NXP / Philips I2C addresses http://www.diolan.com/downloads/i2c-address-allocation-table.pdf
 - Mitchell Kahn: Programming the i2c interface. Dr. Dobb's Journal, June 1992.
 - Example using the two-wire interface (TWI). AVRlibc demo projects.
 
Datasheets
1. Schéma zapojenia


Správnosť zapojenia si môžete vyskúšať programom Médiá:i2c_scan.ino - nájde všetky obvody pripojené na zbernici.
2. Device address

3. Inicializácia
Pri tvorbe programu pre modul budeme využívať už hotovú knižnicu i2cmaster dostupnú odtiaľto http://senzor.robotika.sk/mmp/src/i2c/
Najprv je potrebné zbernicu inicializovať:
         i2c_init();                                       // initialize I2C library
4. Zápis

Zápis je jednoduchší, preto ním začneme:
       // zapis hodnotu  0x41 ('A') to EEPROM address 00 (Byte Write) 
     i2c_start_wait( (EEPROM_ADDR << 1) | I2C_WRITE);     // set device address and write mode
     i2c_write(0x00);                                     // write address = 0
     i2c_write(0x41);                                     // write value 0x41 to EEPROM
     i2c_stop();                                          // set stop conditon = release bus
              
Súbor:EEPROM ReadValue.png
Postupnosť pre čítanie hodnoty z EEPROM pamäte.
Súbor:EEPROM WriteValue.png
Postupnosť pre zápis hodnoty do obvodu 8591.
5. Čítanie


 
  /*  Precitame hodnotu zapisanu v predchadzajucom kroku z EEPROM addresy 0   */
     i2c_start_wait( (EEPROM_ADDR << 1) | I2C_WRITE);     // set device address and write mode
 
     i2c_write(0x00);                        // write address = 5
     i2c_rep_start(Dev24C02+I2C_READ);       // set device address and read mode
     val = i2c_readNak();                    // read one byte from EEPROM
     i2c_stop();
     for(;;);
Program je samozrejme vhodné doplniť o zobrazenie prečítanej hodnoty v termináli cez sériové rozhranie.

