Alkalmi i2c eszköz detektálás

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

Alkalmi i2c eszköz detektálás

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

Sziasztok!

Hogyan lehet megoldani bascom kódilag a következő feladatot?

Adott egy mega8 és erre van felfűzve pár i2c-s cucc (óra, hőmérők)...eddig síma úgy. Viszont lenne egy esetenként hozzácsatolt plusz i2c-s eszköz (jelen esetben lm92) - természetesen kikapcsolt állapotban csatlakoztatva. A lényeg, hogy program induláskor egyfajta "i2c plug&play" megoldást kellene megvalósítani, ami az adott címet lekérdezi és ha jön válasz, akkor a program azt is kezelné.
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Az I2C-nek van egy ERR változója, amit visszaolvasva megállapítható, hogy az eszköz jelen van, vagy sem.
Valahogy így:

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

I2cstart
I2cwbyte LM92address
LM92present=Err
I2cstop

...

if LM92present then call LM92irasolvasas

...

Sub LM92irasolvasas
Return

Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

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

nobody_hun írta:Az I2C-nek van egy ERR változója, amit visszaolvasva megállapítható, hogy az eszköz jelen van, vagy sem.

Pontossan erre van szükségem... nagyon szépen köszönöm!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

A mintaalkalmazások közt a M16 illetve a Starternél ott van. De lásd milyen vagyok:

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

$regfile = "m8def.dat"                                      'PROC.TIPUS
$crystal = 11059200                                         'ÓRAJEL
$baud = 9600

'Configure I2c
Config I2cdelay = 5
Config Scl = Portc.5
Config Sda = Portc.4
I2cinit


Dim I As Byte
Dim J As Byte


  'I2C detect
   Print "I2c-device locator   1 = no device     0 = device"
   Print
   Print "     0    2    4    6    8    A    C    E"
   Print " 00 ";
   For I = 0 To 254 Step 2
      J = I Mod 16                                          ' addresses
      If J = 0 And I > 0 Then
         Print                                              ' end of line?
         Print " " ; Hex(i) ; " ";
      End If
      I2cstart                                              ' generate start
      I2cwbyte I
      Print " " ; Err ; "   ";                              ' 1 no device, 0 device
      I2cstop
   Next I
   Print
Azaz az eszközt megszólítod, és ha a jelzés ERR=1 akkor nincs ott a holmi.
Amire vigyázz: Az ilyen megszólítás után - ha használni is akarod az I2C buszt akkor I2Cinittel alaphelyzetbe kell utána hozni!

Én ezzel a programmal lesem meg, hogy minden I2C eszköza helyén van-e.
DE: van olyan eszköz, ami több I2C címen is bejelentkezik:
- FRAM Óra+EEPROM egyben. Külön címe van a 2 részegységnek.
- 24CWxxW, ez blokkosan fel van osztva. Így a kezdő I2C címen és/vagy a blokkezdeti I2C címeken is megszólítható. Ciki, mert a 4 kbites EEPROM lefogja a EEPROM I2C címtartomány felét (3 v. 4 helyet elfoglal).
- I2C rövidzár/szakadás esete is kimutatható ennek segítségével.
Avatar
SirLeslie
Pákabűvész
Hozzászólások: 247
Csatlakozott: 2005. április 14. csütörtök, 6:00

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

Robert írta:A mintaalkalmazások közt a M16 illetve a Starternél ott van.
Ej, ha minden kódódat lenne időm végignézni... :lol:
Köszi!
Válasz küldése