Arduino több I2C megvalósítása

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
devilnight
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2016. október 11. kedd, 9:41

Arduino több I2C megvalósítása

HozzászólásSzerző: devilnight » 2016. október 11. kedd, 10:01

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)

Avatar
csegebiga
Chipgyilok
Hozzászólások: 284
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: csegebiga » 2016. október 11. kedd, 10:38

`==>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

devilnight
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2016. október 11. kedd, 9:41

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: devilnight » 2016. október 11. kedd, 10:55

De az erőben valóban zavar van :D 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.

Avatar
csegebiga
Chipgyilok
Hozzászólások: 284
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: csegebiga » 2016. október 11. kedd, 11:24

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.

Avatar
csegebiga
Chipgyilok
Hozzászólások: 284
Csatlakozott: 2015. március 27. péntek, 21:27

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: csegebiga » 2016. október 11. kedd, 12:23

ittt egyiic rtc olvasás példa. ez simán megfér az iic lcd kiíratással

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);
}

de azt már nen írom meg helyetted, mert akkor hova lesz az alkotás öröme? :)

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: Robert » 2016. október 11. kedd, 18:33

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á :)
http://www.tavir.hu - a gazda :)

bagizoltan
Bitmanipulátor
Hozzászólások: 114
Csatlakozott: 2015. december 8. kedd, 19:52
Tartózkodási hely: Budapest

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: bagizoltan » 2016. október 12. szerda, 12:09

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

Jankó
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2017. január 7. szombat, 13:12

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: Jankó » 2017. november 22. szerda, 9:40

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!

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: Robert » 2017. november 22. szerda, 19:09

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? :)
http://www.tavir.hu - a gazda :)

Avatar
csabeszq
Bitfaragó
Hozzászólások: 670
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: csabeszq » 2017. november 26. vasárnap, 19:33

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.

cslaci
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2016. december 31. szombat, 18:54

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: cslaci » 2018. április 7. szombat, 13:15

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?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: Robert » 2018. április 7. szombat, 21:12

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
http://www.tavir.hu - a gazda :)

cslaci
Újonc
Újonc
Hozzászólások: 3
Csatlakozott: 2016. december 31. szombat, 18:54

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: cslaci » 2018. április 8. vasárnap, 15:35

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.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Arduino több I2C megvalósítása

HozzászólásSzerző: Robert » 2018. április 8. vasárnap, 16:26

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....
http://www.tavir.hu - a gazda :)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: Google [Bot] valamint 1 vendég