[megoldva] raspberry pi mma7455 accelerometer

 ( szalazsolt | 2012. augusztus 29., szerda - 19:19 )

Sziasztok.

Vásároltam egy ilyen cuccot ,hogy ne keljen forrasztgatni.
http://www.drotek.fr/shop/en/27-mma7455-accelerometer-sensor-pcb.html

És próbáltam összekötni a rasberry -vel. Ez a lábkiosztás:
VCC = pin 1
SDA = pin 3
SCL = pin 5
GND = pin 6
Kerestem egy python kódot, mert egyenlőre csak látni szeretném ,hogy működik.

# I2C writes =D0=0
# MMA7455 I2C address 1D (3A ,3B) write , read
# AN3745 app note for calibration
# byte read , write 1D , write address, read 1D ,DATA
# Byte write, write 1D , write address, write data.
# addresses,
# 06 XOUT8
# 07 YOUT8
# 08 ZOUT8
# 09 STATUS D0 1=data ready
# 0A detection source
# 0F who am i
# 16 Mode Control x1000101 measure 2gmode 0x45
# 16 Mode Control x1000001 measure 8gmode 0x41
# 16 Mode Control x1000100 standby 2gmode 0x84
# 16 Mode Control x1010101 ston measure 2gmode 0x55
# 18 Control1 D7 filter 0=62Hz,1=125Hz other 0
# 19 Control2 default 0
#!/usr/bin/python
import smbus
import time
import os
# import graphics
# Define a class called Accel
class Accel():
b = smbus.SMBus(0)
def setUp(self):
# Setup the Mode
self.b.write_byte_data(0x1D,0x16,0x55)
# Setup Calibration
self.b.write_byte_data(0x1D,0x10,0)
self.b.write_byte_data(0x1D,0x11,0)
self.b.write_byte_data(0x1D,0x12,0)
self.b.write_byte_data(0x1D,0x13,0)
self.b.write_byte_data(0x1D,0x14,0)
self.b.write_byte_data(0x1D,0x15,0)

def getValueX(self):
return self.b.read_byte_data(0x1D,0x06)

def getValueY(self):
return self.b.read_byte_data(0x1D,0x07)

def getValueZ(self):
return self.b.read_byte_data(0x1D,0x08)

MMA7455 = Accel()
MMA7455.setUp()

for a in range(10000):
x = MMA7455.getValueX()
y = MMA7455.getValueY()
z = MMA7455.getValueZ()

print "x=", x , "\t[" , "=" * (80 * x / 256) , " " * (80 - (80 * x / 256)) , "] " , (80 * x / 256) , "%"
print "y=", y , "\t[" , "=" * (80 * y / 256) , " " * (80 - (80 * y / 256)) , "] " , (80 * y / 256) , "%"
print "z=", z , "\t[" , "=" * (80 * z / 256) , " " * (80 - (80 * z / 256)) , "] " , (80 * z / 256) , "%"

time.sleep(0.1)
os.system('clear')

Betöltettem a modulokat:
"i2c-bcm2708, i2c-dev"

Elvileg működik:

pi@raspberrypi ~ $ sudo i2cdetect -l
i2c-0 i2c bcm2708_i2c.0 I2C adapter
i2c-1 i2c bcm2708_i2c.1 I2C adapter

Nem tudom mit ronthatok el. Biztosan valami orbitálisan egyszerű lehet a problémám , de sajnos nem működik.


pi@raspberrypi ~ $ sudo python mma7455.py
Traceback (most recent call last):
File "mma7455.py", line 48, in
MMA7455.setUp()
File "mma7455.py", line 29, in setUp
self.b.write_byte_data(0x1D,0x16,0x55)
IOError: [Errno 5] Input/output error

Nem találok már több leírást vagy információt ezzel kapcsolatban a neten. Ezért gondoltam felteszem ide. Hátha van valakinek ötlete.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Talan valami hardware gond lehet.

A Raspbian-t bootoltam, feltettem a python-smbus csomagot, copy/paste a fenti programod (megfelelo behuzasokkal).

Nincs accelerometer board-om, de van egy Aardvark I2C/SPI/GPIO adapterem (http://www.totalphase.com/products/aardvark_i2cspi/), ami tud slave-kent viselkedni. Beallitottam az 0x1d-t cimnek.

Egyreszt megy az i2cdetect (# i2c-detect 0), masreszt a script is elindul, es azt az erteket olvassa, amit beallitok a slave-en. Mivel mukodik, az altalad hasznalt pinout jo (annyira biztam benned, hogy meg sem neztem a kapcsolasi rajzot:-)

Az i2cdetect-et nezted? Hasznos lehet.

/sza2

Szerk: nekem akkor volt 'IOError: [Errno 5] Input/output error' amikor nem volt slave a buszon.

Szerk2: ahogy latom, ez a komoly panel csak kivezeti a hasznalt labakat raszterre (es van rajta egy ~100n kondi). Szerintem celszeru lehet a chip-select labat (CS) fixen tapra kotni (foldre teve SPI modban van az IC, lehet, hogy uresen hagyva esetleg lebeg, ami nem tul jo).

Nem figyeltem egészen oda a dolog ezen részére, de olvasgatás közben belefutottam néhány sorba, ahol annak örült valaki, hogy talált egy kernelt, ami úgy kezeli az I2C-t (a rPi hardverét), hogy az RTC (mert ez volt az) gyári kernelmoduljával módosítás nélkül együttműködik.

Ebből azt szűrtem le, hogy az általánosan használt kernelekben még nem biztos, hogy ez a dolog tökéletesen működik.
Amúgy többen is panaszkodtak erre, de hogy ez milyenféle kernel volt éppen, azt nem tudom.

Megpróbálhatsz ebben az irányban is kutakodni.

A kb. 1 honapja letoltott Rapsbian tokeletesen mukodteti az I2C-t.

szalazsolt: Esetleg hasznos lenne tudni, melyik 'disztribucio'-t hasznalod (es melyik verziot).

/sza2

Rasbian. Fel lett frissìtve. Viszont raktam rà egy w1-test petch-et. Vagy nem tudom mit ami a kernellel csinàlt valamit. Meg fogom próbàlni egy frissen installàlt rendszerrel minden hukmuk nèlkül. Este hazaérek és kipróbàlgatok pàr dolgot. Köszönöm az eddigi ötletelet mindenkitől.

Ez a w1 patch nem a 1-wire eszkozok eleresehez kell? Van 1-wire-t hasznalo eszkozod, vagy miert kell?

/sza2

Nem nincs. Igazából nem is tudom micsoda :)
http://www.frank-buss.de -féle skript.
Több helyen is írták hogy kell, de lehet ez már benne van a Rasbian kernelben.

Feltettem a Rasbiant újra. Upgrade a legfrissebbre.
És az volt a megoldás amit írtál a "CS" lábát tápra kelet kötni.
Most már működik faintossan :) Köszönöm szépen :)