Arduino több I2C megvalósítása
-
- Újonc
- Hozzászólások: 2
- Csatlakozott: 2016. október 11. kedd, 9:41
Arduino több I2C megvalósítása
Az a probléma merűlt fel számomra, hogy nem vagyok tisztában miként tudnák felhasználni egyszerre több i2c használó érzékelőt.
- Ha pl: fel akarok használi egy lcd i2c-illsztésel és egy SD-kártyát miként oldhatnám meg?
-.Az arduino mega 2 db I2c portal rendelkezik, azonban az Unora is lehet kapni i2c buszt de ott nem vagyok tisztában, hogyan oldhtnám meg a címzéseket.
- Ha a Megát használom két külön i2c, az includok tartalmazzák a szükséges címzéseket (esetleg lehet decrarálni mint egyes lábakat melyik modul melyik i2c hez társúl)?
A válaszokat előre is köszönöm.
(helyesírási hibákért elnézést kérek)
- Ha pl: fel akarok használi egy lcd i2c-illsztésel és egy SD-kártyát miként oldhatnám meg?
-.Az arduino mega 2 db I2c portal rendelkezik, azonban az Unora is lehet kapni i2c buszt de ott nem vagyok tisztában, hogyan oldhtnám meg a címzéseket.
- Ha a Megát használom két külön i2c, az includok tartalmazzák a szükséges címzéseket (esetleg lehet decrarálni mint egyes lábakat melyik modul melyik i2c hez társúl)?
A válaszokat előre is köszönöm.
(helyesírási hibákért elnézést kérek)
Re: Arduino több I2C megvalósítása
`==>60 napos tanfolyam, iic buszos fejezetei
az iic buszra fel lehet fűzni több eszközt, amiket a hardveresen beállított címükkel lehet megszólítani.
I2C tutorial
Robert mutat is egy iic Scaner programot a leckéhez, ami végignézi a címtartományt és kilistázza, hol talált eszközt.
egy kis kavart érzek az erőben:
SD kártyát az SPI buszon szoktak kezelni. nem kevered e két busz tipust?
az spi busznál van slave select eszköz kiválasztás
Introduction to I²C and SPI protocols
az iic buszra fel lehet fűzni több eszközt, amiket a hardveresen beállított címükkel lehet megszólítani.
I2C tutorial
Robert mutat is egy iic Scaner programot a leckéhez, ami végignézi a címtartományt és kilistázza, hol talált eszközt.
egy kis kavart érzek az erőben:
SD kártyát az SPI buszon szoktak kezelni. nem kevered e két busz tipust?
az spi busznál van slave select eszköz kiválasztás
Introduction to I²C and SPI protocols
-
- Újonc
- Hozzászólások: 2
- Csatlakozott: 2016. október 11. kedd, 9:41
Re: Arduino több I2C megvalósítása
De az erőben valóban zavar van mert RTC-t akartam írni (SD modúlt is használok ezért kavartam) amúgy meg néztem a Scanert és a címzést már. De ebből nem derűl ki, hogy a includok tartalmazzák-e. Illetve a megával kapcsolatos kérdést, hogy esetleg van-e valami gyorsabb könyebb megoldás mint címezgetni. Kicsit még nagy a kavar a tudásomban.
Re: Arduino több I2C megvalósítása
nézd meg az iic lcd példaprogramját!
van benne egy ehhez hasonló sor:(itt adod meg az eszköz hw címét)
LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x38
ezekután az lcd-t nem címzed közvetlenül, hanem ezen keresztül ?lcd.begin(), lcd.print() stb
itt írtak közvetlen címzéssel rtc kezelést, de érdemes a fórumot átböngészned, sokan írtak már ilyet.
van benne egy ehhez hasonló sor:(itt adod meg az eszköz hw címét)
LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x38
ezekután az lcd-t nem címzed közvetlenül, hanem ezen keresztül ?lcd.begin(), lcd.print() stb
itt írtak közvetlen címzéssel rtc kezelést, de érdemes a fórumot átböngészned, sokan írtak már ilyet.
Re: Arduino több I2C megvalósítása
ittt egyiic rtc olvasás példa. ez simán megfér az iic lcd kiíratással
de azt már nen írom meg helyetted, mert akkor hova lesz az alkotás öröme?
Kód: Egész kijelölése
void printDate(){
Wire.beginTransmission(DS1307_ADDRESS); // ds1307 hw címe
Wire.write(zero); //0ás címtől fogunk dolgozni
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7); //7 byte adatot fogunk olvasni
int second = bcdToDec(Wire.read());
int minute = bcdToDec(Wire.read());
int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
int monthDay = bcdToDec(Wire.read());
int month = bcdToDec(Wire.read());
int year = bcdToDec(Wire.read());
//adatok bent, soros portra kiírás:
Serial.print(month);
Serial.print("/");
Serial.print(monthDay);
Serial.print("/");
Serial.print(year);
Serial.print(" ");
Serial.print(hour);
Serial.print(":");
Serial.print(minute);
Serial.print(":");
Serial.println(second);
}
Re: Arduino több I2C megvalósítása
Pontosítások:
- Arduino lapok egyetlen I2C busszal rendelkeznek. A Mega és az UNO is.
- SD és a I2C LCD nem fog azonos buszon kommunikálni: SD: SPI, míg a I2C az az I2C(vagy TWI másik néven, Arduino alatt: Wire)
- RTC esetén meg nézd meg: RTC [IC neve] library. Itt készen mindent megkapsz hozzá
- Arduino lapok egyetlen I2C busszal rendelkeznek. A Mega és az UNO is.
- SD és a I2C LCD nem fog azonos buszon kommunikálni: SD: SPI, míg a I2C az az I2C(vagy TWI másik néven, Arduino alatt: Wire)
- RTC esetén meg nézd meg: RTC [IC neve] library. Itt készen mindent megkapsz hozzá
http://www.tavir.hu - a gazda
-
- Bitmanipulátor
- Hozzászólások: 128
- Csatlakozott: 2015. december 8. kedd, 19:52
Re: Arduino több I2C megvalósítása
Szia Devilnight!
Én is kezdő vagyok, nekem is zavaros sok minden, de speciel már használtam egyszerre egy programon belül I2C LCD-t, RTC órát, SD kártyát, Dallas hőmérőt 1Wire busszal, DHT11 páramérőt és BMP180 nyomásmérőt. Azt hiszem ez a rész már világos. Gyakorlati tapasztalataim is vannak pl. vezetékek hossza stb. Írd le konkrétan, hogy mit is akarsz. Fel is hívhatsz, ha nem boldogulsz!
Bagi
Én is kezdő vagyok, nekem is zavaros sok minden, de speciel már használtam egyszerre egy programon belül I2C LCD-t, RTC órát, SD kártyát, Dallas hőmérőt 1Wire busszal, DHT11 páramérőt és BMP180 nyomásmérőt. Azt hiszem ez a rész már világos. Gyakorlati tapasztalataim is vannak pl. vezetékek hossza stb. Írd le konkrétan, hogy mit is akarsz. Fel is hívhatsz, ha nem boldogulsz!
Bagi
Re: Arduino több I2C megvalósítása
Sziasztok!
A segítségeteket szeretném kérdni a következőben:
MCP23017 I/O expandereket használok egy arduinohoz, de annyi ledet, szelepet, nyomógombot használok, hogy kevés a maximálisan 8 darab használható (0x20...0x27 - I2C címzésből adódóan) ebből a típusból. Olyat tudnék még használni, ami más I2C címet használ , ahogy nézegettem ilyen a pcf8574A, szal ezzel még ki tudnám bővíteni. Tudja valaki, hol tudnék ilyen bővítőt beszeezni?
Esetleg tudtok más típusú I/O bővítőről , ami nem az MCP23017 I2C címet használja és könnyen beszerezhető?
Vagy más ötlet? (shift registert nem szeretnék használni)
Előre is köszi!
A segítségeteket szeretném kérdni a következőben:
MCP23017 I/O expandereket használok egy arduinohoz, de annyi ledet, szelepet, nyomógombot használok, hogy kevés a maximálisan 8 darab használható (0x20...0x27 - I2C címzésből adódóan) ebből a típusból. Olyat tudnék még használni, ami más I2C címet használ , ahogy nézegettem ilyen a pcf8574A, szal ezzel még ki tudnám bővíteni. Tudja valaki, hol tudnék ilyen bővítőt beszeezni?
Esetleg tudtok más típusú I/O bővítőről , ami nem az MCP23017 I2C címet használja és könnyen beszerezhető?
Vagy más ötlet? (shift registert nem szeretnék használni)
Előre is köszi!
Re: Arduino több I2C megvalósítása
I2C busz elejére is raksz I2C albuszokat:
- P82B715 vagy P82B96 chip : https://www.nxp.com/docs/en/data-sheet/P82B715.pdf
- PCF8575 (16) / MCP23017 (16) / MCP23016 (16) / MCP23008 (8) / PCF8574A (8) / PCF8574 (8) / google: i2c port expander
- https://www.nxp.com/products/interfaces ... o:MC_41850
De : https://playground.arduino.cc/Code/I2CPortExpander8574
De tipp: Miért nem teszel oda sok Arduino NANO/Micro-t. Van 14 digit és 8 analog lába (ebből 6 IO , de 2 foglalt az IIC-nek)
Minden 16 bites bővítő az analog lábakon címezhető - 1...127 címeken.
Arduino alatt:
https://www.arduino.cc/en/Tutorial/MasterWriter
https://www.arduino.cc/en/Tutorial/MasterReader
60 napos tanfolyam ráadásleckéi - 2 db is az IIC bővítésről szól.
Amúgy szokásos kérdés: Eddig milyen eredményed van?
- P82B715 vagy P82B96 chip : https://www.nxp.com/docs/en/data-sheet/P82B715.pdf
- PCF8575 (16) / MCP23017 (16) / MCP23016 (16) / MCP23008 (8) / PCF8574A (8) / PCF8574 (8) / google: i2c port expander
- https://www.nxp.com/products/interfaces ... o:MC_41850
De : https://playground.arduino.cc/Code/I2CPortExpander8574
De tipp: Miért nem teszel oda sok Arduino NANO/Micro-t. Van 14 digit és 8 analog lába (ebből 6 IO , de 2 foglalt az IIC-nek)
Minden 16 bites bővítő az analog lábakon címezhető - 1...127 címeken.
Arduino alatt:
https://www.arduino.cc/en/Tutorial/MasterWriter
https://www.arduino.cc/en/Tutorial/MasterReader
60 napos tanfolyam ráadásleckéi - 2 db is az IIC bővítésről szól.
Amúgy szokásos kérdés: Eddig milyen eredményed van?
http://www.tavir.hu - a gazda
Re: Arduino több I2C megvalósítása
Nem értem, hogy miért nem jó a shift regiszter.
Shift regiszter simán megy 4MHz-en, az I2C 400 kHz , de leginkább 100 kHz-en. Az I2C-n min. 16 bitet kell átvinni.
Magyarul a shift regiszter legalább 2x10=20x gyorsabb.
Mialatt 8 bitet áttolsz I2C-n 160 bit átmegy shift regisztereken.
Ráadásul értelmes chipeken DMA-val áttolhatod szórakozás nélkül.
Shift regiszter simán megy 4MHz-en, az I2C 400 kHz , de leginkább 100 kHz-en. Az I2C-n min. 16 bitet kell átvinni.
Magyarul a shift regiszter legalább 2x10=20x gyorsabb.
Mialatt 8 bitet áttolsz I2C-n 160 bit átmegy shift regisztereken.
Ráadásul értelmes chipeken DMA-val áttolhatod szórakozás nélkül.
Re: Arduino több I2C megvalósítása
Sziasztok!
Elakadtam egy kicsit: Van egy VEML6075 szenzorom, szeretném lekérdezni. Az adatlap https://www.vishay.com/docs/84304/veml6075.pdf szerint 0x10 -es cím, 0C paranccsal kérhető le a device ID (LSM, MSB) de az alábbi programrész nem ezt írja ki:
Wire.beginTransmission(0x10);
Wire.write(0x0C);
Wire.beginTransmission(0x10);
Wire.requestFrom(0x10,2);
while(Wire.available())
{
Serial.println(Wire.read());
Wire.endTransmission();
}
Mi lehet a hiba?
Elakadtam egy kicsit: Van egy VEML6075 szenzorom, szeretném lekérdezni. Az adatlap https://www.vishay.com/docs/84304/veml6075.pdf szerint 0x10 -es cím, 0C paranccsal kérhető le a device ID (LSM, MSB) de az alábbi programrész nem ezt írja ki:
Wire.beginTransmission(0x10);
Wire.write(0x0C);
Wire.beginTransmission(0x10);
Wire.requestFrom(0x10,2);
while(Wire.available())
{
Serial.println(Wire.read());
Wire.endTransmission();
}
Mi lehet a hiba?
Re: Arduino több I2C megvalósítása
I2C detect látja az eszközt? (Azaz a címen legalább megszólal?)
A legelejéről a wire.begin() nekem hiányzik....
Wire.beginTransmission(0x10);
Wire.write(0x0C);
Wire.endTransmission(false);
Wire.requestFrom(0x10, 2, true);
lsb = Wire.read();
msb = Wire.read();
Egyben library?
https://github.com/schizobovine/VEML6075
Önálló kódként:
https://github.com/kriswiner/VEML6075
A legelejéről a wire.begin() nekem hiányzik....
Wire.beginTransmission(0x10);
Wire.write(0x0C);
Wire.endTransmission(false);
Wire.requestFrom(0x10, 2, true);
lsb = Wire.read();
msb = Wire.read();
Egyben library?
https://github.com/schizobovine/VEML6075
Önálló kódként:
https://github.com/kriswiner/VEML6075
http://www.tavir.hu - a gazda
Re: Arduino több I2C megvalósítása
Igen, az megvan, jeleztem, ez csak programrész. A 0x10 címen látja is.
A kódrészlet a dokumentáció alapján íródott.
A problémám az, hogy ha csak ez a szenzor van, jól működik a github-os library, de ha mellé teszek egy BME280-at, már nem küldi az adatokat, csak 0-t.
A kódrészlet a dokumentáció alapján íródott.
A problémám az, hogy ha csak ez a szenzor van, jól működik a github-os library, de ha mellé teszek egy BME280-at, már nem küldi az adatokat, csak 0-t.
Re: Arduino több I2C megvalósítása
Ok, kódrészletekből nem szeretnék találgatni...
A, Azonos a címe a 2 eszközben
B, Ha majd átküldöd a két eszközt kiolvasó kódot és a libraryk verzióját/keretrendszer verziót - akkor lehet egyáltalán érdemben hibát keresni....
A, Azonos a címe a 2 eszközben
B, Ha majd átküldöd a két eszközt kiolvasó kódot és a libraryk verzióját/keretrendszer verziót - akkor lehet egyáltalán érdemben hibát keresni....
http://www.tavir.hu - a gazda
Re: Arduino több I2C megvalósítása
Szeretném segítségeteket kérni. 3 db VEML7700 fénymérőt szeretnék I2C-n keresztül olvasni. A scannerek azonban csak 1 címen látnak eszközt. (0x10) Akármelyik eszközt eltávolítom, míg egy is van a rendszerben megtalálja, de többet nem. Merre lépjek tovább?
Előre is köszönöm!
Előre is köszönöm!