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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-01-03T20:56:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=10011&amp;mode</id>
<entry>
<author><name><![CDATA[djspoko]]></name></author>
<updated>2015-01-03T20:56:57+01:00</updated>
<published>2015-01-03T20:56:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112081#p112081</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112081#p112081"/>
<title type="html"><![CDATA[Re: Atmega8, TDA1543, Ethernet - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112081#p112081"><![CDATA[
Akurat to jest uwzględnione. Dopiero wyślę paczkę jak atmega da odpowiedź że może odebrać. Więc jest wymiana: paczka, odpowiedź, paczka, odpowiedź...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5464">djspoko</a> — 3 sty 2015, o 20:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2015-01-03T20:39:52+01:00</updated>
<published>2015-01-03T20:39:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112070#p112070</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112070#p112070"/>
<title type="html"><![CDATA[Re: Atmega8, TDA1543, Ethernet - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112070#p112070"><![CDATA[
Problemem przy transmisji UDP moze być to że wysyłając kolejne próbki nie ma pewności że do odbiorcy dotrą w tej samej kolejności! I dla tego możesz otrzymywac sieczkę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 3 sty 2015, o 20:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[djspoko]]></name></author>
<updated>2015-01-03T20:37:52+01:00</updated>
<published>2015-01-03T20:37:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112067#p112067</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112067#p112067"/>
<title type="html"><![CDATA[Re: Atmega8, TDA1543, Ethernet - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112067#p112067"><![CDATA[
Atmega jest taktowana kwarcem 20Mhz, były też próby 27Mhz. Dla testów odpaliłem serwer tcp z książki. Wszystko działało bez problemu. Wiadomo szału nie ma ale patrząc na tak mały procesor i tak jest dobrze. Aktualnie wysyłanie strumienia wav ma być za pomocą udp lecz nie wiem gdzie popełniłem błąd. W szumie i trzaskach które słychać wydaje się że jakby grało to co chce ale nie tak jak ma być<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5464">djspoko</a> — 3 sty 2015, o 20:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yaiba83]]></name></author>
<updated>2015-01-03T19:10:16+01:00</updated>
<published>2015-01-03T19:10:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112022#p112022</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112022#p112022"/>
<title type="html"><![CDATA[Re: Atmega8, TDA1543, Ethernet - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112022#p112022"><![CDATA[
No właśnie - nie za mała jest atmega8 na takie zabawy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2332">yaiba83</a> — 3 sty 2015, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Shiro]]></name></author>
<updated>2015-01-03T18:47:57+01:00</updated>
<published>2015-01-03T18:47:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112018#p112018</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112018#p112018"/>
<title type="html"><![CDATA[Re: Atmega8, TDA1543, Ethernet - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=112018#p112018"><![CDATA[
Kolega odpalił z powodzeniem etherneta na ATmega8? A co z TCP? Dobrze &quot;śmiga&quot;?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5652">Shiro</a> — 3 sty 2015, o 18:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[djspoko]]></name></author>
<updated>2015-01-03T17:19:03+01:00</updated>
<published>2015-01-03T17:19:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=111999#p111999</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=111999#p111999"/>
<title type="html"><![CDATA[Atmega8, TDA1543, Ethernet - problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10011&amp;p=111999#p111999"><![CDATA[
Witam, <br />zrobiłem układ składający się z Atmegi8, TDA1543 i modułu Ethernet. Chciałem odtwarzać dźwięki wysyłane z komputera przed UDP. Napisałem program w pythonie który wysyła paczki wava, gdy tylko wolny jest bufor w mikroprocesorze. Poniżej jest kod atmegi. Mam problem ponieważ na wyjściu przetwornika słyszę różne dziwne trzaski lecz nic podobnego do dźwięku który wysyłam. Obniżyłem również prędkość samplowania do 8kHz lecz nic to nie dało. <br />Komunikacja działa i przesyłane dane są prawidłowe (sprawdzałem na wyświetlaczu podłączonym do atmegi).<br />Czy widzi ktoś jakiś błąd który popełniam?<br /><br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />#include &quot;Ethernet/ip_arp_udp_tcp.h&quot;<br />#include &quot;Ethernet/enc28j60.h&quot;<br />#include &quot;Ethernet/net.h&quot;<br /><br /><br /><br />#define BCK (1&lt;&lt;PC2)<br />#define WS(1&lt;&lt;PC1)<br />#define DAT(1&lt;&lt;PC0)<br /><br />#define BCK_0 PORTC &amp;= ~BCK<br />#define BCK_1 PORTC |= BCK<br /><br />#define DAT_0 PORTC &amp;= ~DAT<br />#define DAT_1 PORTC |= DAT<br /><br />#define WS_0 PORTC &amp;= ~WS<br />#define WS_1 PORTC |= WS<br /><br />#define CLK_TICK BCK_1; BCK_0<br /><br /><br />//#define PRESCALER (1 &lt;&lt; CS22)<br /><br />#define TMR_START TCCR2 |= (1&lt;&lt;CS22)<br />#define TMR_STOP TCCR2 &amp;= ~(1&lt;&lt;CS22)<br /><br /><br />volatile uint16_t vol1, t2;<br />volatile uint16_t t;<br />volatile uint16_t z;<br />volatile uint16_t counter = 0;<br /><br />#define BUF_SIZE 100<br />volatile uint8_t audioBuf&#91;3&#93;&#91;BUF_SIZE&#93;; // potrojny bufor na odczyt z karty<br />volatile uint8_t nr_buf; //numer aktywnego buforu<br /><br />volatile uint8_t can_read;<br /><br />volatile uint8_t read, write;<br />volatile uint32_t rec, sent, help;<br />volatile uint8_t i, wr, rcv;<br />volatile uint8_t should_send;<br /><br />//<br />//volatile uint16_t buffer &#91;&#93; ={0,17,34,52,69,87,<br />//104,121,139,156,173,190,207,224,241,258,275,292,309,325,342,358,<br />//374,390,406,422,438,453,469,484,500,515,529,544,559,573,587,601,<br />//615,629,642,656,669,681,694,707,719,731,743,754,766,777,788,798,<br />//809,819,829,838,848,857,866,874,882,891,898,906,913,920,927,933,<br />//939,945,951,956,961,965,970,974,978,981,984,987,990,992,994,996,<br />//997,998,999,999,1000,999,999,998,997,996,994,992,990,987,984,981,<br />//978,974,970,965,961,956,951,945,939,933,927,920,913,906,898,891,<br />//882,874,866,857,848,838,829,819,809,798,788,777,766,754,743,731,<br />//719,707,694,681,669,656,642,629,615,601,587,573,559,544,529,515,<br />//500,484,469,453,438,422,406,390,374,358,342,325,309,292,275,258,<br />//241,224,207,190,173,156,139,121,104,87,69,52,34,17};<br /><br /><br /><br /><br />//Ethernet part<br /><br />// ustalamy adres MAC<br />static uint8_t mymac&#91;6&#93; = {0x00,0x12,0x12,0x12,0x12,0x12};<br />// ustalamy adres IP urzπdzenia<br />static uint8_t myip&#91;4&#93; = {192,168,1,120};<br /><br />// adresy IP sterownikÛw z ktÛrymi bÍdziemy siÍ komunikowaÊ<br />// za pomocπ protoko≥u UDP  ----&gt; pierwszy element tablicy to IP twojego komputera<br />// drugi element to IP np innego uk≥adu ATB<br />static uint8_t farip&#91;2&#93;&#91;4&#93; = { {192,168,1,102}, {192,168,1,101} };<br /><br /><br />// ustalamy porty UDP z jakich bÍdziemy korzystaÊ<br />// moøe ich byÊ dowolna iloúÊ<br />static uint16_t myport&#91;&#93; = {1600};<br />// ustalamy adres IP bramy domyúlnej w sieci LAN<br />static uint8_t gwip&#91;4&#93; = {192,168,1,100};<br /><br />#define BUFFER_SIZE 300<br />static uint8_t buf&#91;BUFFER_SIZE+1&#93;;<br /><br /><br />// wskaünik do funkcji zwrotnej w≥asnego zdarzenia UDP_EVENT()<br />static void (*mk_udp_event_callback)(uint8_t *peer_ip, uint16_t port,<br />uint16_t datapos, uint16_t len);<br /><br />// funkcja do rejestracji funkcji zwrotnej w zdarzeniu UDP_EVENT()<br />void register_udp_event_callback(void (*callback)(uint8_t *peer_ip,<br />uint16_t port, uint16_t datapos, uint16_t len))<br />{<br />mk_udp_event_callback = callback;<br />}<br />//---------------------------------------------------------------------------------------------------------------<br /><br /><br /><br /><br /><br /><br />void udp_event_callback(uint8_t *peer_ip, uint16_t port,<br />uint16_t datapos, uint16_t len);<br /><br />void UDP_EVENT(uint16_t *port);<br /><br /><br />// separator tokenÛw we w≥asnych ramkach przesy≥anych przez UDP<br />char sep&#91;&#93; = &quot;^&quot;;<br /><br /><br />volatile int test = 0;<br /><br />int main(void) {<br /><br /><br />DDRC |= 0xFF;<br />PORTC |= 0xFF;<br /><br /><br />//LCD init<br />_delay_ms(500);<br />lcd_init();<br />lcd_cls();<br />lcd_str(&quot;Test&quot;);<br />_delay_ms(500);<br /><br />DDRC |= BCK | WS | DAT;<br />TIMSK |= (1 &lt;&lt; OCIE2);                  // set output compare interrupt enable<br />TCCR2 |= (1 &lt;&lt; WGM21);// set CTC mode<br />OCR2   = 38;            // set compare value for interrupt<br /><br /><br />//initialize the hardware driver for the enc28j60<br />enc28j60Init(mymac);<br />//        enc28j60clkout(2); // change clkout from 6.25MHz to 12.5MHz<br />//        _delay_loop_1(0); // 60us<br />enc28j60PhyWrite(PHLCON,0x476);<br /><br />//init the ethernet/ip layer:<br />init_ip_arp_udp_tcp(mymac,myip,80);<br /><br />// inicjalizacja bramy domyúlnej<br />// konieczne dla funkcji klienckich<br />client_set_gwip(gwip);<br /><br /><br />/********** inicjalizacja funkcji obs≥ugi stosu TCP *********************/<br /><br /><br /><br />// zarejestrowanie w≥asnej procedury obs≥ugi/reakcji na<br />// przychodzπce pakiety UDP<br />register_udp_event_callback(udp_event_callback);<br /><br /><br /><br /><br />rcv = 1;<br />sei();<br />while(1){<br />UDP_EVENT(myport);<br />//if (!rcv) {<br />//send_udp(buf, &quot;M^&quot;, 2, 1600, farip&#91;0&#93;, 1600);<br />//rcv = 1;<br />//}<br />}<br />}<br /><br />/****/<br />/******* w≥asna funkcja uøytkownika w ktÛrej moøemy reagowaÊ na ramkÍ UDP ***********/<br />/****/<br />void udp_event_callback(uint8_t *peer_ip, uint16_t port, uint16_t datapos, uint16_t len) {<br />uint8_t i=0;<br />    char str&#91;10&#93;;<br />    int idx = 0;<br />    int nrd = 0;<br /><br />    // wskaünik na potrzeby funkcji strtok_r<br />    char *wsk, *reszta;<br /><br />    // wyúwietlamy na LCD z jakiego IP nadesz≥a ramka<br />    // wyúwietlamy na jaki port nadesz≥a ramka<br />//lcd_cls();<br />//lcd_locate(0,0);<br />//lcd_str(&quot;UDP from: &quot;);<br />//lcd_int(port);<br />//lcd_locate(1,0);<br />//    while(i&lt;4){<br />//        lcd_int(peer_ip&#91;i&#93;);<br />//        if(3==i) break;<br />//        lcd_str(&quot;.&quot;);<br />//        i++;<br />//    }<br /><br /><br />    // jeúli ramka przysz≥a na drugi numer portu z listy myport&#91;&#93;<br />    if(port == myport&#91;1&#93;) {<br /><br />    // odpowiadamy na zapytanie UDP po ten sam port<br />    strcpy(str,&quot;C&quot;);<br />send_udp(buf, str, strlen(str), 1600, farip&#91;0&#93;, 1600);<br />//    make_udp_reply_from_request(buf,str,strlen(str), port);<br />//<br />//        // wysy≥amy nowπ ramkÍ na dowolny inny port<br />//    strcpy((char*)&amp;buf&#91;datapos&#93;,&quot;Nowa ramka UDP!&quot;);<br />//        send_udp_prepare(buf, 1500, farip&#91;0&#93;, 43500);<br />//        send_udp_transmit(buf,strlen(str));<br /><br /><br /><br /><br /><br />    }<br /><br />    // jeúli ramka przysz≥a na pierwszy numer portu z listy myport&#91;&#93;<br />    if(port == myport&#91;0&#93;) {<br />    //sprawdzamy komende<br />    wsk = strtok_r((char*)&amp;buf&#91;datapos&#93;, sep, &amp;reszta);<br />//    lcd_cls();<br />//lcd_locate(0,0);<br />//lcd_str(wsk);<br />if(strcmp(wsk, &quot;W&quot;) == 0){<br />send_udp(buf, &quot;S^&quot;, 2, 1600, farip&#91;0&#93;, 1600);<br />}<br />else if(strcmp(wsk, &quot;D&quot;) == 0){<br />wsk = strtok_r(NULL, sep, &amp;reszta);<br />idx = atoi(wsk);<br />if(idx == 0){<br /><br />memcpy(audioBuf&#91;0&#93;, reszta, 100);<br />send_udp(buf, &quot;M^&quot;, 2, 1600, farip&#91;0&#93;, 1600);<br />//for(int i = 0; i &lt; 100; i++){<br />//lcd_cls();<br />//lcd_locate(1,0);<br />//lcd_char(audioBuf&#91;0&#93;&#91;i&#93;);<br />////lcd_cls();<br />//lcd_locate(0,0);<br />//lcd_hex(*(reszta+i));<br />//_delay_ms(1000);<br />//}<br /><br />}<br />else if(idx == 1){<br />memcpy(audioBuf&#91;1&#93;, reszta, 100);<br />send_udp(buf, &quot;M^&quot;, 2, 1600, farip&#91;0&#93;, 1600);<br />}<br />else if(idx == 2){<br />memcpy(audioBuf&#91;2&#93;, reszta, 100);<br />send_udp(buf, &quot;M^&quot;, 2, 1600, farip&#91;0&#93;, 1600);<br />TMR_START;<br />}<br />else{<br />while(1){<br />if(can_read){<br />if(nr_buf==0) nrd=2;<br />else if(nr_buf==1) nrd=0;<br />else if(nr_buf==2) nrd=1;<br />memcpy(audioBuf&#91;nrd&#93;, reszta, 100);<br />can_read = 0;<br />send_udp(buf, &quot;M^&quot;, 2, 1600, farip&#91;0&#93;, 1600);<br />break;<br />}<br />}<br /><br />}<br /><br />}<br />else if(strcmp(wsk, &quot;F&quot;) == 0){<br />TMR_STOP;<br />}<br />    }<br />}<br /><br /><br />/********** zdarzenie UDP EVENT ***********************/<br />void UDP_EVENT(uint16_t *port) {<br />// zmienne tymczasowe (automatyczne)<br />    uint16_t plen;//, dat_p;<br />    uint16_t dport;<br />    uint8_t is_my_port=0;<br />    uint8_t i=0;<br /><br /><br />    uint8_t udp_data_len=0;<br /><br /><br />    // sprawdzamy czy istnieje nowy odebrany pakiet<br />    plen = enc28j60PacketReceive(BUFFER_SIZE, buf);<br />    // obs≥uga niøszych warstw stosu TCP jak ICMP, ARP itp<br />    // m.inn tπ drogπ obs≥ugiwane sπ zewnÍtrzne PING'i<br />    // w tym miejscu sprawdzane jest od razu czy odczytana ramka<br />    // jest posiada typ jaki obs≥ugiwany jest przez ten stos TCP<br />    // oraz czy jest ona zaadresowana do nas (w numeru IP)<br />    packetloop_icmp_tcp(buf,plen);<br /><br />    // jeúli d≥ugoúÊ odebranej ramki jest wiÍksza niø 0<br />    // to oznacza, øe mamy do czynienia z prawid≥owo odebranπ<br />    // ramkπ wraz z prawid≥owπ sumπ kontrolnπ<br />    // sprawdzamy takøe, czy na pewno mamy do czynienia z ramkπ UDP a nie np TCP<br />    if( plen &amp;&amp; buf&#91;IP_PROTO_P&#93;==IP_PROTO_UDP_V ) {<br /><br />    // sprawdzamy do jakiego nr portu kierowana jest ta ramka UDP<br />    dport = (buf&#91;UDP_DST_PORT_H_P&#93;&lt;&lt;8) | buf&#91;UDP_DST_PORT_L_P&#93;;<br /><br />    // sprawdzamy w pÍtli czy jest to ramka przeznaczona do<br />    // portu nas≥uchowego, ktÛre obs≥uguje nasze urzπdzenie<br />    // listÍ dowolnej iloúci portÛw definiujemy w tablicy myport&#91;&#93;<br />    // ktÛra przekazywana jest jako parametr do zdarzenia/funkcji UDP_EVENT()<br />    do {<br />    if( (is_my_port = (port&#91;i++&#93; == dport)) ) break;<br />    } while (i&lt;sizeof(port));<br /><br />    // sprawdzamy czy informacja przysz≥a na obs≥ugiwany przez nas port UDP<br />    if ( is_my_port ){<br />udp_data_len=buf&#91;UDP_LEN_L_P&#93;-UDP_HEADER_LEN;<br /><br />// jeúli wszystko siÍ zgadza to sprawdzamy, czy zarejestrowana jest<br />// funkcja zwrotna przez uøytkownika. Jeúli nie jest zarejestrowana<br />// to nie wykonana siÍ øadna akcja poza powyøej obs≥ugπ<br />// niøszych warstw stosu TCP (np PING czy ARP)<br />// Jeúli jest zarejestrowana to zostanie wywo≥ana z odpowiednimi parametrami<br />// 1. podany bÍdzie adres IP skπd nadesz≥a ramka<br />// 2. podany bÍdzie port na jaki zosta≥a do nas skierowana ramka<br />// 3. indeks do bufora ca≥ej ramki TCP, wskazujπcy na poczπtek danych w ramce UDP<br />// 4. iloúÊ danych w bajtach przes≥anych w ramce UDP<br />if(mk_udp_event_callback) (*mk_udp_event_callback)(&amp;(buf&#91;IP_SRC_P&#93;), dport, UDP_DATA_P, udp_data_len);<br />        }<br />    }<br />}<br /><br /><br /><br /><br />ISR(TIMER2_COMP_vect) {<br /><br />uint8_t *wsk;<br />static uint16_t buf_idx;// indeks w pojedynczym buforze<br />uint8_t v1, v2, v3, v4;<br />wsk = &amp;audioBuf&#91;nr_buf&#93;&#91;buf_idx&#93;;<br /><br />v2 = *wsk++;// msb<br />v1 = *wsk++;// lsb<br />v4 = *wsk++;// msb<br />v3 = *wsk++;// lsb<br />buf_idx+=4;<br /><br /><br /><br />i+=2;<br />//lsb<br />if( v1 &amp; 0x80 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x40 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x20 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x10 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x08 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x04 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x02 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v1 &amp; 0x01 ) DAT_1; else DAT_0; CLK_TICK;<br /><br />// msb<br />if( v2 &amp; 0x80 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v2 &amp; 0x40 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v2 &amp; 0x20 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v2 &amp; 0x10 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v2 &amp; 0x08 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v2 &amp; 0x04 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v2 &amp; 0x02 ) DAT_1; else DAT_0; CLK_TICK;WS_0;  //zatrzsniecie danych, kanal R<br />if( v2 &amp; 0x01 ) DAT_1; else DAT_0; CLK_TICK;<br /><br /><br />//lsb<br />if( v3 &amp; 0x80 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x40 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x20 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x10 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x08 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x04 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x02 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v3 &amp; 0x01 ) DAT_1; else DAT_0; CLK_TICK;<br /><br />// msb<br />if( v4 &amp; 0x80 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v4 &amp; 0x40 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v4 &amp; 0x20 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v4 &amp; 0x10 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v4 &amp; 0x08 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v4 &amp; 0x04 ) DAT_1; else DAT_0; CLK_TICK;<br />if( v4 &amp; 0x02 ) DAT_1; else DAT_0; CLK_TICK;WS_1; //zatrzsniecie danych, kanal L<br />if( v4 &amp; 0x01 ) DAT_1; else DAT_0; CLK_TICK;<br /><br /><br /><br />buf_idx &amp;= BUF_SIZE-1;<br />if( !buf_idx ) {<br />nr_buf++;<br />if(nr_buf&gt;2) nr_buf=0;<br />can_read = 1;<br />}<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5464">djspoko</a> — 3 sty 2015, o 17:19</p><hr />
]]></content>
</entry>
</feed>