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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-06-06T14:56:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=3256&amp;mode</id>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-06-06T14:56:15+01:00</updated>
<published>2013-06-06T14:56:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38642#p38642</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38642#p38642"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38642#p38642"><![CDATA[
Nie potrzebnie sobie życie utrudniasz, ja bym zrobił to tak, podziel uint32_u na bufor 4x uint8_u:<br /><img src="http://forum.atnel.pl/_obrazki/o/248/f043eb5c142e40a925b30ac515d578c2.jpg" alt="Obrazek" /><br /><br />[syntax=c]uint8_u ADC_buff&#91;4&#93;;<br /><br />inline void SleepMode(buffer&#91;&#93;){<br />buffer&#91;3&#93; |= (1&lt;&lt;7);<br />}<br /><br />inline void StandbyMode(buffer&#91;&#93;){<br />buffer&#91;3&#93; &amp;= ~(1&lt;&lt;7);<br />}<br /><br />inline void PowerDownMode(buffer&#91;&#93;){<br />buffer&#91;3&#93; |= (1&lt;&lt;6);<br />}<br /><br />//chcesz ustawić SleepMode<br />SleepMode(ADC_buff);[/syntax]<br /><br />Dla takich prostych funkcji warto używać <strong>inline</strong>, kompilator zamiast wywoływać funkcję wstawi jej zawartość w miejscu wywołania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 6 cze 2013, o 14:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-06T14:31:02+01:00</updated>
<published>2013-06-06T14:31:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38638#p38638</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38638#p38638"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38638#p38638"><![CDATA[
No i kolejny raz wyszło jak to mało wiem, kombinowałem z wskaźnikami, ale za cholere mi to nie wychodziło.<br /><br />Teraz tylko wymyślić jak odwrócić kolejność, bez używania dodatkowych tablic i zmiennych <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Banalne (mam nadzieje, że to nie przypadek, że działa <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />)<br />[syntax=c]uint32_t temp = 0xFEDCBA98;<br />uint8_t *tmp = ((uint8_t*) &amp;temp)+3; // zwiększamy adres o 3 bajty w górę<br />lcd_locate(0,1);<br /><br />lcd_hex(*tmp--); // a teraz jedziemy w &quot;dół&quot; od MSB <br />lcd_hex(*tmp--);<br />lcd_hex(*tmp--);<br />lcd_hex(*tmp);[/syntax]<p>Statystyki: Napisane przez Gość — 6 cze 2013, o 14:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-06-06T14:24:29+01:00</updated>
<published>2013-06-06T14:24:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38637#p38637</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38637#p38637"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38637#p38637"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />No ale przy wysyłaniu po SPI trzeba to jakoś rozbić.......<br /></div><br /><br />Uparłeś się na uint32_t zamiast zrobić to na buforze, da się, proszę:<br /><br />[syntax=c]uint32_t temp = 0xFEDCBA98;<br />uint8_t *tmp = (uint8_t *) &amp;temp; <br /><br />uint8_t val1 = *tmp++;<br />uint8_t val2 = *tmp++;<br />uint8_t val3 = *tmp++;<br />uint8_t val4 = *tmp;[/syntax]<br /><br />AVR jest little endian więc pod val1 masz 0x89, pod val2 masz 0xBA, itd...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 6 cze 2013, o 14:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-06T13:44:24+01:00</updated>
<published>2013-06-06T13:44:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38634#p38634</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38634#p38634"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38634#p38634"><![CDATA[
No wszystko pięknie ładnie, ale po pierwsze ten kawałek kodu działa, zrobiłem go tylko jako przykład.<br /><br />Chodzi mi o to, że rejestr CS5532 jest 32bitowy tj. jak niżej<br /><a href="http://forum.atnel.pl/_obrazki/o/248/f043eb5c142e40a925b30ac515d578c2.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/248/f043eb5c142e40a925b30ac515d578c2.jpg" alt="Obrazek" /></a><br /><br />No i idąc dalej tym tropem, mając delfiny <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> wyprowadzone w ten sposób<br />[syntax=c]// Configuraton Register<br />#define PSS (1&lt;&lt;31)// Power Save Select - Sleep Mode (oscilator inactive)<br />#define _PSS ~(1&lt;&lt;31)// Standby Mode (oscilator active, allows quick power-up)<br /><br />#define PWD (1&lt;&lt;30)// Power Down Mode - Activate the power save select mode<br />#define _PWD ~(1&lt;&lt;30)// Normal Mode<br /><br />#define RS (1&lt;&lt;29)// Reset System<br />#define _RS ~(1&lt;&lt;29)// Normal Mode<br />#define ResetSystem CS5532ConfigReg |= RS // Activate a Reset cycle<br /><br />#define RV (1&lt;&lt;28)// READ ONLY!!!! System Was RESET<br /><br />#define IS (1&lt;&lt;27)// Input Short - All Signal input pairs for each chanel<br />// are disconnected and shorted internally<br />#define _IS (1&lt;&lt;27)// Normal Input<br /><br />#define GB (1&lt;26)// A0 output is modified to output common mode output voltage<br />// of the instrumentation amplifier (typ. 2.5V) the output latch<br />// select bit is ignored when the guard buffer is activated<br />#define _GB ~(1&lt;&lt;26)// Normal Operation of A0 as an output latch<br /><br />#define VRS (1&lt;&lt;25)// Voltage Reference Select 1V &lt;= Vref &lt;= 2.5V<br />#define _VRS ~(1&lt;&lt;25)// 2.5V &lt; Vref &lt;= &#91;(VA+) - (VA-)&#93;<br /><br />#define A0 (1&lt;&lt;24)// Output Latch Bits<br />#define A1 (1&lt;&lt;23)// The lach bits will be set to the logic state of these bits upon command<br />#define _A0 ~(1&lt;&lt;24)// word execution if the output latch select bit (OLS) is set. Note that these<br />#define _A1 ~(1&lt;&lt;23)// logic outputs are powered from VA+ and VA-<br /><br />#define OLS (1&lt;&lt;22)// Output Latch Select - When Set uses the configuration Register as the source of A1 and A0<br />// When low uses the Configuration Register as the source of A1 and A0<br />#define OGS (1&lt;&lt;20)// Offset Gain Select - Calibration register used are based of the CS1-CS0 bits<br />// Of the referenced Setup<br />#define _OGS ~(1&lt;&lt;20)// Calibration register used are based on the OG1-OG0 bits<br />// of the referenced Setup<br /><br />#define FRS (1&lt;&lt;19)// Filter Rate Select ON<br />// Scale all output word rates and their corresponding filter charecteristic by a factor of 5/6<br />#define FilterRateON CS5532ConfigReg |= FRS<br />// Use the default output word rates<br />#define FilterRateOFF CS5532ConfigReg &amp;= ~FRS[/syntax]<br />Dzięki temu, że mam rejestr 32bitowy mogę ustawić kilka rzeczy na raz, bez większych problemów.......<br />No ale przy wysyłaniu po SPI trzeba to jakoś rozbić.......<p>Statystyki: Napisane przez Gość — 6 cze 2013, o 13:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-06-06T13:33:32+01:00</updated>
<published>2013-06-06T13:33:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38633#p38633</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38633#p38633"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38633#p38633"><![CDATA[
A po co robisz przesunięcia?<br /><br />pracujesz na 8 bitowym rdzeniu, wykorzystaj to tak:<br />[syntax=c]//zamiast<br />//uint32_t temp = 0xFEDCBA98;<br />//zrób tak<br />uint8_t temp&#91;4&#93; = {0xFE, 0xDC, 0xBA, 0x98};<br />lcd_locate(0,1);<br />lcd_hex(tmp&#91;0&#93;);[/syntax]<br /><br />uint16_t i uint32_t należy używać praktycznie tylko przy mnożeniu i dzieleniu dużych liczb<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 6 cze 2013, o 13:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-06T13:12:33+01:00</updated>
<published>2013-06-06T13:12:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38630#p38630</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38630#p38630"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38630#p38630"><![CDATA[
No chodzi mi o to, że (przynajmniej dla mnie) sytacja w obu w/w przypadkach taka sama<br />tj. czy w pierwszym kodzie robimy przesunięcie<br />[syntax=c]uint32_t temp = 0xFEDCBA98;<br />uint8_t tmp = temp&gt;&gt;24;<br />lcd_locate(0,1);<br />lcd_hex(tmp);[/syntax]<br /><br />czy w drugim<br />[syntax=c]uint8_t temp;  // tu zrobiłem błąd wczesniej, bo ma być uint8_t<br />temp = CS5532ConfigReg &gt;&gt; 24;<br />SendSpi(temp);[/syntax]<br /><br />No a kompilator twierdzi co innego, no i w drugim przypadku wysyłane są tylko zera......mimo, że 29 bit jest ustawiony........<p>Statystyki: Napisane przez Gość — 6 cze 2013, o 13:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-06T13:06:36+01:00</updated>
<published>2013-06-06T13:06:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38629#p38629</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38629#p38629"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38629#p38629"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />No przecież w przykładowym kodzie, nie trzeba robić żadnych rzutowań, promocji do typu itp<br /></div><br /><br />A możesz tę myśl , swój pomysł rozwinąć ? bo ja kompletnie nie wiem o co chodzi ? tzn nigdy o tym nie słyszałem, że w jakichś tam przypadkach można robić rzutowania a w innych nie .... Skąd kompilator ma wiedzieć czy to kod przykładowy czy nie przykładowy ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... no chyba że coś źle zrozumiałem dlatego proszę o doprecyzowanie <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> — 6 cze 2013, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-06T13:13:21+01:00</updated>
<published>2013-06-06T12:56:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38628#p38628</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38628#p38628"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38628#p38628"><![CDATA[
Problemów ciąg dalszy, bo teraz w drugą stronę czyli rozbijamy 32bity na 4x8bit<br /><br />Tu tylko przykładowy kod by sprawdzić czy da się rozbić 32bitową &quot;liczbę&quot; na 4x 8bit wszystko ładnie działa nic się nie rzuca<br />[syntax=c]uint32_t temp = 0xFEDCBA98;<br />uint8_t tmp = temp&gt;&gt;24;<br />lcd_locate(0,1);<br />lcd_hex(tmp);<br />tmp = temp&gt;&gt;16;<br />lcd_locate(0,8);<br />lcd_hex(tmp);<br />tmp = temp&gt;&gt;8;<br />lcd_locate(1,0);<br />lcd_hex(tmp);<br />tmp = temp;<br />lcd_locate(1,8);<br />lcd_hex(tmp);[/syntax]<br /><br />No a w programie<br />gdzie CS5532.c<br />[syntax=c]uint32_t CS5532ConfigReg = 0;<br />//........<br />void ResetCS5532(void){<br />ResetSystem;<br />WriteConfRegCS5532(CS5532ConfigReg);<br />//........wiem strasznie kocia ta funkcja poniżej, ale dzięki temu mam jasną sytuację<br />//       co się dzieje w kodzie oraz co dokładnie jest wysyłane po SPI <br />//       (potem będę modyfikować, chociaż jeszcze nie wiem jak ;))<br /><br />        void WriteConfRegCS5532(uint32_t CS5532ConfigReg){ // Zapisz do Configuration Register<br />uint8_t temp;   // ma być uint8_t<br />temp = CS5532ConfigReg &gt;&gt; 24;<br />SendSpi(temp);<br />temp = CS5532ConfigReg &gt;&gt; 16;<br />SendSpi(temp);<br />temp = CS5532ConfigReg &gt;&gt; 8;<br />SendSpi(temp);<br />temp = CS5532ConfigReg;<br />SendSpi(temp);<br />}<br /><br />}[/syntax]<br />[syntax=c]#define RS (1&lt;&lt;29)// Reset System<br />#define _RS ~(1&lt;&lt;29)// Normal Mode<br />#define ResetSystem CS5532ConfigReg |= RS // Activate a Reset cycle[/syntax]<br /><br />Od razu wywala warnig DescriptionResourcePathLocationType<br />left shift count &gt;= width of type [enabled by default]CS5532.c/ADC_CS5532/CS5532line 105C/C++ Problem<br />No przecież w przykładowym kodzie, nie trzeba robić żadnych rzutowań, promocji do typu itp. <br />kompilator mnie chyba nie lubi <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Rejestr konfiguracji jest 32bitowy w CS5532 i najwygodniej było by się do niego odwoływać przez 32bitową zmienną,a nie <br />bawić sie w jakies tablice, po prostymi definami możemy sobie wszystkie potrzebne setupy załatwić i potem tylko<br />wpisywać za jednym razem do zmiennej 32bitowej............kurcze trzeba było jednak zostać przy analogówce i lampach <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />link do PDFa, Configuration Register jest na 26stronie opisany, jak by się komuś chciało zajrzeć.<br /><!-- m --><a class="postlink" href="https://docs.google.com/file/d/0B85u4HQMZYfIYUtmWGx6MlVBT2M/edit?usp=sharing" >https://docs.google.com/file/d/0B85u4HQ ... sp=sharing</a><!-- m --><p>Statystyki: Napisane przez Gość — 6 cze 2013, o 12:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-04T14:08:04+01:00</updated>
<published>2013-06-04T14:08:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38512#p38512</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38512#p38512"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38512#p38512"><![CDATA[
Dokładnie bo to jest naturalna droga <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> ... odczyt bajtu, a jak więcej to do bufora ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 cze 2013, o 14:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-06-04T13:16:01+01:00</updated>
<published>2013-06-04T13:16:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38511#p38511</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38511#p38511"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38511#p38511"><![CDATA[
Można tak:<br />[syntax=c]void ReadBufferSpi(uint8_t len, uint8_t *buff){<br />            PORTB &amp;= ~(1&lt;&lt;CS);<br />            /* Wait for reception complete */<br />            while (len--)){<br />                    while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />                    /* Return data register */<br />                    *buff++ = SPDR;<br />            }<br />            PORTB |= (1&lt;&lt;CS);<br />    }<br /><br />//używamy tego tak:<br />uint8_t data&#91;3&#93;;<br />ReadBufferSpi(sizeof(data),data);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 4 cze 2013, o 13:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-04T13:06:36+01:00</updated>
<published>2013-06-04T13:06:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38510#p38510</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38510#p38510"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38510#p38510"><![CDATA[
No to zobacz powołałeś tablicę jako zmienną lokalną, owszem po wyjściu z funkcji zanim coś się nie stanie na stosie to jeszcze dane w niej będą aktualne ale jak tylko coś (np kolejna funkcja) dobierze się do stosu to masz już pozamiatane ... więc albo tablica static albo globalna. A sposób rzeczywiście banalnie prosty wymyśliłeś jak widzisz <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 cze 2013, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-04T12:56:35+01:00</updated>
<published>2013-06-04T12:56:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38509#p38509</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38509#p38509"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38509#p38509"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent">Tylko, nie wiem, jak się zachowa CS5532, gdy będę 4razy zmieniał linie CS/ hmmm<br /></div><br /><br />to wtedy wystarczy wyjąć z funkcji do odbioru pojedynczego bajtu banglowanie CS'em i dać to wyżej ok? gdyby było coś nie tak</div><br /><br />Odpowiedziałem bez zastanowienia <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, przecież można zrobić for między sterowaniem CS/ <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Teraz walczę z wskaźnikiem do tablicy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />[syntax=c]uint8_t* ReadDWordSpi(void){<br />uint8_t DwordADC&#91;4&#93;;<br />uint8_t* wsk = DwordADC;<br /><br />PORTB &amp;= ~(1&lt;&lt;CS);<br />/* Wait for reception complete */<br />for(uint8_t i=0; i&gt;4; i++){<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />/* Return data register */<br />DwordADC&#91;i&#93; = SPDR;<br />}<br />PORTB |= (1&lt;&lt;CS);<br />return wsk;<br />}[/syntax]<p>Statystyki: Napisane przez Gość — 4 cze 2013, o 12:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-04T12:36:39+01:00</updated>
<published>2013-06-04T12:36:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38508#p38508</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38508#p38508"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38508#p38508"><![CDATA[
<div class="quotetitle">rezasurmar napisał(a):</div><div class="quotecontent"><br />Tylko, nie wiem, jak się zachowa CS5532, gdy będę 4razy zmieniał linie CS/ hmmm<br /></div><br /><br />to wtedy wystarczy wyjąć z funkcji do odbioru pojedynczego bajtu banglowanie CS'em i dać to wyżej ok? gdyby było coś nie tak<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 cze 2013, o 12:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-04T12:22:29+01:00</updated>
<published>2013-06-04T12:22:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38507#p38507</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38507#p38507"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38507#p38507"><![CDATA[
No tak coś mi się nie podobało, tj. wiedziałem że gdzieś dzwoni, ale nie wiedziałem gdzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />.<br /><br />Tylko, nie wiem, jak się zachowa CS5532, gdy będę 4razy zmieniał linie CS/ hmmm. Zrobię testy i przekażę co i jak.<br /><br />Dzięki Mirku.<p>Statystyki: Napisane przez Gość — 4 cze 2013, o 12:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-04T12:19:21+01:00</updated>
<published>2013-06-04T12:19:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38506#p38506</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38506#p38506"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38506#p38506"><![CDATA[
Panowie ale ja już niejednokrotnie pisałem na tym forum, że to całkowicie KARKOŁOMNA i wręcz wypaczona droga aby programując w C na 8 bitowcu, i chcąc odebrać coś czy wysłać w postaci kilku czy więcej bajtów zaczynać od &quot;rozbebeszania&quot; że tak powiem podstawowych funkcji do wysyłania pojedynczego bajtu <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> ... no kilka dni temu był iście podobny temat tyle że tam kolega pytał o przesyłanie 4 czy 8 bajtów za pomocą kodowania Manchester ... i zaczął podobnie .... <br /><br />tzn owszem dałoby radę to zrobić ale .... ale nie tędy droga w C <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />GIGANTYCZNĄ ZALETĄ w C jest to - że jak piszesz obsługę CZEGOKOLWIEK jakieś transmisji itp ... to zakoduj sobie w pamięci że ZAWSZE ale to ZAWSZE - PIERWSZY KROK to napisanie funkcji do odbierającej czy wysyłającej najmniejszy fragment zjadliwy dla twojego procka. Czyli np w 8-bitowcu będziesz pisał funkcję do wysyłania/odbierania pojedynczego bajtu, w 16-bitowym procku funkcję do transferu słowa a w ARM ? często do transferu podwójnego słowa<br /><br />A co później - a później to już ZAWSZE tak samo - gdy masz najmniejszy klocuszek LEGO to składasz z niego większą funkcję, po prostu wywołując w przypadku 8-bitowca 4-krotnie ten najmniejszy klocek <br /><br />to tyle odnośnie idei<br /><br />a teraz - oczywiście że przesunięcia są tu tak samo dobre jak unie - tyle że trzeba jedno i drugie dobrze zakodować. Tzn ta twoja funkcja<br /><br />ReadDWordSpi()<br /><br />nie działa z prostego powodu .... o czym za chwilę - ale pomyśl sobie - gdybyś miał za chwilę z jakiegoś innego układu po SPI odebrać nie 4 a 8 bajtów to co ? pisałbyś funkcję do odbioru zmiennej 64-bitowej ? ... ok a jeśli miałbyś odebrać 12 bajtów to co? ... to QUNIEC tak ? nie ma większych zmiennych ... ?<br /><br />dlatego podpowiem ci co robisz źle w tej swojej funkcji ale na prawdę uwierz mi - przerób ją tak żeby 4 razy wywołać funkcję odbioru jednego bajtu - pomyśl - przecież już przez to zaoszczędzisz niepotrzebnemu traceniu pamięci FLASH ok ???<br /><br />a teraz dlaczego masz kłopot z przesunięciami - tak na szybko i na oko - bo pewnie znowu (piszę znowu bo już chyba kiedyś też miałeś z tym problem - ale zwróciłem ci uwagę i poradziłeś sobie a teraz pewnie zapomniałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ) ... otóż zapomniałeś o tym:<br /><br /><!-- m --><a class="postlink" href="http://atnel.pl/domyslna-promocja-do-typu-int.html" >http://atnel.pl/domyslna-promocja-do-typu-int.html</a><!-- m --><br /><br />a u ciebie - hmm sam się przyjrzyj pod tym kątem tej linijce w swojej funkcji:<br /><br />DwordADC = SPDR &lt;&lt; 24;<br /><br />i myślę że od razu dostrzeżesz co w niej się złego dzieje <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ale jak nie to pytaj śmiało dalej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 cze 2013, o 12:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-06-04T11:56:55+01:00</updated>
<published>2013-06-04T11:56:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38503#p38503</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38503#p38503"/>
<title type="html"><![CDATA[Re: Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38503#p38503"><![CDATA[
Uważam że przesunięcia o wielokrotność 8 nie mają sensu, lepiej jest podać adres większy o 1.<br /><br />lub użyć uni<br /><br /><strong>UWAGA: Nie tesotwałem tego na AVR !!!</strong><br /><br />[syntax=c]union bufor{<br />uint32_t z32bit;<br />uint8_t z8bit&#91;4&#93;;<br />};<br /><br />// używamy tego tak:<br />bufor.z32bit = &lt;liczba 32 bit&gt;;<br />uint8_t a = bufor.z8bit&#91;0&#93;;<br />uint8_t b = bufor.z8bit&#91;1&#93;;<br />uint8_t c = bufor.z8bit&#91;2&#93;;<br />uint8_t d = bufor.z8bit&#91;3&#93;;[/syntax]<br /><br /><strong>UWAGA: Nie tesotwałem tego na AVR !!!</strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 4 cze 2013, o 11:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-06-04T11:27:07+01:00</updated>
<published>2013-06-04T11:27:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38502#p38502</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38502#p38502"/>
<title type="html"><![CDATA[Składanie liczby 32bitowej z 4 liczb 8bitowych]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3256&amp;p=38502#p38502"><![CDATA[
Witam i jak zwykle mam dziwny problem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Mam ci ja przetwornik CS5532, który po dostarczeniu do niego 8bitowego rozkazu, wysyła 32bitową zmienną po SPI, abstrahując że SPI w AVR jest 8bitowe, próbuję jakoś złożyć tą daną do jednej 32bitowej (lub 24bitowej, bo 24bity ma sama wartość ADC, reszta to bity kontrolne)<br /><br />[syntax=c]uint32_t ReadDWordSpi(void){<br />uint32_t DwordADC = 0;<br />PORTB &amp;= ~(1&lt;&lt;CS);<br />/* Wait for reception complete */<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />/* Return data register */<br />DwordADC = SPDR &lt;&lt; 24;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />/* Return data register */<br />DwordADC = SPDR &lt;&lt; 16;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />/* Return data register */<br />DwordADC = SPDR &lt;&lt; 8;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />/* Return data register */<br />DwordADC = SPDR;<br />}[/syntax]<br /><br />Niestety z racji tego że następuje rzutowanie typów bo SPDR jest 8bitowy, nic co ponad 16bit nie chce mi działać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br /><br />Tu przykład jak testuje czy mi działa to składanie 8bitowych na 32bit<br /><br />[syntax=c]uint32_t t2 = 0x12, t3 = 0x34, t4 = 0x56, t5 = 0x76;<br />uint32_t temp, temp1;<br />temp = ( (t2&lt;&lt;24) | (t3&lt;&lt;16) | (t4&lt;&lt;8) | (t5) );<br />lcd_locate(1,4);<br />lcd_hex(temp1 = temp &gt;&gt; 16);<br />lcd_locate(1,8);<br />lcd_hex(temp);[/syntax]<br />Niestety biblioteki LCD nie są przewidziane na tak duże liczby (łykają tylko max 16bit , stąd te dziwne złożenie).<br /><br />W przykładowym kodzie obsługi CS5532 wykorzystywane jest tylko 16bitów (przynajmniej tak wynika z analizy) kod jest pisany co najmniej dziwnie, bo i komentarze są po ichniemu <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br />[syntax=c]#include &lt;iom128v.h&gt;<br />#include &lt;macros.h&gt;<br />/*CS5532ĎŕąŘ¶¨Ňĺ*/<br />#define cs5532_clk_h           (PORTB|=(1&lt;&lt;PB1))<br />#define cs5532_clk_l           (PORTB&amp;=~(1&lt;&lt;PB1))<br />#define cs5532_cs_h            (PORTB|=(1&lt;&lt;PB0))<br />#define cs5532_cs_l            (PORTB&amp;=~(1&lt;&lt;PB0))<br />#define cs5532_in_h            (PORTB|=(1&lt;&lt;PB2))<br />#define cs5532_in_l            (PORTB&amp;=~(1&lt;&lt;PB2))<br />#define cs5532_out             (PINB&amp;0x08)<br /><br />void cs5532_write(unsigned char write_cs5532data);<br />unsigned char  cs5532_read(void);<br />void cs5532_start(void);<br />void cs5532_clear_over(void);<br />unsigned char  cs5532_check_over(void);<br />void cs5532_start_one(void);<br />void cs5532_start_two(void);<br />unsigned int cs5532_read_ad(void);<br />void cs5532_format(unsigned char  chanel_one,unsigned char  chanel_two);<br />extern void delay(unsigned char d_ln);<br />unsigned int cs5532_read_ad(void)<br />{<br />    unsigned int return_data;<br />    unsigned char temp_data;    <br />    cs5532_clear_over();<br />    return_data=cs5532_read();<br />    return_data&lt;&lt;=8;<br />    return_data+=cs5532_read();<br />    temp_data=cs5532_read();<br />    temp_data=cs5532_read();<br />    return (return_data);<br />}<br />void cs5532_write(unsigned char write_cs5532data)<br />{<br />cs5532_cs_l;<br />    /*asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);*/<br />SPDR=write_cs5532data;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />    /*asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);*/<br />cs5532_cs_h;<br />}<br />unsigned char cs5532_read(void)<br />{<br />    cs5532_cs_l;<br />    /*asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);*/<br />SPDR=0xFF;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />return SPDR;<br />/*asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);*/<br />SPSR=0x00;<br />cs5532_cs_h;<br />}<br />void cs5532_start(void)<br />{<br />    unsigned char i,j;<br />    unsigned char write_data;<br />    write_data=0xFF;<br />    for(i=0;i&lt;15;i++)<br />{<br />    cs5532_write(write_data);<br />}<br />    write_data=0xFE;<br />    cs5532_write(write_data);<br />}<br /><br />void cs5532_clear_over(void)<br />{<br />    cs5532_write(0x00);<br />}<br />unsigned char cs5532_check_over(void)<br />{<br />    unsigned char return_data;<br />    cs5532_cs_h;<br />    asm(&quot;nop&quot;);<br />    cs5532_clk_l;<br />    asm(&quot;nop&quot;);<br />    asm(&quot;nop&quot;);<br />    cs5532_cs_l;<br />    asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />asm(&quot;nop&quot;);<br />    return_data=cs5532_out;<br />return_data&gt;&gt;=3;<br />    cs5532_cs_h;<br />    return (return_data);<br />}<br /><br />void cs5532_start_one(void)<br />{<br />    unsigned char write_data;<br />    write_data=0x80;<br />    cs5532_write(write_data);<br />}<br /><br />void cs5532_start_two(void)<br />{<br />    unsigned char write_data;<br />    write_data=0x88;<br />    cs5532_write(write_data);<br />}<br /><br />void cs5532_format(unsigned char chanel_one,unsigned char chanel_two)<br />{<br />    unsigned char i;<br />    unsigned char write_data;<br />    unsigned char read_data;<br />    unsigned char cs5532_rst;<br />    write_data=0x03;         /*Đ´ĹäÖĂĽÄ´ćĆ÷*/<br />    cs5532_write(write_data);<br />    write_data=0x20;         /*Ľ¤»îŇ»¸ö¸´Î»ÖÜĆÚ*/<br />    cs5532_write(write_data);<br />    for(i=0;i&lt;3;i++)<br />{<br />    write_data=0x00;<br />    cs5532_write(write_data);<br />}<br />write_data=0x0B;     /*¶ÁĹäÖĂĽÄ´ćĆ÷*/<br />cs5532_write(write_data);<br />read_data=cs5532_read();<br />cs5532_rst=read_data;<br />read_data=cs5532_read();<br />read_data=cs5532_read();<br />read_data=cs5532_read();<br />    while(cs5532_rst &amp; 0x10)<br />    {<br />    write_data=0x0B;     /*¶ÁĹäÖĂĽÄ´ćĆ÷*/<br />    cs5532_write(write_data);<br />    read_data=cs5532_read();<br />    cs5532_rst=read_data;<br />    read_data=cs5532_read();<br />    read_data=cs5532_read();<br />    read_data=cs5532_read();<br />}<br />    write_data=0x03;          /*Đ´ĹäÖĂĽÄ´ćĆ÷*/<br />    cs5532_write(write_data);<br />    for(i=0;i&lt;4;i++)<br />{<br />    write_data=0x00;      /*˛ÎżĽµçŃąÎŞ5·üŁ¬ČçÎŞ2.5·üÔň02H*/<br />    cs5532_write(write_data);<br />}<br />    write_data=0x05;         /*ÉčÖĂÍ¨µŔÉčÖĂĽÄ´ćĆ÷*/<br />    cs5532_write(write_data);<br />    cs5532_rst=chanel_one&amp;0x0f;<br />    cs5532_rst&lt;&lt;=4;<br />    chanel_one&gt;&gt;=4;<br />    chanel_one+=cs5532_rst;<br />    chanel_one&gt;&gt;=1;<br />    chanel_one|=0x05;        /*×ÖËŮÂĘ¸ßÎ»*/<br />    write_data=chanel_one;<br />    cs5532_write(write_data);<br />    write_data=0x40;         /*×ÖËŮÂĘµÍÎ»şÍÎďŔíÍ¨µŔ0*/<br />    cs5532_write(write_data);<br />    cs5532_rst=chanel_two&amp;0x0f;<br />    cs5532_rst&lt;&lt;=4;<br />    chanel_two&gt;&gt;=4;<br />    chanel_two+=cs5532_rst;<br />    chanel_two&gt;&gt;=1;<br />    chanel_two|=0x45;        /*×ÖËŮÂĘ¸ßÎ»*/<br />    write_data=chanel_two;<br />    cs5532_write(write_data);<br />    write_data=0x41;         /*×ÖËŮÂĘµÍÎ»şÍÎďŔíÍ¨µŔ1*/<br />    cs5532_write(write_data);<br />    cs5532_start_one();<br />}[/syntax]<p>Statystyki: Napisane przez Gość — 4 cze 2013, o 11:27</p><hr />
]]></content>
</entry>
</feed>