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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-03-29T10:58:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17564&amp;mode</id>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-29T10:58:29+01:00</updated>
<published>2017-03-29T10:58:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185854#p185854</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185854#p185854"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185854#p185854"><![CDATA[
Hej kolego tonygryps<br /><br /> Ja dobrze myślałem żeby przy wywołaniu funkcji nie dawać operatora pobrania adresu bo mi pobierało odrazu wartość z tablicy uint8_t a w funkcji chciałem wskaźnik wiec nie szło.<br /><br />[syntax=c]SPDR = pgm_read_byte( &amp;bajt&#91;i&#93; );[/syntax]<br /><br />Więc takie przekształcenie wewnątrz funkcji SendSpiWord jest odpowiednie.<br /><br />Do rejestru SPDR przypisujemy kolejno wartości spod adresu i wysyłamy na piny rejestrów przesównych<br /><br />[syntax=c]SendSpiWord( Font_Tab, sizeof( Font_Tab ) );[/syntax]<br /><br />A tu wskaźnik na pierwszy element i ilość bajtów do wysłania<br /><br />wszystko działa, twoje wywołanie ma takie skutki jak u mnie na początku<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 29 mar 2017, o 10:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tonygryps]]></name></author>
<updated>2017-03-29T09:30:17+01:00</updated>
<published>2017-03-29T09:30:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185851#p185851</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185851#p185851"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185851#p185851"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />A więc skupiam się na tym kodzie żeby stwierdzić co nie tak jest, hmm jeżeli wywalę operator pobrania adresu sama nazwa tablicy będzie wskaźnikiem na pierwszy element Font_Tab w teori bo ten sam warning jest... coś dalej nie tak kurdę ;/<br /></div><br /><br />nie w tym problem funkcja pgm_read_byte zwraca wartość tablicy pod adresem pierwszego elementu a nie adres tej komórki a funkcja do wysyłania oczekuje  adresu .<br />spróbuj  tak [syntax=c]SendSpiWord(&amp;pgm_read_byte(&amp;Font_Tab), 2 );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12014">tonygryps</a> — 29 mar 2017, o 09:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-03-29T09:14:44+01:00</updated>
<published>2017-03-29T09:14:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185849#p185849</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185849#p185849"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185849#p185849"><![CDATA[
[syntax=c]// nagłówek funkcji<br />void SendSpiWord( const uint8_t * bajt, uint8_t ilosc) ...[/syntax]<br /><br />wewnątrz funkcji:<br /><br />[syntax=c]SPDR = pgm_read_byte( &amp;bajt&#91;i&#93; );[/syntax]<br /><br /><br /><br />// wywołanie<br />[syntax=c]SendSpiWord( Font_Tab, sizeof( Font_Tab ) );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 mar 2017, o 09:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-29T09:07:34+01:00</updated>
<published>2017-03-29T09:07:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185848#p185848</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185848#p185848"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185848#p185848"><![CDATA[
Wiem wiem panie Mirku, Uczymy się na własnych babolach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />A więc skupiam się na tym kodzie żeby stwierdzić co nie tak jest, hmm jeżeli wywalę operator pobrania adresu sama nazwa tablicy będzie wskaźnikiem na pierwszy element Font_Tab w teori bo ten sam warning jest... coś dalej nie tak kurdę ;/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 29 mar 2017, o 09:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-03-29T08:45:12+01:00</updated>
<published>2017-03-29T08:45:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185846#p185846</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185846#p185846"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185846#p185846"><![CDATA[
to nie &quot;coś&quot; tam chce wskaźnik tylko przecież ty sam żeś napisał tak tą funkcję, że chcesz wskaźnik - TY chcesz wskaźnik, a później wywołujesz funkcję i przekazujesz do niej &quot;nie wskaźnik&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 mar 2017, o 08:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-29T08:02:31+01:00</updated>
<published>2017-03-29T08:02:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185844#p185844</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185844#p185844"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185844#p185844"><![CDATA[
Więc krzyczy mi że chce wskaźnik na uint8_t a nie samego uint8_t w takim razie rozumiem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 29 mar 2017, o 08:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-03-29T06:51:06+01:00</updated>
<published>2017-03-29T06:51:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185840#p185840</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185840#p185840"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185840#p185840"><![CDATA[
nic się nie spina tylko babola robisz ... <br /><br />Jaki dałeś argument funkcji ? .... uint8_t * bajt<br /><br />a tymczasem chcesz przesyłać argument uint8_t bajt <br /><br />więc zastanów się<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 29 mar 2017, o 06:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-28T22:44:24+01:00</updated>
<published>2017-03-28T22:44:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185835#p185835</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185835#p185835"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185835#p185835"><![CDATA[
Witam,<br /><br />Tak sobię pracuję nad tą Funkcją wysyłającą dane z tablicy w pamięci Flesh poprzez sprzętowy moduł Spi, w sumie się udało ale nie tak jak tego chcem czyli za pomocą funkcji (Oczywiście zajrzałem do BB) Tam jest to w przerwaniu i do tego dojdę, narazie tak.<br /><br />otóż napisałem sobie taki programik: <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;Funkcje.h&quot;<br /><br />const uint8_t Font_Tab&#91;&#93; PROGMEM = {0xFF,0x1}; // Tablica w pamięci Flesh<br /><br />int main(void)<br />{<br /><br />InitSpiModule(); // Inicjalizacja sprzętowego modułu Spi<br /><br />while(1)<br />{<br />for(uint8_t i = 0; i &lt; 2; i++)<br />{<br />SPDR = pgm_read_byte(&amp;Font_Tab&#91;i&#93;);  // Przypisanie danych do tablicy<br />while(!(SPSR &amp; (1&lt;&lt;SPIF) ) );  // czekamy aż zostanie wysłany ostatni bit<br />}<br /><br />LT_ON;<br />LT_OFF; // Zatrzask<br /><br />}<br /><br /><br />}[/syntax]<br /><br />Oczywiście mam na stykówce dwa rejestry przesuwne do testów, i na takim programie wszystko działa, diody się zapalają w takim układzie jak w hex zapisałem czyli wysyła, hmm problem się pojawia jak chcę za pomocą funkcji przesłać, pojawia się warning:<br /><br /> passing argument 1 of 'SendSpiWord' makes pointer from integer without a cast [enabled by default] <br /><br />A kod jest taki: <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;Funkcje.h&quot;<br /><br />const uint8_t Font_Tab&#91;&#93; PROGMEM = {0xFF,0x1}; // Tablica w pamięci Flesh<br /><br />int main(void)<br />{<br /><br />InitSpiModule(); // Inicjalizacja sprzętowego modułu Spi<br /><br />while(1)<br />{<br />SendSpiWord(pgm_read_byte(&amp;Font_Tab), 2 );<br /><br /><br />}<br /><br /><br />}[/syntax]<br /><br />Hmm wiec pgm_read_byte jako argument pobiera adres pamięci programu a zwraca wartość znajdującą się pod tym adresem więc jest operator adresu do pierwszego elementu tablicy, i chcem tylko 2 bajty pobrać, hmm Tak się zastanawiam czy warning wyskakuje z powodu ze funkcja SendSpiWord ma dwa argumenty typu uint8_t i z tego co wynika jest problem z pierwszym argumentem wiec widzi funkcję jako argument czyli void? i dlatego spina się ?<br /><br />Tak wygląda Funkcja:<br /><br />[syntax=c]void SendSpiWord(uint8_t * bajt, uint8_t ilosc)<br />{<br />for(uint8_t i = 0; i &lt; ilosc; i++)<br />{<br />SPDR = bajt&#91;i&#93;; // Przypisanie danych do tablicy<br />while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // czekamy aż zostanie wysłany ostatni bit<br /><br />}<br /><br />LT_ON;<br />LT_OFF; // Zatrzask<br /><br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 28 mar 2017, o 22:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-20T16:11:29+01:00</updated>
<published>2017-03-20T16:11:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185212#p185212</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185212#p185212"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185212#p185212"><![CDATA[
Zrozumiem bo dobrze wytłumaczone jest W BB wszystko <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> A chodziło mi jeszcze o jakiś poradnik jak istnieje to tego tematu z ksiązki, No ale zabieram się za BB właśnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 20 mar 2017, o 16:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-03-20T15:50:50+01:00</updated>
<published>2017-03-20T15:50:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185209#p185209</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185209#p185209"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185209#p185209"><![CDATA[
Bez żadnych linków tylko z Bluebookiem sobie poradzisz - gwarantuję, a jak czegoś nie zrozumiesz z BB to tu dopytaj<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 mar 2017, o 15:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-20T15:49:08+01:00</updated>
<published>2017-03-20T15:49:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185208#p185208</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185208#p185208"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185208#p185208"><![CDATA[
Dzięki, Widzę jest, aż głupio trochę mi trochę zapomniałem o tym dziale może to przez te wskaźnki ostatnio dużo rozkminy. Zabieram się za czytanie ale może jeszcze jakieś linki z tym związane ktoś zna to moze podesłać przyda się wszystko <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 20 mar 2017, o 15:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-03-20T15:12:10+01:00</updated>
<published>2017-03-20T15:12:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185204#p185204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185204#p185204"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185204#p185204"><![CDATA[
To może otwórz panie kochany Bluebooka, najważniejszy rozdział o multipleksowaniu wyświetlaczy LED i zobacz tam jak się uzyskuje dostęp do pamięci FLASH ok? danych w tej pamięci<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 mar 2017, o 15:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-20T14:30:33+01:00</updated>
<published>2017-03-20T14:30:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185202#p185202</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185202#p185202"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185202#p185202"><![CDATA[
Witam, Mam problem z Pobraniem danych z tablicy utworzonej w pamięci Flash, dane chcem wysłać za pomocą modułu SPI na wyjścia rejestrów przesównych.<br /><br />Tablica wygląda tak: <br /><br />[syntax=c]const uint8_t Font_Tab&#91;&#93; PROGMEM = {0x1,0x0};[/syntax]<br /><br />Funkcja wysyłająca wygląda jak wyżej w postach:<br /><br />[syntax=c]void SendSpiWord(uint8_t * bajt, uint8_t ilosc)<br />{<br />for(uint8_t i = 0; i &lt; ilosc; i++)<br />{<br />SPDR = bajt&#91;i&#93;; // Przypisanie danych do tablicy<br />while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // czekamy aż zostanie wysłany ostatni bit<br /><br />}<br /><br />LT_ON;<br />LT_OFF; // Zatrzask<br /><br /><br /><br />}[/syntax]<br /><br />Mam na stykówce 2 rejestry połączone kaskadowo chcem wysłać na nie te 2 bajty z tablicy, wiem że muszczę jeszcze użyć makra pgm_read_word, nie będę strzelał gdzie wiec jeżeli ktoś zna się lepiej, może wytłumaczy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 20 mar 2017, o 14:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-03-18T09:42:04+01:00</updated>
<published>2017-03-18T09:42:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185056#p185056</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185056#p185056"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=185056#p185056"><![CDATA[
Witam, Ciąglę pracuję na optymalnym kodem jęzeli chodzi o ten mój projekt, dodam że jest to Led Cube RGB 4x4x4 oparty o mikrokontroler ATmega16A połączony kaskadowo z siedmioma rejestrami przesównymi, jak pisałem wyżej komunikacja między mc a rejestrami odbywa się szeregowo poprzez sprzętowy moduł SPI, Za poradą pana Mirka o przekazaniu wskaźnika na tablicę, w której mam Dane napisałem taką funkcję do wysyłania bajtów:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;Funkcje.h&quot;<br /><br />void InitSpiModule(void)<br />{<br />DDRB |= MOSI | SCK | LT; // Ustalenie kierunków wyjściowych dla lini MOSI,SCK,LT<br />SPCR |= (1&lt;&lt;SPE) | (1&lt;&lt;MSTR); // Włączenie układu / tryb pracy MASTER<br />SPSR |= (1&lt;&lt;SPI2X); // Prędkośc zegara fosc/2<br /><br />}<br /><br />void SendSpiWord( uint8_t * bajt, uint8_t ilosc )<br />{<br />        for(uint8_t i = 0; i &lt; ilosc; i++)<br />        {<br />                SPDR = bajt&#91;i&#93;; // Przypisanie danych do rejestru danych SPI / Przy każdym obrocie pętli będą wsuwane inne dane z Tablicy<br />                while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br />        }<br />                LT_ON;<br />                LT_OFF; // Zatrzask<br /><br /><br /><br />}[/syntax]<br /><br />Cały czas douczam się na temat wskaźników i tablic zeby dobrzę to zrozumieć i napisać kod optymalny dla tego projektu żeby był szybki i zajmował mało pamięci. Właśnie o pamięć chodzi mi w tym poście hmm, <br /><br />Chcem utworzyć jedną tablicę w pamięci Flesh W której będą znajdować się wszystkie dane czyli ustawienia wyjściowe dla kolorów w Cubie jak i tranzystorów sterującymi warstwy już sobie trenuję pisanie takiej tablicy i innym mc to działa o to taki kodzik jaki napisałem:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br /> const uint8_t Font_Tab&#91;&#93; PROGMEM = {0xFF,0x0,0x0,0x00,0x0};<br /><br /><br />int main(void)<br />{<br />DDRB = 0xFF;<br /><br />uint8_t Element = pgm_read_word(&amp;Font_Tab&#91;0&#93;);<br /><br />PORTB = Element;<br /><br />}[/syntax]<br /><br />Po prostu pobieram sobie dane z 0 elementu tablicy i wysyłam je na PORT B, Cały PORTB jest w stanie wysokim Działa, Widzę w tym przyszłość  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Może jakieś porady od osób wiedzących coś na ten temat jakieś wskazówki, Dzięki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 18 mar 2017, o 09:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-02-14T13:07:56+01:00</updated>
<published>2017-02-14T13:07:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182625#p182625</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182625#p182625"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182625#p182625"><![CDATA[
Jeżeli chodzi o ten zatrzask napewno bym doszedł że źle zamknełem pętle, Ale dziękuje. Więc mam trochę materiału do analizy, Postaram się dogłębnie to ogarnąć Dziękuje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 14 lut 2017, o 13:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-02-14T12:49:47+01:00</updated>
<published>2017-02-14T12:49:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182623#p182623</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182623#p182623"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182623#p182623"><![CDATA[
no widzisz ... i teraz sam chyba czujesz, że ma to przyszłość <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />tylko ... to przekazywanie argumentu ..... do funkcji ... . brrrrr - niśt gut ... niśt gut- tzn no na upartego można ale nie polecam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]void SendSpi( uint8_t * tabptr, uint8_t len )<br />{<br />        for(uint8_t i = 0; i &lt; len; i++)<br />        {<br />                SPDR = tabptr&#91;i&#93;; // Przypisanie danych do rejestru danych SPI / Przy każdym obrocie pętli będą wsuwane inne dane z Tablicy<br />                while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br />        }<br />                LT_ON;<br />                LT_OFF; // Zatrzask<br /><br />}[/syntax]<br /><br />przekazuj WSKAŹNIK na tablicę a nie tablicę, to jedno, dodaj drugi argument, żeby funkcja była mega uniwersalna i żebyś mógł wysyłać tyle ile potrzebujesz w każdym miejscu programu czy w każdym projekcie - a nie żeby za każdym razem grzebać w brzuchu funkcji i zmieniać jej flaki - przecież to grozi &quot;zakażeniem&quot; <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> czyli większym ryzykiem błędu <br /><br />no i zatrzask - chyba zależy ci żeby go zatrzasnąć po wysłaniu już wszystkich bajtów do całego łańcucha rejestrów a nie po wysłaniu każdego bajtu z osobna - bo wtedy miałbyś dopiero ciekawy efekt <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> sprawdź sam jaki<br /><br /><br />a wywołanie takiej funkcji - proszę bardzo (nie bój się wskaźników)<br /><br />[syntax=c]uint8_t tab1&#91;&#93; = { 3, 12 };<br />uint8_t tab2&#91;&#93; = { 3, 7, 1 };<br />uint8_t tab3&#91;&#93; = { 192, 12, 88, 9 };<br /><br /><br />SendSPI( tab1, 2 );  // wysyłamy tylko dwa bajty<br /><br />SendSPI( tab2, 3 );  // a tu sobie wysyłamy 3 bajty bo mamy taki kaprys akurat ;)<br /><br />SendSPI( tab3, 4 );  // możemy wysłać nawet 4 bajty, bo kto nam zabroni ?[/syntax]<br /><br />a wszystko za pomocą jednej funkcji - jak widzisz możesz wysłać 1 bajt albo i 20 bajtów naraz i nie jesteś uwiązany typem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 14 lut 2017, o 12:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-02-14T17:14:03+01:00</updated>
<published>2017-02-14T12:47:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182622#p182622</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182622#p182622"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182622#p182622"><![CDATA[
Zatrzask daj po wysłaniu wszystkich bajtów, a nie po każdym bajcie z osobna.<br />[syntax=c]void SendSpiWord(uint8_t Tab&#91;&#93;)<br />{<br />            for(uint8_t i = 0; i &lt; 3; i++)<br />            {<br />                    SPDR = Tab&#91;i&#93;; // Przypisanie danych do rejestru danych SPI / Przy każdym obrocie pętli będą wsuwane inne dane z Tablicy<br />                    while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br /><br />            }<br />            LT_ON;<br />            LT_OFF; // Zatrzask<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 14 lut 2017, o 12:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-02-14T12:35:51+01:00</updated>
<published>2017-02-14T12:35:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182621#p182621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182621#p182621"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182621#p182621"><![CDATA[
Witam po krótkiej przerwie, jestem właśnie w trakcie pisania funkcji wysyłającej bity do rejestrów przesuwnych opartej o tablice, podpowie ktoś czy idę dobrym tokiem rozumowania jeżeli chodzi o ten wątek, Sama funkcja jest wycięta z projektu który jest podzielony na pliki.<br /><br />[syntax=csharp]void SendSpiWord(uint8_t Tab&#91;3&#93;)<br />{<br />for(uint8_t i = 0; i &lt; 3; i++)<br />{<br />SPDR = Tab&#91;i&#93;; // Przypisanie danych do rejestru danych SPI / Przy każdym obrocie pętli będą wsuwane inne dane z Tablicy<br />while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br />LT_ON;<br />LT_OFF; // Zatrzask<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 14 lut 2017, o 12:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-02-07T20:26:30+01:00</updated>
<published>2017-02-07T20:26:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182000#p182000</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182000#p182000"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=182000#p182000"><![CDATA[
Dziękuję za odpowiedź i podpowiedź o tablicach będę nad tym myślał, Ale jak tak ustawiałem 4 rejestry i właśnie się zastanawiałem czy to mam sens, ponieważ do projektu będą mi potrzebne 6 rejestrów, a już przy 4 ustawiając najstarszy bit w hex była to liczba 0x80000000 więc zmieniam tok myślenia i przełączam się na tablice<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 7 lut 2017, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-02-07T20:16:15+01:00</updated>
<published>2017-02-07T20:16:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=181997#p181997</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=181997#p181997"/>
<title type="html"><![CDATA[Re: Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=181997#p181997"><![CDATA[
dobrze tylko co byś zrobił gdybyś miał przesyłać np dane do 5 rejestrów ?<br /><br />co uint64_t ?<br /><br />a jeśli do 12 rejestrów ? to ? ... nie ma nawet takiego typu w AVR<br /><br />więc to mało elastyczne rozwiązanie i trzeba jeszcze te przesunięcia banglować - hmm trochę bez sensu powiem szczerze<br /><br />czemu nie zrobisz tego przez tablicę? która może mieć tyle bajtów ile zechcesz<br /><br />a w środku funkcji pętla która za jednym zamachem wysyła wszystkie bajty po kolei<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lut 2017, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OskarQ1]]></name></author>
<updated>2017-02-07T20:13:14+01:00</updated>
<published>2017-02-07T20:13:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=181996#p181996</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=181996#p181996"/>
<title type="html"><![CDATA[Moduł SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17564&amp;p=181996#p181996"><![CDATA[
Witam mam pytanie dotyczące sprzętowej obsługi modułu SPI.<br /><br />Aktualnie zapoznaję się z tym modułem ponieważ będzie mi potrzebny do projektu. Podstawy mam w miarę ogarniete, A więc połączyłem kaskadowo cztery 8-bitowe rejestry przesuwne, mózgiem jest ATmega16A taktowany wewnętrznym oscylatorem 8Mhz, pod każdy pin wyjściowy rejestru przesuwnego mam podpięte diody RGB oraz zwykłe diody LED. Celem jest przesówanie się jedenej świecącej diody od najmłodszego bitu do najstarszego i spowrotem, oglądałem poradnik pana Mirka na temat rejestrów przesuwnych i postanowiłem zrobić to na 4 rejestrach. Pytanie brzmi czy dobrze napisałem funkcję wysyłania bitów<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">void SendSpiWorD(uint32_t word)<br />{<br />   SPDR = word&gt;&gt;24; // Przypisanie danych do rejestru danych Spi<br />   while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br /><br />   SPDR = word&gt;&gt;16; // Przypisanie danych do rejestru danych Spi<br />   while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br /><br />   SPDR = word&gt;&gt;8; // Przypisanie danych do rejestru danych Spi<br />   while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br /><br />   SPDR = word&gt;&gt;0; // Przypisanie danych do rejestru danych Spi<br />   while(!(SPSR &amp; (1&lt;&lt;SPIF) ) ); // Czekamy aż zostanie wysłany ostatni bit<br /><br />   LT_ON; <br />   LT_OFF;  // Zatrzask <br />   <br />}</div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=13373">OskarQ1</a> — 7 lut 2017, o 20:13</p><hr />
]]></content>
</entry>
</feed>