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
Pákabűvész
Hozzászólások: 237
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
Pákabűvész
Hozzászólások: 237
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
Pákabűvész
Hozzászólások: 237
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: 9768
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: 105
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: 9768
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: 659
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.


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

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég