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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-04-27T19:12:48+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=11510&amp;mode</id>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2015-04-27T19:04:23+01:00</updated>
<published>2015-04-27T19:04:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127621#p127621</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127621#p127621"/>
<title type="html"><![CDATA[Re: Grajek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127621#p127621"><![CDATA[
Wow, dzięki!<br />Z tym mnożeniem przez 1.5 nieźle pojechałem. Wystarczyło poprawić jedną linijkę kodu i bach!<br /><a href="http://forum.atnel.pl/_obrazki/o/1212/825ed783aa40523fdb417315f276a7e8.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/825ed783aa40523fdb417315f276a7e8.jpg" alt="Obrazek" /></a><br />Paskudne 1.5  <img src="https://forum.atnel.pl/images/smilies/icon_twisted.gif" alt=":twisted:" title="Szalony" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 27 kwi 2015, o 19:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2015-04-27T18:46:43+01:00</updated>
<published>2015-04-27T18:46:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127618#p127618</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127618#p127618"/>
<title type="html"><![CDATA[Re: Grajek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127618#p127618"><![CDATA[
Przypominają się stare dobre czasy.<br /><div class="quotetitle">artur85 napisał(a):</div><div class="quotecontent"><br />Minusy - rozmiar biblioteki to ok 6kB.<br /></div><br />Mi wyszło 2 kB bez muzyki i 4 kB z melodyjkami.<br /><br />A zmieniłem sobie tylko:<br />[syntax=c]const char *songs&#91;11&#93;;<br /> <br />        songs&#91;0&#93; = song1;<br />        songs&#91;1&#93; = song2;<br />        songs&#91;2&#93; = song3;<br />        songs&#91;3&#93; = song4;<br />        songs&#91;4&#93; = song5;<br />        songs&#91;5&#93; = song6;<br />        songs&#91;6&#93; = song7;<br />        songs&#91;7&#93; = song8;<br />        songs&#91;8&#93; = song9;<br />        songs&#91;9&#93; = song10;<br />        songs&#91;10&#93; = song11;[/syntax]<br />na<br />[syntax=c]const char * const songs&#91;11&#93; PROGMEM = { song1, song2, song3, song4, song5, song6,<br />song7, song8, song9, song10, song11};[/syntax]<br />[syntax=c]playSong(songs&#91;i&#93;);[/syntax]<br />na<br />[syntax=c]playSong((const char *)pgm_read_word(&amp;songs&#91;i&#93;));[/syntax]<br /><br />i w bibliotece:<br />[syntax=c]TimeCount*=1.5;[/syntax]<br />na<br />[syntax=c]TimeCount = TimeCount*3/2;[/syntax]<br /><br />Co do zmiany nutek po zmianie kwarca to można by spróbować użyć timer1, a wtedy na jednym preskalerze można by to obskoczyć i w kodzie wykorzystać sobie symbol F_CPU<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 27 kwi 2015, o 18:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[artur85]]></name></author>
<updated>2015-04-27T19:12:48+01:00</updated>
<published>2015-04-27T17:42:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127610#p127610</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127610#p127610"/>
<title type="html"><![CDATA[Grajek]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11510&amp;p=127610#p127610"><![CDATA[
Witam,<br /><br />Chciałbym przedstawić bibliotekę umożliwiającą odtwarzanie melodyjek w formacie RTTTL. Może zacznę od prezentacji:<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br />Wersja long <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /> <div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br />Zaletą biblioteki jest to, że nie blokuje działania procka podczas odtwarzania muzyki. Również nie trzeba majstrować przy konwersji melodyjki. Wystarczy ją wrzucić jako string a biblioteka już sobie poradzi z jej odtworzeniem. Dzięki uwagom kolegi Krauser rozmiar biblioteki wynosi ok 2kB  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Minusy - Na chwilę obecną dla każdego procka i dla każdej częstotliwości taktowania (w demkach biblioteka ustawiona na ATmegę8 i F_CPU=8MHz) trzeba generować oddzielnie część kodu odpowiadającego za ustawienie odpowiedniej częstotliwości dla każdej nuty. Pobawiłem się trochę arkuszem kalkulacyjnym (OpenOffice Calc) w którym można wygenerować potrzebny kod całkiem szybko i przyjemnie. Wystarczy podać częstotliwość taktowania, rodzaj timera (8 czy 16 bit), nazwy rejestrów oraz przypisać wartości przeskalera dla pinów CSxn. Następnie po kliknięciu buttona wygenerowany fragment kodu zostanie skopiowany do schowka, który trzeba wkleić do instrukcji warunkowej case w funcji playNote w pliku piezo.c. Jest troszkę kombinowania, ale jak się raz ustawi to można odtwarzać co się chce <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><a href="http://forum.atnel.pl/_obrazki/o/1212/15d9d27c6230aa972c7ba502b50e114b.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1212/15d9d27c6230aa972c7ba502b50e114b.png" alt="Obrazek" /></a><br /><br />main.c<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 26 kwi 2015<br /> *      Author: Artur<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;piezo.h&quot;<br /><br />const char song1&#91;&#93; PROGMEM<br />=&quot;AxelF:d=4,o=5,b=125:g,8a#.,16g,16p,16g,8c6,8g,8f,g,8d.6,16g,16p,16g,8d#6,8d6,&quot;<br />&quot;8a#,8g,8d6,8g6,16g,16f,16p,16f,8d,8a#,2g,p,16f6,8d6,8c6,8a#,g,8a#.,16g,&quot;<br />&quot;16p,16g,8c6,8g,8f,g,8d.6,16g,16p,16g,8d#6,8d6,8a#,8g,8d6,8g6,16g,16f,&quot;<br />&quot;16p,16f,8d,8a#,2g&quot;;<br />const char song2&#91;&#93; PROGMEM<br />=&quot;KnightRider:d=4,o=5,b=125:16e,16p,16f,16e,16e,16p,16e,16e,16f,16e,16e,16e,&quot;<br />&quot;16d#,16e,16e,16e,16e,16p,16f,16e,16e,16p,16f,16e,16f,16e,16e,16e,16d#,&quot;<br />&quot;16e,16e,16e,16d,16p,16e,16d,16d,16p,16e,16d,16e,16d,16d,16d,16c,16d,&quot;<br />&quot;16d,16d,16d,16p,16e,16d,16d,16p,16e,16d,16e,16d,16d,16d,16c,16d,16d,16d&quot;;<br />const char song3&#91;&#93; PROGMEM<br />=&quot;SWEnd:d=4,o=5,b=225:2c,1f,2g.,8g#,8a#,1g#,2c.,c,2f.,g,g#,c,8g#.,8c.,8c6,1a#.,&quot;<br />&quot;2c,2f.,g,g#.,8f,c.6,8g#,1f6,2f,8g#.,8g.,8f,2c6,8c.6,8g#.,8f,2c,8c.,8c.,&quot;<br />&quot;8c,2f,8f.,8f.,8f,2f&quot;;<br />const char song4&#91;&#93; PROGMEM<br />=&quot;Indiana:d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f,p.,g,8p,8a,8b,8p,1f6,p,&quot;<br />&quot;a,8p,8b,2c6,2d6,2e6,e,8p,8f,8g,8p,1c6,p,d6,8p,8e6,1f.6,g,8p,8g,e.6,8p,&quot;<br />&quot;d6,8p,8g,e.6,8p,d6,8p,8g,f.6,8p,e6,8p,8d6,2c6&quot;;<br />const char song5&#91;&#93; PROGMEM<br />=&quot;aadams:d=4,o=5,b=160:8c,f,8a,f,8c,b4,2g,8f,e,8g,e,8e4,a4,2f,8c,f,8a,f,8c,b4,&quot;<br />&quot;2g,8f,e,8c,d,8e,1f,8c,8d,8e,8f,1p,8d,8e,8f#,8g,1p,8d,8e,8f#,8g,p,8d,8e,&quot;<br />&quot;8f#,8g,p,8c,8d,8e,8f&quot;;<br />const char song6&#91;&#93; PROGMEM<br />=&quot;DasBoot:d=4,o=5,b=100:d#.4,8d4,8c4,8d4,8d#4,8g4,a#.4,8a4,8g4,8a4,8a#4,8d,2f.,&quot;<br />&quot;p,f.4,8e4,8d4,8e4,8f4,8a4,c.,8b4,8a4,8b4,8c,8e,2g.,2p&quot;;<br />const char song7&#91;&#93; PROGMEM<br />=&quot;FurElise:d=4,o=6,b=125:8e,8d#,8e,8d#,8e,8b5,8d,8c,a5,8p,8c5,8e5,8a5,b5,8p,8e5,&quot;<br />&quot;8g#5,8b5,c,p,8e5,8e,8d#,8e,8d#,8e,8b5,8d,8c,a5,8p,8c5,8e5,8a5,b5,8p,&quot;<br />&quot;8e5,8c,8b5,2a5&quot;;<br />const char song8&#91;&#93; PROGMEM<br />=&quot;StWars:d=4,o=5,b=180:8f,8f,8f,2a#.,2f.6,8d#6,8d6,8c6,2a#.6,f.6,8d#6,8d6,8c6,&quot;<br />&quot;2a#.6,f.6,8d#6,8d6,8d#6,2c6,p,8f,8f,8f,2a#.,2f.6,8d#6,8d6,8c6,2a#.6,&quot;<br />&quot;f.6,8d#6,8d6,8c6,2a#.6,f.6,8d#6,8d6,8d#6,2c6&quot;;<br />const char song9&#91;&#93; PROGMEM<br />=&quot;Xfiles:d=4,o=5,b=125:e,b,a,b,d6,2b.,1p,e,b,a,b,e6,2b.,1p,g6,f#6,e6,d6,e6,2b.,&quot;<br />&quot;1p,g6,f#6,e6,d6,f#6,2b.,1p,e,b,a,b,d6,2b.,1p,e,b,a,b,e6,2b.,1p,e6,2b.&quot;;<br />const char song10&#91;&#93; PROGMEM<br />=&quot;YMCA:d=4,o=5,b=160:8c#6,8a#,2p,8a#,8g#,8f#,8g#,8a#,c#6,8a#,c#6,8d#6,8a#,2p,&quot;<br />&quot;8a#,8g#,8f#,8g#,8a#,c#6,8a#,c#6,8d#6,8b,2p,8b,8a#,8g#,8a#,8b,d#6,8f#6,&quot;<br />&quot;d#6,f.6,d#.6,c#.6,b.,a#,g#&quot;;<br />const char song11&#91;&#93; PROGMEM<br />=&quot;Bonanza:d=4,o=5,b=285:8c,8p,8c,8c,8c,8p,8c,8c,8c,8p,8c,8c,8c,8p,8c,8c,4.f,8p,&quot;<br />&quot;2a,1p,8c,8p,8c,8c,8c,8p,8c,8c,8c,8p,8c,8c,8c,8p,8c,8c,8c,8p,8c,8c,8d,&quot;<br />&quot;8p,8e,8p,8f&quot;;<br />const char * const songs&#91;11&#93; PROGMEM = { song1, song2, song3, song4, song5, song6,<br />                song7, song8, song9, song10, song11};<br />int main(void) {<br /><br />piezoInit();<br />sei();<br /><br />DDRD &amp;= (1 &lt;&lt; PD2);<br />PORTD |= (1 &lt;&lt; PD2);<br /><br /><br />uint8_t i = 0;<br />while (1) {<br />piezoInterrupt();<br /><br />if (!(PIND &amp; (1 &lt;&lt; PD2))) {<br />_delay_ms(500);<br /><br />playSong((const char *)pgm_read_word(&amp;songs&#91;i&#93;));<br />if (i &lt; 10)<br />i++;<br />else<br />i = 0;<br /><br />}<br />}<br />}[/syntax]<br /><br />piezo.c<br />[syntax=c]/*<br /> * piezo.c<br /> *<br /> *  Created on: 26 kwi 2015<br /> *      Author: Artur<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &quot;piezo.h&quot;<br /><br />static volatile uint16_t TimeCount = 0;<br />static volatile uint8_t note = 0;<br /><br />static uint16_t BeatsPerMinute=0;<br />static uint8_t DefaultDuration=0;<br />static uint8_t DefaultOctave=0;<br />char SongName&#91;15&#93;;<br /><br />static volatile uint16_t TimerInterval=0;<br /><br />//flags<br />static volatile uint8_t playNextNoteFlag = 0;<br />static uint8_t endOfSongFlag=0;<br />uint8_t playFlag;<br /><br />static uint16_t actualPosition=0;<br /><br />static const char *song;<br /><br />//CTC mode initialization<br />void piezoInit(void) {<br /><br />DDRB |= (1 &lt;&lt; PIEZO_PIN);<br />TCCR2 |= (1 &lt;&lt; WGM21);// tryb  CTC<br />TIMSK |= (1 &lt;&lt; OCIE2);// CompareMatch<br /><br />}<br /><br />//example<br />//const char example&#91;&#93; PROGMEM=&quot;AxelF:d=4,o=5,b=125:g,8a#.,16g,16p,16g,8c6,8g,8f,g,8d.6,16g,16p,16g,8d#6,8d6,8a#,8g,8d6,8g6,16g,16f,16p,16f,8d,8a#,2g&quot;;<br />//playSong(example);<br />void playSong(const char *playedSong){<br />song=playedSong;<br />playFlag=1;<br />actualPosition=0;<br />endOfSongFlag=0;<br />playNextNoteFlag=1;<br />}<br /><br />//prescaller &amp; OCR register configuration for each note<br />//values calculated for timer2, ATmega8, 8MHz<br />void playNote(uint8_t Tnote, uint8_t duraction, uint8_t isDot) {<br />switch (Tnote) {<br /><br /><br />///////////////////////////////////////<br />//ENTER HERE CODE FROM CALC!!<br /><br />case 1:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 237;<br />TimerInterval = 1911;<br />break;<br />case 2:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 224;<br />TimerInterval = 1803;<br />break;<br />case 3:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 211;<br />TimerInterval = 1702;<br />break;<br />case 4:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 199;<br />TimerInterval = 1607;<br />break;<br />case 5:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 188;<br />TimerInterval = 1516;<br />break;<br />case 6:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 177;<br />TimerInterval = 1431;<br />break;<br />case 7:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 167;<br />TimerInterval = 1351;<br />break;<br />case 8:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 158;<br />TimerInterval = 1275;<br />break;<br />case 9:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 149;<br />TimerInterval = 1203;<br />break;<br />case 10:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 141;<br />TimerInterval = 1136;<br />break;<br />case 11:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS22);<br />OCR2 = 133;<br />TimerInterval = 1072;<br />break;<br />case 12:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 252;<br />TimerInterval = 1012;<br />break;<br />case 13:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 237;<br />TimerInterval = 955;<br />break;<br />case 14:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 224;<br />TimerInterval = 901;<br />break;<br />case 15:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 211;<br />TimerInterval = 851;<br />break;<br />case 16:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 199;<br />TimerInterval = 803;<br />break;<br />case 17:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 188;<br />TimerInterval = 758;<br />break;<br />case 18:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 177;<br />TimerInterval = 715;<br />break;<br />case 19:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 167;<br />TimerInterval = 675;<br />break;<br />case 20:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 158;<br />TimerInterval = 637;<br />break;<br />case 21:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 149;<br />TimerInterval = 601;<br />break;<br />case 22:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 141;<br />TimerInterval = 568;<br />break;<br />case 23:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 133;<br />TimerInterval = 536;<br />break;<br />case 24:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 125;<br />TimerInterval = 506;<br />break;<br />case 25:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 118;<br />TimerInterval = 477;<br />break;<br />case 26:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 111;<br />TimerInterval = 450;<br />break;<br />case 27:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 105;<br />TimerInterval = 425;<br />break;<br />case 28:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 99;<br />TimerInterval = 401;<br />break;<br />case 29:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 93;<br />TimerInterval = 379;<br />break;<br />case 30:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 88;<br />TimerInterval = 357;<br />break;<br />case 31:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 83;<br />TimerInterval = 337;<br />break;<br />case 32:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 78;<br />TimerInterval = 318;<br />break;<br />case 33:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 74;<br />TimerInterval = 300;<br />break;<br />case 34:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 70;<br />TimerInterval = 284;<br />break;<br />case 35:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21) | (1 &lt;&lt; CS20);<br />OCR2 = 66;<br />TimerInterval = 268;<br />break;<br />case 36:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 252;<br />TimerInterval = 253;<br />break;<br />case 37:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 237;<br />TimerInterval = 238;<br />break;<br />case 38:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 224;<br />TimerInterval = 225;<br />break;<br />case 39:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 211;<br />TimerInterval = 212;<br />break;<br />case 40:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 199;<br />TimerInterval = 200;<br />break;<br />case 41:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 188;<br />TimerInterval = 189;<br />break;<br />case 42:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 177;<br />TimerInterval = 178;<br />break;<br />case 43:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 167;<br />TimerInterval = 168;<br />break;<br />case 44:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 158;<br />TimerInterval = 159;<br />break;<br />case 45:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 149;<br />TimerInterval = 150;<br />break;<br />case 46:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 141;<br />TimerInterval = 142;<br />break;<br />case 47:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 133;<br />TimerInterval = 134;<br />break;<br />case 48:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 125;<br />TimerInterval = 126;<br />break;<br />case 49:<br />TCCR2 = (TCCR2 &amp; ~((1 &lt;&lt; CS20) | (1 &lt;&lt; CS21) | (1 &lt;&lt; CS22)))<br />| (1 &lt;&lt; CS21);<br />OCR2 = 118;<br />TimerInterval = 119;<br />break;<br /><br />//ENTER HERE CODE FROM CALC!!<br />///////////////////////////////////////<br />}<br /><br />TimeCount = (240000000UL / ((uint32_t) BeatsPerMinute))<br />/ (uint32_t) TimerInterval;<br />switch (duraction) {<br />case 1:<br />break;<br />case 2:<br />TimeCount = (TimeCount &gt;&gt; 1);<br />break;<br />case 4:<br />TimeCount = (TimeCount &gt;&gt; 2);<br />break;<br />case 8:<br />TimeCount = (TimeCount &gt;&gt; 3);<br />break;<br />case 16:<br />TimeCount = (TimeCount &gt;&gt; 4);<br />break;<br />case 32:<br />TimeCount = (TimeCount &gt;&gt; 5);<br />break;<br />}<br />if(isDot)<br />TimeCount = TimeCount*3/2;<br />note=Tnote;<br />}<br /><br />//put this fuction into main loop<br />void piezoInterrupt(void){<br />if (playFlag) {<br />if (actualPosition) {<br />if (playNextNoteFlag) {<br />uint8_t tempDuration = 0;<br />uint8_t tempOctave = DefaultOctave;<br />uint8_t tempNote = 0;<br />uint8_t tempDot = 0;<br />uint8_t actualData = 0;<br />while ((pgm_read_byte(song+actualPosition) != ',') &amp;&amp; (!endOfSongFlag)) {<br />if ((pgm_read_byte(song+actualPosition) &gt; 47)<br />&amp;&amp; (pgm_read_byte(song+actualPosition) &lt; 58)) {<br />if (actualData) {<br />tempOctave = pgm_read_byte(song+actualPosition) - 48;<br />} else {<br />tempDuration = 10*tempDuration+pgm_read_byte(song+actualPosition) - 48;<br />}<br />}<br />switch (pgm_read_byte(song+actualPosition)) {<br />case 'p':<br />case 'P':<br />tempNote = 0;<br />actualData = 1;<br />break;<br />case 'c':<br />case 'C':<br />tempNote = 1;<br />actualData = 1;<br />break;<br />case 'd':<br />case 'D':<br />tempNote = 3;<br />actualData = 1;<br />break;<br />case 'e':<br />case 'E':<br />tempNote = 5;<br />actualData = 1;<br />break;<br />case 'f':<br />case 'F':<br />tempNote = 6;<br />actualData = 1;<br />break;<br />case 'g':<br />case 'G':<br />tempNote = 8;<br />actualData = 1;<br />break;<br />case 'a':<br />case 'A':<br />tempNote = 10;<br />actualData = 1;<br />break;<br />case 'b':<br />case 'B':<br />actualData = 1;<br />tempNote = 12;<br />break;<br />case '.':<br />tempDot = 1;<br />break;<br />case '#':<br />tempNote++;<br />break;<br />case '\0':<br />endOfSongFlag = 1;<br />break;<br /><br />}<br />actualPosition++;<br /><br />}<br />if(tempDuration == 0)<br />tempDuration = DefaultDuration;<br /><br />if (tempNote)<br />playNote(tempNote + (tempOctave - 4) * 12, tempDuration,<br />tempDot);<br />else<br />playNote(0, tempDuration, tempDot);<br />playNextNoteFlag = 0;<br /><br />if (endOfSongFlag)<br />playFlag = 0;<br />actualPosition++;<br />}<br />}<br />else {<br />// wczytanie nagłówka<br />BeatsPerMinute = 0;<br />DefaultDuration = 0;<br />DefaultOctave = 0;<br />while (pgm_read_byte(song+actualPosition) != ':') {<br />SongName&#91;actualPosition&#93; = pgm_read_byte(song+actualPosition);<br />actualPosition++;<br />}<br />int i = 0;<br />for (i = actualPosition; i &lt;= 15; i++) {<br />SongName&#91;i&#93; = ' ';<br />}<br />SongName&#91;14&#93; = '\0';<br />actualPosition++;<br /><br />while (pgm_read_byte(song+actualPosition) != '=') {<br />actualPosition++;<br />}<br />uint8_t DataType = 0;<br />while (pgm_read_byte(song+actualPosition) != ':') {<br /><br />if ((pgm_read_byte(song+actualPosition) &gt; 47)<br />&amp;&amp; (pgm_read_byte(song+actualPosition) &lt; 58)) {<br />switch (DataType) {<br />case 0:<br />DefaultDuration = DefaultDuration * 10<br />+ pgm_read_byte(song+actualPosition) - 48;<br />break;<br />case 1:<br />DefaultOctave = DefaultOctave * 10<br />+ pgm_read_byte(song+actualPosition) - 48;<br /><br />break;<br />case 2:<br />BeatsPerMinute = BeatsPerMinute * 10<br />+ pgm_read_byte(song+actualPosition) - 48;<br />break;<br />}<br />}<br />if (pgm_read_byte(song+actualPosition) == ',')<br />DataType++;<br /><br />actualPosition++;<br /><br />}<br />}<br /><br />}<br /><br />}<br /><br /><br /><br />ISR(TIMER2_COMP_vect) {<br />if (TimeCount != 0) {<br />TimeCount--;<br />if (note)<br />PORTB ^= (1 &lt;&lt; PIEZO_PIN);<br />}<br />if (!TimeCount) {<br />if (note == 0) {<br />playNextNoteFlag = 1;<br />} else {<br />note=0;<br /><br />}<br />}<br /><br />}[/syntax]<br />piezo.h<br />[syntax=c]/*<br /> * piezo.h<br /> *<br /> *  Created on: 26 kwi 2015<br /> *      Author: Artur<br /> */<br /><br />#ifndef PIEZO_H_<br />#define PIEZO_H_<br /><br />#define PIEZO_PIN PB0<br /><br /><br />extern char SongName&#91;&#93;;<br />extern uint8_t playFlag;<br /><br /><br />void piezoInit(void);<br />void piezoInterrupt(void);<br />void playSong(const char *playedSong);<br /><br />#endif /* PIEZO_H_ */[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1212">artur85</a> — 27 kwi 2015, o 17:42</p><hr />
]]></content>
</entry>
</feed>