I2C gyorsulásmérő (MXC6202xJV)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Szike
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2008. október 7. kedd, 6:00

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

Sziasztok!
Emiatt nem akartam új témát nyitni.
I2c-n akarok elérni egy accelerometer chipet (itt a doksija) de az első írás közben megáll a program futása (gondolom nem válaszol a slave) Probáltam I2csend-del is de úgy sem ment. Tudna valaki segíteni?
Vagy lehet hogy megdöglött a chip?
Itt a code:

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

$regfile = "ATtiny45.dat"
$crystal = 1200000

$hwstack = 32
$swstack = 16
$framesize = 40

Ddrb = &B00000100                                           'Portb.2 - kimenet
Portb = &B11111011                                          'Bemenetek felhúzása

Config Sda = Portb.3
Config Scl = Portb.4

Dim B1 As Eram Byte
Dim B2 As Eram Byte
Dim B3 As Eram Byte
Dim B4 As Eram Byte
Dim B5 As Eram Byte
Dim B0 As Byte

Const Slave = &H20

Portb.2 = 1

I2cinit
I2cstart
I2cwbyte Slave , 0   '***EZEN A SORON ÁLL MEG***
I2cwbyte 0              
I2cstop
Waitms 100

I2cstart
I2cwbyte Slave
I2cwbyte 0
I2crbyte B0 , Ack
B1 = B0
I2crbyte B0 , Ack
B2 = B0
I2crbyte B0 , Ack
B3 = B0
I2crbyte B0 , Ack
B4 = B0
I2crbyte B0 , Nack
B5 = B0
I2cstop

End
[/code][/url]
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Próbáld ki ezzel:


905. I2C hibafelderítés

Az adatlapon nem látom hogy mi a chip címe I2C-n....
A tesztprg kimutatja a hibát. A felhúzó ellenállások ott vannak? 1k5....4k7?
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2008. október 23. csütörtök, 7:05-kor.
Avatar
Szike
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2008. október 7. kedd, 6:00

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

Robert írta:Próbáld ki ezzel:


905. I2C hibafelderítés

Az adatlapon nem látom hogy mi a chip címe I2C-n....
A tesztprg kimutatja a hibát. A felhúzó ellenállások ott vannak? 1k5....4k7?
Szia!
10k-s ellenállásokat raktam, az sok?
A címe H20, de mint kiderült ez ugye H10 7biten. Addig bütyköltem, hogy most már tovább megy, de adatok nem jönnek sehogy. Próbáltam cím scannelést is (2-128 ig kettesével megszólítani az eszközt) de az Err bit mindig 0 lett. Próbáltam lassítani a buszsebességet (i2cdelay már 200 is volt), az sem jött be.
Valahogy meg lehet tudni, hogy jönnek-e ACK jelek az eszközről, anélkül hogy megépíteném amit ajánlottál?
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 mintaprogi amit linkeltem az elején megnézi az ellenállások bekötését is.. A 10k az jó. Nagyon távol ne legyen a uP és a mérőchip (max. 1 m) .


Nálam az adatlapot olvasva úgy jön le, hogy _minden_ címen ez a chip beszél.....
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Ez a beírásom téves. Utánna olvastam több helyen, ezért ezt ne vegye figyelembe senki.
A slave address összeállítása:

Alap cím: 0010xxx

Ebből az XXX rész gyárilag programozott és a tokon levő típusszámból olvasható ki:
MXC6202xJV
x=0 -> 20H
x=7 -> 2EH

Ennek megfelelően pölö a MCX62024 címe: 00101000

Helyesen:
Az adatlap elején szereplő címeket kell figyelembe venni, tehát pl. a MXC62020 hw. címe: 0x20H

Szerk:
A 7 bit, az 8 bit szerintem. :) Első 7 a cím, az utolsó pedig a vezérlő bit.
Az olvasást úgy lehet kezdeni, ha előtte a master a MCX regiszterébe xxxxxxx0 -t ír (ez kapcsolja be a chip-et). Az ezt követően érkező read jelre kezdi el kipumpálni az adatot, 9 órajelciklus alatt.

9. oldal.
A hozzászólást 1 alkalommal szerkesztették, utoljára nobody_hun 2008. október 23. csütörtök, 17:58-kor.
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
Szike
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2008. október 7. kedd, 6:00

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

Ezt találtam: http://www.arduino.cc/cgi-bin/yabb2/YaB ... 1185987121 Hátha ti láttok benne vmit, amit én nem.
Az enyém is 62020, ezért gondoltam hogy H10 a címe, de nem jutottam tovább. Már chipet is cseréltem, pedig ez a tokozás a sírba tesz.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Programkód (C):

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

#include <Wire.h>

char memsicAddress = 0x10; // (7 first bits of 0x20)
int lastX = 0;
int lastY = 0;

void setup() {
 Wire.begin(); // join i2c bus (address optional for master)
 Serial.begin(115200);
 wakeAcc();
};

void loop() {
 readAcc();
 Serial.print(lastX, DEC);
 Serial.print(" ");
 Serial.print(lastY, DEC);
 Serial.println("");
 delay(100);
};

void readAcc() {
 byte n = 0;
 Wire.beginTransmission(memsicAddress);
 
 // Start at register address 0x01:
 Wire.send(0x01);
 
 // Read 4 bytes:
 Wire.requestFrom(memsicAddress, 4);
 while(Wire.available()) {
   switch (n) {
     case 0:
       // MSB X-axis
       lastX = Wire.receive() << 8; // Shift most significant byte
       break;
     case 1:
       // LSB X-axis
       lastX += Wire.receive();
       break;
     case 2:
       // MSB Y-axis
       lastY = Wire.receive() << 8; // Shift most significant byte
       break;
     case 3:
       // LSB Y-axis
       lastY += Wire.receive();
       break;
   };
   n++;
 };
 Wire.endTransmission();
};

void wakeAcc() {
 Serial.println("trying to wake up the accelerometer...");
 Wire.beginTransmission(memsicAddress);
 Wire.send(0x00);
 Wire.send(0x00);
 delay(50);
 Wire.endTransmission();
 delay(100);
};
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

WaveAcc-al kelti fel a chipet:

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

I2CStart
i2cwbyte memsicAddress '0x10 (&H10) vagy a chip címe (I2CDetect program kiadja?)
i2cwbyte 0
i2cwbyte 0
waitms 50
i2cstop
Eredmény olvasás (readacc)

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

i2cstart
i2cwbyte memsicaddress '0x10(&H10)
i2cwbyte 1
i2cstart
i2cwbyte memsicaddress+1 '!!! Olvasási cím kell
i2crbyte adat1,ack 'X tengely MSB
i2crbyte adat2,ack 'X tengely LSB
i2crbyte adat3,ack 'Y tengely MSB
i2crbyte adat4,nack 'Y tengely LSB
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Herc1234 írta:
Kód:

I2cinit
I2cstart
I2cwbyte Slave , 0 '***EZEN A SORON ÁLL MEG***
waitms 3
I2cwbyte 0
waitms 3
I2cstop
Waitms 100


én meg lehet igy próbálkoznék

mert ha jól emlékszem bár proteus szimulátorban
a wait state ek nélkül tök jól müködik de a
valóságban ezt azért bele kellett tennem
(bár az nem egy ilyen mérő volt hanem egy philips led dimmer)
(annak pl inicializálásként el kell minden bekacskor
küldeni a konfigot ha el akarsz térni a gyári beálltól)

szerk. Admin
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az I2Cdetect milyen címet ad vissza? Én azzal próbálkoznék.....
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

Robert írta:Herc1234 írta:
Kód:

kellett tennem
(bár az nem egy ilyen mérő volt hanem egy philips led dimmer)
(annak pl inicializálásként el kell minden bekacskor
küldeni a konfigot ha el akarsz térni a gyári beálltól)

szerk. Admin
rossz gombot nyomtál meg?
http://www.simplemachines.hu/
az a legjobb (phpBB az régi technika)

bocs az OFF-ért
Avatar
Szike
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2008. október 7. kedd, 6:00

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

Köszi srácok a segítséget, de a hétvégén nem tudok próbálkozni a dologgal.
Legutóbb így próbáltam, de csupa nullát adott vissza:

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

I2cinit
I2cstart
i2cwbyte &H10
i2cwbyte 0
i2cwbyte 0
waitms 50
i2cstop
waitms 100     'Adatlap szerint 100ms kell ébredéshez
I2cstart
i2cwbyte &H10
i2cwbyte 0      'ez az első (állapot) regiszter, ha 1-et írok akkor az X MSB-vel kezdi
'ide tényleg kell még egy start???
i2crbyte adat1,ack 
i2crbyte adat2,ack
i2crbyte adat3,ack
i2crbyte adat4,ack
i2crbyte adat5,nack
i2cstop
Majd megpróbálom az olvasási címet megadni, de ilyet én nem láttam az adatlapon és a C programban sem.
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

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

hát persze
azért ad nullákat vissza (jobb esetben )
mert nincs közte waitms 2 vagy 3
nincs ideje betölteni a verembe
Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

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

Srácok.

A leírás 9. oldalától ott van mind a 11 ciklus, amivel ki lehet olvasni az értékeket.
Például a 3. ciklus után ajánl 100mS várakozást.

Ha akarjátok, lefordítom mind a 11 lépést...
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."
Avatar
Szike
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2008. október 7. kedd, 6:00

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

nobody_hun írta:Srácok.

A leírás 9. oldalától ott van mind a 11 ciklus, amivel ki lehet olvasni az értékeket.
Például a 3. ciklus után ajánl 100mS várakozást.

Ha akarjátok, lefordítom mind a 11 lépést...
Én megköszönném, mert azt hittem megértem, de aztán kiderült hogy mégsem.
Válasz küldése