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é.
Alkalmi i2c eszköz detektálás
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
Az I2C-nek van egy ERR változója, amit visszaolvasva megállapítható, hogy az eszköz jelen van, vagy sem.
Valahogy így:
Valahogy így:
Kód: Egész kijelölése
I2cstart
I2cwbyte LM92address
LM92present=Err
I2cstop
...
if LM92present then call LM92irasolvasas
...
Sub LM92irasolvasas
Return
A mintaalkalmazások közt a M16 illetve a Starternél ott van. De lásd milyen vagyok:
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.
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
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.