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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-05-28T13:26:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=31&amp;t=3207&amp;mode</id>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-05-28T13:26:57+01:00</updated>
<published>2013-05-28T13:26:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37892#p37892</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37892#p37892"/>
<title type="html"><![CDATA[Re: Gdzie robię błąd......SPI ;)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37892#p37892"><![CDATA[
No masz rację, ale i tak chwilowo nie wykorzystuje sterowania CSem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br />A program nadal się wiesza po wejściu do podprogramu np. CS5532_start_one, czy nawet testowego wysłania<br />SendSpi(0xaa);<br /><br />Coś ewidentnie spieprzyłem.......<br /><br />Przed chwilą przetestowałem twoją lekcję z książki o SPI, no i tam działa, SPI naparza danymi aż miło.<br /><br />Du...pa robię od zera......<p>Statystyki: Napisane przez Gość — 28 maja 2013, o 13:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-05-28T13:22:18+01:00</updated>
<published>2013-05-28T13:22:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37891#p37891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37891#p37891"/>
<title type="html"><![CDATA[Re: Gdzie robię błąd......SPI ;)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37891#p37891"><![CDATA[
po pierwsze wyrzuć ze swoich funkcji SendSPI() tą linię:<br /><br />[syntax=c]/* odczekanie 1 us – czas trwania impulsu LE */<br />        _delay_us(1);[/syntax]<br /><br />bo ona była że tak powiem demonstracyjnie - ale nie trzeba tego oczekiwania<br /><br />z tym że to nie jest powód tego problemu - nie mniej jednak strasznie spowalnia ci to transmisję SPI <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />----------------------<br /><br />druga sprawa - nie wiem jak tam ten twój układ ale coś mi się nie podoba co ty wyprawiasz z pinem CS <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ..... tzn mogę się mylić ale zwykle CS gdy Slave nie jest wybrany jest w stanie wysokim, a jego wybór sprowadza się do podania stanu niskiego ... przed zapisem a po zapisie przywrócenie wysokiego. Ale jak mówię mogę się mylić - szczegóły masz w swojej nocie PDF scalaka. Chodzi mi o tą funkcję:<br /><br />[syntax=c]void CS5532_write (uint8_t write_cs5532data){<br />        PORTB |= (1&lt;&lt;CS);<br /> <br />        SPDR = write_cs5532data;<br />        while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />        PORTB &amp;= ~(1&lt;&lt;CS);<br />}[/syntax]<br /><br />czy nie powinno być tak???<br /><br />[syntax=c]void CS5532_write (uint8_t write_cs5532data){<br />        PORTB &amp;= ~(1&lt;&lt;CS);  // &lt;----------------- zmiana<br /> <br />        SPDR = write_cs5532data;<br />        while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />        PORTB |= (1&lt;&lt;CS);  // &lt;----------------- zmiana<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 28 maja 2013, o 13:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-05-28T12:46:31+01:00</updated>
<published>2013-05-28T12:46:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37889#p37889</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37889#p37889"/>
<title type="html"><![CDATA[Re: Gdzie robię błąd......SPI ;)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37889#p37889"><![CDATA[
No połączenia mam na 100% dobre, bo jak pisałem na innym sofcie (dla MAX5231 działa) tj, SPI w ogóle startuje, a tu nic, nawet sie nie chce pojawić na SCK.......<br /><br />Zestaw ATB, sprawny, nic nie podłączone pod SPI, tj. tylko analizator stanów logicznych. Wgrywam w/w program nic, zero, zwis. Wgrywam biblioteke do MAX5231 działa.<br /><br />Ewidentnie błąd softu.<br /><br />A tak wyglądają przebiegi po resecie<br /><a href="http://forum.atnel.pl/_obrazki/o/248/1d00ef8002caec88f19b746f75a2e369.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/248/1d00ef8002caec88f19b746f75a2e369.jpg" alt="Obrazek" /></a><p>Statystyki: Napisane przez Gość — 28 maja 2013, o 12:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2013-05-28T12:41:38+01:00</updated>
<published>2013-05-28T12:41:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37888#p37888</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37888#p37888"/>
<title type="html"><![CDATA[Re: Gdzie robię błąd......SPI ;)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37888#p37888"><![CDATA[
Jak walczysz już pół dnia to kod pewnie jest poprawny. Sprawdź teraz połączenia, rezystory, itp. Ja ostatnio walczyłem z TWI i co się okazało że zamiast rezystorów 3k3 dałem 3R3 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Sprawdź też fusebity, czy zegar dobrze ustawiony, czy JTAG wyłączony itp.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 28 maja 2013, o 12:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Anonymous]]></name></author>
<updated>2013-05-28T12:20:42+01:00</updated>
<published>2013-05-28T12:20:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37886#p37886</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37886#p37886"/>
<title type="html"><![CDATA[Gdzie robię błąd......SPI ;)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3207&amp;p=37886#p37886"><![CDATA[
Walczę już dzisiaj pół dnia, a nawet ponad pół <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />.<br />Procesor sprawny, bo na poprzednich bibliotekach działa SPI, (tyle że są dla amtega644)<br />Teraz jest Atmega32 konfig niby dobry, ściągnięty albo z PDF, albo z książki Mirka, żadna wersja nie chce mi działać <br />Ewidentnie coś z SPI, puki nie nacisnę klawisza, dioda (debug <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />) miga, po naciśnięciu program staje......<br />Main<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 20-05-2013<br /> *      Author: Sylwester Taras<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br /><br />#include &quot;I2C_TWI/i2c_twi.h&quot;<br />#include &quot;Keys/keys.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;CS5532/CS5532.h&quot;<br /><br />#include &quot;common.h&quot;<br /><br />// DEBUG<br />// dioda LED<br />#define LED_PIN (1&lt;&lt;PD7)// definicja pinu do którego podłączona jest dioda<br />#define LED_TOG PORTD ^= LED_PIN// makrodefinicja – zmiana stanu diody<br />//#define LED_ON PORTD |= LED_PIN<br />//#define LED_OFF PORTD &amp;= ~LED_PIN<br /><br />volatile uint16_t Timer1, Timer2, Timer3, Timer4;<br /><br /><br />int main(void){<br />DDRD |= LED_PIN;<br />PORTC |= K_start_one | K_start_two;<br /><br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7);<br /><br /><br /><br />/* Timer2 – inicjalizacja przerwania co 10ms */<br />TCCR2 = (1&lt;&lt;WGM21);// tryb pracy CTC<br />TCCR2 = (1&lt;&lt;CS22)|(1&lt;&lt;CS20);// preskaler = 1024<br />OCR2 = 108;// przerwanie porównania co 10ms (100Hz)<br />TIMSK = (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br /><br /><br />lcd_init();<br />lcd_cls();<br />lcd_str_P(PSTR(&quot;Witam...&quot;));<br /><br />sei();<br />lcd_LED(1);<br />InitSpi();<br /><br />while(1){<br /><br />static uint8_t start_one, start_two;<br />SuperDebounce(&amp;start_one, &amp;PINC, K_start_one, 50, 200, StartOne, 0);<br />SuperDebounce(&amp;start_two, &amp;PINC, K_start_two, 50, 200, StartTwo, 0);<br />if( !Timer2 ){<br />Timer2 = 50;<br />//SendSpi(0xaa);<br />//CS5532_write(0xAA);<br />LED_TOG; //TEST<br />}<br />}<br /><br />}<br /><br />void StartOne(void){<br />CS5532_start_one();<br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;start one&quot;));<br />}<br /><br />void StartTwo(void){<br />CS5532_start_two();<br />lcd_locate(0,0);<br />lcd_str_P(PSTR(&quot;start two&quot;));<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />n = Timer3;/* 100Hz Timer1 */<br />if (n) Timer3 = --n;<br />n = Timer4;/* 100Hz Timer2 */<br />if (n) Timer4 = --n;<br />}[/syntax]<br /><br />CS5532.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;CS5532.h&quot;<br />#include &quot;../common.h&quot;<br />#include &quot;util/delay.h&quot;<br /><br />#include &quot;../LCD/lcd44780.h&quot;<br /><br />void InitSpi(void) {<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, prędkość zegara Fosc/64 */<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;SPR1);<br />}<br /><br /><br />void SendSpi( uint8_t bajt ) {<br />/* wysyłamy bajt do układu Slave */<br />SPDR = bajt;<br />/* czekamy aż zostanie wysłany ostatni bit */<br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br />/* zbocze narastające sygnału „Latch Clock” powoduje<br /> * przepisanie wartości rejestru do wyjść Qa - Qh */<br />PORTB |= (1&lt;&lt;CS);<br />/* odczekanie 1 us – czas trwania impulsu LE */<br />_delay_us(1);<br />/* przywracamy stan niski na linii LE dzięki czemu<br /> * podczas wysyłania następnego bajtu nie będą widoczne zmiany<br /> * na wyjściach Qa-Qh podczas przesuwania się rejestru do czasu<br /> * ponownego zatrzaśnięcia całego bajtu */<br />PORTB &amp;= ~(1&lt;&lt;CS);<br />}<br /><br />void CS5532_write (uint8_t write_cs5532data){<br />PORTB |= (1&lt;&lt;CS);<br /><br />SPDR = write_cs5532data;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF)));<br />PORTB &amp;= ~(1&lt;&lt;CS);<br />}<br /><br />void CS5532_start_one(void)<br />{<br />    uint8_t write_data;<br />    write_data=0x80;<br />    CS5532_write(write_data);<br />}<br /><br />void CS5532_start_two(void)<br />{<br />    uint8_t write_data;<br />    write_data=0x88;<br />    CS5532_write(write_data);<br />}[/syntax]<br /><br />CS5532.h<br />[syntax=c]/*<br /> * CS5532.h<br /> *<br /> *  Created on: 20-05-2013<br /> *      Author: Sylwester Taras<br /> */<br /><br />#ifndef CS5532_H_<br />#define CS5532_H_<br /><br />/* hardware SPI */<br />#define MOSI PB5//   &lt;---- (SER IN)<br />//#define MISO PB6// &lt;----<br />#define SCK PB7//   &lt;---- SHIFT CLOCK (SC)<br />#define CSPB0// &lt;---- LATCH CLOCK (LC)<br /><br /><br />void InitSpi(void);<br />void SendSpi(uint8_t bajt);<br />void CS5532_write (uint8_t write_cs5532data);<br />void CS5532_start_one(void);<br />void CS5532_start_two(void);<br /><br />#endif /* CS5532_H_ */[/syntax]<p>Statystyki: Napisane przez Gość — 28 maja 2013, o 12:20</p><hr />
]]></content>
</entry>
</feed>