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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2011-11-07T13:08:26+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=40&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2011-11-07T13:08:26+01:00</updated>
<published>2011-11-07T13:08:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=282#p282</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=282#p282"/>
<title type="html"><![CDATA[Re: odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=282#p282"><![CDATA[
No to widać postęp po przeczytaniu o wskaźnikach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> super<br /><br />tylko jeszcze wkradł się koledze mały błąd (jednak to można zrozumieć) otóż zapis nie może wyglądać tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">a = (1&lt;&lt;3);<br />*buf = a;</div><br /><br />tylko jeśli by już iść tą drogą to tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">a = (1&lt;&lt;3);<br />buf = &amp;a;</div><br /><br />a można jeszcze prościej , tzn w ogóle pozbyć się w tym przypadku zmiennej wskaźnikowej buf i przesłać bezpośrednio adres zmiennej a, czyli:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">a = (1&lt;&lt;3);<br />I2C_write_buf(0xA6, 0x2D, 1, &amp;a); </div><br /><br />Popełnił bowiem kolega tu drobny błąd myślowy - bo jak już to mogłoby i powinno wyglądać prawidłowo też tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#define MAX_BUF_SIZE   10   // definiujemy maksymalny rozmiar bufora<br />u08 buf&#91; MAX_BUF_SIZE &#93;;<br /><br />buf&#91;0&#93; = (1&lt;&lt;3);<br />I2C_write_buf(0xA6, 0x2D, 1, buf); </div><br /><br />a jeśli kolega zechce innym razem więcej bajtów przesłać niż jeden ??? to wtedy wystarczy napełnić kilka bajtów bufora np ze trzy i wysłać je tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">I2C_write_buf(0xA6, 0x2D, 3, buf); </div><br /><br />czy teraz jaśniej ???<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lis 2011, o 13:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[orbit323]]></name></author>
<updated>2011-11-07T12:35:51+01:00</updated>
<published>2011-11-07T12:35:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=281#p281</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=281#p281"/>
<title type="html"><![CDATA[Re: odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=281#p281"><![CDATA[
Poczytałem więcej o wskaźnikach i wydaje mi się, że ten kod pokaże w jaki sposób rozumiem zbieranie danych z tego bufora:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">#include &lt;stdio.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdlib.h&gt; <br /><br />#include &quot;i2c_soft_cfg.h&quot;<br />#include &quot;i2c_soft.h&quot;<br />#include &quot;lcd44780.h&quot; <br /><br />#include &lt;util/delay.h&gt;<br /><br />u08 a;<br />u08 *buf;<br /><br />int main(void)<br />{<br /><br />lcd_init();                                    // inicjalizacja wyświetlacza LCD<br />i2c_init();<br /><br />a = (1&lt;&lt;3);<br />*buf = a;<br /><br />I2C_write_buf(0xA6, 0x2D, 1, *buf);               // inicjalizacja ADXL w measurement mode<br /><br />      while(1)<br />      {<br />         <br /><br />         I2C_read_buf(0xA7, 0x32, 2, *buf);         // zczytanie wartości X (dwa bajty po sobie) do bufora<br /><br />         lcd_locate(0,5);                  // wyświetlanie zawartości bufora<br />         lcd_char(*buf);<br /><br /><br />         _delay_ms(100);<br />      }<br /><br />}<br /><br /></div><br /><br />Kod ma na celu włączenie akcelerometru z którego chcę zczytywać dane z adresów 0x32 i 0x33, łącząc je w jedną liczbę i następnie wyświetlać na LCD. By to osiągnąć muszę najpierw przestawić bit D3  na stan wysoki, co też próbuję wykonać zapisując przesunięcie bitowe w odp. rejestr. Mam praktycznie pewność, że źle pochodzę do sprawy i że może się to rozbijać o typ wysyłanych danych (wysłanie przesunięcia bitowego jako unsigned char), ale prawdę mówiąc nie mogę dojść jak to do końca powinno wyglądać.<br /><br />Pojawia się warning o treści: <br />warning: passing argument 4 of 'I2C_write_buf' makes pointer from integer without a cast<br />note: expected 'u08 *' but argument is of type 'u08'<br /><br />Bardzo bym prosił o jakąś wskazówkę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><br />//edit: to co dzieje się potem przy zczytywaniu danych do buf w read_buf jeszcze nie zostało przemyślane, na razie chciałbym mieć działający akcelerometr<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=95">orbit323</a> — 7 lis 2011, o 12:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2011-11-03T22:32:49+01:00</updated>
<published>2011-11-03T22:32:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=239#p239</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=239#p239"/>
<title type="html"><![CDATA[Re: odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=239#p239"><![CDATA[
Ale ja na prawdę coraz mniej rozumiem kolegę, i zastanawiam się po co cała ta przeróbka dobrze działającej funkcji na tą dziwną rzecz na górze ???<br /><br />przecież:<br /><br />[syntax=c]void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf ) {<br />TWI_start();<br />TWI_write(SLA);<br />TWI_write(adr);<br />while (len--) TWI_write(*buf++);<br />TWI_stop();<br />}[/syntax]<br /><br />to pięknie zapisuje wszystko do wskazanego bufora - czyli robi dokładnie to o co koledze chodzi - tzn tak mi się wydaje z opisu. No ale skoro wskaźnik przeraża - to niedobrze <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... trzeba w takim razie najpierw dobrze doczytać i poćwiczyć wskaźniki , ew zadać dodatkowe pytania gdy się czegoś nie zrozumie. Bo tu - to mamy na razie super podstawowe operacje na wskaźnikach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 lis 2011, o 22:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[orbit323]]></name></author>
<updated>2011-11-03T21:13:44+01:00</updated>
<published>2011-11-03T21:13:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=237#p237</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=237#p237"/>
<title type="html"><![CDATA[Re: odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=237#p237"><![CDATA[
to może spytam inaczej:<br /><br />czy da się jakoś załatwić zczytywanie kolejnych bajtów z kolejnych rejestrów bez tego wskaźnika? (przeraża mnie on)<br /><br />jeśli nie to:<br /><br />czy wystarczy utworzyć zmienną buf która będzie łapać bajty wysłane pod adresy z wskaźnika?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=95">orbit323</a> — 3 lis 2011, o 21:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[orbit323]]></name></author>
<updated>2011-11-02T17:49:34+01:00</updated>
<published>2011-11-02T17:49:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=195#p195</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=195#p195"/>
<title type="html"><![CDATA[Re: odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=195#p195"><![CDATA[
konkretnie to zrozumiałem to w ten sposób:<br />w chwili gdy zmniejsza mi się wielkość &quot;len&quot; (pętla odpowiedzialna za odbieranie danych z bufora) zwiększa mi się bufor (tablica)do którego przekazywane są dane odczytane z akcelerometru. Wszystko trwa do momentu gdy len=0<br /><br /><br />w sumie to faktycznie niewiele w tym sensu, ale nie wiem jak to obejść. mysle, ze powininem jakos oddzielic numery poszczegolnych elementow tablicy od ich zawartosci...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=95">orbit323</a> — 2 lis 2011, o 17:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2011-11-02T17:11:21+01:00</updated>
<published>2011-11-02T17:11:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=194#p194</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=194#p194"/>
<title type="html"><![CDATA[Re: odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=194#p194"><![CDATA[
Ojo joj <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />taka operacja:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">while (len--) (bufor++) = TWI_read( len ? ACK : NACK );</div><br /><br />jest zgodnie z komunikatem błędu absolutnie niedozwolona. Proponuję na głos - tzn tu na forum przeanalizować co kolega chciał osiągnąć takim zapisem i co wg kolegi oznacza tutaj: <br /><br /><strong>(bufor++) = ...</strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 lis 2011, o 17:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[orbit323]]></name></author>
<updated>2011-11-02T17:03:21+01:00</updated>
<published>2011-11-02T17:03:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=40&amp;p=192#p192</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=192#p192"/>
<title type="html"><![CDATA[odbior danych twi]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=40&amp;p=192#p192"><![CDATA[
Witam.<br /><br />Chciałem zrealizować sobie odczyt danych z akcelerometru po i2c, a następnie wyświetlenie ich na wyświetlaczu LCD. Część programu od LCD działa, niestety problem pojawia się przy odczycie z akcelerometru (a dokładniej to przed, bo jeszcze nawet nie doszedłem do końca początku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />). W podręczniku opisane jest zapisanie odebranych danych do wskaźnika (tak mi się wydaje). Chciałem zmienić sobie to na zwykłą tablicę danych, żeby potem ładnie stworzyć sobie z tego zmienną i wrzucić ją na wyświetlacz. Jednak wyskakuje błąd przy linii<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">while (len--) (bufor++) = TWI_read( len ? ACK : NACK );</div><br /><br />o treści<br /><br />../lcdmain.c:147: error: lvalue required as left operand of assignment<br /><br />Oczywiście przy zachowaniu *buf zamiast 'bufor' wszystko się kompiluje, ale nie wiem co z tym dalej zrobic <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Wszystkie kody są na podstawie Pana książki (po dzikiej edycji w czasie testowania różnych wariantów, przepraszam za chaos;))<br /><br />oto kod programu:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">/*<br /> * main.c<br /> *<br /> *  Created on: 2010-03-31<br /> *       Autor: Miros3aw Kardao<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/eeprom.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br /><br /><br />#define ACK 1<br />#define NACK 0<br />//#define SLA 0x3A<br />//#define adr 0x32<br /><br />//#include &quot;twi.h&quot;<br /><br /><br /><br /><br /><br /><br />// poni?sz1 linijke czasami trzeba wpisaa w eclipse przed definicjami<br />// zmiennych w pamieci EEPROM, ?eby nie podkreola3 sk3adni jako b3ednej<br />#define EEMEM __attribute__((section(&quot;.eeprom&quot;)))<br /><br />//char PROGMEM tab1&#91;&#93; = {&quot;tekst1&quot;};<br />//char EEMEM tab2&#91;&#93; = {&quot;tekst2&quot;};<br /><br />uint8_t znak_L&#91;&#93; = {16,16,18,20,24,16,31,0};      // wzór znaku litery L w pamieci RAM<br />uint8_t znak_o&#91;&#93; EEMEM = {4,32,14,17,17,17,14,0};   // wzór znaku litery ó w pamieci EEPROM<br />uint8_t znak_buzka&#91;&#93; PROGMEM = {14,17,27,17,17,21,17,14};   // wzór znaku buYki w pamieci FLASH<br />uint8_t znak_termo&#91;&#93; PROGMEM = {4,10,10,10,17,31,31,14};   // wzór znaku termometru w pamieci FLASH<br /><br />volatile uint8_t pwm1, pwm2, pwm3;<br /><br /><br />int main(void)<br />{<br />   DDRD |= (1&lt;&lt;PD0);<br />   PORTD |= (1&lt;&lt;PD0);<br /><br />   lcd_init();<br /><br /><br /><br />uint8_t bufor &#91;6&#93;;                             //                &lt;==================================== czy tak można?<br /><br /><br />   TWI_read_buf(0x3A, 0x32, 6, bufor);<br /><br /><br /><br /><br />//   lcd_str_P(tab1);            // napis z pamieci FLASH<br />//   lcd_locate(0,10);            //pierwsza cyfra to rzad, druga to nr kolumny startujacej!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br />//   lcd_str_P( PSTR(&quot;x&quot;) );   // napis z pamieci FLASH<br />//   lcd_locate(1,0);<br />//   lcd_str_E(tab2);            // napis z pamieci EEPROM<br />   lcd_locate(1,0);<br /><br />   lcd_str(&quot;x&quot;);            // napis z pamieci RAM, <br /><br /><br /><br />//   lcd_locate(0,0);<br />//   lcd_str(&quot;dsds&quot;);<br />   // za3adowanie znaków do pamieci CGRAM<br />   lcd_defchar(0x80, znak_L);<br />   lcd_defchar_E(0x81, znak_o);<br />   lcd_defchar_P(0x82, znak_buzka);<br />   lcd_defchar_P(0x83, znak_termo);<br /><br /><br />   // wyowietlenie w3asnych znaków na LCD<br />   lcd_locate(0,7);<br />   lcd_str(&quot;\x80\x81&quot;);<br />   lcd_locate(1,8);<br />   lcd_str(&quot;\x82&quot;);<br />   lcd_locate(1,7);<br />   lcd_str(&quot;\x83&quot;);<br /><br />   while(1);<br /><br /><br /><br />}<br /><br /><br /><br />void i2cSetBitrate(uint16_t bitrateKHz) {<br />   uint8_t bitrate_div;<br /><br />   bitrate_div = ((F_CPU/1000l)/bitrateKHz);<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 />   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 />   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 bajt) {<br />   TWDR = bajt;<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 />   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 /><br />void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t bufor ) <br />{<br /><br />   TWI_start();<br />   TWI_write(SLA);<br />   TWI_write(adr);<br />   while (len--) TWI_write(bufor++);<br />   TWI_stop();<br />}<br /><br /><br /><br />void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t bufor) {<br /><br />   TWI_start();<br />   TWI_write(SLA); // adres ukladu slave 0x3A-zapis /0x3B-odczyt<br />   TWI_write(adr); /// przekazanie adresu adxl_datax,y,z<br />   TWI_start();<br />   TWI_write(SLA + 1); // ponowny start (repeated start) <br />   while (len--) bufor++ = TWI_read( len ? ACK : NACK );<br />   TWI_stop();<br />}<br /><br /></div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=95">orbit323</a> — 2 lis 2011, o 17:03</p><hr />
]]></content>
</entry>
</feed>