60 nap alatt Arduino #28 - I2C busz általában
Re: 60 nap alatt Arduino #28 - I2C busz általában
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.
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
Re: 60 nap alatt Arduino #28 - I2C busz általában
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
Hát igen, bele is botlottam egy ilyesmibe. Van nekik egy olyan parancsuk, hogyRobert í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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
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.
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
Re: 60 nap alatt Arduino #28 - I2C busz általában
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.
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
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?
De még jobb lenne az:
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};
Kód: Egész kijelölése
unsigned char RDEV[] = {0x21}; // hiszen ezek 1 bytes címek!
unsigned char WDEV[] = {0x38};
Re: 60 nap alatt Arduino #28 - I2C busz általában
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
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;
}
Re: 60 nap alatt Arduino #28 - I2C busz általában
Magyarázat hozzá: 6.3. Struktúratömbök
http://lidi.uw.hu/krc/files/06.html#6.3.
http://lidi.uw.hu/krc/files/06.html#6.3.
Re: 60 nap alatt Arduino #28 - I2C busz általában
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
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!
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?
É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!
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?
Re: 60 nap alatt Arduino #28 - I2C busz általában
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).
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
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #28 - I2C busz általában
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
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
- albatrosz100
- Ú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
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.
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.