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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-01T11:50:33+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=6058&amp;mode</id>
<entry>
<author><name><![CDATA[1bobik1]]></name></author>
<updated>2014-03-01T11:50:33+01:00</updated>
<published>2014-03-01T11:50:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=72553#p72553</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=72553#p72553"/>
<title type="html"><![CDATA[Re: MS5541 i transmisja po SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=72553#p72553"><![CDATA[
Witam ponownie<br />Ruszyłem trochę temat więc odgrzewam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Za pomocą analizatora stanów sprawdziłem czy dobrze generuję MCLK iSCLK - jest ok<br />Zacząłem po kolei sprawdzać jak przebiegają funkcje związane z SPI<br /><br />Reset wygląda dobrze:<br /><a href="http://forum.atnel.pl/_obrazki/o/464/82c707190fde9a43c5008a7156a34e7e.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/464/82c707190fde9a43c5008a7156a34e7e.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/464/3d2261e51d1698be7b8a639677a9d688.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/464/3d2261e51d1698be7b8a639677a9d688.jpg" alt="Obrazek" /></a><br /><br />następnie funkcja MS5541_GET_WORDS()<br /><br />[syntax=c]void MS5541_GET_WORDS(CALIBRATION_WORDS *WORDS){<br /><br />MS5541_SEND(READ_WORD1);<br />WORDS-&gt;Word1=MS5541_RECIVE();<br /><br />MS5541_SEND(READ_WORD2);<br />WORDS-&gt;Word2=MS5541_RECIVE();<br /><br />MS5541_SEND(READ_WORD3);<br />WORDS-&gt;Word3=MS5541_RECIVE();<br /><br />MS5541_SEND(READ_WORD4);<br />WORDS-&gt;Word4=MS5541_RECIVE();<br /><br />}[/syntax]<br /><br />MS5541_SEND():<br />[syntax=c]void MS5541_SEND(uint16_t word){<br /><br />MS5541_SPI_init();<br />uint8_t bajt = word;    //mĹ‚odzsze pol slowo<br />SendSpi(bajt);<br />bajt = word&gt;&gt;8;         //starsze pol slowo<br />SendSpi(bajt);<br /><br />}[/syntax]<br />MS5541_RECIVE():<br />[syntax=c]uint16_t MS5541_RECIVE( void ){<br /><br />SPCR |= (1&lt;&lt;CPHA);<br />SPCR &amp;= ~(1&lt;&lt;DORD);<br /><br />uint16_t word;<br />word= ReciveSpi()&lt;&lt;8;//odbior starszej poĹ‚Ăłwki<br />word|=ReciveSpi();   //odbior mĹ‚odszej poĹ‚Ăłwki<br />SPI_OFF;<br />return word;<br />}[/syntax]<br /><br />Send recive SPI:<br /><br />[syntax=c]void SendSpi( uint8_t bajt ) {<br />SPDR = bajt;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)) );<br />}<br /><br />uint8_t ReciveSpi( void ) {<br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />return SPDR;<br />}[/syntax]<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/464/32c079c239ac2dca50898ed268ef0211.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/464/32c079c239ac2dca50898ed268ef0211.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/464/9e0bb6f35c4f1686b0f9fc6a93a77065.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/464/9e0bb6f35c4f1686b0f9fc6a93a77065.jpg" alt="Obrazek" /></a><br /><br />Jak widać z przebiegu SCLK przestaje tykać przed funkcją MS5541_RECIVE.<br />Wyjaśni mi ktoś dlaczego tak się dzieje ?<br /><br />Już jasno nie zerowałem rejestru SPDR przed odebraniem... <br /><br />tak to teraz wygląda:<br />[syntax=c]uint8_t ReciveSpi( void ) {<br />SPDR=0;<br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />return SPDR;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=464">1bobik1</a> — 1 mar 2014, o 11:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[1bobik1]]></name></author>
<updated>2014-02-18T22:33:31+01:00</updated>
<published>2014-02-18T22:33:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=71051#p71051</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=71051#p71051"/>
<title type="html"><![CDATA[Re: MS5541 i transmisja po SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=71051#p71051"><![CDATA[
Mój błąd...<br />Schematu nie mam bo jest to banalne połączenie więc rozpiszę co i jak:<br /><br />MS5541:<br /><br />SCLK---- PB5(SCK)<br />GND-----GND<br />VDD-----3.3V<br />MCLK----PB1(OC1A) (PWM)<br />DIN------PB3(MOSI)<br />DOUT----PB4(MISO)<br />między VDD a GND wpięty kondensator tantalowy 47uF<br /><br />Wyświetlacz:<br /><br />VDD-----3.3V<br />SCLK----PB5(SCK)<br />SDIN----PB3(MOSI)<br />D/C-----PB6<br />SCE-----PB2(SS)<br />GND----GND<br />RES-----PB0<br />(wyświetlacz działa, na nim debuguję program)<br /><br />Jak widać wyśw i czujnik korzystają z jednego SPI przez co muszę dłubać w rejestrze SPCR <br />W głównym programie na zmianę używa się funkcji do czujnika i wyświetlacza więc standardowe inicjowanie nie ma sensu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=464">1bobik1</a> — 18 lut 2014, o 22:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[charsz]]></name></author>
<updated>2014-02-18T21:14:01+01:00</updated>
<published>2014-02-18T21:14:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=71043#p71043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=71043#p71043"/>
<title type="html"><![CDATA[Re: MS5541 i transmisja po SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=71043#p71043"><![CDATA[
Pokaz schemat jak to podlaczyles, zajrzalem pobieznie do kodu i wietrze problem w polaczeniach. <br />W kodzie na pewno jest tez problem z tym ze czesto dlubiesz w rejestrze SPCR nadpisujac ustawienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=926">charsz</a> — 18 lut 2014, o 21:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[1bobik1]]></name></author>
<updated>2014-02-18T14:28:50+01:00</updated>
<published>2014-02-18T14:28:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=70989#p70989</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=70989#p70989"/>
<title type="html"><![CDATA[MS5541 i transmisja po SPI]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6058&amp;p=70989#p70989"><![CDATA[
Witam<br /><br />Od jakiegoś czasu piszę bibliotekę do czujnika MS5541<br />DS <a href="http://media.digikey.com/pdf/Data%20Sheets/Measurement%20Specialties%20PDFs/MS5541-CM.pdf"  class="postlink">http://media.digikey.com/pdf/Data%20Sheets/Measurement%20Specialties%20PDFs/MS5541-CM.pdf</a><br />Pisanie zaczynałem od stworzenia zmiennych potem były obliczenia(obliczenia przeprowadzałem na przykładzie z DSa- wszystko obliczane jest prawidłowo) na koniec zostawiłem funkcje do wysyłania i odbierania po SPI i obsługę PWMa odpowiedzialnego za taktowanie czujnika.<br />Niestety nie mam jak sprawdzić czy dobrze ustawiłem SPI i PWM a doświadczenie moje w tym temacie jest znikome.<br />Testy z czujnikiem zacząłem wczoraj i natrafiłem na problem z którym sam raczej sobie nie poradzę.<br />Cały projekt dodaję jako załącznik.<br /><br />Do wyświetlania wyników używam wyświetlacza z nokii 3310 (SPI)<br />Biblioteka do niego pochodzi ze strony: <a href="http://www.dharmanitech.com/2008/10/thermometer-design-using-ds1621.html"  class="postlink">http://www.dharmanitech.com/2008/10/thermometer-design-using-ds1621.html</a><br />Przerobiłem ją nieco do swoich potrzeb, dodałem funkcję do wyświetlania INTów, i zmieniłem inicjowanie SPI tak by działało jednocześnie z innymi urządzeniami SPI<br /><br />Niestety program zawiesza się w miejscu:<br /><br />[syntax=c]LCD_init();<br /> LCD_clear();<br /> LCD_gotoXY (0,0);<br /> LCD_writeString_F(&quot;Start...&quot;);<br /><br />MS5541_Init();<br />MS5541_START_MCLK;<br />MS5541_RESET();<br />MS5541_GET_WORDS(&amp;words);   // tu jest zawias<br />//MS5541_CALC_DATA(&amp;data, &amp;words);[/syntax]<br /><br />Wg mnie program zawiesza się w funkcji MS5541_RECIVE() a dokładniej na  [syntax=c]while( !(SPSR &amp; (1&lt;&lt;SPIF)) );[/syntax]<br />ale to są tylko moje przypuszczenia.<br /><br />Zdaję sobie sprawę że babranie się w czyimś kodzie nie jest najprzyjemniejszą rzeczą, więc na początek proszę kogoś o sprawdzenie 3 rzeczy:<br /><br />1- czy PWM jest odpowiednio ustawiony do generowania częstotliwości 32.768 (nie jest to dokładnie tyle, ale odchyłka jest dopuszczalna) na pinie OC1A (PB1)<br />2- czy generowanie tej częstotliwości włącza się tak: [syntax=c]TCCR1B |= (1&lt;&lt;CS10)[/syntax] a wyłącza tak: [syntax=c]TCCR1B &amp;= ~(1&lt;&lt;CS10)[/syntax]<br />3- czy dobrze zrozumiałem przebiegi z DS czujnika i odpowiednio inicjalizuję SPI do wysyłania i odbierania danych z MSa<br /><br />Myślę że błąd jest gdzieś tutaj i to proponuję sprawdzić najpierw, ale jestem początkujący więc mogę się mylić <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Dodam jeszcze że do swojej biblioteki dołożyłem parę dobrych rozwiązań z tej tu: [syntax=c]http://nrqm.ca/2013/01/avr-code-for-the-ms5541c-pressure-sensor/[/syntax]<br /><br />Pozdrawiam <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=464">1bobik1</a> — 18 lut 2014, o 14:28</p><hr />
]]></content>
</entry>
</feed>