<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=15154&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-04-19T21:42:49+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=15154&amp;mode</id>
<entry>
<author><name><![CDATA[klimek476]]></name></author>
<updated>2016-04-19T21:42:49+01:00</updated>
<published>2016-04-19T21:42:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158929#p158929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158929#p158929"/>
<title type="html"><![CDATA[Re: MPU6050 problem z i2c z bluebooka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158929#p158929"><![CDATA[
widze ze nikt sie nie garnal do pomocy....<br />W takim razie dla potomnych kroczacych sciezka odnajdywania orientacji w przestrzeni 3d :<br /> adres MPU6050 ma 7 bitow, wiec aby podczas odczytu z tego urzadzenia mozna bylo dodac 1 do ostatniego bitu to trzeba zrobic tak:<br />AdresMPU6050&lt;&lt;1 |1<br /><br />czyli przesunac o 1 w lewo.<br /><br />i wszystko działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />dodatkowo, przypominam ze pomiar jest bardzo zaszumiony, i o tym aby poprawnie rzutowac zmienne przy natloku funkcji odczytujacych!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10452">klimek476</a> — 19 kwi 2016, o 21:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[klimek476]]></name></author>
<updated>2016-04-18T08:51:22+01:00</updated>
<published>2016-04-18T08:51:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158827#p158827</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158827#p158827"/>
<title type="html"><![CDATA[Re: MPU6050 problem z i2c z bluebooka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158827#p158827"><![CDATA[
o kurdebele masz racje!, kolo 20 dam znac czy to pomoglo !!<br /><br /><br />co do tych funkcji write_byte(); i read_str(); to poza nazwa i nazwami zmiennych nie dostrzegam istotnej roznicy (poza tym +1  dla bitu r/w) chyba czegos nie widze :p<br /><br />Niestety - nic sie nie zmienilo (jedynie transmisja dziala nieco szybciej), bajty sie zapisuja do pamieci urzadzenia ale caly czas jest problem z odczytem, cokolwiek proboje odczytac dostaje wartosc 104, jezeli proboje odczytac rejestry zyroskopu otrzymuje 0, jesli akcelerometru(16 bit) otrzymuje 26758<br /><br />Ktos wie co jest nie tak z tymi funkcjami?<br />i dlaczego jak dodaje ten bit stopu(adres+1) to przestaje dzialac?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10452">klimek476</a> — 18 kwi 2016, o 08:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-04-18T08:34:58+01:00</updated>
<published>2016-04-18T08:34:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158826#p158826</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158826#p158826"/>
<title type="html"><![CDATA[Re: MPU6050 problem z i2c z bluebooka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158826#p158826"><![CDATA[
W tej linijce masz błąd:<br />[syntax=c]bitrate_div=((F_CPU/10001)/bitrate);[/syntax]<br />powinno być:<br />[syntax=c]bitrate_div=((F_CPU/1000l)/bitrate);[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />Zobacz jak wyglądają te dwie funkcje i2c_write_byte oraz i2c_read_str w BB.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 18 kwi 2016, o 08:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[klimek476]]></name></author>
<updated>2016-04-18T07:41:02+01:00</updated>
<published>2016-04-18T07:41:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158815#p158815</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158815#p158815"/>
<title type="html"><![CDATA[Re: MPU6050 problem z i2c z bluebooka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158815#p158815"><![CDATA[
Z noty katalogowej nie wynika aby brakowalo tam stopu, bluebook rowniez mowi inaczej, oscyloskopu nie posiadam, zadnego jego substytutu tez nie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10452">klimek476</a> — 18 kwi 2016, o 07:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Sparrow-hawk]]></name></author>
<updated>2016-04-18T07:25:22+01:00</updated>
<published>2016-04-18T07:25:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158811#p158811</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158811#p158811"/>
<title type="html"><![CDATA[Re: MPU6050 problem z i2c z bluebooka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158811#p158811"><![CDATA[
Moim zdaniem brakuje tam funkcji stop().<br />[syntax=c]void i2c_read_str(uint8_t device, uint8_t Address, uint8_t *buffer, uint8_t length)<br />{<br />        twi_start();<br />        twi_write(device);<br />        twi_write(Address);<br />        twi_stop(); <br /><br />        twi_start();<br />        twi_write(device + 1);             //tu nie wiedziec czemu  po wstawieniu +1 nic nie dziala<br />        while (length--) *buffer = twi_read( length ? ACK : NACK );<br />        twi_stop();<br />}[/syntax]<br />Masz jakiś analizator stanów logicznych? Oscyloskop?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10614">Sparrow-hawk</a> — 18 kwi 2016, o 07:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[klimek476]]></name></author>
<updated>2016-04-18T00:07:39+01:00</updated>
<published>2016-04-18T00:07:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158798#p158798</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158798#p158798"/>
<title type="html"><![CDATA[MPU6050 problem z i2c z bluebooka]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15154&amp;p=158798#p158798"><![CDATA[
Witam, mecze sie od wczoraj z modulem MPU6050 komunikujacym sie po i2c, zasilanym z 5V(zgodnie z nota katalogowa)<br />Funkcje kalibrujace i odczytujace mam z internetu i generalnie nawet dzialaja... problemem jest to ze po calej konfiguracji kiedy chce dokonac jakiegokolwiek odczytu to od zyroskopu dostaje 0 a od accelerometru 26728 i nic ani drgnie (bez wzgledu na wybor osi)<br /><br />podejrzewam ze cos nie tak jest z funkcja i2c_read_str() czyli odczyt bajtu, ale mi sie juz pomysly skonczyly, W bluebooku jest to wyjasnione dobrze ale chyba trzeba nieco zaadoptowac uzyta tam implementacje i2c do projektu tutaj... ma ktos jakis pomysl co w tej funkcji jest nie tak? <br /><br />Chyba najwieksza zagadka jest tutaj to ze w tej funkcji gdy chce ustawic bit zapis/odczyt na 1 to wszystko sie sypie i nic nie dziala :/ (83 linijka)<br /><br />funkcja obslugi TWI jest wzieta z bluebooka jednak moze w niej byc troche herezji bo edytowalem juz co popadnie ale caly czas bez zmian :/<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/twi.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;MPU6050.h&quot;<br /><br />#include &quot;i2c.h&quot;<br /><br /><br />#define ACK 1<br />#define NACK 0<br /><br />//bitrate w KHz<br /><br /><br />void i2c_init(void)<br />{<br />TWCR = (1&lt;&lt;TWEA)|(1&lt;&lt;TWEN);<br />twi_ustaw_bitrate(100);<br />}<br /><br /><br />void twi_ustaw_bitrate(uint16_t bitrate)<br />{<br />uint8_t bitrate_div;<br />bitrate_div=((F_CPU/10001)/bitrate);<br />if(bitrate_div&gt;=16)<br />bitrate_div=(bitrate_div-16)/2;<br /><br />TWBR=bitrate_div;<br />}<br /><br />void twi_start(void)<br />{<br />TWCR =(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTA);<br />while(!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br /><br />void twi_stop(void)<br />{<br />TWCR =(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO);<br />while(TWCR&amp;(1&lt;&lt;TWSTO));<br />}<br /><br />void twi_write(uint8_t data)<br />{<br />TWDR=data;<br />TWCR =(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN);<br />while(!(TWCR&amp;(1&lt;&lt;TWINT)));<br />}<br /><br />uint8_t twi_read(uint8_t ack)<br />{<br />TWCR =(1&lt;&lt;TWINT)|(ack&lt;&lt;TWEA)|(1&lt;&lt;TWEN);<br />while(!(TWCR&amp;(1&lt;&lt;TWINT)));<br />return TWDR;<br />}<br /><br /><br />void i2c_write_byte(uint8_t device, uint8_t Address, unsigned char *buffer)<br />{<br /><br />twi_start();                    //Generate Start COndition<br /><br />twi_write(device);        //Write Control byte<br /><br />twi_write(Address);             //Write Low Address<br /><br /><br />twi_write(*buffer);                 //Write Data<br /><br /><br />twi_stop();                     //Initiate Stop Condition<br />}<br /><br />void i2c_read_str(uint8_t device, uint8_t Address, uint8_t *buffer, uint8_t length)<br />{<br /><br />twi_start();<br />twi_write(device);<br />twi_write(Address);<br />twi_start();<br />twi_write(device );//tu nie wiedziec czemu  po wstawieniu +1 nic nie dziala<br />while (length--) *buffer = twi_read( length ? ACK : NACK );<br />twi_stop();<br /><br /><br />}[/syntax]<br /><br /><br />Tutaj obsluga MPU6050<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include  &quot;mpu6050.h&quot;               //biblioteka adresow MPU6050<br />#include &lt;util/delay.h&gt;<br />#include &quot;i2c.h&quot;<br />#include &quot;HD44780.h&quot;<br />#include &lt;stdlib.h&gt;<br /><br />#define gyro_sensitivity 65.5       // dla skali 500 degrees/s - z dokumentacji<br />volatile signed int     GYRO_XOUT, GYRO_YOUT, GYRO_ZOUT, ACCEL_XOUT, ACCEL_YOUT, ACCEL_ZOUT,<br />GYRO_XOUT_OFFSET, GYRO_YOUT_OFFSET, GYRO_ZOUT_OFFSET;<br />volatile double         ACCEL_XANGLE, ACCEL_YANGLE,<br />GYRO_XRATE, GYRO_YRATE, GYRO_ZRATE;<br />char wynik&#91;10&#93;;<br /><br /><br />void usart_str(char *tekst)<br />{<br />LCD_GoTo(0, 0);<br />LCD_WriteText(&quot;                 &quot;);<br />LCD_GoTo(0,0);<br />LCD_WriteText(tekst);<br />_delay_ms(200);<br />}<br /><br /><br /><br /><br />void MPU6050_i2c_test( void )<br />{<br />usart_str(&quot;MPU6050 I2C Read&quot;);<br />unsigned char Data = 0x00;<br /><br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_WHO_AM_I, &amp;Data, 1);<br /><br />if(Data == 0x68)    // = 104 w dziesietnym<br />{<br />usart_str(&quot;Passed, MPU6050 Address:  &quot;);<br />itoa(Data,wynik,16);<br />usart_str(wynik);<br /><br />}<br />else<br />{<br />usart_str(&quot;Failed, Stopping. Address:  &quot;);<br />itoa(Data,wynik,16);<br />usart_str(wynik);<br />while(1);<br />}<br />}<br /><br />void MPU6050_setup( void )<br />{<br />usart_str(&quot;MPU6050 Setup... &quot;);<br /><br />//Sets sample rate to 8000/1+7 = 1000Hz<br /><br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_SMPLRT_DIV, 0x07);<br />//Disable FSync, 256Hz DLPF<br /><br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_CONFIG, 0x00);<br />//Disable gyro self tests, scale of 500 degrees/s<br /><br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_GYRO_CONFIG, 0b00001000);<br />//Disable accel self tests, scale of +-2g, no DHPF<br /><br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_ACCEL_CONFIG, 0x00);<br />//Freefall threshold of |0mg|<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_FF_THR, 0x00);<br />//Freefall duration limit of 0<br /><br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_FF_DUR, 0x00);<br />//Motion threshold of 0mg<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_MOT_THR, 0x00);<br />//Motion duration of 0s<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_MOT_DUR, 0x00);<br />//Zero motion threshold<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_ZRMOT_THR, 0x00);<br />//Zero motion duration threshold<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_ZRMOT_DUR, 0x00);<br />//Disable sensor output to FIFO buffer<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_FIFO_EN, 0x00);<br /><br />//AUX I2C setup<br />//Sets AUX I2C to single master control, plus other config<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_MST_CTRL, 0x00);<br />//Setup AUX I2C slaves<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV0_ADDR, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV0_REG, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV0_CTRL, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV1_ADDR, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV1_REG, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV1_CTRL, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV2_ADDR, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV2_REG, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV2_CTRL, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV3_ADDR, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV3_REG, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV3_CTRL, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV4_ADDR, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV4_REG, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV4_DO, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV4_CTRL, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV4_DI, 0x00);<br /><br />//MPU6050_RA_I2C_MST_STATUS //Read-only<br />//Setup INT pin and AUX I2C pass through<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_INT_PIN_CFG, 0x00);<br />//Enable data ready interrupt<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_INT_ENABLE, 0x00);<br /><br />//MPU6050_RA_DMP_INT_STATUS        //Read-only<br />//MPU6050_RA_INT_STATUS 3A        //Read-only<br />//MPU6050_RA_ACCEL_XOUT_H         //Read-only<br />//MPU6050_RA_ACCEL_XOUT_L         //Read-only<br />//MPU6050_RA_ACCEL_YOUT_H         //Read-only<br />//MPU6050_RA_ACCEL_YOUT_L         //Read-only<br />//MPU6050_RA_ACCEL_ZOUT_H         //Read-only<br />//MPU6050_RA_ACCEL_ZOUT_L         //Read-only<br />//MPU6050_RA_TEMP_OUT_H         //Read-only<br />//MPU6050_RA_TEMP_OUT_L         //Read-only<br />//MPU6050_RA_GYRO_XOUT_H         //Read-only<br />//MPU6050_RA_GYRO_XOUT_L         //Read-only<br />//MPU6050_RA_GYRO_YOUT_H         //Read-only<br />//MPU6050_RA_GYRO_YOUT_L         //Read-only<br />//MPU6050_RA_GYRO_ZOUT_H         //Read-only<br />//MPU6050_RA_GYRO_ZOUT_L         //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_00     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_01     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_02     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_03     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_04     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_05     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_06     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_07     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_08     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_09     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_10     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_11     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_12     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_13     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_14     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_15     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_16     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_17     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_18     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_19     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_20     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_21     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_22     //Read-only<br />//MPU6050_RA_EXT_SENS_DATA_23     //Read-only<br />//MPU6050_RA_MOT_DETECT_STATUS     //Read-only<br /><br />//Slave out, dont care<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV0_DO, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV1_DO, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV2_DO, 0x00);<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_SLV3_DO, 0x00);<br />//More slave config<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_I2C_MST_DELAY_CTRL, 0x00);<br />//Reset sensor signal paths<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_SIGNAL_PATH_RESET, 0x00);<br />//Motion detection control<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_MOT_DETECT_CTRL, 0x00);<br />//Disables FIFO, AUX I2C, FIFO and I2C reset bits to 0<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_USER_CTRL, 0x00);<br />//Sets clock source to gyro reference w/ PLL<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_PWR_MGMT_1, 0b00000010);<br />//Controls frequency of wakeups in accel low power mode plus the sensor standby modes<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_PWR_MGMT_2, 0x00);<br />//MPU6050_RA_BANK_SEL            //Not in datasheet<br />//MPU6050_RA_MEM_START_ADDR        //Not in datasheet<br />//MPU6050_RA_MEM_R_W            //Not in datasheet<br />//MPU6050_RA_DMP_CFG_1            //Not in datasheet<br />//MPU6050_RA_DMP_CFG_2            //Not in datasheet<br />//MPU6050_RA_FIFO_COUNTH        //Read-only<br />//MPU6050_RA_FIFO_COUNTL        //Read-only<br />//Data transfer to and from the FIFO buffer<br />i2c_write_byte(MPU6050_ADDRESS, MPU6050_RA_FIFO_R_W, 0x00);<br />//MPU6050_RA_WHO_AM_I             //Read-only, I2C address<br /><br />usart_str(&quot;Complete!&quot;);<br />}<br /><br />void MPU6050_accel_values( void )<br />{<br />unsigned char   ACCEL_XOUT_H, ACCEL_XOUT_L, ACCEL_YOUT_H, ACCEL_YOUT_L, ACCEL_ZOUT_H, ACCEL_ZOUT_L;<br />// odczyt danych akcelerometru<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, &amp;ACCEL_XOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, &amp;ACCEL_XOUT_L, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_YOUT_H, &amp;ACCEL_YOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_YOUT_L, &amp;ACCEL_YOUT_L, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_ZOUT_H, &amp;ACCEL_ZOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_ZOUT_L, &amp;ACCEL_ZOUT_L, 1);<br /><br />// konwersja odebranych danych<br />ACCEL_XOUT = ( ACCEL_XOUT_H&lt;&lt;8 | ACCEL_XOUT_L );<br />ACCEL_YOUT = ( ACCEL_YOUT_H&lt;&lt;8 | ACCEL_YOUT_L );<br />ACCEL_ZOUT = ( ACCEL_ZOUT_H&lt;&lt;8 | ACCEL_ZOUT_L );<br /><br />}<br />void MPU6050_accel_angles( void )<br />{<br />if( ACCEL_ZOUT &gt;= 0 )<br />ACCEL_YANGLE = 57.295 * atan2((float) -ACCEL_XOUT ,  sqrt(pow((float) ACCEL_ZOUT, 2) + pow((float) ACCEL_YOUT, 2)));<br />else<br />ACCEL_YANGLE = 57.295 * atan2((float) -ACCEL_XOUT , -sqrt(pow((float) ACCEL_ZOUT, 2) + pow((float) ACCEL_YOUT, 2)));<br />}<br /><br />void MPU6050_gyro_calibrate( void )<br />{<br />unsigned char   GYRO_XOUT_H, GYRO_XOUT_L, GYRO_YOUT_H, GYRO_YOUT_L, GYRO_ZOUT_H ,GYRO_ZOUT_L;<br />long long int   GYRO_XOUT_OFFSET_1000SUM=0, GYRO_YOUT_OFFSET_1000SUM=0, GYRO_ZOUT_OFFSET_1000SUM=0;<br />int x = 0;<br /><br />usart_str(&quot;Gyro calib... &quot;);<br /><br />for (x = 0; x &lt; 2500; x++)<br />{<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_H, &amp;GYRO_XOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_L, &amp;GYRO_XOUT_L, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_H, &amp;GYRO_YOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_L, &amp;GYRO_YOUT_L, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_H, &amp;GYRO_ZOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_L, &amp;GYRO_ZOUT_L, 1);<br /><br />GYRO_XOUT_OFFSET_1000SUM += ((GYRO_XOUT_H &lt;&lt; 8) | GYRO_XOUT_L);<br />GYRO_YOUT_OFFSET_1000SUM += ((GYRO_YOUT_H &lt;&lt; 8) | GYRO_YOUT_L);<br />GYRO_ZOUT_OFFSET_1000SUM += ((GYRO_ZOUT_H &lt;&lt; 8) | GYRO_ZOUT_L);<br /><br />_delay_ms(1);<br />}<br /><br />GYRO_XOUT_OFFSET = GYRO_XOUT_OFFSET_1000SUM / 2500;<br />GYRO_YOUT_OFFSET = GYRO_YOUT_OFFSET_1000SUM / 2500;<br />GYRO_ZOUT_OFFSET = GYRO_ZOUT_OFFSET_1000SUM / 2500;<br /><br />usart_str(&quot;Complete!&quot;);<br />}<br /><br />void MPU6050_gyro_rate( void )<br />{<br />unsigned char   GYRO_XOUT_H, GYRO_XOUT_L, GYRO_YOUT_H, GYRO_YOUT_L, GYRO_ZOUT_H ,GYRO_ZOUT_L;<br /><br />// odcyt danych z zyroskopu<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_H, &amp;GYRO_XOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_L, &amp;GYRO_XOUT_L, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_H, &amp;GYRO_YOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_L, &amp;GYRO_YOUT_L, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_H, &amp;GYRO_ZOUT_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_L, &amp;GYRO_ZOUT_L, 1);<br /><br />// konwersja odebranych danych<br />GYRO_XOUT = ( GYRO_XOUT_H &lt;&lt; 8 | GYRO_XOUT_L ) - GYRO_XOUT_OFFSET;<br />GYRO_YOUT = ( GYRO_YOUT_H &lt;&lt; 8 | GYRO_YOUT_L ) - GYRO_YOUT_OFFSET;<br />GYRO_ZOUT = ( GYRO_ZOUT_H &lt;&lt; 8 | GYRO_ZOUT_L ) - GYRO_ZOUT_OFFSET;<br /><br />// konwersja na degrees/s<br />GYRO_XRATE = (float)GYRO_XOUT/gyro_sensitivity;<br />GYRO_YRATE = (float)GYRO_YOUT/gyro_sensitivity;<br />GYRO_ZRATE = (float)GYRO_ZOUT/gyro_sensitivity;<br />}<br /><br />void MPU6050_single_axis_gyro_calibrate( unsigned char AXIS )<br />{<br />unsigned char   GYRO_H, GYRO_L;<br />long long int   GYRO_OFFSET_SUM=0;<br />int x;<br /><br />usart_str(&quot;Gyroscope Calibrate... &quot;);<br /><br />switch( AXIS )<br />{<br />case 'X':<br />for (x = 0; x &lt; 1000; x++)<br />{<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_H, &amp;GYRO_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_L, &amp;GYRO_L, 1);<br />GYRO_OFFSET_SUM += ((GYRO_H &lt;&lt; 8) | GYRO_L);<br />_delay_ms(3);<br />}<br />GYRO_XOUT_OFFSET = (signed int)GYRO_OFFSET_SUM / 1000;<br />break;<br />case 'Y':<br />for (x = 0; x &lt; 1000; x++)<br />{<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_H, &amp;GYRO_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_L, &amp;GYRO_L, 1);<br />GYRO_OFFSET_SUM += ((GYRO_H &lt;&lt; 8) | GYRO_L);<br />_delay_ms(3);<br />}<br />GYRO_YOUT_OFFSET = (signed int)GYRO_OFFSET_SUM / 1000;<br />break;<br />case 'Z':<br />for (x = 0; x &lt; 1000; x++)<br />{<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_H, &amp;GYRO_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_L, &amp;GYRO_L, 1);<br />GYRO_OFFSET_SUM += ((GYRO_H &lt;&lt; 8) | GYRO_L);<br />_delay_ms(3);<br />}<br />GYRO_ZOUT_OFFSET = (signed int)GYRO_OFFSET_SUM / 1000;<br />break;<br />}<br /><br />usart_str(&quot;Complete!&quot;);<br />}<br /><br />signed int MPU6050ReadSingleAxisAccel( unsigned char AXIS )<br />{<br />unsigned char   ACCEL_H, ACCEL_L;<br /><br />switch( AXIS )<br />{<br />case 'X':<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, &amp;ACCEL_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_L, &amp;ACCEL_L, 1);<br />break;<br />case 'Y':<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_YOUT_H, &amp;ACCEL_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_YOUT_L, &amp;ACCEL_L, 1);<br />break;<br />case 'Z':<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_ZOUT_H, &amp;ACCEL_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_ACCEL_ZOUT_L, &amp;ACCEL_L, 1);<br />break;<br />}<br /><br />return  ((signed int)( ACCEL_H&lt;&lt;8 | ACCEL_L ));<br />}<br /><br />signed int MPU6050ReadSingleAxisGyro( unsigned char AXIS )<br />{<br />unsigned char   GYRO_H, GYRO_L;<br /><br />switch( AXIS )<br />{<br />case 'X':<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_H, &amp;GYRO_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_XOUT_L, &amp;GYRO_L, 1);<br />break;<br />case 'Y':<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_H, &amp;GYRO_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_YOUT_L, &amp;GYRO_L, 1);<br />break;<br />case 'Z':<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_H, &amp;GYRO_H, 1);<br />i2c_read_str(MPU6050_ADDRESS, MPU6050_RA_GYRO_ZOUT_L, &amp;GYRO_L, 1);<br />break;<br />}<br /><br />return  (signed int)( GYRO_H&lt;&lt;8 | GYRO_L ) - GYRO_YOUT_OFFSET;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10452">klimek476</a> — 18 kwi 2016, o 00:07</p><hr />
]]></content>
</entry>
</feed>