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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-07-15T14:37:32+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=15739&amp;mode</id>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-15T14:37:32+01:00</updated>
<published>2016-07-15T14:37:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164065#p164065</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164065#p164065"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164065#p164065"><![CDATA[
Właśnie skończyłem oglądać poradnik, pewnie nie jestem jedyny któremu się on spodobał, ale są niesamowite mają w sobie to coś, chciałbym mieć takiego nauczyciela w szkole. Choć za moich czasów to były tylko atari i comodore (hehe do gier). Ok biorę się do &quot;pracy&quot;. Zobaczę co z tego będzie. Dzięki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 15 lip 2016, o 14:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-15T13:13:27+01:00</updated>
<published>2016-07-15T13:13:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164052#p164052</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164052#p164052"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164052#p164052"><![CDATA[
<div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />Witam ponownie, a więc tak wiem już jak się pozbyć tego<br /></div><br />No to jednak nie wiesz jak to zrobić i nie wiem czego ty chcesz się pozbywać ? <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />toż <br />[syntax=c]SPI_putBYTE( z1);[/syntax]<br /><br />wyśle ci TYLKO jeden i to młodszy bajt ze zmiennej 16-bitowej z1. Więc nie wiem czego się pozbędziesz<br /><br />Tak jak pisałem wyżej, czuję że nie rozumiesz na razie i chyba kompletnie nie poćwiczyłeś jeszcze i nie pytałeś po drodze gdy czegoś nie rozumiałeś czytając mega podstawy czyli:<br /><br />1. Co to są typy zmiennych<br />2. Co to oznacza, że zmienna jest dwu- , cztero- bajtowa itp<br />3. Jak wyłuskać za pomocą przesunięć bitowych poszczególne bajty z tych większych zmiennych<br /><br />w ogóle widzę, że skoro chcesz się &quot;pozbyć&quot; zapisu (z1 &gt;&gt; 8) to  oznacza że chyba ABSOLUTNIE UNIKASZ i nie chcesz poznać i zrozumieć co to są przesunięcia bitowe a przez to - no niestety nie dasz rady zrozumieć dalej co się dzieje w C jeśli chodzi szczególnie o mikrokontrolery ...<br /><br />Moim zdaniem musisz wrócić jednak i zacząć od tych podstaw , które po kolei ci podałem<br /><br />I nie mów że wiesz co to jest np zmienna 16-bitowa - jeśli masz odpowiedzieć tylko że składa się ona z dwóch bajtów - skoro nie poćwiczyłeś i nie do końca (tak mi się wydaje) rozumiesz co to jest starszy bajt i młodszy bajt. Jak odczytać albo zapisać w takiej zmiennej np tylko starszy albo tylko młodszy bajt ...<br /><br />no bez tych rzeczy będziesz cały czas poruszał się jak we mgle i próbował zgadywać o co chodzi w jakimś tam kodzie ....<br /><br /><div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />ale proszę o jakis (inny) przykład jak z zaświecić powiedzmy 32 diode (o wartości 4294967295).<br /></div><br />Tu to już opowiadasz totalnie niestworzone historie ale pewnie właśnie wynika to z niezrozumienia kompletnego być może budowy bajtu i bitów<br /><br />toż żeby zapalić 32 drugą diodę - to wystarczy zapalić bit o numerze 31<br /><br />np:<br /><br />uint32_t linijka;<br /><br />[syntax=c]linijka = 0x80000000; // proszę bardzo zapalamy najstarszy 31 bit (diodę)[/syntax]<br /><br />co za problem ? Nie znasz zapisu hexadecymalnego ? to czemu nie obejrzysz poradników?<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />inny sposób:<br /><br />[syntax=c]linijka = 0b10000000 00000000 00000000 00000000; // tylko tu bez tych spacji - zapis binarny identyczny jak wyżej[/syntax]<br /><br />jeszcze inny ale z przesunięciami DUŻO prostszy:<br />[syntax=c]linijka = ((uint32_t)1&lt;&lt;31); // zapalamy najstarszy bit diodę[/syntax]<br /><br /><br />albo z udziałem TABLICY <br /><br />[syntax=c]uint8_t linijka&#91;4&#93;;<br /><br />linijka&#91;3&#93; = (1&lt;&lt;8); // zapalam w najstarszym BAJCIE najstarszy BIT<br /><br />for( uint8_t i=0; i&lt;4; i++ ) SendSpi_byte( linijka&#91;i&#93; ); // czyli wysyłam 4 bajty do 4 rejestrów przesuwnych w których zapalony jest najstarszy bit czyli zapali się dioda nr 32 jeśli je numerujesz od 1[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br /><div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />(o wartości 4294967295).<br /></div><br />Więc pisanie takich rzeczy jak widzisz to po prostu jakiś kosmos który sam sobie wymyślasz i się nim katujesz zamiast spojrzeć na BITY w bajtach.<br /><br />no ale żeby się dobierać do bitów w bajtach panie to znowu - przesunięcia bitowe się kłaniają - jak widzisz bez tego ani rusz i zamiast tego będziesz wciąż wymyślał takie określenia właśnie.<br /><br /><div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />Albo proszę o gotowca który wysteruję mi te 60 diod<br /></div><br />Już tobie pisałem weź tak jak w przykładzie wyżej po prostu dłuższą tablicę np 8 bajtów i możesz zagospodarować łącznie 64 diody w 8 rejestrach<br /><br />[syntax=c]uint8_t nr_diody = 60; // dioda nr 60<br />uint8_t linijka&#91;8&#93;;<br /><br />linijka&#91; nr_diody/8 &#93; = ( 1 &lt;&lt; (nr_diody - (nr_diody/8))-1 ); // wyliczamy bit[/syntax]<br /><br />nie ma co się przerażać ostatnia linią bo tu pokazałem tak ręcznie jak to zrobić a w kodzie gdy przyjdzie obsługiwać całą linijkę jako wskaźnik wysterowania można to robić DUŻO prościej<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 16 minutach ]</span></strong><br /><br /><div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />. ps. przepraszam szanowny p.Mirku że pisałem cały czas do Ciebie przez &quot;ty&quot;.<br /></div><br />Ale nie ma za co przepraszać, pisałem na początku niebieskiej książki tzn proponowałem czytelnikowi czyli również tobie abyśmy byli na &quot;ty&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 18 minutach ]</span></strong><br /><br /><div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />Jestem z rocznika '79 I pewnie zostanę przy piecykach LM3914.<br /></div><br />A co rocznik ma do tego ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Ja jestem rocznik '66 i jeszcze daję radę - więc ty dużo młodsza osoba nie dasz rady ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> dasz, dasz no tylko musisz poświęcić &quot;troszkę&quot; czasu jednak na poznanie podstaw - a jeśli go nie masz no to wtedy rzeczywiście będziesz się męczył z piecykami <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 lip 2016, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-15T12:48:46+01:00</updated>
<published>2016-07-15T12:48:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164048#p164048</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164048#p164048"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=164048#p164048"><![CDATA[
Witam ponownie, a więc tak wiem już jak się pozbyć tego<br />[syntax=c]SPI_putBYTE( z1 &gt;&gt; 8); //Wysłanie bajtów danych<br />        SPI_putBYTE( z1);[/syntax]<br /><br />ale proszę o jakis (inny) przykład jak z zaświecić powiedzmy 32 diode (o wartości 4294967295).<br />255 x 4linijki diodowe. Kurcze nawet piwa nie pomagają. Albo proszę o gotowca który wysteruję mi te 60 diod w tzw. bargraph który będę analizował aż go zrozumię ( z czego póżniej mogę zdać relację jak zrozumię) albo kończymy temat. Tak czy tak dziękuję za wszelkie info. ps. przepraszam szanowny p.Mirku że pisałem cały czas do Ciebie przez &quot;ty&quot;. Jestem z rocznika '79 I pewnie zostanę przy piecykach LM3914. Dziękuję za wszelką pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 15 lip 2016, o 12:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-14T12:02:07+01:00</updated>
<published>2016-07-14T12:02:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163978#p163978</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163978#p163978"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163978#p163978"><![CDATA[
<div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />&amp;amp<br /></div><br />panie to efekt kopiowania kodu przez strony html a nie ciekawostka w języku C <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... to po prostu kawałek śmiecia który się przedostał poprzez kopiowanie i złe formatowanie kodu w html ... nie zawracaj sobie tym głowy ...<br /><br />A sorki tego kodu nie będę wyjaśniał bo wg mnie jest bez sensu ... i pisany albo przez kogoś kto znał tylko arduino albo przez kogoś kto wcześniej programował tylko na PC i wykazuje się kompletnym marnotrastwem pamięci (typów) w mikrokontrolerach - podam tylko jeden przykład<br /><br />[syntax=c]for (int i=0;i&lt;16 .......[/syntax]<br /><br />jak widzę tu int to mnie krew zalewa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... szkoda w ogóle gadać.<br /><br />Zaś wracając do tematu bitów i bajtów to już wyjaśniam po co było moje pytanie .... Myślałem że może nie rozumiesz różnicy pomiędzy bitami i bajtami - wtedy bym rozumiał czemu aż tak mocno na razie nie potrafisz przeanalizować tych dwóch funkcji o które pytasz<br /><br />[syntax=c]void wyslij_na_rejestry ( void );<br /><br />void SPI_putBYTE(uint8_t bajt);[/syntax]<br /><br />Pomijam tu kwestię czytelności czy tam sposobu pisania kodu - to nie ważne - ważne że jak się spojrzy na obie funkcje to widać jak na dłoni, że kolega autor tego kodu przygotował to zgodnie ze sztuką w języku C i z tym o czym ja opowiadam w tym poradniku nadmorskim ....<br /><br />czyli NA POCZĄTEK - zbudował NAJMNIEJSZY klocuszek do wysyłania pojedynczego bajtu !!!<br />[syntax=c]void SPI_putBYTE(uint8_t bajt);[/syntax]<br /><br />funkcja praktycznie identyczna jak w Bluebooku - zresztą ciężko nawet ją zapisywać na tysiące innych sposobów.<br /><br /><br />A skoro już mamy najmniejszy klocuszek to też zgodnie z tym co ja tobie pisałem wyżej i nawet pokazywałem przykład kodu wysyłania danych z pętli gdybyś miał więcej bajtów do wysłania .... <br /><br />Więc DRUGI krok jaki zrobił kolega autor to wysłanie dwóch paczek bajtów, czyli<br /><br />[syntax=c]void wyslij_na_rejestry ( void );[/syntax]<br /><br />dlaczego paczek bajtów ? Bo każda paczka u niego to dwa bajty - dwa bajty z których składa się każda zmienna zarówno z1 jak i z2<br /><br />Wyłuskuje je ładnie za pomocą przesunięć <br /><br />[syntax=c]SPI_putBYTE( z1 &gt;&gt; 8); // wysyła starszy bajt zmiennej z1    - czyli I-szy bajt<br />            SPI_putBYTE( z1);         // wysyła młodszy bajt zmiennej z1   - czyli II-gi bajt<br /><br />            SPI_putBYTE( z2 &gt;&gt; 8);// wysyła starszy bajt zmiennej z2     - czyli III-ci bajt<br />            SPI_putBYTE( z2);        // wysyła młodszy bajt zmiennej z2    - czyli IV-ty bajt[/syntax]<br /><br />w czym problem ? Tyle że żeby to zrozumieć to najpierw trzeba zapoznać się i to jest PODSTAWA kurczę PODSTAW w języku C od której niestety mnóstwo początkujących ucieka jak przed jakimś strasznym monstrum ... a później się dziwią, dlaczego nie rozumieją tak prostych kodów jak wyżej <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> W zamian za to brną dalej i uciekają w super KOCIE makra _BV() tak jak w tym rzekomo ciekawym kodzie który przytoczyłeś ... a jest on o tyle bez sensu , że nie stworzył tam ktoś podstawowego klocuszka do wysłania pojedynczego bajtu i później nie wysyła po kolei bajtów tylko na okazję każdego nowego projektu gdzie trzeba przesłać różną ilość (bajtów) przez SPI tworzy sobie jakąś dziwolągowatą funkcję, która wysyła po prostu ciurkiem 16 bitów z dwóch bajtów zmiennej __led_state. Toż widać że to dwa bajty zarówno po typie zmiennej (unsigned int) .... koci typ zamiast jak należy w AVR GCC użyć uint16_t i od razu wszystko jasne a także po ilości 16 w pętli for.... Gdyby ten ktoś miał wysłać 12 bajtów to pewnie próbowałby iść taką drogą jak ty na początku czyli szukałby chyba sposobu czy można użyć zmiennej o typie uint128_t ....<br /><br />jeszcze raz popatrz - kolega autor ma najmniejszy klocek (do wysyłania pojedynczego bajtu) i za jego pomocą ot po prostu wysyła po kolei 4 bajty - tyle że czerpie je z dwóch różnych 16-bitowych zmiennych  to samo można byłoby uzyskać metodą tablicową którą pokazałem wyżej<br /><br />[syntax=c]uint8_t tablica&#91;12&#93; = {1,2,3,4........ };<br /> <br />for( uint8_t i=0; i&lt;12; i++ ) send_spi_byte( tablica&#91;i&#93; );[/syntax]<br /><br />czyli w każdym obiegu pętli wysyłam kolejny bajt z tej tablicy ... W przypadku kolegi można powiedzieć, że on wysyła bajty z dwóch tablic - każda ma dwa elementy - tyle że robi to ręcznie i bez pętli for(), robi to &quot;ręcznie&quot; ... można byłoby i w pętli for ze wskaźnikami no ale tego przykładu nawet może nie będę pokazywał bo już w ogóle uznałbyś to na razie za jakieś mocno niezrozumiałe a nie o to chodzi<br /><br />Pomyśl sobie zamiast zmiennej uint128_t tworzysz tablicę!<br /><br />[syntax=c]uint8_t linia1&#91;16&#93;;[/syntax]<br /><br />i już ... i masz swoją pierwszą linijkę która ma pojemność 16 bajtów tak jak w zmiennej uint128_t której nie ma .... Gdybym miał to samo zrobić tablicowo co zrobił kolega Nefarious19 to zrobić to można byłoby tak:<br /><br />[syntax=c]uint8_t z1&#91;2&#93;;<br />uint8_t z2&#91;2&#93;;[/syntax]<br /><br />i później dwie małe pętelki o których mówiłem<br /><br />[syntax=c]for( uint8_t i=0; i&lt;2; i++ ) send_spi_byte( z1&#91;i&#93; );<br />for( uint8_t i=0; i&lt;2; i++ ) send_spi_byte( z2&#91;i&#93; );[/syntax]<br /><br />i to było by DOKŁADNIE to samo co to:<br /><br />[syntax=c]SPI_putBYTE( z1 &gt;&gt; 8); // wysyła starszy bajt zmiennej z1    - czyli I-szy bajt<br />            SPI_putBYTE( z1);         // wysyła młodszy bajt zmiennej z1   - czyli II-gi bajt<br />            SPI_putBYTE( z2 &gt;&gt; 8);// wysyła starszy bajt zmiennej z2     - czyli III-ci bajt<br />            SPI_putBYTE( z2);        // wysyła młodszy bajt zmiennej z2    - czyli IV-ty bajt[/syntax]<br /><br />zero różnicy jeśli chodzi o wysłanie. Za to jak przyszedłby mi pomysł do głowy, że moja linijka na jeden kanał ma mieć większą pojemność to co za problem ? Nawet gdyby miało być 24 diody ?<br /><br />[syntax=c]uint8_t z1&#91;3&#93;;<br />uint8_t z2&#91;3&#93;;[/syntax]<br /><br />i co za problem wysłać ? IDENTYCZNIE ...<br /><br />[syntax=c]for( uint8_t i=0; i&lt;3; i++ ) send_spi_byte( z1&#91;i&#93; );<br />for( uint8_t i=0; i&lt;3; i++ ) send_spi_byte( z2&#91;i&#93; );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 lip 2016, o 12:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-14T11:17:47+01:00</updated>
<published>2016-07-14T11:17:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163977#p163977</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163977#p163977"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163977#p163977"><![CDATA[
Znalazłem ciekawy kod, i nie mam zamiaru wykorzystywać gotowca, tylko proszę o w mirę możliwości opisanie zasady działania poszczególnych bloków.<br />Wyrażenie &quot;&amp;amp&quot; w funkcji void output_led_state(unsigned int __led_state) celowo ująłem w cudzysłów ponieważ po wklejeniu kodu nie chciało mi go wyświetlić. Normalnie &amp;amp znajduje się w kodzie oryg. bez znaków &quot;&quot;.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /> <br />#define DS_PORT    PORTC<br />#define DS_PIN     0<br />#define ST_CP_PORT PORTC<br />#define ST_CP_PIN  1<br />#define SH_CP_PORT PORTC<br />#define SH_CP_PIN  2<br /> <br />#define DS_low()  DS_PORT&amp;=~_BV(DS_PIN)<br />#define DS_high() DS_PORT|=_BV(DS_PIN)<br />#define ST_CP_low()  ST_CP_PORT&amp;=~_BV(ST_CP_PIN)<br />#define ST_CP_high() ST_CP_PORT|=_BV(ST_CP_PIN)<br />#define SH_CP_low()  SH_CP_PORT&amp;=~_BV(SH_CP_PIN)<br />#define SH_CP_high() SH_CP_PORT|=_BV(SH_CP_PIN)<br /> <br />//Define functions<br />//===============================================<br />void ioinit(void);<br />void output_led_state(unsigned int __led_state);<br />//===============================================<br /> <br />int main (void)<br />{<br />   ioinit(); //Setup IO pins and defaults<br /> <br />   while(1)<br />   {<br />      // Output a knight rider pattern<br />     <br />      for (int i=15;i&gt;=0;i--)<br />      {<br />         output_led_state(_BV(i));<br />         _delay_ms(50);<br />      }<br />      for (int i=1;i&lt;15;i++)<br />      {<br />         output_led_state(_BV(i));<br />         _delay_ms(50);<br />      }<br />   }<br />}<br /> <br /> <br />void ioinit (void)<br />{<br />    DDRC  = 0b00000111; //1 = output, 0 = input<br />    PORTC = 0b00000000;<br />}<br /> <br />void output_led_state(unsigned int __led_state)<br />{<br />   SH_CP_low();<br />   ST_CP_low();<br />   for (int i=0;i&lt;16;i++)<br />   {<br />      if ((_BV(i) &quot;&amp;amp&quot;; __led_state) == _BV(i))  //bit_is_set doesn’t work on unsigned int so we do this instead<br />         DS_high();<br />      else  <br />         DS_low();<br />     <br /> <br />      SH_CP_high();<br />      SH_CP_low();<br />   }<br />   ST_CP_high();<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 14 lip 2016, o 11:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-14T10:02:24+01:00</updated>
<published>2016-07-14T10:02:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163971#p163971</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163971#p163971"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163971#p163971"><![CDATA[
A więc dla mnie jeden bajt to jest(składa się z) 8 bitów. A z poprzedniego postu to chodziło mi o te dwie funkcje[syntax=c]void wyslij_na_rejestry ( void )[/syntax],<br />[syntax=c]void SPI_putBYTE(uint8_t bajt)[/syntax]<br />jaką funkcję pełnią.<br />moje pytania wyszły z tego cytatu:[syntax=actionscript]No chyba że po prostu za mało jeszcze może poćwiczyłeś podstaw z Bluebooka. To postaraj się poćwiczyć i zadawać po drodze pytania - albo pytać czego nie rozumiesz w kodach źródłowych których propozycję dostałeś ....[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 14 lip 2016, o 10:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-13T22:25:57+01:00</updated>
<published>2016-07-13T22:25:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163965#p163965</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163965#p163965"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163965#p163965"><![CDATA[
<div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />wysłanie bajtów czy bitów.<br /></div><br />Widząc takie pytanie to ja najpierw zapytam - czy ty wiesz co to są bajty a co to są bity ? czym to się różni ? Pytam żeby móc lepiej pomóc i zrozumieć czego nie rozumiesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 lip 2016, o 22:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-13T16:56:24+01:00</updated>
<published>2016-07-13T16:56:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163942#p163942</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163942#p163942"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163942#p163942"><![CDATA[
Przekopiowałem kod kolegi Nefarious19 dla rozpatrzenia moich wątpliwości.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;util/delay.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br />     <br />    // makra dla większej przejrzystoci kodu<br />    #define MOSI PB2<br />    #define SCK  PB1<br />    #define CS   PB0<br />    #define SCK_0 (PORTB &amp;=~(1&lt;&lt;SCK))<br />    #define SCK_1 (PORTB |= (1&lt;&lt;SCK))<br />     <br />    #define MOSI_0 (PORTB &amp;= ~(1&lt;&lt;MOSI))<br />    #define MOSI_1 (PORTB |= (1&lt;&lt;MOSI))<br />     <br />    #define LATCH_ON (PORTB |= (1&lt;&lt;CS))<br />    #define LATCH_OFF (PORTB &amp;=~(1&lt;&lt;CS))<br />     <br />    //deklaracje funkcji<br />    uint16_t analogRead (uint8_t pin); // deklaracja fukcji do odczytu z ADC<br />    void SPI_putBYTE(uint8_t bajt);    // deklaracja funkcji do wysłania bajtu po SPI<br />    void wyslij_na_rejestry ( void );<br />     <br />    //deklaracje zmiennych<br />    uint16_t kanal_L, kanal_R;<br />     <br />    int16_t z2;<br />    int16_t z1;<br />     <br />    uint8_t counter = 0;<br />     <br />    uint8_t i;<br />     <br />    uint8_t doganianieL = 0;<br />    uint8_t doganianieR = 0;<br />     <br />    uint8_t ilosc_diod_L = 0;<br />    uint8_t ilosc_diod_R = 0;<br />     <br />    uint16_t srednia1 = 0;<br />    uint16_t srednia2 = 0;<br />     <br />    //tablica z wartociami logarytmów<br />     <br />    uint16_t log_tab&#91;&#93; =<br />    {<br />                    72, //-20dB<br />                    85, //-18,56dB<br />                    100, //-17,125db<br />                    118, //-15,6875db<br />                    140, //-14,25db<br />                    165, //-12,8125db<br />                    194, //-11,375<br />                    229, //-9,9375<br />                    271, //-8,5<br />                    319, //-7,0625<br />                    377, //-5,625<br />                    445, //-4,1875<br />                    525, // -2,75<br />                    619, // -1,3125<br />                    720, // 0db<br />                    862,//1,5625db<br />                    1017, //db<br />    };<br />     <br />    //ilosc liczb z których liczona jest srednia<br />    #define dt 20<br />     <br />    //funkcja główna<br />    int main (void)<br />    {<br />            //komandor programista zezwala na przerwania ;p<br />            sei();<br />            //      SPI_INIT<br />            DDRB |= ((1&lt;&lt;MOSI) | (1&lt;&lt;CS) | (1&lt;&lt;SCK));<br />                                                                                                            //      inicjalizuj_adc<br />            ADMUX |= (1&lt;&lt;REFS0);                                                    //Wybór napięcia odniesienia - w tym wypadku wewnętrzne = 1,1V<br />            ADCSRA |= (1&lt;&lt;ADEN);                                                    //włącznie ADC<br />            ADCSRA |= (1&lt;&lt;ADPS0) | (1&lt;&lt;ADPS1);                              //preskaler na 9600000/2<br />     <br />            //////////////////////////////////////<br />            //konfiguracja timera<br />            //////////////////////////////////////<br />            TCCR0A |= (1&lt;&lt;WGM01);<br />            TCCR0B |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00);<br />            TIMSK0 |= (1&lt;&lt;OCIE0A);<br />            OCR0A = 74;<br />     <br />     <br />     <br />     <br />            while(1)<br />     <br />            {<br />                    // zerowanie zmiennych od zapalania diod<br />                    z1=0;<br />                    z2=0;<br />     <br />                    // usrednianie pomiaru<br />                    kanal_L = analogRead(0b00000010);<br />                    kanal_R = analogRead(0b00000011);<br />     <br />                    srednia1 = srednia1 * dt;<br />                    srednia2 = srednia2 * dt;<br />     <br />                    srednia1 = srednia1 + kanal_L;<br />                    srednia2 = srednia2 + kanal_R;<br />     <br />                    srednia1 = srednia1 / (dt + 1);<br />                    srednia2 = srednia2 / (dt + 1);<br />     <br />                    kanal_L = srednia1;<br />                    kanal_R = srednia2;<br />     <br />    //wyliczenie ile diod z danego pomiaru ma się zapalić<br />    for ( i = 0; i &lt; 17; i++ )<br />    {<br />            if ( kanal_L &gt; log_tab&#91;i&#93; ) ilosc_diod_L = i;<br />            if ( kanal_R &gt; log_tab&#91;i&#93; ) ilosc_diod_R = i;<br />    }<br />     <br />                    //jesli wybije czas == counter zwiększ lub zmniejsz o 1 ilosc diod do zapalenia<br />                    if (!counter)<br />                    {<br />     <br />                    counter = 15;<br />                    if ( doganianieL &lt; ilosc_diod_L ) doganianieL++;<br />                    if ( doganianieL &gt; ilosc_diod_L ) doganianieL--;<br />     <br />                    if ( doganianieR &lt; ilosc_diod_R ) doganianieR++;<br />                    if ( doganianieR &gt; ilosc_diod_R ) doganianieR--;<br />                    }<br />     <br />                    //jeżeli doganianie = 0 to ilosc diod do zapalenia = 0<br />                    //jeżeli jednak doganianie &gt; 0 to zwiększaj po jednej diodzie aż z = doganianie<br />                    //<br />                    //poniższe ify pozwoliły mi usunąć tablicę z iloscią diod<br />                    //<br />                    if (doganianieL == 0) z1 = 0;<br />                    else<br />                    {<br />                            for( i = 0; i &lt;= doganianieL; i++)<br />                            {<br />     <br />                                    z1 |= (1&lt;&lt;i);<br />                            }<br />                    }<br />     <br />                    if (doganianieR == 0) z2 = 0;<br />                    else<br />                    {<br />                            for( i = 0; i &lt;= doganianieR; i++)<br />                            {<br />     <br />                                    z2 |= (1&lt;&lt;i);<br />                            }<br />                    }<br />     <br />                    //wyslij wartosc na rejestry przesuwne<br />                    wyslij_na_rejestry();<br />     <br />    }<br />     <br />     <br />            }<br />     <br />     <br />    //funkcja napisana na szybko żeby wysłać dane do rejestrów<br />    void wyslij_na_rejestry ( void )<br />    {<br />            SPI_putBYTE( z1 &gt;&gt; 8); //Wysłanie bajtów danych<br />            SPI_putBYTE( z1);<br />            SPI_putBYTE( z2 &gt;&gt; 8);<br />            SPI_putBYTE( z2);<br />     <br />            LATCH_OFF;                                                // latchowanie<br />            LATCH_ON;<br />            LATCH_OFF;<br />    }<br />     <br />    //wysyłanie bajtu na rejsetry<br />    void SPI_putBYTE(uint8_t bajt)<br />    {<br />            uint8_t cnt = 0x80;<br />     <br />            SCK_0;<br />     <br />            while (cnt)<br />            {<br />                    if ( bajt &amp; cnt ) MOSI_1;<br />                    else MOSI_0;<br />     <br />                    SCK_1;<br />     <br />                    SCK_0;<br />     <br />                    cnt&gt;&gt;= 1;<br />     <br />            }<br />     <br />     <br />    }<br />     <br />    //obsługa przerwania<br />    ISR(TIM0_COMPA_vect)<br />    {<br />            if ( counter ) counter--;<br />    }<br />     <br />     <br />     <br />    uint16_t analogRead (uint8_t pin)<br />    {<br />            ADMUX = (0b11111100 &amp; ADMUX) | pin; // WYBÓR PINU Z KTÓREGO CHCEMY MIEĆ POMIAR<br />     <br />            ADCSRA |= (1&lt;&lt;ADSC);                            // ZACZNIJ KONWERSJE!<br />     <br />            while (ADCSRA &amp; (1&lt;&lt;ADSC));             // czekaj<br />     <br />     <br />            return ADCW;                                            //zwróć ADCW czyli ADCH i ADCL razem;<br />    }[/syntax]<br /><br />Wkleje dwie funkcje z tego kodu powyższego, i jaką funkcję pełnią i czy są one niezbędne.<br /><br />[syntax=c]//funkcja napisana na szybko żeby wysłać dane do rejestrów<br />    void wyslij_na_rejestry ( void )<br />    {<br />            SPI_putBYTE( z1 &gt;&gt; 8); //Wysłanie bajtów danych<br />            SPI_putBYTE( z1);<br />            SPI_putBYTE( z2 &gt;&gt; 8);<br />            SPI_putBYTE( z2);<br />     <br />            LATCH_OFF;                                                // latchowanie<br />            LATCH_ON;<br />            LATCH_OFF;<br />    }<br />     <br />    //wysyłanie bajtu na rejsetry<br />    void SPI_putBYTE(uint8_t bajt)<br />    {<br />            uint8_t cnt = 0x80;<br />     <br />            SCK_0;<br />     <br />            while (cnt)<br />            {<br />                    if ( bajt &amp; cnt ) MOSI_1;<br />                    else MOSI_0;<br />     <br />                    SCK_1;<br />     <br />                    SCK_0;<br />     <br />                    cnt&gt;&gt;= 1;<br />     <br />            }[/syntax]<br />I czy to jest [syntax=c]SPI_putBYTE( z1 &gt;&gt; 8); //Wysłanie bajtów danych[/syntax]<br />wysłanie bajtów czy bitów.<br />PS. Podziwiam i dziękuje za cierpliwość do mnie ponieważ podejrzewam, że na forum elektrody dawno bym był już zbanowany.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 13 lip 2016, o 16:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-13T14:34:50+01:00</updated>
<published>2016-07-13T14:34:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163937#p163937</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163937#p163937"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163937#p163937"><![CDATA[
No prościej niż to pokazał kolega Nefarious19 chyba się nie da. Wziąwszy pod uwagę, że Bluebooku masz podstawy komunikacji SPI, a do tego kilka poradników wideo o tym jak korzystać z kaskadowo połączonych układów 74595 no i przykładowy kod projektu kolegi .... no to nie mów, że nie da rady <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />No chyba że po prostu za mało jeszcze może poćwiczyłeś podstaw z Bluebooka. To postaraj się poćwiczyć i zadawać po drodze pytania - albo pytać czego nie rozumiesz w kodach źródłowych których propozycję dostałeś ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 13 lip 2016, o 14:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-13T13:53:18+01:00</updated>
<published>2016-07-13T13:53:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163935#p163935</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163935#p163935"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163935#p163935"><![CDATA[
Cholera nic z tego nie będzie, jestem za cienki w te klocki, chciałem zastosować coś innego niż lm3914 bo te trochę się grzeją i w zamkniętej obudowie kilkadziesiąt sztuk to robi się mega grzejnik. Może ktoś ma inne pomysły jak z 60 diod zrobić wskaźnik bargraph.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 13 lip 2016, o 13:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Nefarious19]]></name></author>
<updated>2016-07-12T21:13:56+01:00</updated>
<published>2016-07-12T21:13:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163902#p163902</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163902#p163902"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163902#p163902"><![CDATA[
Może tu cię coś zainspiruje? <br /><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/viewtopic.php?t=7026" >viewtopic.php?t=7026</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2500">Nefarious19</a> — 12 lip 2016, o 21:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-12T20:01:01+01:00</updated>
<published>2016-07-12T20:01:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163895#p163895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163895#p163895"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163895#p163895"><![CDATA[
Witam ponownie. Jestem na wakacjach i znalazłem ciut czasu na hobby. Niestety bitwę przegrałem. A pozatym to chyba się nie da Twojego kodu wstawić w mój - muszę wysterować bity do 6 linijek diodowych po 10 led. Jeżeli to nie problem to proszę o dodatkową pomoc.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 12 lip 2016, o 20:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-09T04:59:16+01:00</updated>
<published>2016-07-09T04:59:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163713#p163713</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163713#p163713"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163713#p163713"><![CDATA[
A po co masz przesuwać jakieś młodsze i starsze bity ? Ty cały czas widzę myślisz o zmiennej uint1128_t <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />toż masz tablicę ... w niej bajty ... rób więc operacje na tablicy (czyli na pamięci RAM) ... to jest wygodne<br /><br />i po każdej operacji na tablicy po prosu wysyłaj ją w całości bajt po bajcie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 9 lip 2016, o 04:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-09T04:17:48+01:00</updated>
<published>2016-07-09T04:17:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163712#p163712</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163712#p163712"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163712#p163712"><![CDATA[
Oczywiscie, spojzalem nawet wlaczylem edytor po 12 godzinnej pracy. Ale w dalszym ciagu nie mam ciemno zielonwgo pojecia jak zaswiecic segmenty linijki od pierwszej diody z dolu np. Do 50, tz. To przesuwanie starszyxh i mlodszych bitow nie chula.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 9 lip 2016, o 04:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-08T22:33:00+01:00</updated>
<published>2016-07-08T22:33:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163710#p163710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163710#p163710"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163710#p163710"><![CDATA[
<div class="quotetitle">pracownik_UR napisał(a):</div><div class="quotecontent"><br />ale niestety nie ogarne tego,<br /></div><br />Ale czego nie ogarniesz, tym bardziej jeśli wyżej pokazałem tobie jak to można prosto zorganizować w twoim wypadku prostą pętlą - nie spojrzałeś na kod ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 lip 2016, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-08T21:48:25+01:00</updated>
<published>2016-07-08T21:48:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163705#p163705</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163705#p163705"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163705#p163705"><![CDATA[
Witaj. Dziękuję za mega szybką odp. <br />Przed wysłaniem poprzedniego postu dwa razy oglądnąłem Twój filmik, (Ty naprawdę to kochasz, bez obrazy oczywiście) Ale niestety popłynąłem, jakbym wysyłał bajty przez interfejsy szeregowe z wykorzystaniem materiałów z poradnika to na pewno bym i ja to pokochał, ale niestety nie ogarne tego, <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />  będę zmuszony poszukać jakiegoś podobnego rozwiązania w sieci i go dopasować do siebie. <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 8 lip 2016, o 21:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-07-08T03:39:42+01:00</updated>
<published>2016-07-08T03:39:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163627#p163627</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163627#p163627"/>
<title type="html"><![CDATA[Re: zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163627#p163627"><![CDATA[
Po drugie powiedz mi skąd pomysł na to żeby wysyłać dane do rejestrów to robić poprzez wtkorzystanie coraz obszerniejszych typów ? Już nawet uint16_t ci za mało i chciałbyś uint128_t ? <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> .... a pomyśl jak to jest gdy trzeba wysłać do jeszcze większej ilości rejestrów dane to co? Trzeba byłoby zrobić typ np uint7532_t ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a gdyby jeszcze większej ? <br /><br />Pomyśl idziesz w totalnie ślepą uliczkę, to się robi DOKŁADNIE TAK samo w języku C jak w każdym protokole czy to I2C, czy RS232, czy SPI no cokolwiek<br /><br />ZAWSZE robisz procedurę do wysyłania JEDNEGO (rozumiesz?) jednego bajtu ! <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> jednego. np<br /><br />[syntax=c]void send_spi_byte( uint8_t data );[/syntax]<br /><br />i co za problem później dane pobierać z tablicy o DOWOLNEJ długości wysyłając całą jej zawartość jedną pętlą np for()<br /><br />[syntax=c]uint8_t tablica&#91;56&#93; = {1,2,3,4........ };<br /><br />for( i=0; i&lt;50; i++ ) send_spi_byte( tablica&#91;i&#93; );[/syntax]<br /><br />Zresztą proszę cię zajrzyj do Bluebooka bo widzę, że go masz i zobacz jak to jest zrobione np w transmisji UART ... bo czym to się różni? Tam też robisz procedurę do wysyłania jednego bajtu (znaku) a później wysyłasz ciurkiem całe stringi czyli dane z tablicy ...<br /><br />Poza tym obejrzyj sobie poradnik:<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />Pamiętaj, że warto do tego pobrać sobie darmowy program AVPlayer: <!-- m --><a class="postlink" href="http://atnel.pl/atnel-video-player.html" >http://atnel.pl/atnel-video-player.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 8 lip 2016, o 03:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[pracownik_UR]]></name></author>
<updated>2016-07-07T22:20:37+01:00</updated>
<published>2016-07-07T22:20:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163624#p163624</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163624#p163624"/>
<title type="html"><![CDATA[zastąpienie układu LM3914 układem 74HC595]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15739&amp;p=163624#p163624"><![CDATA[
Na początek witam szanownych kolegów i &quot;koleżanki&quot; a przede wszystkim szanownego programistę, elektronika itp. Mirka (wielki podziw dla Ciebie) , gdyż tyle co się zarejestrowałem.<br />Po oglądnięciu bardzo mądrych poradników na YouTube niestety nie osiągnąłem celu. A jest nim zastąpienie układów LM3914 układami 74HC595.<br />Z góry piszę że bardzo późno zacząłem zabawę z programowaniem i nie wymagajcie  zbyt wiele.  <br />Udało mi się napisać kod do obsługi 32 LED (linijka świetlna - bargraph) , przy pomocy mikrokontrolera Atmega8 i czterech układów 74HC595 (oczywiście w języku C). Wolałbym kodu nie umieszczać tutaj ponieważ trochę się wstydzę <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" />.<br />Wykorzystałem do niego poradnik Mirka do programowania rejestrów przesuwnych, powiem tak zabrakło mi zdefiniowania zmiennej 128 bit (uint128_t) gdyż jej nie ma. Jednak wkleję kod a co tam najwyżej się pośmiejecie.<br />Dane do wyświetlania segmentów led biorę z przetwornika ADC (8 bitów)<br />I teraz proszę kogoś (żeby nie było że chce gotowca to wkleiłem swój paskudny kod, choć działający)<br />o pomoc jak mogę sterować np. linijką diodową składającą się z 60 segmentów LED tymi właśnie fajnymi układami 74HC595. Dzięki za wszelkie chęci. A bym zapomniał, schematu nie wstawiałem tylko fotkę poglądową, gdyż regulując potencjometrem układ działa jak należy.<br /><br /><a href="https://obrazkiforum.atnel.pl/14397/111aad1dd4792f97f0933214c40c7387.jpg"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/14397/111aad1dd4792f97f0933214c40c7387.jpg" alt="Obrazek" /></a><br /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br /><strong><em><span style="color: #FF0000">#define F_CPU 4000000L &lt;--- po pierwsze tego się NIGDY nie robi w kodzie - mirekk36</span></em></strong><br /></div><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br /><br />#define MOSI (1&lt;&lt;PB3)         // wejscie układu 74HC595 A ser in<br />#define SCK (1&lt;&lt;PB5)          // wejscie układu 74HC595 Shoft clock<br />#define LT (1&lt;&lt;PB2)           // wejscie układu 74HC595 lath clock<br />#define LT_ON PORTB |= LT     //przepisanie to co wystawilismy na wyjscie(robimy zbocze narastajace)<br />#define LT_OFF PORTB &amp;= ~LT   //resetujemy<br />//definicja napiecia referencyjnego<br />#define VREF 5.0<br />//definicja ADCIN (wejście ADC)<br />#define ADCIN PC5<br /><br /><br />void SendSpiWord(uint64_t word);//deklaracja funkcji<br />void initSpi(void); <br />void initADC(void);          <br /><br /><br />volatile uint8_t  cnt;                 //zmienna licznikowa<br /><br />volatile uint8_t wejscie=2;//zmienna do zmiany wejścia, początkowo pc2<br />volatile uint64_t cyfry&#91;33&#93; = {//zaswieca max 32 segmenty linijki<br /> //segmenty 1 linijki led<br /> //0,1,2,3, 4, 5,  6,  7,   8,  <br />    0,1,3,7,15,31,63,127,255,<br /> //segmenty 2 linijki led<br /> //9,   10,   11,    12,   13,   14,     15,     16<br />   511,1023,2047,4095,8191,16383,32767,65535,<br /> //segmenty 3 linijki led<br /> //17       18       19        20         21         22         23         24    <br />   131071,262143,524287,1048575,2097151,4194303,8388607,16777215,<br /> //segmenty 4 linijki led<br /> //25          26           27            28            29             30             31              32                               <br />   33554431,67108863,134217727,268435455,536870911,1073741823,2147483647,4294967295};<br /><br />int main(void)<br />{<br /><br />initSpi();<br />initADC();<br />SendSpiWord (0xffffffff);          //wygaszamy diody<br /><br /><br />cnt=0;<br /><br />  while (1)<br />  {<br /> <br /> <br />  switch ADCH{<br />    case 0:<br />  cnt =0;<br />break;<br />case 10:<br />  cnt =1;<br />break;<br />case 20:<br />      cnt=2;<br />break;  <br />    case 30:<br />  cnt =3;<br />break;<br />case 40:<br />  cnt =4;<br />break;<br />case 50:<br />      cnt=5;<br />break; <br />    case 60:<br />  cnt =6;<br />break;<br />case 70:<br />  cnt =7;<br />break;<br />case 80:<br />      cnt=8;<br />break;     <br />    case 90:<br />  cnt =9;<br />break;<br />case 100:<br />  cnt =10;<br />break;<br />case 110:<br />      cnt=11;<br />break;  <br />    case 120:<br />  cnt =12;<br />break;<br />case 130:<br />  cnt =13;<br />break;<br />case 140:<br />      cnt=14;<br />break; <br />    case 150:<br />  cnt =15;<br />break;<br />case 160:<br />  cnt =16;<br />break;<br />case 170:<br />      cnt=17;<br />break;    <br />    case 180:<br />  cnt =18;<br />break;<br />case 190:<br />  cnt =19;<br />break;<br />case 200:<br />      cnt=20;<br />break; <br />    case 210:<br />  cnt =21;<br />break;<br />case 220:<br />  cnt =22;<br />break;<br />case 230:<br />      cnt=23;<br />break; <br />case 240:<br />      cnt=24;<br />break; <br />    case 248:<br />  cnt =25;<br />break;<br />case 249:<br />  cnt =26;<br />break;<br />case 250:<br />      cnt=27;<br />break; <br />    case 251:<br />  cnt =28;<br />break;<br />case 252:<br />  cnt =29;<br />break;<br />case 253:<br />      cnt=30;<br />break; <br />case 254:<br />      cnt=31;<br />break;<br />case 255:<br />      cnt=32;<br />break;<br />} <br />                <br />  SendSpiWord(~cyfry&#91;cnt&#93;);<br /> <br />  }<br />}<br />/////////////////////////////funkcja wysyłająca 4 bajty<br />void SendSpiWord(uint64_t word) {<br /><br />  SPDR = word;                       //wysyłamy mlodszy bajt do układu (word&gt;&gt;0; zera nie trzeba pisac)<br />  while ( !(SPSR &amp; (1&lt;&lt;SPIF)) );//czekamy az się cały wyśle<br /><br />  SPDR = word&gt;&gt;8;                 //wysyłamy starszy bajt do układu<br />  while ( !(SPSR &amp; (1&lt;&lt;SPIF)) );//czekamy az się cały wyśle<br /><br />  SPDR = word&gt;&gt;16;               //wysyłamy starszy bajt do układu<br />  while ( !(SPSR &amp; (1&lt;&lt;SPIF)) );//czekamy az się cały wyśle<br /><br />   SPDR = word&gt;&gt;24;               //wysyłamy starszy bajt do układu<br />  while ( !(SPSR &amp; (1&lt;&lt;SPIF)) );//czekamy az się cały wyśle<br /><br /><br />  <br />  LT_ON;                              //ustawiamy zbocze, zatrzask bitów<br />  LT_OFF;<br />}<br /><br /><br />////////////////////////////funkcja inicjalizująca transmisje szeregowa SPI<br />void initSpi(void) {<br />   DDRB |=  MOSI | SCK | LT;          //piny SPI jako wyjścia<br />   SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;MSTR);  //SPE-włączamy SPI, MSTR-ustawiamy mastera<br />   SPSR |= (1&lt;&lt;SPI2X);                 //fosc/2 - predkosc transmisji<br />}<br />////////////////////////////Inicjalizacja ADC<br />void initADC(void){<br />ADCSRA =(1&lt;&lt;ADEN)      // ADC Enable (uruchomienie przetwornika)<br /> |(1&lt;&lt;ADFR)     //tryb Free run<br />           |(1&lt;&lt;ADSC)     //rozpoczęcie konwersji<br />                |(1&lt;&lt;ADPS2)|(1&lt;&lt;ADPS1)|(1&lt;&lt;ADPS0);   //ADPS2: (ustawienie preskalera)<br /><br />ADMUX  =  (1&lt;&lt;ADLAR)     //Wyrównanie wyniku do lewej<br /> |(1&lt;&lt;REFS0)   //VCC jako napięcie referencyjne<br />                |wejscie;        //Wybór wejścia początkowego czyli PC2 <br />}<br />///////////////////////////[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14397">pracownik_UR</a> — 7 lip 2016, o 22:20</p><hr />
]]></content>
</entry>
</feed>