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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-04-17T12:19:17+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18181&amp;mode</id>
<entry>
<author><name><![CDATA[jar800v]]></name></author>
<updated>2017-04-17T12:19:17+01:00</updated>
<published>2017-04-17T12:19:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18181&amp;p=187304#p187304</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18181&amp;p=187304#p187304"/>
<title type="html"><![CDATA[Wav Player Atmega328 problem z disk_initialize()]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18181&amp;p=187304#p187304"><![CDATA[
Cześć,<br />Mam problem z uruchomieniem wav playera z greenbooka na Atmedze 328. Aby rozwiać wątpliwości czytnik kart mam zrobiony na podstawie schematu Atb micro SD. Jest zrobiony dobrze ponieważ przykład z książki działa bardzo dobrze.<br />Sprawdzając debuggerem jednodiodowym (bardzo fajna metoda  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> )doszłem do miejsca w którym cały program się wiesza a jest to funkcja disk_inicjalize().<br /><br />Tak wygląda funkcja main.c (funkcje których nie modyfikowałem wyciąłem)<br />[syntax=c]/*<br /> * main.cF_CPU = 16MHz<br /> *<br /> *  Created on: 2011-11-11<br /> *       Autor: Miros�aw Karda�<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;PetitFS/diskio.h&quot;<br />#include &quot;PetitFS/pff.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br /><br />#define SD_ON PORTC &amp;= ~(1&lt;&lt;PC1)<br />#define SD_OFF PORTC |= (1&lt;&lt;PC1)<br /><br />#define SD_SLOT_EMPTY (PINC &amp; (1&lt;&lt;PC2))<br /><br />#define CS_ON PORTC &amp;= ~(1&lt;&lt;PC0)<br />#define CS_OFF PORTC |= (1&lt;&lt;PC0)<br /><br />#define USE44KHZ 0// 0 = pliki max 22,050kHz,    1 = pliki max 44,1kHz<br /><br />// obs�uga Timer0 z preskalerem = 8<br />#define TMR_START TCCR2B |= (1&lt;&lt;CS21)<br />#define TMR_STOP TCCR2B &amp;= ~(1&lt;&lt;CS21)<br />// obs�uga Timer0 z preskalerem = 64<br />#define TMR64_START TCCR2B |= (1&lt;&lt;CS21)|(1&lt;&lt;CS20)<br />#define TMR64_STOP TCCR2B &amp;= ~((1&lt;&lt;CS21)|(1&lt;&lt;CS20))<br /><br /><br />//*************** makra i zmienne na potrzeby obs�ugi PetitFAT<br />// prosz� pami�ta� tak�e o zmianie tych warto�ci w pliku mmc.c !!!!<br />#define SCK PB5<br />#define MOSI PB3<br />#define MISO PB4<br />#define CS PC0<br /><br /><br /><br /><br />//! **************** main() ***********************************************<br />int main(void) {<br /><br />//PORTB = 0xff;// podci�gni�cie PORTB do VCC<br /><br /><br />PORTB |= (1&lt;&lt;PB0);//klawisz next pullup<br /><br /><br />DDRC |= (1&lt;&lt;PC1);//sterowanie pwr karty sd<br />PORTC |= (1&lt;&lt;PC1);//wyłączenie karty sd<br /><br />PORTC |= (1&lt;&lt;PC2);//pullup card detect<br />DDRD |= (1&lt;&lt;PD0);<br />PORTD &amp;= ~(1&lt;&lt;PD0);<br />_delay_ms(500);<br />//DDRC = 255;// ca�y PORTC jako wyj�cie<br />//PORTC = 255;// zga� wszystkie diody<br /><br />//PORTD |= (1&lt;&lt;PD2)|(1&lt;&lt;PD3);// podci�gni�cie wyj��<br /><br /><br />//DDRA |= (1&lt;&lt;PA7);<br />//PORTA |= (1&lt;&lt;PA7); /* pod�wietlenie wy�wietlacza LCD */<br />//lcd_init();<br />//lcd_str(&quot;AVR WAV Player.&quot;);<br />//<br />//// definicje w�asnych znak�w na wy�wietlacz LCD<br />//lcd_defchar(0, cplay);<br />//lcd_defchar(1, cnext);<br /><br />// init SPI<br />DDRB |= (1&lt;&lt;MOSI)|(1&lt;&lt;SCK);<br />PORTB |= (1&lt;&lt;MOSI)|(1&lt;&lt;MISO)|(1&lt;&lt;SCK);<br />DDRC |= (1&lt;&lt;PC0);//cs<br />PORTC |= (1&lt;&lt;PC0);//cs<br /><br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR);<br />SPSR |= (1&lt;&lt;SPI2X);// masymalny zegar SCK<br /><br />// konfiguracja PWM (Timer1) no�na<br />TCCR1A = (1&lt;&lt;WGM10)|(1&lt;&lt;COM1A1)|(0&lt;&lt;COM1A0)|(1&lt;&lt;COM1B1);//|(1&lt;&lt;COM1B0);<br />TCCR1B = (1&lt;&lt;CS10);<br /><br />// konfiguracja Timer0 (samplowanie)<br />TCCR2A = (1&lt;&lt;WGM01);// tryb CTC<br />TIMSK2 = (1&lt;&lt;OCIE2A);// zezwolenie na przerwanie CompareMatch<br /><br />sei();// globalne zezwolenie na przerwania<br /><br />// **************** p�tla g��wna **********************************<br />while(1) {<br />CS_ON;<br />_delay_ms(100);<br />sd_pwr(0);// wy��czamy zasilanie karty SD<br />if( SD_SLOT_EMPTY ){<br />CS_OFF;<br />_delay_ms(100);<br />continue;// je�li karta niewykryta powr�t na pocz�tek while(1)<br />}<br /><br />sd_pwr(1);// W��CZAMY zasilanie karty SD<br /><br />//PORTD |= (1&lt;&lt;PD0);<br />if (pf_mount(&amp;Fs)) {<br />CS_OFF;<br />_delay_ms(100);<br />continue;/* Initialize FS */<br />}<br /><br /><br /><br />for (;;) {<br />if( SD_SLOT_EMPTY ) break;<br /><br />while(1){<br />//lcd_locate(1,0);<br />//lcd_str(&quot;PLAYING atnel.wav&quot;);<br /><br />if(play(&quot;atnel.wav&quot;))break;<br /><br />if( SD_SLOT_EMPTY ) break;<br />}<br />}<br /><br /><br /><br /><br /><br />}//end while1<br />}//end main<br />//********************************************************************************************<br /><br /><br />//***************** przerwanie TIMER0 - samplowanie ******************************************<br />ISR(TIMER2_COMPA_vect) {<br /><br />}<br /><br /><br /><br /><br />// ******************  funkcja  P L A Y  ********************************<br />static UINT play ( const char *fn ) {<br /><br />DWORD sz;<br />FRESULT res;<br /><br />if ((res = pf_open(fn)) == FR_OK) {<br /><br />sz = load_header();/* Load file header */<br />if (sz &lt; 256) return (UINT)sz;<br /><br />pf_lseek(0);<br /><br />pf_read(&amp;buf&#91;0&#93;&#91;0&#93;, BUF_SIZE , &amp;rb);// za�aduj pierwsz� cz�� bufora<br />pf_read(&amp;buf&#91;1&#93;&#91;0&#93;, BUF_SIZE , &amp;rb);// za�aduj drug� cz�� bufora<br /><br />if( !FLAGS.prescaler ) TMR_START;// start Timera0 (samplowanie) z<br />else TMR64_START;// preskalerem zale�nym od cz�stotliwo�ci<br /><br />DDRB  |= (1&lt;&lt;PB1)|(1&lt;&lt;PB2);// ustaw piny PWM1 (OC1A) oraz PWM2 (OC1B) jako wyj�cia WA�NE !!!<br /><br />#if USE44KHZ == 0<br />uint8_t ss=0,mm=0;<br />//uint16_t kdelay = 0;// zmienna pomocnicza do eliminacji drga�s styk�w<br />//uint8_t tab&#91;8&#93; = {0,1,3,7,15,31,63,127};// liniowa charakterystyka wsk. wysterowania<br />#endif<br /><br /><br />while(1) {<br />if( can_read ) {// je�li flaga ustawiona w obs�udze przerwania<br /><br />pf_read(&amp;buf&#91; nr_buf ^ 0x01 &#93;&#91;0&#93;, BUF_SIZE , &amp;rb);// odczytaj kolejny bufor<br />if( rb &lt; BUF_SIZE ) break;// je�li koniec pliku przerwij p�tl� while(1)<br /><br />// klawisz do zmiany utworu na nast�pny<br />if( !(PINB &amp; (1&lt;&lt;PB0)) ) break;<br /><br />#if USE44KHZ == 0<br />//PORTC = ~tab&#91;slupek/33&#93;;// obs�uga wsk. wysterowania<br /><br />// obliczanie czasu utworu<br />if(tick&gt;FLAGS.khz) {<br />ss++;<br />if(ss&gt;59) {<br />ss=0;<br />mm++;<br />if(mm&gt;59) mm=0;<br />}<br />tick=0;<br />}<br /><br />// klawisz nr1 do efekt�w<br />//if( !(PIND &amp; (1&lt;&lt;PD2)) ) {<br />//kdelay++;<br />//if(kdelay&gt;30) {<br />//if(sk1&lt;4) {<br />//sk1++;<br />//if(sk2&lt;13) sk2+=4;<br />//}<br />//kdelay = 0;<br />//}<br />//}<br />//<br />//// klawisz nr2 do efekt�w<br />//if( !(PIND &amp; (1&lt;&lt;PD3)) ) {<br />//kdelay++;<br />//if(kdelay&gt;30) {<br />//if(sk1&gt;-1) {<br />//sk1--;<br />//if(sk2&gt;4) sk2-=4;<br />//}<br />//kdelay = 0;<br />//}<br />//}<br /><br />//// wy�wietlanie informacji na LCD<br />//lcd_locate(0,6);<br />//lcd_str(&quot;&#91;&quot;);<br />//if(sk1&gt;=0) lcd_int(sk1);<br />//else lcd_str(&quot;*&quot;);<br />//lcd_str(&quot;&#93;&quot;);<br />//<br />//lcd_locate(0, 9);<br />//lcd_str(&quot;&lt;&quot;);<br />//if(mm&lt;10) lcd_str(&quot;0&quot;);<br />//lcd_int(mm);<br />//lcd_str(&quot;:&quot;);<br />//if(ss&lt;10) lcd_str(&quot;0&quot;);<br />//lcd_int(ss);<br />//lcd_str(&quot;&gt;&quot;);<br />#endif<br />can_read = 0;<br />}<br />}<br /><br />//lcd_cls();<br />//lcd_str(&quot;NEXT &quot;&quot;\x81&quot;&quot;          &quot;);// wy�wietl napis NEXT<br />//<br />//lcd_locate(0,8);<br />//uint8_t i;<br />//for(i=0; i&lt;8; i++) lcd_char(atnel&#91;i&#93;+5);<br /><br />DDRB  &amp;= ~((1&lt;&lt;PB1)|(1&lt;&lt;PB2));// ustaw piny PWM1 (OC1A) oraz PWM2 (OC1B) jako wej�cia WA�NE !!!<br /><br />if( !FLAGS.prescaler ) TMR_STOP;// wy��czenie Timera0 (samplowania)<br />else TMR64_STOP;<br /><br />//PORTC = 255;// wyzerowanie wsk. wysterowania<br /><br />_delay_ms(500);// przerwa 0,5s<br />}<br /><br />return res;<br />}<br /><br /><br />/*<br /> * FUNKCJA Programowego w��czania i wy��czania zasilania do karty<br /> * pami�ci MMC/SD w zestawach uruchomieniowych ATB od wersji 1.02<br /> *<br /> * sd_pwr(1) - w��czenie zasilania<br /> * sd_pwr(0) - wy��czenie zasilania<br /> */<br />void sd_pwr( uint8_t OnOff ) {<br />if(OnOff) {<br />SD_ON;<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR);<br />_delay_ms(50);<br />disk_initialize();<br /><br />} else {<br />SPCR &amp;= ~(1&lt;&lt;SPE);<br />PORTB &amp;= ~((1&lt;&lt;PB5)|(1&lt;&lt;PB4)|(1&lt;&lt;PB3));<br />SD_OFF;<br />_delay_ms(50);<br />}<br />}[/syntax]<br />W pliku mmc.c zmieniłem tylko to<br />[syntax=c]/* Port Controls (Platform dependent) */<br />/* Port Controls (Platform dependent) */<br />#define SELECT()PORTC &amp;= ~(1&lt;&lt;PC0)/* MMC CS = L */<br />#defineDESELECT()PORTC |=  (1&lt;&lt;PC0)/* MMC CS = H */<br />#defineMMC_SEL!(PORTC &amp;  (1&lt;&lt;PC0))/* MMC CS status (true:selected) */[/syntax]<br /><br />Schemat jest tylko poglądowy na szybko rysowany  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  (zakładam że ta karta sd ma już konwersję napięć czyli jest tam lvc125) <br />Dodaję go w załączniku ponieważ nie mam flasha zainstalowanego (swoją drogą jest to już stara technologia)<br />Byłbym bardzo wdzięczny za pomoc  <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=9246">jar800v</a> — 17 kwi 2017, o 12:19</p><hr />
]]></content>
</entry>
</feed>