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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2023-11-04T22:15:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=24575&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-04T22:15:17+01:00</updated>
<published>2023-11-04T22:15:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237578#p237578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237578#p237578"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237578#p237578"><![CDATA[
<div class="quotetitle">moscow napisał(a):</div><div class="quotecontent"><br />Być może dobrą pointą będzie cytat z Blue Booka - str. 365 liniki 12-13 od góry<br />&quot;Ty możesz korzystać z zapisu, który bardziej przypadnie ci do gustu&quot;<br /></div><br />Dlatego ja NIKOGO nie zamierzam przekonywać na siłę co chyba widzisz ... mam nadzieję, ale proszę uszanuj mój tok dydaktyki na tym forum nie polecaj tego do czego ja świadomie zniechęcam bo to zaciemnia obraz ok? Tylko o to chodzi a nie żebym ja tobie wmawiał że źle robisz jak tego używasz czy coś ok ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> tym bardziej że chyba się znamy mniej więcej i rozumiesz moje podejście do nauczania języka C embedded<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br /><div class="quotetitle">mario2015 napisał(a):</div><div class="quotecontent"><br />Zobacz listingi współczesnych programistów i wskaż firmy, które piszą kod w &quot;starym stylu&quot;, który i tak ciężko się czyta.<br /></div><br />BARDZO DOBRZE powiedziane ! <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=54">mirekk36</a> — 4 lis 2023, o 22:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-04T20:49:56+01:00</updated>
<published>2023-11-04T20:49:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237577#p237577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237577#p237577"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237577#p237577"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />&quot;Ty możesz korzystać z zapisu, który bardziej przypadnie ci do gustu&quot;<br /></div><br />I ja to rozumiem i na pewno Mirek.<br />Przyjrzyj się jednak, który kod jest wtedy czytelniejszy i nie chodzi o przyzwyczajenia.<br />Zobacz listingi współczesnych programistów i wskaż firmy, które piszą kod w &quot;starym stylu&quot;, który i tak ciężko się czyta.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 4 lis 2023, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2023-11-04T20:03:34+01:00</updated>
<published>2023-11-04T20:03:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237576#p237576</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237576#p237576"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237576#p237576"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">moscow napisał(a):</div><div class="quotecontent">3) Być może warto zastanowić się nad użyciem makr np. makra &quot;Byte Value&quot; _BV i zamiast pisać<br /></div><br />[...] toż ja walczę z nimi od Bluebooka a KAŻDY kto się z BB wychował na przesunięciach sam wie dlaczego tak to zwalczam - a tu proszę kolega moscow niefrasobliwie poleca <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... </div><br />Być może dobrą pointą będzie cytat z Blue Booka - str. 365 liniki 12-13 od góry <br />&quot;Ty możesz korzystać z zapisu, który bardziej przypadnie ci do gustu&quot;<br /><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=20760">moscow</a> — 4 lis 2023, o 20:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-04T18:35:44+01:00</updated>
<published>2023-11-04T18:35:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237575#p237575</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237575#p237575"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237575#p237575"><![CDATA[
Dokładnie Mirku. Tak jak piszesz, że to kocie BV() ja też ich nie nawidzę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 4 lis 2023, o 18:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-04T14:45:14+01:00</updated>
<published>2023-11-04T14:45:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237572#p237572</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237572#p237572"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237572#p237572"><![CDATA[
<div class="quotetitle">moscow napisał(a):</div><div class="quotecontent"><br />3) Być może warto zastanowić się nad użyciem makr np. makra &quot;Byte Value&quot; _BV i zamiast pisać<br /></div><br />O nie! że też ja tego nie zauważyłem <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> .... BARDZO ale to BARDZO proszę nie polecać na tym forum tych MEGA MEGA KOCICH makr, toż ja walczę z nimi od Bluebooka a KAŻDY kto się z BB wychował na przesunięciach sam wie dlaczego tak to zwalczam - a tu proszę kolega moscow niefrasobliwie poleca <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... Więc moja gorąca prośba - proszę tego więcej nie robić tu na forum ok? <br /><br />makra _BV() są kocie, mega nieczytelne, i zwykle oznaczają że ktoś kto się nimi posługuje ma troszkę problemy ze zrozumieniem przesunięć, no nie każdy wiadomo ale tak zwykle jest i tu nawet nie ma co dyskutować .<br /><br />A cieszę się, że koledze autorowi już weszły w krew przesunięcia i sam z obrzydzeniem jak widzę patrzy na kocie BV()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 lis 2023, o 14:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-04T11:15:39+01:00</updated>
<published>2023-11-04T11:15:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237571#p237571</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237571#p237571"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237571#p237571"><![CDATA[
Dzięki moscow. Z niektórych porad na pewno skorzystam, ponieważ słyszałem o nich ale normalnie w świecie o nich zapomniałem.<br />Nie skorzystam na pewno z pkt.3 , ponieważ do mnie bardziej przemawia taki zapis:<br />[syntax=c]SPSR |= (1&lt;&lt;SPI2X);[/syntax]<br />Tu od razu wiem, że w rejestrze SPSR ustawiam jedynkę w bicie SPI2X<br /><br />Mirku, tobie też dziękuję. Wujek google miałem właśnie na myśli ten tlanslator: <br /><a href="https://translate.google.pl/"  class="postlink">https://translate.google.pl/</a><br /> i nie jest on zbyt precyzyjny ale jest pomocny.<br />Na pewno sprawdzę ten drugi, który podałeś i chyba będę z niego korzystał.<br />Jeszcze raz dzięki i pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 4 lis 2023, o 11:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2023-11-03T22:11:38+01:00</updated>
<published>2023-11-03T22:11:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237570#p237570</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237570#p237570"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237570#p237570"><![CDATA[
<div class="quotetitle">mario2015 napisał(a):</div><div class="quotecontent"><br />powinno być dobrze ale kiepsko u mnie z angielskim a wujek google pomaga ale tylko troszeczkę<br /></div><br />Ale po co ci wujek google ? tzn wiadomo też się przydaje no ale przecież TYLE RAZY wszędzie przypominam o byle translatorach internetowych, i aż wstyd w dzisiejszych czasach z nich nie korzystać tym bardziej, jeśli nie zna się do końca angielskiego, eeeeeh ale proszę jeszcze raz, dwie stronki. Pierwsza to PODSTAWA PODSTAW<br /><br /><!-- m --><a class="postlink" href="https://translate.google.pl/" >https://translate.google.pl/</a><!-- m --> <br /><br />druga o wiele lepsza:<br /><br /><!-- m --><a class="postlink" href="https://www.deepl.com/translator" >https://www.deepl.com/translator</a><!-- m --><br /><br />więc na przyszłość - proszę nie pisz że nie masz jak dowiedzieć się o co chodzi w PDF po angielsku bo można sobie całą stronę skopiować z PDF i wrzucić do translatora. Lepszy techniczny jest ten drugi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 3 lis 2023, o 22:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2023-11-03T21:00:02+01:00</updated>
<published>2023-11-03T21:00:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237569#p237569</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237569#p237569"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237569#p237569"><![CDATA[
<div class="quotetitle">mario2015 napisał(a):</div><div class="quotecontent"><br />Chodziło mi tylko o sprawdzenie, czy taka inicjalizacja jest poprawna a moja funkcja wygląda tak:<br />}[/syntax]<br /></div><br />Z punktu widzenia technicznego - wygląda na to, że jest poprawnie - to znaczy sprawdziłem nawet parę podstawowych scenariuszy czy działa używając układu Max7219 i procka ATmega32. I u mnie działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br />Zrobiłem tylko taką modyfikację - akurat do swojego sprawdzenia:<br />[syntax=c]SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;CPOL);[/syntax]<br />Warto być może się zastanowić nad jakąś customizacją z tymi parametrami CPOL/CPHA (możliwość ich włączania) , bo po SPI dla każdego układu to może wyglądać inacze.<br /><br />PS. <br />Wiadomo - o gustach się nie dyskutuje, ale można by też zrobić nieco stylowego liftingu - jeśli będziesz miał ochotę skorzystać to niżej kilka uwag<br /><br />1) W definicjach warto użyć przedrostka który będzie mówił czego dotyczy definicja, zmienna itd.<br />zamiast <strong>CLK_DIV</strong> można użyć nazwy typu <strong>SPI_CLK_DIV</strong><br />W takim przypadku jak będziesz później dołączał jakiś inny kod, to bardziej precyzyjna nazwa sprawi, że są mniejsze szanse na konflikt definicji/zmiennych .<br /><br />2) Użycie zwykłego cyferka do definicji generalnie zadziała, ale mogą być kłopoty z czytelnościa - w przypadku wykorzystania takiego jak u Ciebie można się zastaowić nad rozwiązaniem w tym stylu<br />Zamiast używać &quot;#define CLK_DIV numerek&quot;  można spróbować zrobić kilka definicji zawczasu<br />[syntax=c]#define SPI_CLK_DIV_2 2<br />#define SPI_CLK_DIV_4 4<br />#define SPI_CLK_DIV_8 8<br />itd.<br />póżniej użyć np.<br />#define SPI_CLK_DIV SPI_CLK_DIV_2<br /><br />oraz<br />#if SPI_CLK_DIV == SPI_CLK_DIV_2<br />...<br />#endif[/syntax]<br />od razu widać co jest grane i czego dotyczy. Jeśli będzie to po prostu jakaś liczba nie związana do tego z wartością - za parę tygodni być może trzeba będzie przeczytać cały kod, żeby dojść o co chodziło (to znaczy zakładam, że wiele osób ma lepszą pamięć ode mnie, ale akurat u mnie to może nawet nie być parę tygodni <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /> )<br /><br />3) Być może warto zastanowić się nad użyciem makr np. makra &quot;Byte Value&quot; _BV i zamiast pisać<br />[syntax=c]SPSR |= (1&lt;&lt;SPI2X);<br />zrobić to tak<br />SPSR |= _BV(SPI2X);[/syntax]<br /><br />przynajmniej dla mnie tak jest czytelniek, bo wiemy jaka była intencja <br /><br />podobnie staram się robić kiedy mam jakąś operację w kodzie - zamiast używać bezpośrednio wartości - robię sobię definicje<br />[syntax=c]zamiast <br />uint8_t valHi = val &amp; 240;<br /><br />#define KMC_4_OUT_OF_8_BIT_MASK_HI 0xf0u<br />uint8_t valHi = val &amp;  KMC_4_OUT_OF_8_BIT_MASK_HI;<br /><br />zamiast <br />divided = val / 8;<br />lub<br />divded = val &gt;&gt; 3;<br /><br />#define KMC_DIV_BY_8 0x03u<br />divided = val &gt;&gt; KMC_DIV_BY_8[/syntax]<br /><br />widać od razu wtedy po kodzie o co koderowi chodziło.<br /><br />No dobra, bo się za bardzo rozpisałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /><br />Mam nadzieję, że to co napisałem wyżej bedzie pomocne <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 3 lis 2023, o 21:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-03T10:20:04+01:00</updated>
<published>2023-11-03T10:20:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237568#p237568</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237568#p237568"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237568#p237568"><![CDATA[
Nie chodzi o to, że coś mi nie działa.<br />Po prostu chcę sobie sam napisać tę bibliotekę, żeby lepiej wszystko zrozumieć, dlatego nie używam gotowca.<br />Podpieram się BB i poradnikami Mirka.<br />Co do instrukcji &quot;switch&quot;, to wkleiłem nie ten kod, bo ten właściwy mam na #if-ach.<br />Chodziło mi tylko o sprawdzenie, czy taka inicjalizacja jest poprawna a moja funkcja wygląda tak:<br />[syntax=c]void InitSpi(void)<br />{<br />//ustawienie kierunku wyjściowego dla linii MOSI, SCK i CS<br />DDRB |= (1&lt;&lt;MOSI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);<br />//aktywacja  SPI, tryb pracy Master<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR);<br /><br />#if CLK_DIV == 1<br />// dzielnik przez 2<br />SPSR |= (1&lt;&lt;SPI2X);<br />#endif<br />#if CLK_DIV == 2<br />// dzielnik przez 4<br />#endif<br />#if CLK_DIV == 3<br />// dzielnik przez 8<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0)<br />#endif<br />#if CLK_DIV == 4<br />// dzielnik przez 16<br />SPCR |= (1&lt;&lt;SPR0);<br />#endif<br />#if CLK_DIV == 5<br />// dzielnik przez 32<br />SPCR |= (1&lt;&lt;SPR1);<br />SPSR |= (1&lt;&lt;SPI2X);<br />#endif<br />#if CLK_DIV == 6<br />// dzielnik przez 64<br />SPCR |= (1&lt;&lt;SPR1);<br />#endif<br />#if CLK_DIV == 7<br />// dzielnik przez 128<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0);<br />#endif<br />#if CLK_DIV == 8<br />// dzielnik przez 64<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0);<br />SPSR |= (1&lt;&lt;SPI2X);<br />#endif<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 3 lis 2023, o 10:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[moscow]]></name></author>
<updated>2023-11-02T20:35:21+01:00</updated>
<published>2023-11-02T20:35:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237566#p237566</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237566#p237566"/>
<title type="html"><![CDATA[Re: SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237566#p237566"><![CDATA[
W teorii wygląda &quot;legitnie&quot;, choć użycie switch/case w przypadku kiedy wartość na wejściu w formie definicji może mieć niespecjalny sens (pewnie kompilator i tak to sobie zoptymalizuje, ale to inna sprawa).<br /><br />Z tym działaniem to warto sprawdzić, czy inicjalizacja nie powinna zawierać bitów CPOL i/lub CPHA.<br />Do końca nie wiem, co może u Ciebie nie działać, ale poniżej podaję swoje dwie funkcje, których użyłem do sterowania układem Max7219 / 72221 - może się przydadzą jako referencja <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><br /><br />[syntax=c]#include &lt;avr/sfr_defs.h&gt;<br />#include &lt;avr/io.h&gt;<br /><br />#define KM_SPI_DDR      -&gt; port SPI dla danego procka<br />#define KM_SPI_DDR_CS_OUT  -&gt; bit na porcie, który ma sterować CS<br />#define KM_SPI_PIN_SCK    -&gt; bit na porcie, na którym w procku jest sygnał SCK<br />#define KM_SPI_PIN_MOSI    -&gt; bit na porcie, na którym w procku jest sygnał MOSI<br /><br />#define KM_SPI_PINS_SENDER(_BV(KM_SPI_PIN_SCK) | _BV(KM_SPI_PIN_MOSI))<br /><br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_4_A(KMC_ALL_BITS_CLEARED)<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_4_B(KMC_ALL_BITS_CLEARED)<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_16_A(_BV(SPR0))<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_16_B(KMC_ALL_BITS_CLEARED)<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_64_A(_BV(SPR1))<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_64_B(KMC_ALL_BITS_CLEARED)<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_128_A(_BV(SPR0)|_BV(SPR0))<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_128_B(KMC_ALL_BITS_CLEARED)<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_2_AKM_SPI_MASTER_SPEED_FOSC_DIV_4_A<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_2_B(_BV(SPI2X))<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_8_AKM_SPI_MASTER_SPEED_FOSC_DIV_16_A<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_8_B(_BV(SPI2X))<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_32KM_SPI_MASTER_SPEED_FOSC_DIV_64_A<br />#define KM_SPI_MASTER_SPEED_FOSC_DIV_32_B(_BV(SPI2X))<br />#define KM_SPI_MASTER_MASK_AKM_SPI_MASTER_SPEED_FOSC_DIV_128_A<br />#define KM_SPI_MASTER_MASK_BKM_SPI_MASTER_SPEED_FOSC_DIV_32_B<br /><br />// użycie np: kmInitSpiSender_U(KM_SPI_MASTER_SPEED_FOSC_DIV_8_A, KM_SPI_MASTER_SPEED_FOSC_DIV_8_B); <br />void kmInitSpiSender_U(uint8_t clockRateA, uint8_t clockRateB) {<br />KM_SPI_DDR |= KM_SPI_PINS_SENDER;<br />KM_SPI_DDR_CS_OUT |= KM_SPI_MASK_CS_OUT;<br /><br />SPCR = _BV(SPE) | _BV(MSTR) | _BV(CPOL) | clockRateA;<br />SPSR = (SPSR &amp; ~KM_SPI_MASTER_MASK_B) | clockRateB;<br />}<br /><br />void kmSpiSenderPut2Bytes_U(const uint8_t deviceNo, const uint8_t data1, const uint8_t data2) {<br />    KM_SPI_PORT_CS_OUT &amp;= ~(_BV(KM_SPI_CS_0));<br />    SPDR = data1;<br />    loop_until_bit_is_set(SPSR, SPIF);<br />    SPDR = data2;<br />    loop_until_bit_is_set(SPSR, SPIF);<br />    KM_SPI_PORT_CS_OUT |= _BV(KM_SPI_CS_0);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20760">moscow</a> — 2 lis 2023, o 20:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mario2015]]></name></author>
<updated>2023-11-02T17:36:14+01:00</updated>
<published>2023-11-02T17:36:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237565#p237565</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237565#p237565"/>
<title type="html"><![CDATA[SPI-Konfiguracja ATmega32-sprawdzenie poprawności]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=24575&amp;p=237565#p237565"><![CDATA[
Witam wszystkich.<br />Chciałbym uruchomić sobie wyświetlacz ze sterownikiem ST7735S, który działa po SPI.<br />Problem polega na tym, że jeszcze nigdy nic &quot;sam&quot; nie robiłem po SPI. Zawsze gotowce.<br />Teraz chciałbym sobie napisać najprostszą bibliotekę SPI dla Atmega32 na podstawie BB i GB.<br />Nie po to aby wyważać otwarte drzwi, tylko, żeby to dobrze wszystko zrozumieć.<br />Mógłbym kupić profesjonalną bibliotekę Mirka, tyle tylko, że nie miał bym pojęcia jak to działa w środku.<br />Ja chcę to wszystko sprawdzić osobiście, żeby się tego nauczyć.<br />Chciałbym żeby mi ktoś sprawdził, czy funkcję, którą sobie napisałem do inicjalizacji SPI, ma prawo działać.<br />Chodzi o to, że w tej funkcji użyłem instrukcji SWITCH, która w zależności od zadanego parametru, ma ustawić szybkość magistrali.<br />Wszystko ma działać na sprzętowym SPI. Według noty pdf dla ATmega32, powinno być dobrze ale kiepsko u mnie z angielskim a wujek google pomaga ale tylko troszeczkę.<br />Poniżej mój kod do funkcji. Chodzi mi o inicjalizację SPI. Proszę o sprawdzenie.<br /><br />[syntax=c]#define CLK_DIV 1<br /><br />void InitSpi(void)<br />{<br />//ustawienie kierunku wyjściowego dla linii MOSI, SCK i CS<br />DDRB |= (1&lt;&lt;MOSI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);<br />//aktywacja  SPI, tryb pracy Master<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR);<br /><br />switch(CLK_DIV)<br />{<br />case 1:<br />{<br />// dzielnik przez 2<br />SPSR |= (1&lt;&lt;SPI2X);<br />}<br />break;<br /><br />case 2:<br />{<br />// dzielnik przez 4<br />}<br />break;<br /><br />case 3:<br />{<br />// dzielnik przez 8<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0);<br />}<br />break;<br /><br />case 4:<br />{<br />// dzielnik przez 16<br />SPCR |= (1&lt;&lt;SPR0);<br />}<br />break;<br /><br />case 5:<br />{<br />// dzielnik przez 32<br />SPCR |= (1&lt;&lt;SPR1);<br />SPSR |= (1&lt;&lt;SPI2X);<br />}<br />break;<br /><br />case 6:<br />{<br />// dzielnik przez 64<br />SPCR |= (1&lt;&lt;SPR1);<br />}<br />break;<br /><br />case 7:<br />{<br />// dzielnik przez 128<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0);<br />}<br />break;<br /><br />case 8:<br />{<br />// dzielnik przez 64<br />SPCR |= (1&lt;&lt;SPR1) | (1&lt;&lt;SPR0);<br />SPSR |= (1&lt;&lt;SPI2X);<br />}<br />break;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8867">mario2015</a> — 2 lis 2023, o 17:36</p><hr />
]]></content>
</entry>
</feed>