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.