<?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=6150&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-25T22:56:45+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6150&amp;mode</id>
<entry>
<author><name><![CDATA[icer_cmg]]></name></author>
<updated>2014-02-25T22:56:45+01:00</updated>
<published>2014-02-25T22:56:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6150&amp;p=72070#p72070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6150&amp;p=72070#p72070"/>
<title type="html"><![CDATA[Re: Akcelerometr cyfrowy + Atmega32A]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6150&amp;p=72070#p72070"><![CDATA[
MPU-6050 - kod z moich początków, służył jedynie do zabawy i nie jest idealny, ale może pomoże. <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />//#include &quot;USART/usart.h&quot;<br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br /> <br /> <br /> <br />#define adres 0xD0      //adres I2C MPU-&lt;span class=&quot;posthilit&quot;&gt;6050&lt;/span&gt;<br /> <br />uint8_t odczyt1&#91;104&#93;;<br />uint8_t acc&#91;14&#93;,f=0;<br />int16_t acc_X, acc_Y, acc_Z, gyro_X, gyro_Y, gyro_Z,t,ax,ay,az,gx,gy,gz;<br /> <br />int main(void){<br />        //ustawienia przerwania INT1<br />        MCUCR |= (1&lt;&lt;ISC11)|(1&lt;&lt;ISC10); //przerwanie wywołane zboczem narastającym<br />        GICR |= (1&lt;&lt;INT1);                              //włączenie przerwynania od INT1<br /> <br />        //inicjacja wyswietlacza LCD<br />        lcd_init();<br />        DDRA |= (1&lt;&lt;PA7);<br />        PORTA |= (1&lt;&lt;PA7);      //włączenie podswietlenia LCD<br /> <br />        //inicjacja modułu USART<br />       // USART_init();<br /> <br /> <br /> <br />        //włączenie modułu akcelometru i ustawienia<br />//    TWI_write_bajt(adres, 0x6B, 32);            // wyjcie akcelometru ze stanu uspienia<br />//    TWI_write_bajt(adres, 0x38, 1);                     // wlacza przerywanie gdy dane sa gotowe do odczytu<br />//    TWI_write_bajt(adres, 0x1B, 16);            // zakres żyroskopu 1000 °/s<br />//    TWI_write_bajt(adres, 0x19, 79);<br />    <br />    <br />    TWI_write_b(adres, 0x1C,0b00000000);  // zakres akcelerometru 8g<br />    TWI_write_b(adres, 0x1B, 0b00000000);<br />   TWI_write_b(adres, 0x19, 15);                         //Sets sample rate to 8000/1+7 = 1000Hz<br />    TWI_write_b(adres, 0x6B, 0b00000000);                // wyjcie akcelometru ze stanu uspienia<br />    TWI_write_b(adres, 0x6C, 0b11000000);<br />    //<br /><br />    <br />    <br /> <br />    //odczyt wszystkich danych z rejestru MPU i wysłanie ich do terminala<br />    _delay_ms(100);<br />        TWI_read_buf(adres, 0x0D, 105, odczyt1);<br />        //uint8_t x=0, y=13;<br />//        while(x&lt;105){<br />//                                nadaj_int(y++);<br />//                                nadaj_str(&quot;.  &quot;);<br />//                                nadaj_int(odczyt1&#91;x++&#93;);<br />//                                nadaj_str(&quot;\r\n&quot;);      //zakończenie lini tekstu<br />//<br />//                        }<br /> <br />        sei();  //zezwolenie na globalne przerywania<br /> <br />        while(1){<br /> <br />                //odczyt danych z akcelometru<br />                TWI_read_buf(adres, 0x3B, 14, acc);  //0-5 akcelelometr; 6-7 temperatura; 8-13 żyroskop<br />                //konwersja odczytanych danych<br />                acc_X=0;<br />                acc_X |= (acc&#91;0&#93;&lt;&lt;8) | (acc&#91;1&#93;);<br />                acc_Y=0;<br />                acc_Y |= (acc&#91;2&#93;&lt;&lt;8) | (acc&#91;3&#93;);        //akcelelometr<br />                acc_Z=0;<br />                acc_Z |= (acc&#91;4&#93;&lt;&lt;8) | (acc&#91;5&#93;);<br />//                t=0;<br />//                                t |= (acc&#91;6&#93;&lt;&lt;8) | (acc&#91;7&#93;);<br />//                                t/=340;<br />//                                t+=36;<br /><br />                gyro_X=0;<br />                gyro_X |= (acc&#91;8&#93;&lt;&lt;8) | (acc&#91;9&#93;);<br />                gyro_Y=0;<br />                gyro_Y |= (acc&#91;10&#93;&lt;&lt;8) | (acc&#91;11&#93;);     //żyroskop<br />                gyro_Z=0;<br />                gyro_Z |= (acc&#91;12&#93;&lt;&lt;8) | (acc&#91;13&#93;);<br /><br /><br />                while(f){<br /><br />                ax-=acc_X;<br />                    ay-=acc_Y;<br />                    az-=acc_Z;<br />                    gx-=gyro_X;<br />                    gy-=gyro_Y;<br />                    gz-=gyro_Z;<br />                }<br /><br />                ax=acc_X;<br />                ay=acc_Y;<br />                az=acc_Z;<br />                gx=gyro_X;<br />                gy=gyro_Y;<br />                gz=gyro_Z;<br />                f=1;<br /><br /><br /><br /><br /><br /> <br />                //wyswietlanie danych z akcelelometru na LCD<br />                lcd_cls();<br /><br />                lcd_int(gx);<br />               // lcd_locate(0,8);<br />                lcd_str(&quot; &quot;);<br />                lcd_int(gy);<br /><br />                lcd_str(&quot; &quot;);<br />                lcd_int(gz);<br />//                lcd_str(&quot; &quot;);<br />//                               lcd_int(t);<br /><br />                lcd_locate(1,0);<br />                lcd_int(ax);<br />                              // lcd_locate(0,8);<br />                               lcd_str(&quot; &quot;);<br />                               lcd_int(ay);<br />                               //lcd_locate(1,0);<br />                               lcd_str(&quot; &quot;);<br />                               lcd_int(az);<br />                            ax=acc_X;<br />                                            ay=acc_Y;<br />                                            az=acc_Z;<br />                                            gx=gyro_X;<br />                                            gy=gyro_Y;<br />                                            gz=gyro_Z;<br />                                            f=1;<br /><br /> <br />              <br /> <br />              //  _delay_ms(100);<br />        }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1636">icer_cmg</a> — 25 lut 2014, o 22:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ADAMPOLWROC]]></name></author>
<updated>2014-02-25T22:13:42+01:00</updated>
<published>2014-02-25T22:13:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6150&amp;p=72059#p72059</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6150&amp;p=72059#p72059"/>
<title type="html"><![CDATA[Akcelerometr cyfrowy + Atmega32A]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6150&amp;p=72059#p72059"><![CDATA[
Witam czy ktoś wykonywał coś takiego i mógłby mi pomóc z napisaniem programu do obsługi I2C, SPI i przerwania w C? Generlnie chodzi o zapisanie drgań przez  3-4 dni z 3 osi. Jeśli ktokolwiek jest w stanie mi pomóc to bardzo prosze, do tej pory wykonywałem proste programiki i świecenia diodkami więc jestem totalnym laikiem w tej dziedzinie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3165">ADAMPOLWROC</a> — 25 lut 2014, o 22:13</p><hr />
]]></content>
</entry>
</feed>