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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-26T20:20:46+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1587&amp;mode</id>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2012-09-26T20:20:46+01:00</updated>
<published>2012-09-26T20:20:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15999#p15999</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15999#p15999"/>
<title type="html"><![CDATA[Re: Dźwięk na avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15999#p15999"><![CDATA[
znalazłem coś takiego, ale jeszcze nie studiowałem<br />[syntax=c]<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;inttypes.h&gt;<br /><br />// Odtwarzacz melodii.<br />//<br />// Wymagane polaczenia w ukladzie ZL15AVR:<br />//<br />//  PD5 - SPK<br />//<br />// Autor: Pawel Klimczewski, 8 marca 2010.<br /><br />//---------------------------------------------------------------------------<br />void configure_pins()<br />{<br />  DDRD |= 1 &lt;&lt; PD5; // Wyjscie OC1A  <br />}<br />//---------------------------------------------------------------------------<br />void configure_timers()<br />{<br />  // Licznik 0 zlicza z czestotliwoscia F_CPU / 1024 = 15 625 Hz<br />  // Przepelnienie nastepuje co 16 ms (61 Hz) i generuje przerwanie<br />  // TIMER0_OVF.<br />  TCCR0 = 1 &lt;&lt; CS02 | 1 &lt;&lt; CS00;<br />  TIMSK = 1 &lt;&lt; TOIE0;<br />  <br />  // Licznik jeden sluzy do generowania fali prostokatnej.<br />  // Zmiana napiecia na wyprowadzeniu na przeciwne.<br />  TCCR1A = 1 &lt;&lt; COM1A0;  <br />}<br />//---------------------------------------------------------------------------<br />void modulacja( uint16_t dt )<br />{<br />  if ( dt == 0 )<br />  {<br />    TCCR1B = 0; // Wylaczam licznik.    <br />  }<br />  else<br />  {<br />    // Zeruje licznik.<br />    TCNT1 = 0;<br />    // Ustawiam zakres licznika aby odpowiadal biezacej nucie.<br />    OCR1A = dt;<br />    // Wlaczam licznik 1.<br />    // Licznik zlicza z czestotliwoscia F_CPU / 8 = 2 MHz.<br />    TCCR1B = 1 &lt;&lt; WGM12 | 1 &lt;&lt; CS11;<br />  }<br />}<br />//---------------------------------------------------------------------------<br />#define PAUZA 0xff<br /><br />// Tablica przedstawia fragment uwtoru &quot;Dla Elizy&quot; Ludwika van Beethovena.<br />// Pojedynczy dzwiek reprezentowany jest przez pare wartosci<br />// ( wysokosc dzwieku, dlugosc dzwieku ).<br />//<br />// Wysokosc dzwieku % 12 jest indeksem tablicy nuty.<br />//<br />// Dlugosci dzwiekow: 32 - cala nuta, 16 - polnuta, 8 - cwiercnuta,<br />// 4 - osemka.<br /><br />uint8_t melodia[] =<br />{<br />                                          12+ 4, 4, 12+ 3, 4, <br />  12+ 4, 4, 12+ 3, 4, 12+ 4, 4,    11, 4, 12+ 2, 4, 12+ 0, 4, <br />      9, 8,           PAUZA, 4,     0, 4,     4, 4,     9, 4,<br />     11, 8,           PAUZA, 4,     4, 4,     8, 4,    11, 4,<br />  12+ 0, 8,           PAUZA, 4,     4, 4, 12+ 4, 4, 12+ 3, 4,<br />  12+ 4, 4, 12+ 3, 4, 12+ 4, 4,    11, 4, 12+ 2, 4, 12+ 0, 4,<br />      9, 8,           PAUZA, 4,     0, 4,     4, 4,     9, 4,<br />     11, 8,           PAUZA, 4,     4, 4, 12+ 0, 4,    11, 4,<br />      9, 8,           PAUZA, 4,<br />  <br />     11, 4, 12+ 0, 4, 12+ 2, 4,<br />  12+ 4,12,                         7, 4, 12+ 5, 4, 12+ 4, 4,<br />  12+ 2,12,                         5, 4, 12+ 4, 4, 12+ 2, 4,<br />  12+ 0,12,                         4, 4, 12+ 2, 4, 12+ 0, 4,<br />     11, 8,           PAUZA, 4,     4, 4, 12+ 4, 4, PAUZA, 4,<br />  PAUZA, 4, 12+ 4, 4, 24+ 4, 4, PAUZA, 8,           12+ 3, 4,<br />  12+ 4, 4, PAUZA, 8,           12+ 3, 4, 12+ 4, 4, 12+ 3, 4,<br />  12+ 4 ,4, 12+ 3, 4, 12+ 4, 4,    11, 4, 12+ 2, 4, 12+ 0, 4,<br />      9, 8,           PAUZA, 4,     0, 4,     4, 4,     9, 4,<br /><br />     11, 8,           PAUZA, 4,     4, 4,     8, 4,    11, 4,<br />  12+ 0, 8,           PAUZA, 4,     4, 4, 12+ 4, 4, 12+ 3, 4,<br />  12+ 4, 4, 12+ 3, 4, 12+ 4, 4,    11, 4, 12+ 2, 4, 12+ 0, 4,<br />      9, 8,           PAUZA, 4,     0, 4,     4, 4,     9, 4,<br />     11, 8,           PAUZA, 4,     4, 4, 12+ 0, 4,    11, 4,<br />      9, 8,           PAUZA, 4,<br />  <br />  PAUZA,64<br />};<br /><br />// Licznik 1 zliczajacy z czestotliwoscia 2 MHz i zmieniajacy napiecie<br />// na wyjsciu mikrokontrolera na przeciwne po zliczeniu podanej liczby<br />// impulsow generuje dzwiek o odpowiadajacej wysokosci.<br /><br />uint16_t nuty[] =<br />{<br />  3823, // c   0<br />  3607, // c#  1<br />  3405, // d   2<br />  3214, // d#  3<br />  3034, // e   4<br />  2864, // f   5<br />  2703, // f#  6<br />  2551, // g   7<br />  2408, // g#  8<br />  2273, // a   9<br />  2145, // a# 10<br />  2025  // h  11<br />};<br />//---------------------------------------------------------------------------<br />uint16_t volatile idx = 0;<br />uint16_t volatile czas = 1;<br /><br />ISR( TIMER0_OVF_vect )<br />{<br />  --czas;<br />  if ( czas == 2 )<br />  {<br />    // Wprowadzam krotkie przerwy pomiedzy poszczegolnymi nutami.<br />    modulacja( 0 );<br />  }<br />  if ( czas )<br />  {<br />    // Jeszcze nie uplynal czas trwania nuty.<br />    return;<br />  }<br />  uint8_t nuta = melodia[ idx++ ];<br />  czas = melodia[ idx++ ];<br />  czas &lt;&lt;= 2;<br />  if ( idx == sizeof( melodia ) )<br />  {<br />    idx = 0;<br />  }<br />  if ( nuta == PAUZA )<br />  {<br />    modulacja( 0 );<br />  }<br />  else<br />  {<br />    int8_t oktawa = 1;<br />    while ( nuta &gt;= 12 )<br />    {<br />      nuta -= 12;<br />      oktawa++;<br />    }<br />    modulacja( nuty[ nuta ] &gt;&gt; oktawa );<br />  }<br />}<br />//---------------------------------------------------------------------------<br />int main()<br />{<br />  configure_pins();<br />  configure_timers();<br />  sei();<br />  while ( true );<br />  return 0;<br />}<br />//---------------------------------------------------------------------------<br /><br />[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 26 wrz 2012, o 20:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2012-09-24T14:57:58+01:00</updated>
<published>2012-09-24T14:57:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15837#p15837</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15837#p15837"/>
<title type="html"><![CDATA[Re: Dźwięk na avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15837#p15837"><![CDATA[
mam wystarczająco głośny buzzer na 12V, tylko potrzebny mi jest zestaw nutek imitujących dźwięk jakiegoś prostego alarmu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 24 wrz 2012, o 14:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-09-24T14:51:41+01:00</updated>
<published>2012-09-24T14:51:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15836#p15836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15836#p15836"/>
<title type="html"><![CDATA[Re: Dźwięk na avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15836#p15836"><![CDATA[
Zasadniczo to mozna to zrealizować na wiele sposobów właśnie za pomocą PWM <br />np tak:<br /><br />[syntax=c]<br /> #include &quot;pitches.h&quot;<br /><br />// nuty w melodyjce:<br />int melody[] = {<br />  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};<br /><br />// długość nutek<br />int noteDurations[] = {<br />  4, 8, 8, 4,4,4,4,4 };<br /><br />void setup() {<br />  <br />  for (int thisNote = 0; thisNote &lt; 8; thisNote++) {<br /><br />    <br />    int noteDuration = 1000/noteDurations[thisNote];<br />    tone(8, melody[thisNote],noteDuration);<br /><br />    <br />    int pauseBetweenNotes = noteDuration * 1.30;<br />    delay(pauseBetweenNotes);<br />    <br />    noTone(8);<br />  }<br />}<br /><br />void loop() {<br /> <br />}<br /><br />[/syntax]<br /><br />lub tak:<br /><br />[syntax=c]<br /><br />void setup() {<br /><br />}<br /><br />void loop() {<br />   <br />   noTone(11);<br /> <br />  tone(6, 440, 200);<br />  delay(200);<br /><br />  noTone(6);<br /> <br />  tone(7, 494, 500);<br />  delay(500);<br /><br />  noTone(7);  <br />  <br />  tone(11, 523, 300);<br />  delay(300);<br /><br />}<br />[/syntax] <br /><br /><br />to tylko takie brzęczenie w sumie jest ale da się wychwycić melodie , co do głośności to albo dobry i mocny piezo , albo jakiś mały wzmacniaczyk<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 24 wrz 2012, o 14:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wireless]]></name></author>
<updated>2012-09-24T14:37:44+01:00</updated>
<published>2012-09-24T14:37:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15834#p15834</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15834#p15834"/>
<title type="html"><![CDATA[Dźwięk na avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1587&amp;p=15834#p15834"><![CDATA[
czy są jakieś biblioteki do zagrania na avr, jakieś proste melodie, sygnały alarmowe?<br />jeśli tak, to jak zrobić regulację poziomu natężenia dźwięku?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=380">wireless</a> — 24 wrz 2012, o 14:37</p><hr />
]]></content>
</entry>
</feed>