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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7639&amp;mode</id>
<entry>
<author><name><![CDATA[player92]]></name></author>
<updated>2014-07-01T23:00:02+01:00</updated>
<published>2014-07-01T23:00:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86436#p86436</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86436#p86436"/>
<title type="html"><![CDATA[Re: I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86436#p86436"><![CDATA[
Skorzystałem ze sprzętowego TWI, na tym moim programowym i Mirkowym coś mi nie chciało wystartować. Nie ważne w każdym razie wrzuciłem sobie diodę:<br /><br />[syntax=c]void TWI_write1(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 />PORTC |= (1&lt;&lt;PC0);<br />}[/syntax]<br /><br />i okazało się, że ACK jest(tak mi się wydaje) bo diodka gasła mi(na początku programu zapalona) tzn. wychodzi z pętli while i dochodzi do:<br />[syntax=c]PORTC |= (1&lt;&lt;PC0);<br />}[/syntax]<br /><br />Teraz muszę jakoś przebrnąć przez inicjalizaję.<br />Dzięki chłopaki za cenne rady:D przydają się niezmiernie<br /><br />PS<br />Pytanie jak to jest z częstotliwością SCL w ATmedze można ją sobie zmniejszyć? Po prostu zmienić wartości w rejestrach TWBR oraz TWPS? Czy to warto zmieniać skoro mam potwierdzenie ACK? W datashhecie ST7036 taka inicjalizacja jaką wykonuje jest na 380kHz, natomiast w datasheecie wyświetlacza nie wzmianki o żadnych częstotliwościach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2466">player92</a> — 1 lip 2014, o 23:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-07-01T22:07:31+01:00</updated>
<published>2014-07-01T22:07:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86431#p86431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86431#p86431"/>
<title type="html"><![CDATA[Re: I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86431#p86431"><![CDATA[
Co do <em>return(b==0);</em> to ta funkcja zwraca 1-true jak otrzymano sygnał ACK, a 0-false jako go nie było. Możesz brać to pod uwagę ale nie musisz. Daje to jednak informację, że jest ta podstawowa komunikacja z układem i jak tego nie ma to trzeba się zatrzymać i sprawdzić co jest nie tak. Skoro masz książkę Mirka to wykorzystaj te gotowce i na początek sprawdź czy wysłanie adresu zwraca ACK. Możesz użyć LED do sygnalizacji. Kolejny krok to inicjalizacja.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 1 lip 2014, o 22:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[player92]]></name></author>
<updated>2014-07-01T21:04:06+01:00</updated>
<published>2014-07-01T21:04:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86409#p86409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86409#p86409"/>
<title type="html"><![CDATA[Re: I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86409#p86409"><![CDATA[
Dzięki za zainteresowanie:)<br />Otóż zgodnie z zaleceniami:<br />1. Podłączyłem rezystory podciągające 10k do 5V pod SCL i SDA<br />2. Wyrzuciłem z funkcji i2cPutchar linijkę:<br />            106.       I2C_SDL_HI;    //podciągam wewnętrznie do +<br /> Teraz mam zmianę tylko rejetru DDRB.0<br />3. No i tu muszę przyznać mam problem gdyż dokładnie nie wiem jak to jest z tym ACK. Co gdy ACK nie jest zwrócony tzn. jest na nim cały czas stan H? Co wtedy? Możemy wysyłać kolejne byty czy trzeba czekać?<br /><br /><br />Mam jeszcze pytanie w nawiązaniu do funkcji z Blue book. Jest tam funkcja: i2cPutbyte zwraca ona ACK jako rezultat. I tu nie bardzo rozumiem gdy jest pod zmienną b 1 to wtedy zwracane jest 0, jeśli natomiast b==0 to wtedy funkcja zwraca 1. No i moje pytanie brzmi po co takie coś(na pewno po coś mądrego:)), co dalej z tą informacją o ACK?<br /><br />pozdrawiam<br />player92<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2466">player92</a> — 1 lip 2014, o 21:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-07-01T19:25:49+01:00</updated>
<published>2014-07-01T19:25:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86391#p86391</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86391#p86391"/>
<title type="html"><![CDATA[Re: I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86391#p86391"><![CDATA[
1. Użyj zewnętrznego podciągania.<br />2. Piny przełączaj raz w stan wyjście 0 lub wejście pływające. Czyli np. PORTB.0 = 0 i zmieniasz tylko DDRB.0<br />3. Czekanie na ACK i tykanie zegarem to dziwny pomysł. ACK powinien być zwrócony, że jest lub nie podczas ostatniego cyklu zegara.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 1 lip 2014, o 19:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[player92]]></name></author>
<updated>2014-07-01T18:38:44+01:00</updated>
<published>2014-07-01T18:38:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86371#p86371</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86371#p86371"/>
<title type="html"><![CDATA[Re: I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86371#p86371"><![CDATA[
W sumie nie wiem czemu czytałem w książce koloru Blue i zacząłem pisać wzorując się na tym co tam jest jeśli chodzi o programową komunikację i2c. Tak wyszło, spróbuje zrobić to na sprzętowym... I jak coś będę miał to się pochwalę:)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2466">player92</a> — 1 lip 2014, o 18:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2014-07-01T15:41:11+01:00</updated>
<published>2014-07-01T15:41:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86357#p86357</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86357#p86357"/>
<title type="html"><![CDATA[Re: I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86357#p86357"><![CDATA[
Czemu nie używasz sprzętowego interfejsu TWI?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 1 lip 2014, o 15:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[player92]]></name></author>
<updated>2014-07-01T14:11:10+01:00</updated>
<published>2014-07-01T14:11:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86347#p86347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86347#p86347"/>
<title type="html"><![CDATA[I2C - ST7036 - LCD - odrobina pomocy]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7639&amp;p=86347#p86347"><![CDATA[
Witam,<br />otóż męczę się już kilka może trochę więcej godzin:) godzin z wyświetlaczem o nazwie: WO2002A-TFH-AT.<br />Link:<br /><!-- m --><a class="postlink" href="http://www.unisystem.pl/download/produkty/2011/wo2002a-tfh-at_WhXvB/WO2002A-TFH-AT.pdf" >http://www.unisystem.pl/download/produk ... TFH-AT.pdf</a><!-- m --><br />Generalnie używa on interfejsu I2C, a kontroler tego wyświetlacza to ST7036<br />Link:<br /><!-- m --><a class="postlink" href="http://www.lcd-module.de/eng/pdf/zubehoer/st7036.pdf" >http://www.lcd-module.de/eng/pdf/zubehoer/st7036.pdf</a><!-- m --><br /><br />Chciałem utworzyć prostą komunikację i wyświetlić cokolwiek na nim, w związku z tym popełniłem następujący kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define WO2002A_ADDR 0b01111000<br /><br />#define I2C_SDL_LO      PORTB &amp;= ~(1&lt;&lt;PB0)<br />#define I2C_SDL_HI      PORTB |= (1&lt;&lt;PB0)<br /><br />#define I2C_SCL_LO      PORTB &amp;= ~(1&lt;&lt;PB1)<br />#define I2C_SCL_HI      PORTB |= (1&lt;&lt;PB1)<br /><br /><br />typedef unsigned char  u08;<br />typedef unsigned short u16;<br /><br /><br />void i2cPutchar(unsigned char j);<br />void I2C_start (void);<br />void I2C_stop (void);<br />void i2c_INIT(void);<br /><br />int main(void)<br />{<br />_delay_ms(500);<br />i2c_INIT();<br />_delay_ms(50);<br />I2C_start();      // i2c START<br /><br />i2cPutchar(0b01111000); // slave adress<br /><br />i2cPutchar(0b00000000);<br />//_delay_us(30);<br />i2cPutchar(0b00111000); //(0x38); // func set?<br />_delay_us(30);<br />i2cPutchar(0x00);<br />//_delay_us(30);<br />i2cPutchar(0b00111001); //(0x39); // func set?<br />_delay_us(30);<br />i2cPutchar(0b00010100); //(0x14); // bias set?<br />_delay_us(30);<br />i2cPutchar(0b01111001); //(0x79); // contrast set<br />_delay_us(30);<br />i2cPutchar(0b01010000); //(0x50); // Power/ICON Control/ Contrast set<br />_delay_us(30);<br />i2cPutchar(0b01101100); //(0x6C); // Follower control<br />_delay_us(30);<br />i2cPutchar(0b00001100); //(0x0C); // Display on<br />_delay_us(30);<br />i2cPutchar(0b00000001); //(0x01); // Clear display<br />_delay_us(30);<br />I2C_stop();<br />_delay_us(300);<br /><br /><br /><br /><br />while(1)<br />{<br />I2C_start();<br />i2cPutchar(0b01111000); // slave address<br />_delay_us(30);<br />    i2cPutchar(0b10000000); // control byte<br />    _delay_us(30);<br />    i2cPutchar(0b10000111); // data byte -- POSITION<br />    _delay_us(30);<br />    i2cPutchar(0b01000000); // control byte<br />    _delay_us(30);<br />    i2cPutchar(0b01001101); // data byte M<br />    _delay_us(30);<br />    i2cPutchar(0b01100001); // data byte a<br />    _delay_us(30);<br />    i2cPutchar(0b01110010); // data byte r<br />    _delay_us(30);<br />    i2cPutchar(0b01101001); // data byte i<br />    _delay_us(30);<br />    i2cPutchar(0b01110101); // data byte u<br />    _delay_us(30);<br />    i2cPutchar(0b01110011); // data byte s<br />    _delay_us(30);<br />    I2C_stop();<br />}<br /><br />return 0;<br />}<br /><br />void i2cPutchar(unsigned char j)<br />{<br />u08 n;<br />u08 d;<br />d=j;<br />for(n=0;n&lt;8;n++){<br />if((d&amp;0x80)==0x80)<br />I2C_SDL_HI;<br />else<br />I2C_SDL_LO;<br /><br />_delay_loop_1(2);                      //start toggle SCL<br />I2C_SCL_HI;<br />_delay_loop_1(2);<br />I2C_SCL_LO;//end toggle SCL<br />}<br />DDRB&amp;= ~(1&lt;&lt;PB0);                          //pin SDA ustawiamy na wejściowy<br />_delay_loop_1(2);<br />I2C_SDL_HI;//podciągam wewnętrznie do +<br /><br />while((PINB &amp; (1&lt;&lt;PB0))==1){             //sprawdzam stan na pinie PB0 jeśli &quot;1&quot; wykonuje się pętla, aż nie będzie &quot;0&quot; na pinie<br />_delay_loop_1(2);//w pętli toggle SCL<br />I2C_SCL_HI;<br />_delay_loop_1(2);<br />I2C_SCL_LO;<br />}<br />I2C_SCL_LO;<br />DDRB |= (1&lt;&lt;PB0);                            //znów SDA(PB0) wyjściowy<br />_delay_loop_1(2);<br />}<br /><br />void I2C_start (void) {<br />I2C_SDL_LO;<br />_delay_loop_1(1);<br />I2C_SCL_LO;<br />}<br /><br />void I2C_stop(void) {<br />I2C_SDL_LO;<br />_delay_loop_1(2);<br />I2C_SCL_HI;<br />_delay_loop_1(1);<br />I2C_SDL_HI;<br />_delay_loop_1(2);<br />}<br /><br />void i2c_INIT(void) {<br />DDRB |= (1&lt;&lt;PB0);<br />DDRB |= (1&lt;&lt;PB1);<br />I2C_SDL_HI;<br />I2C_SCL_HI;<br />}[/syntax]<br /><br />Przed pętla while jest inicjalizacja wyświetlacza, która została wykonana w oparciu o stronę 12 z 1 linku.<br />W while'u zamierzałem wyświetlać już napis... no ale niestety.<br />Za jakieś wskazówki byłbym wdzięczny.<br />Pozdrawiam<br />player92<br /><br />P.S.<br />Zapomniałem napisać, używam ATmegi 8 , wszystko jest podłączone zgodnie ze schematem na 5V 10 str. 1 link.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2466">player92</a> — 1 lip 2014, o 14:11</p><hr />
]]></content>
</entry>
</feed>