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

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

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

Az I2C protokoll alapalkalmazása, általános irányelvek.
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

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

A 28. leckében leírt I2C szkenner (első pillanatra) bonyolultnak tűnik.
Megkíséreltem annak alapján, de a 29. leckében ismertetett parancsok alkalmazásával egy egyszerűbb változatot írni.

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

/*----------------------------------------------------------------  
 Projekt:       AVR-DUINO/Shieldboard Ext1
 Fájlnév:       I2C_SCANNER.PDE
 ------------------------------------------------------------------
 */

#include <Wire.h>

int counter, data;


void setup() {
  // a ledpin kivezetést kimenetként konfigurálja
  pinMode(13, OUTPUT);
  // ledpin kivezetés magasba állítása (háttérvilágítás kikapcsolása)
  digitalWrite(13, LOW);
  // soros port inic
  Serial.begin(9600);
  Serial.println();   
  Serial.println();   
  Serial.println("I2CScanner ready!");
  Serial.println("starting scanning of I2C bus from 1 to 127");
  Serial.println("------------------------------------------");
  Serial.println();   
  Wire.begin();                     
}


void loop() {
  for (counter=1; counter<128; counter++) {
    Wire.requestFrom(counter,1);
    Serial.print("addr: ");
    if (counter<16) Serial.print("0");
    Serial.print(counter,HEX);
    if (Wire.available()) {
      Serial.print(" found!");
    }
    else {
      Serial.print("       ");
    }
    Serial.print( (counter%4) ? "\t":"\n");
    delay(1);
  }
  while(1) {
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(13,LOW);
    delay(300);
  }
}
Remekül működik, az EXT1 panelen 3 I2C eszközt talált: 0x48, 0x50 és 0x51 címeken!
:D
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Tetszik!
Tényleg jobb!

A címek is stimmelnek:)
EEPROM (0x50), Hőmérő (0x48(?) ) és az Óra (0x51)...
Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

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

szegoj írta:A 28. leckében leírt I2C szkenner (első pillanatra) bonyolultnak tűnik.
Megkíséreltem annak alapján, de a 29. leckében ismertetett parancsok alkalmazásával egy egyszerűbb változatot írni.
Tök jó! És tényleg egyszerűbb + érthetőbb.
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

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

Robert írta: A címek is stimmelnek:)
EEPROM (0x50), Hőmérő (0x48(?) ) és az Óra (0x51)...
A hőmérő címe is jó, az EXT1 panel dokumentációja szerint a TC75/LM75 címe &H90, osztva 2-vel kapjuk a 0x48-at.
:D
Avatar
szegoj
SzínkódFestő
Hozzászólások: 92
Csatlakozott: 2010. február 4. csütörtök, 7:00

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

És az I2C szkanner futtatásának eredménye:

Kép
A képet a Képfeltöltés.hu tárolja. http://www.kepfeltoltes.hu
Avatar
GPeti
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2011. március 3. csütörtök, 7:00

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

Gyakran előfordul hogy 5V on működő mikrokontrollert szeretnénk egy 3,3V-os I2C eszközt csatlakoztatni, ilyenkor nem árt shift level áramkört alkalmazni.

http://www.rcpilot.hu/users/1827/15882/ ... 449289.jpg
Avatar
GPeti
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2011. március 3. csütörtök, 7:00

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

Avatar
macsek
Bitmanipulátor
Hozzászólások: 121
Csatlakozott: 2008. december 4. csütörtök, 7:00

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

GPeti írta:Gyakran előfordul hogy 5V on működő mikrokontrollert szeretnénk egy 3,3V-os I2C eszközt csatlakoztatni, ilyenkor nem árt shift level áramkört alkalmazni.
Máshoz lehet jó, I2C-hez nem kell, 5V-ra kell kötni a buszt.
ld. 1995-ös magyar Philips I2C leírás, 21. ábra.

ugyanitt 10.0:
A 1,5 és 3 voltos fix bemeneti jelszintű I2C eszközök mind rendelkezhetnek megfelelő saját tápfeszültséggel. A felhúzó ellenállásokat 5V+/-10%-os tápfeszültségre kell kötni
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

trükk: felhúzóellenállás ne 1k5 legyen:).
4k7 esetén már működik...
nagylevin
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2015. március 29. vasárnap, 16:20

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

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

Most egy kicsit elakadtam, nem csak a szavam.
A tanfolyamos program már a fordítóban elakad, van benne egy rész amivel nem tud mit kezdeni :
..." Serial.print(" ");
}
Serial.print( (counter%4) ? "\t":"\n");
&n
bsp;
delay(1);
}
while(1) {"
Amennyiben ezt eltávolítom akkor lefordul, és feltölthető, de a 43-as cím után a futás megáll (lefagy) a szkennelésben. szegoj programja hasonlóan viselkedik, az is ugyanott áll meg.
Lehetséges , hogy szegény EXT1 shildem beteg? ( az arduino Uno-mon shild nélkül szépen végig megy a szken).

Van valakinek véleménye javaslata?

(Arduino Uno R3 Ext1 shild, Arduino 1.0.6 verzival próbáltam)
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 »

Kellene a teljes programkód, ill képernyőkép hogy hol akad el....
nagylevin
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2015. március 29. vasárnap, 16:20

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

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

a kód :

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

/*  I2Cscan EXT1
 I2CScanner minta
 60 nap alatt arduino tanfolyam
 (c) TavIR http://www.tavir.hu 
 
 */

#include <Wire.h>

int counter, data;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Serial.begin(9600);
  Serial.println();   
  Serial.println();   
  Serial.println("I2CScanner ready!");
  Serial.println();   
  Wire.begin();                     
}

void loop() {
  for (counter=1; counter<128; counter++) {
    Wire.requestFrom(counter,1);
    Serial.print("addr: ");
    if (counter<16) Serial.print("0");
    Serial.print(counter,HEX);
    if (Wire.available()) {
      Serial.print(" found!");
    }
    else {
      Serial.print("       ");
    }
    Serial.print( (counter%4) ? "\t":"\n");
// az alábbi 2 sor benne van a lecke programjában, kivettem.
 //  &n
//   bsp; 

 delay(1);
  }
  while(1) {
    digitalWrite(13,HIGH);
    delay(300);
    digitalWrite(13,LOW);
    delay(300);
  }
}
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
nagylevin
Újonc
Újonc
Hozzászólások: 7
Csatlakozott: 2015. március 29. vasárnap, 16:20

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

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

A lekérdezés megakadásának ellenére Macsek órás programja (32-es lecke) nagyon kedvesen működik, ír és olvas is.
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 cím eszköz nem válaszol vagy pedig hibás az eszköz.
Tipp: valamelyik felhúzó-ellenállás (SCL, SDA) elengedett, megnyúlt...
Válasz küldése