60 nap alatt Arduino #28 - I2C busz általában

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: Robert »

A eljáráskönyvtárakkal egy gond van - elrejtik a valódi működést...
Ezért a leckékben csak ha valahol nagyon kell, illetve az az alapmetódus - ott vannak használva.
http://www.tavir.hu - a gazda :)
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Még egy kérdés.

A Wire.begin()

Ez a parancs, gondolom magára az Arduinora vonatkozik (azon állitja be a paramétereket) és csak egyszer kell, ha több eszköz is van az I2C buson.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Robert írta:A eljáráskönyvtárakkal egy gond van - elrejtik a valódi működést...
Ezért a leckékben csak ha valahol nagyon kell, illetve az az alapmetódus - ott vannak használva.
Hát igen, bele is botlottam egy ilyesmibe. Van nekik egy olyan parancsuk, hogy
Pcf8574.digitalReadAll();
Ami elvben beolvas mindent, de nem sikerült még rájönnöm, hogy milyen formában. De ugyanigy kiirni már nem tudja. Nekem meg pontosan arra lenne szükségem, hogy az egyik eszközböl beolvasott byteket a másik eszközön jelenitsem meg.
A wire.h-val bytenként probálkozom.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Az elsö verzio már müködik két eszközzel (2xPCF8574).
A következö kihivás, hogy ugy kell átalakitanom a kodot, hogy az elején definiálom az olvaso és az iro modulokat ( elvben már egy sereg lehet, de minimum 8 lesz) és azok között kell kialakitani a kapcsolatot.
Van még egy aproság, amit meg kell gondolni ( mi lesz egyszerübb) vannak 8574-sek meg 8575-s 16 bites modulok. A cimzett oldalán ( az mind egy helyen van) inkább a 16 biteseket kellene használni, a beolvaso oldalon meg lehet bármilyen. Csak azt kell kitalálni, hogy egy hurokba hogyan tudok mondjuk 2 címröl 2 bytet beolvasni, és egy cimre kiküldeni. (azaz 3 cimmel kell dolgozni) Egyszerübb lenne, az algoritmus, ha mindig csak 2 cimmel kellene dolgozni.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: Robert »

A sima I2C címzés, írás, kiolvasással közvetlen megkapod a kért adatot.
Ha meg library-ban vagy, akkor annak az írójának az elvárásait vagy kénytelen használni...

Wire.begin()
I2C inicializálása.
- belső hardware beállítása,
- lábak beállítása. leválasztás az ADC és az I/O perifériákról (UNO),
- master/slave beállítáa, slave cím megadása.

A setup() részben használt, jellemzően újrainicializálásra nincs szükség.

Ujbóli kiadása oka lehet:
- inicializálás megismétlése (elpiszkált regiszterek, funkciók),
- i2c slave címének újra átdefiniálása.
http://www.tavir.hu - a gazda :)
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Na már van egy müködö kodom, igaz csak egy párra a többihez még nincs helyem felépiteni. Ez már müködik. A hozzaádás valoszinüleg nem gond (az arrayhoz kell csak a cimeket beirni).

Most azon rágodok, hogy ha 16 Bites PCF-ket is beépitek (az OUTPUT oldalon optimális lenne), hogyan oldjam meg, hogy 2 PCF8574-böl beolvasott 2 Byte egy PCF8575-re menjen ki (16 Bit). Jo lenne valami automatizmus kitalálni, hogy a szerkezet felismerje, hogy milyen modul van hozzákötve.
Gondolkodtam 2 dimezios Arrayon, ahol a cim mellett lenne még egy változo, ami megjelölné hogy 8 vagy 16 bites module van ott. EZ a kod még csak a rágodás állapotában van melyik ut lenne a legegyszerübb.


Jelen állapotában a PCF8574 párokat gondtalanul kezeli.


Köszönök minden ötletet.

Kód: Egész kijelölése

#include <Wire.h>

/* IIC 72x72 DISPLAY DRIVER, V1

    each Input switches a LED on the output. Behind the
    PCF unit there is an invertin ULN2803 LED driver,
    the inputs should be inverted on the OUTPUT

   Input module PCF8574  addr 0x21
   Output module PCF8574 addr 0x38

   The output is inverted - preparation for ULN2803

*/


#include <Wire.h>

// DEVICE ADDRESS ARRAYS:

int number = 1;   // up to 5 devices on both sides - 10 together
int RDEV[] = {0x21};
int WDEV[] = {0x38}; // the devices in the two rows are paired 0x21==>0x38

int d;        // data
const int i = 0;

void setup() {
  Wire.begin();
}

void loop() {
  for (int i = 0; i < number; i++) {
    inread();
    outgo();
  }

}
void inread() {                           // function to read in the data from all ports

  Wire.requestFrom(RDEV[i], 1);           // read from device 1 byte,// RDEV from ARRAY, d/RDEV= address of the input device
  while (Wire.available()) {
    d = Wire.read();
    delay(100);
  }
}
void outgo() {                          // function for transmit the data to outputs

  Wire.beginTransmission(WDEV[i]);      // parameter: WDEV, d   WDEV address for the output device
  Wire.write(~d);                       // the input PULLDOWN should be inverted on the OUTPUT
  Wire.endTransmission();
}
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: kapu48 »

Szerintem nagy hiba eszköz címeket előjeles számként definiálni!
Hiszen ezek mindig pozitív számok lehetnek, soha nem vehetnek fel mínusz értéket.
Olyan megerőltető lehet odaírni azt a módosító szócskát?

Kód: Egész kijelölése

unsigned int RDEV[] = {0x21};
unsigned int WDEV[] = {0x38};
De még jobb lenne az:

Kód: Egész kijelölése

unsigned char RDEV[] = {0x21}; // hiszen ezek 1 bytes címek!
unsigned char WDEV[] = {0x38};
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Itt semmi reakcio nem volt, én meg tovább dolgoztam, már 5 pár PCF müködik és köszönöm jol vannak. Most már máson dolgozom, pl azon, hogy hogyan lehetne automatikusan párositani a ki és a bemeneteket függetlenül attol, hogy 1 vagy két bytes a másik oldal, azaz az array egy másik dimenziot is kap, de ez még nem müködik ugy ahogy szeretném.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: kapu48 »

Példa tömb létrehozására:

Kód: Egész kijelölése

// structuraTomb.ino
// tömb ellemek felsorolása
struct tomb {
   char cim;
   char szam;
   char byte1;
   char byte2;
};
#define NSZO  10
 // tömb létrehozása
struct tomb tombTab[NSZO]={  // tömb feltöltése
    0x10, 1, 123, 0,
    0x11, 2, 25, 200,
    //... NSZO * ismételve
    0,0,0,0,
    0,0,0,0,
    0,0,0,0,
    0,0,0,0,
    0,0,0,0,
    0,0,0,0,
    0,0,0,0,
    0,0,0,0
  };

void setup() {

}

void loop() {

  // olvasás a tömbböl
  char Tcim = tombTab[0].cim;
  char Tszam = tombTab[0].szam;
  char Tbyte1 = tombTab[0].byte1;
  char Tbyte2 = tombTab[0].byte2;
  // irás a tömbbe
  tombTab[0].byte2 = Tbyte1;
  
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: kapu48 »

Magyarázat hozzá: 6.3. Struktúratömbök
http://lidi.uw.hu/krc/files/06.html#6.3.
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Biztos vagy benne, hogy ez Arduino nyelven van? Egy másik Arduino kurzuson ( parallel csinálom a Tavirral) egész más formák vannak és hiánytalanul müködnek. Már sok feladatot megcsináltam mind müködött az ottani leirás szerint. Egyelöre nekem az elég.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: kapu48 »

Biztos! Mivel ez szabvány C nyelv, és az arduino is ezt használja.
És a példám is *.ino kiterjesztésű.
És még ráadásul le is fordítottam, hogy ne legyen benn hiba.
És persze már számtalan változatban használtam, én is meg mások is.

Különben nekem mindegy, csinálsz amit akarsz! :mrgreen:
Ez után többet nem zavarlak a tanácsaimmal!
Ja a tavir leckéken túlmutató kérdéseket teszel fel ismételten, miért? :lol:
Avatar
etwg
Pákabűvész
Hozzászólások: 213
Csatlakozott: 2011. február 7. hétfő, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: etwg »

Bocs, én semilyen kérdést nem tettem fel, azon kivül, hogy ötletet kértem a 8 meg a 16 bites port extenderek speciális kezelésére. Te vitted el a beszélgetést az arrayokra és azok használatára. Az egyáltalán nem volt kérdés.
Ennek ellenére köszönöm, hogy egy ujabb kezelési modot is beirtál. Ilyet eddig sem itt, sem máshol nem láttam. (Viszont más fajtát egy sereget, amiket ki is probáltam és müködtek).
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Napka
Biztosítékgyilkos
Hozzászólások: 53
Csatlakozott: 2019. június 18. kedd, 8:39

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: Napka »

Szia kapu48! Pont ilyen basic sample-re gondoltam, amikor ma reggel beindítottam egy új fórumtémát: frissítsük fel az arduino nyelvi kifejezéskészletünket!
Tudom megterhelő ennyi nyelvi komponenst észben tartani, de önmagáért teszem és sem. Egyszerűen, egyszer csak belebotlasz a projekted kapcsán egy máshol (pl.GitHub) közreadott ino-hoz tartozó *.cpp fájlba, amelyet kibontva rácsodálkozhatsz mennyire kevés a tudásod, legalábbis a kódok megértése terén. (Én személy szerint a saját mintatáramba arhiválom a közreadott *.ino-t, csak előtte magamnak alaposan telekommentelem. )
Részemről köszönettel vettem és használom a linkeket, amiket itt is, korábban is Tőled láttam, kaptam, átvettem, stb.
Hozzászólásom a november 6-i bejegyzéshez kapcsolódik!
üdv Napka
Avatar
albatrosz100
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2010. november 18. csütörtök, 7:00

Re: 60 nap alatt Arduino #28 - I2C busz általában

Hozzászólás Szerző: albatrosz100 »

Sziasztok ! szeretnék segítséget kérni!
Van egy 8 csatornás PCF8574 modulom, és az a gondom vele, hogy bekapcsoláskor (mikor áram alá kerül a rendszer) a 8 lábon megjelenik a magas állapot. Ezt lehet valahogy módosítani, hogy kezdésnek alacsony szinten induljon?
Gondot jelent bekapcsoláskor az, hogy mire a kontroller beindul, és alacsony szintre tudja állítani, addig eltelik pár másodperc. Mind a 8 láb reléket vezérel, és nem jó ha bekapcsoláskor leindítja a rákötött motorokat.
Válasz küldése