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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-12-13T03:26:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13789&amp;mode</id>
<entry>
<author><name><![CDATA[marmur]]></name></author>
<updated>2015-12-13T03:26:48+01:00</updated>
<published>2015-12-13T03:26:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147831#p147831</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147831#p147831"/>
<title type="html"><![CDATA[Re: Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147831#p147831"><![CDATA[
Jeżeli zmienna a jest typu char który jest 1bajtowy (8bitow) i przesuniesz go o 8 bitow to będzie kicha. Może tutaj jest problem?<br />Wydaje mi się ze musisz zrzutowac sobie a np na int16_t a dopiero potem przesunąć w lewo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10570">marmur</a> — 13 gru 2015, o 03:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymalko]]></name></author>
<updated>2015-12-12T21:55:42+01:00</updated>
<published>2015-12-12T21:55:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147808#p147808</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147808#p147808"/>
<title type="html"><![CDATA[Re: Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147808#p147808"><![CDATA[
Hmm w tym momencie wydaje mi się że chyba trochę źle rozumiem pewne rzeczy.<br /><br />1) Z posta kolegi MirkoT rozumiem że dla zmiennej zlozenie typ uint32_t jest niepoprawny... Czy typ long double będzie odpowiedni (ma 16      bitów).<br />2) Do zmiennej a zapisuję liczbę odczytaną z X_A_H, natomiast b X_A_L. Cały czas wydawało mi się że jeżeli chcę złożyć te liczby w jedną 16 bitową, to robię to tak : zlozenie = (a&lt;&lt;8) | b;. W ten sposób bity liczby a odpowiadają za 8 bardziej znaczących bitów zmiennej zlozenie, natomiast b za 8 mniej znaczących bitow zmiennej zlozenie. Więc MSB zmiennej a jest również MSB zmiennej zlozenie, natomiast LSB zmiennej b jest LSB zmiennej zlozenie... Czy mój tok rozumowania jest błędny???<br />3) dołączyłem bibliotekę math.h teraz powinno być ok jeśli chodzi o operacje zmiennoprzecinkowe...<br /><br />Niestety nie mogę dojść do ładu z tymi wskazaniami...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11961">szymalko</a> — 12 gru 2015, o 21:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MirkoT]]></name></author>
<updated>2015-12-11T10:53:21+01:00</updated>
<published>2015-12-11T10:53:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147653#p147653</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147653#p147653"/>
<title type="html"><![CDATA[Re: Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147653#p147653"><![CDATA[
Wydaje mi się, że wykonujesz błędnego przeliczenia w linii 55<br />[syntax=c]zlozenie=(zlozenie*0.000061)-0.00006; //mnoże przez 0.061 mg/LSB oraz odejmuje 0.06 mg jako offset[/syntax]<br />Wykonujesz działania zmiennoprzecinkowe, a nie zainkludowałeś biblioteki która na takie operacje pozwala.<br />No i poza tym typ zmiennej zlozenie to uint32_t.<br />Ale to tylko luźne uwagi odnośnie przeliczania a nie samych wyników.<br />Poza tym dziwnie składasz a i b<br />W dalszej części kodu to b jest starszym bajtem <img src="https://forum.atnel.pl/images/smilies/icon_question.gif" alt=":?:" title="Znak zapytania" /> Bo tam badasz znak<br />a do zmiennej zlozenie jako starszy ładujesz a<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=189">MirkoT</a> — 11 gru 2015, o 10:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymalko]]></name></author>
<updated>2015-12-11T10:24:59+01:00</updated>
<published>2015-12-11T10:24:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147651#p147651</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147651#p147651"/>
<title type="html"><![CDATA[Re: Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147651#p147651"><![CDATA[
Cześć, próbowałem rozwiązania z uśrednianiem, lecz wyniki są mierne. Wydaje mi się że nie jest to dobre rozwiązanie ze względu na to że zmienia się praktycznie cała liczba (wszystkie cyfry). Gdyby się zmieniał 1 lub 2 LSB to może wtedy... Jak myślicie, może to być kwestia uszkodzonego akcelerometru ? Może z moim przetwarzaniem tych liczb jest coś nie tak? Może typy zmiennych są złe? A możliwe że chodzi o jakieś ustawienia rejestrów?<br />Proszę was o pomoc bo troszkę zależy mi na czasie... Ja staram się jak mogę, ale wydaje mi się że chyba za wąski w uszach jestem... <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11961">szymalko</a> — 11 gru 2015, o 10:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymalko]]></name></author>
<updated>2015-12-06T22:10:03+01:00</updated>
<published>2015-12-06T22:10:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147256#p147256</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147256#p147256"/>
<title type="html"><![CDATA[Re: Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147256#p147256"><![CDATA[
Dodaje filmik który powinien zobrazować mój problem:<br /><br /><!-- m --><a class="postlink" href="https://www.youtube.com/watch?v=laSASYZDCkI&amp;feature=youtu.be" >https://www.youtube.com/watch?v=laSASYZ ... e=youtu.be</a><!-- m --><br /><br />Jeśli chodzi o uśrednianie, to próbowałem zaimplementować cyfrowy filtr dolnoprzepustowy (opisany w poradniku Pana Mirka na temat ADC). Ale spróbuje jeszcze z tablicą tak jak kolega wspomniał.<br />Dziękuję za odzew <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=11961">szymalko</a> — 6 gru 2015, o 22:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Juffre]]></name></author>
<updated>2015-12-06T21:29:02+01:00</updated>
<published>2015-12-06T21:29:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147250#p147250</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147250#p147250"/>
<title type="html"><![CDATA[Re: Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147250#p147250"><![CDATA[
Spróbuj uśredniać pomiary. Zbierz w tablicy kilka próbek a później uśrednij z nich pomiar. Wydłuży Ci się odpowiedź na zmianę przyspieszenia za to otrzymasz stabilniejszy pomiar.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=473">Juffre</a> — 6 gru 2015, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szymalko]]></name></author>
<updated>2015-12-06T20:52:32+01:00</updated>
<published>2015-12-06T20:52:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147243#p147243</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147243#p147243"/>
<title type="html"><![CDATA[Przywitanie sie, oraz problem z akcelerometrem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13789&amp;p=147243#p147243"><![CDATA[
Witam wszystkich serdecznie. Jako że jestem tu na forum absolutnie nowy, kilka słów o sobie. Nazywam się Bartek, mam 23 lata. Pochodzę z okolic Żywca i obecnie studiuję Mechatronikę na Politechnice Wrocławskiej.<br />Zwracam się do Was drodzy forumowicze z problemem. Jakiś czas temu zakupiłem moduł akcelerometru firmy Pololu, oparty na memsie LSM303D. Komunikacja odbywa się po TWI/I2C. Udało mi się odczytać dane z akcelerometru, lecz są one bardzo niestabilne. Wartości skaczą, nie nadają się do dalszego wykorzystania. Wyniki wyświetlam na LCD. Wykorzystuję płytkę ATB.<br />Wykorzystuje gotowe biblioteki od Pana Mirosława Kardasia. Poniżej zamieszczam bibliotekę do LSM303D oraz main.c<br /><br />[syntax=c]//main.c<br />//Bartłomiej Małyszko<br />//Komunikacja z LSM303D<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;i2c_twi.h&quot;<br />#include &quot;lsm303d.h&quot;<br /><br />uint8_t bufor1&#91;1&#93;;<br />uint8_t bufor2&#91;1&#93;;<br />uint8_t bufor3&#91;1&#93;;<br />uint8_t bufor4&#91;1&#93;;<br /><br /><br />char a=0, b=0, c=0, d=0, wartosc_X=0;<br />//int przelozenie1=0.29,przelozenie2=0.136, t2=0.0625;<br />uint8_t dt=10;<br />uint32_t zlozenie=0;<br />uint8_t srednia_a=0,srednia_b=0;<br /><br /><br />int main(void)<br />{<br /><br /><br />        i2cSetBitrate(100);<br />        initLSM303Di2c();<br />        lcd_init();<br />        sei();<br />        <br />        while(1){<br /><br />        // Odczyt danych z akcelerometru<br />        TWI_read_buf( LSM303D_ADDR, OutDataReg_X_A_H , 1, bufor1 );<br />        a=*bufor1;<br />        TWI_read_buf( LSM303D_ADDR, OutDataReg_X_A_L , 1, bufor2 );<br />        b=*bufor2;<br />        TWI_read_buf( LSM303D_ADDR, OutDataReg_Z_A_H , 1, bufor3 );<br />        c=*bufor3;<br />        TWI_read_buf( LSM303D_ADDR, OutDataReg_Z_A_L , 1, bufor4 );<br />        d=*bufor4;<br /><br />        //zerowanie lsb oraz msb (znak)<br />        a=a&amp;0b01111111;<br />        b=b&amp;0b11111110;<br />        <br />        //wyznaczenie oraz wyswietlenie wartosci ax<br />lcd_locate(0,0);<br />lcd_str(&quot;X=&quot;);<br />        zlozenie=(a&lt;&lt;8) | b;<br />        zlozenie=(zlozenie*0.000061)-0.00006; //mnoże przez 0.061 mg/LSB oraz odejmuje 0.06 mg jako offset<br />        lcd_int(zlozenie);<br /><br />        // wyswietlenie przyspieszenia wzgledem osi X z uwzglednieniem znaku<br />/*<br />        lcd_locate(0,0);<br />        lcd_str(&quot;Y=&quot;);<br />        if(b&amp;0b10000000) //jak warunek spełniony to x jest ujemny<br />              //(kod uzupełnień do 2), bo na 1-szej pozycji jest jedynka<br />              {<br />                // i wtedy:<br /><br />                lcd_char('-');//pokaż &quot;-&quot; przed liczbą<br />                b=b&amp;0b01111111;//usuń jedynkę z przodu<br />                d=128-b;<br />                lcd_int(d);<br />                //od 128 odejmij liczbę zawartą w pozostałych 7 bitach<br /><br />              }<br />              //ale jeśli jedynki nie ma z przodu, to<br />              else {<br />                lcd_int(b);  //x jest dodatni, bez minusa, pokaż X<br /><br />*/<br />              }<br />                            _delay_ms(1000);<br />                                lcd_cls();<br />                                a=0,b=0,c=0;<br />                        }<br /><br /><br /><br /><br />void initLSM303Di2c(void)<br />{<br />      TWI_start();<br />      TWI_write(ADDR_WRITE);<br />      TWI_write(CTRL_Reg0);<br />      TWI_write(WriteCTRL0);<br />      TWI_stop();<br /><br />      TWI_start();<br />      TWI_write(ADDR_WRITE);<br />      TWI_write(CTRL_Reg1);<br />      TWI_write(WriteCTRL1);<br />      TWI_stop();<br /><br />      TWI_start();<br />      TWI_write(ADDR_WRITE);<br />      TWI_write(CTRL_Reg2);<br />      TWI_write(WriteCTRL2);<br />      TWI_stop();<br /><br />      TWI_start();<br />      TWI_write(ADDR_WRITE);<br />      TWI_write(CTRL_Reg5);<br />      TWI_write(WriteCTRL5);<br />      TWI_stop();<br /><br />      TWI_start();<br />      TWI_write(ADDR_WRITE);<br />      TWI_write(CTRL_Reg7);<br />      TWI_write(WriteCTRL7);<br />      TWI_stop();<br /><br />}[/syntax]<br /><br />Poniżej biblioteka do obsługi LSM303D:<br /><br />[syntax=c]#ifndef LSM303D_H_<br />#define LSM303D_H_<br /><br />#define LSM303D_ADDR                  0x3A<br />#define ADDR_WRITE                      0x3A<br />#define ADDR_READ                       0x3B<br /><br /><br />#define OutDataReg_X_M_L        0x08            <br />#define OutDataReg_Y_M_L        0x0A            <br />#define OutDataReg_Z_M_L        0x0C<br /><br />#define OutDataReg_X_A_L        0x28//0xA8<br />#define OutDataReg_Y_A_L        0x2A//0xAA<br />#define OutDataReg_Z_A_L        0x2C//0xAC<br /><br />#define OutDataReg_X_M_H        0x09<br />#define OutDataReg_Y_M_H        0x0B<br />#define OutDataReg_Z_M_H        0x0D<br /><br />#define OutDataReg_X_A_H        0xA9//0x29<br />#define OutDataReg_Y_A_H        0x2B//0xAB<br />#define OutDataReg_Z_A_H        0x2D//0xAD<br /><br />#define WHO_I_AM                        0x0F<br /><br />#define CTRL_Reg0                       0x1F<br />#define CTRL_Reg1                       0x20<br />#define CTRL_Reg2                       0x21<br />#define CTRL_Reg3                       0x22<br />#define CTRL_Reg4                       0x23<br />#define CTRL_Reg5                       0x24<br />#define CTRL_Reg6                       0x25<br />#define CTRL_Reg7                       0x26<br /><br />#define FIFO_CTRL                       0x2E            <br />#define FIFO_STAT                       0x2F            <br /><br />#define STATUS_A                        0x27<br /><br />#define OFFSET_X_L_M            0x16<br />#define OFFSET_Y_L_M            0x18<br />#define OFFSET_Z_L_M            0x1A<br /><br />#define OFFSET_X_H_M            0x17<br />#define OFFSET_Y_H_M            0x19<br />#define OFFSET_Z_H_M            0x1B<br /><br />#define WriteCTRL0                      0x00            // High-pass filter enabled for click function.<br />#define WriteCTRL1                      0x57<br />#define WriteCTRL2                      0x08<br />#define WriteCTRL4                      0x08            // Accelerometer data-ready signal on INT2.<br />#define WriteCTRL5                      0                       // Makro ustawiajace częstotliwosc samplowania magnetometru na 3.125Hz<br />#define WriteCTRL7                      0xA0            // High-pass filter mode selection: normal mode &amp; Magnetic sensor mode selection: Continuous-conversion mode<br /><br />void initLSM303Di2c(void);<br /><br />#endif<br />/* LSM303D_H_ */[/syntax]<br /><br />Kod ma za zadanie wyświetlenie przyspieszenie dla osi X, z tym że tak jak pisałem wartości bardzo szybko się zmieniają...<br />Zależy mi na pomiarze kierunku działania przyspieszenia ziemskiego, więc pomiar jest raczej statyczny.<br />Kod jest zlepkiem programów które znalazłem na forach internetowych. <br /><br />Bym zapomniał, wykorzystuje uC ATmega 32A, akcelerometr znajduje się na płytce stykowej.<br /><br />Z góry wszystkim dziękuję za pomoc.<br /><br />Serdecznie pozdrawiam <br />Bartek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11961">szymalko</a> — 6 gru 2015, o 20:52</p><hr />
]]></content>
</entry>
</feed>