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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=13953&amp;mode</id>
<entry>
<author><name><![CDATA[osip7]]></name></author>
<updated>2015-12-21T10:56:48+01:00</updated>
<published>2015-12-21T10:56:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13953&amp;p=148604#p148604</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13953&amp;p=148604#p148604"/>
<title type="html"><![CDATA[Atmega 328p - L3GD20H]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13953&amp;p=148604#p148604"><![CDATA[
Witam, mam problem z czujnikiem L3GD20H. Mam wrażenie że na wyświetlaczu odczytuję dość losowe liczby oraz przy odczycie z osi X czujnik reaguje na ruch w każdej osi. Będę bardzo wdzięczny za pomoc. Poniżej wklejam kod. <br />Korzystam z tej noty katalogowej - <!-- m --><a class="postlink" href="https://www.pololu.com/file/download/L3GD20H.pdf?file_id=0J731" >https://www.pololu.com/file/download/L3 ... e_id=0J731</a><!-- m --><br /><br />[syntax=c]#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/wdt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/power.h&gt;<br />#include &quot;zyroskop.h&quot;<br />#include &quot;lcd.h&quot;<br /><br /><br />int main()<br />{<br />int Gx,Gy,Gz;<br /><br />unsigned char Gx1,Gx2,Gy1,Gy2,Gz1,Gz2;<br /><br />LCD_Initalize();<br />    LCD_Clear();<br /><br />    Inicjacja();<br />initgyro();<br /><br />    while(1)<br />     {<br />      Gx1 =(unsigned char) TWI_read_register(gyroscope_W ,OUT_X_L);<br />          Gx2 =(unsigned char) TWI_read_register(gyroscope_W ,OUT_X_H);<br /><br />          Gx = (int) (Gx2&lt;&lt;8) + Gx1;<br /><br />          LCD_GoTo(0,0);<br /><br />          lcd_int(Gx);<br />          _delay_ms(400);<br />     }<br />}[/syntax]<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />#ifndef ZYROSKOP_H_<br />#define ZYROSKOP_H_<br /><br />#define WHO_AM_I 0x0F<br />#define gyroscope_W 0xD6<br />#define gyroscope_R 0xD7 // SA0 to + VDD through 10kOhm resistor, read<br /><br />#define CTRL1 0x20<br />#define CTRL1REG 0x0F // 12,5 Hz (ODR), n.a. (cut-off&#91;hz&#93;), power mode normal, all axis enabled<br />#define CTRL2 0x21<br /><br />#define CTRL3 0x22<br />#define CTRL4 0x23<br /><br />#define CTRL5 0x24<br />#define CTRL6 0x25<br /><br />#define OUT_X_L 0x28<br />#define OUT_X_H 0x29<br />#define OUT_Y_L 0x2A<br />#define OUT_Y_H 0x2B<br />#define OUT_Z_L 0x2C<br />#define OUT_Z_H 0x2D<br /><br />#define FIFO_CTRL 0x2E<br />#define FIFO_SRC 0x2F<br /><br /><br />void initgyro(void);<br />void Inicjacja(void);<br />void Start(void);<br />void Write (uint8_t address);<br />void Read(void);<br />void Stop(void);<br />void TWI_write_register(uint8_t address, uint8_t reg, uint8_t val);<br />uint8_t TWI_read_register(uint8_t address, uint8_t reg);<br /><br /><br />#endif /* ZYROSKOP_H_ */[/syntax]<br /><br />[syntax=c]#include &quot;zyroskop.h&quot;<br />#include &lt;avr/io.h&gt;<br />    #include &lt;avr/wdt.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &lt;avr/power.h&gt;<br /><br /><br />void Inicjacja(void)<br />    {<br />            TWCR &amp;= ~(1&lt;&lt;TWIE);<br />            TWBR = 16;<br />            TWSR &amp;= ~(1&lt;&lt;TWPS1) | (1&lt;&lt;TWPS0);<br />    }<br /><br />    void 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 Write(uint8_t address)<br />    {<br />            TWDR = address;<br />            TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN);<br />            while(!(TWCR&amp;(1&lt;&lt;TWINT)));<br />    }<br /><br />    void Read(void)<br />    {<br />            uint8_t zmienna=0;<br />            zmienna = TWDR;<br />            TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN);<br />            while(!(TWCR&amp;(1&lt;&lt;TWINT)));<br />    }<br /><br />    void Stop(void)<br />    {<br />            TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO);<br />    }<br /><br /><br /><br />void TWI_write_register(uint8_t address, uint8_t reg, uint8_t val)<br />{<br /><br />Start(); // Send Start<br />Write(address); // Send IIC &quot;Write&quot; Address<br />Write(reg); // Send Register<br />Write(val); // Send Value<br />Stop(); // Send Stop<br />}<br /><br />uint8_t TWI_read_register(uint8_t address, uint8_t reg)<br />{<br />            Start();<br />            Write(address); //adres slave<br />            //pisanie adresu rejestru<br />            Write(reg); //adres rejestru<br />            Start();<br />            Write(address+1); //adres slave+1<br /><br /><br />            Read();<br /><br />            Stop();<br />return TWDR;<br />}<br /><br /><br />void initgyro(void)<br />{<br />//TWI_write_register(ADDR_WRITE,CTRL_Reg1,WriteCTRL1);<br /><br />TWI_write_register(gyroscope_W,CTRL1,0x7F);<br />TWI_write_register(gyroscope_W,CTRL4,0x80);<br /><br /><br />}[/syntax]<br /><br />Pozdrawiam,<br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9089">osip7</a> — 21 gru 2015, o 10:56</p><hr />
]]></content>
</entry>
</feed>