Re: MSP430G2553 Sounds

"Onestone [email protected] [msp430]" <[email protected]> Fri, 18 Nov 2016 14:05:03 +1030
Newsgroups gmane.comp.hardware.texas-instruments.msp430.discuss
Message-ID <[email protected]>
--------------88D98985360A3B4AEC40A67D
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Yes, there are plenty of different ways to do this. A single counter 
only works for a limited range of durations, whereas a second timer 
allows you to control the timebase by using either different clock 
sources or different clock divider values.

Al

On 18/11/2016 8:00 AM, 'Krzok, Waldemar' [email protected] 
[msp430] wrote:
>
>
> Actually it is enough to have one timer running on fix frequency, for 
> example 100kHz. In the ISR you have a counter and toggle the piezo 
> output each n-th call, in this case 50 for 1kHz. In this case you need 
> only one timer for sound and duration and you can generate zillions of 
> sounds changing only one parameter.
>
> Waldemar
>
> Am 17.11.2016 um 20:39 schrieb Onestone [email protected] 
> <mailto:[email protected]> [msp430] <[email protected] 
> <mailto:[email protected]>>:
>
>> First you don't use DCOCTL and BSCCTL, these are for the DCO or 
>> digitally controlled oscillator, and the basic clock module. these 
>> govern the instruction execution rate, the peripheral to use is the 
>> timer, and there are many ways to do it using the timer. Secondly 
>> make sure you  are you using a speaker not a piezo sounder. Often 
>> they are badly described in catalogues. A sounder will always have 
>> the same tone.  Do you want the sounds to run for a fixed time or is 
>> one sound always on? The MSP430 has quite powerful timer control 
>> functions. The basic timer functions, like clock source, clock 
>> division, start, stop, and count mode are set in the TxCTL register 
>> while each timer channel has its own control register so that each 
>> channel could be running a different timer function. The 2553 spoils 
>> you for choice, you have 2 3 channel timers of Type A. In the channel 
>> control register you can control what happens to that channels 
>> assigned output pin when the timer match occurs, so, for example set 
>> TimerA0_0 (timer type A number 0 channel 0) so that it interrupts 
>> after a desired time, and when it interrupts it toggles its output 
>> pin, this generates a square wave, and all you then need do is decide 
>> the time period, create a small ISR which simple adds the time period 
>> to generate the desired frequenct to that channels CCRx register, 
>> and, make sure the interrupt flag is cleared. CH0 clears the iFG 
>> automatically, and has it's own interrupt vector, if you use ch1 or 
>> ch2 you will need to use the TAIV vector to select the right channel 
>> ISR. This works well in continuous mode. If you need to recude the 
>> timer maximum count for any reason, for example it is running an RTC 
>> and you want it to only count to 32768 your isr will need to account 
>> for this.
>>
>> If you only want the timer tone to run for a certain time then start 
>> a second timer at the same time yoiu enable to frequency output and 
>> have its ISR stop both timers and set the output pin of the tone 
>> output to '0'.
>>
>> It's worthwhile studying and playing around with the timers, as well 
>> as reading every app note you can get. If you truly understand how 
>> these timers work you can do almost anything with a small micro. For 
>> example people compare the blinky LED to 'Hello World' on a PC or 
>> high level language, but in fact it's much more potent than that, 
>> more akin to a sensor and communications toolkit in a few easy registers.
>>
>>
>> Al
>>
>> On 18/11/2016 5:08 AM, [email protected] [msp430] wrote:
>>>
>>>
>>> Hello, my name is Trevor! I was wondering if anyone could help me 
>>> generate 3 different sounds using a piezo speaker on a msp430 using 
>>> only assembly language. I understand these different 3 sounds are 
>>> different frequencies and are thus controlled by DCOCTL and the 
>>> different BSCCTL registers. In theory, I believed a jump statement 
>>> could go to different labels where the settings of the registers and 
>>> the DCOCTL could be changed ,however i keep getting the same output 
>>> sound.
>>>
>>>
>>>
>>
>
>
> 


--------------88D98985360A3B4AEC40A67D
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit





<head>

<style type="text/css">
<!--

/* start of attachment style */
       .ygrp-photo-title{
         clear: both;
         font-size: smaller;
         height: 15px;
         overflow: hidden;
         text-align: center;
         width: 75px;
       }
       div.ygrp-photo{
         background-position: center;
         background-repeat: no-repeat;
         background-color: white;
         border: 1px solid black;
         height: 62px;
         width: 62px;
       }

       div.photo-title 
         a,
         div.photo-title a:active,
         div.photo-title a:hover,
         div.photo-title a:visited {
           text-decoration: none; 
       }

       div.attach-table div.attach-row {
         clear: both;
       }

       div.attach-table div.attach-row div {
         float: left;
         /* margin: 2px;*/
       }

       p {
         clear: both;
         padding: 15px 0 3px 0;
	 overflow: hidden;
       }

       div.ygrp-file {
         width: 30px;
         valign: middle;
       }
       div.attach-table div.attach-row div div a {
         text-decoration: none;
       }

       div.attach-table div.attach-row div div span {
         font-weight: normal;
       }

       div.ygrp-file-title {
         font-weight: bold;
       }
 /* end of attachment style */
        -->
        </style>
        </head>
<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">


<!-- |**|begin egp html banner|**| -->

<br><br>

<!-- |**|end egp html banner|**| -->



    <font size="-1">Yes, there are plenty of different ways to do this.
      A single counter only works for a limited range of durations,
      whereas a second timer allows you to control the timebase by using
      either different clock sources or different clock divider values.<br>
      <br>
      Al<br>
    </font><br>
    <div class="moz-cite-prefix">On 18/11/2016 8:00 AM, 'Krzok,
      Waldemar' <a class="moz-txt-link-abbreviated" href="mailto:[email protected]">[email protected]</a> [msp430] wrote:<br>
    </div>
    <blockquote
      cite="mid:[email protected]"
      type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=Windows-1252">
      <br>
      <br>
      <div>Actually it is enough to have one timer running on fix
        frequency, for example 100kHz. In the ISR you have a counter and
        toggle the piezo output each n-th call, in this case 50 for
        1kHz. In this case you need only one timer for sound and
        duration and you can generate zillions of sounds changing only
        one parameter. <br>
        <br>
        Waldemar</div>
      <div><br>
        Am 17.11.2016 um 20:39 schrieb Onestone <a
          moz-do-not-send="true" href="mailto:[email protected]">
          [email protected]</a> [msp430] &lt;<a
          moz-do-not-send="true" href="mailto:[email protected]">[email protected]</a>&gt;:<br>
        <br>
      </div>
      <blockquote type="cite">
        <div>First you don't use DCOCTL and BSCCTL, these are for the
          DCO or digitally controlled oscillator, and the basic clock
          module. these govern the instruction execution rate, the
          peripheral to use is the timer, and there are many ways to do
          it using the timer. Secondly make sure you  are you using a
          speaker not a piezo sounder. Often they are badly described in
          catalogues. A sounder will always have the same tone.  Do you
          want the sounds to run for a fixed time or is one sound always
          on? The MSP430 has quite powerful timer control functions. The
          basic timer functions, like clock source, clock division,
          start, stop, and count mode are set in the TxCTL register
          while each timer channel has its own control register so that
          each channel could be running a different timer function. The
          2553 spoils you for choice, you have 2 3 channel timers of
          Type A. In the channel control register you can control what
          happens to that channels assigned output pin when the timer
          match occurs, so, for example set TimerA0_0 (timer type A
          number 0 channel 0) so that it interrupts after a desired
          time, and when it interrupts it toggles its output pin, this
          generates a square wave, and all you then need do is decide
          the time period, create a small ISR which simple adds the time
          period to generate the desired frequenct to that channels CCRx
          register, and, make sure the interrupt flag is cleared. CH0
          clears the iFG automatically, and has it's own interrupt
          vector, if you use ch1 or ch2 you will need to use the TAIV
          vector to select the right channel ISR. This works well in
          continuous mode. If you need to recude the timer maximum count
          for any reason, for example it is running an RTC and you want
          it to only count to 32768 your isr will need to account for
          this.<br>
          <br>
          If you only want the timer tone to run for a certain time then
          start a second timer at the same time yoiu enable to frequency
          output and have its ISR stop both timers and set the output
          pin of the tone output to '0'.<br>
          <br>
          It's worthwhile studying and playing around with the timers,
          as well as reading every app note you can get. If you truly
          understand how these timers work you can do almost anything
          with a small micro. For example people compare the blinky LED
          to 'Hello World' on a PC or high level language, but in fact
          it's much more potent than that, more akin to a sensor and
          communications toolkit in a few easy registers.<br>
          <br>
          <br>
          Al<br>
          <br>
          <div class="moz-cite-prefix">On 18/11/2016 5:08 AM, <a
              moz-do-not-send="true" class="moz-txt-link-abbreviated"
              href="mailto:[email protected]">
              [email protected]</a> [msp430] wrote:<br>
          </div>
          <blockquote cite="mid:[email protected]"
            type="cite">
            <br>
            <br>
            <p><span>Hello, my name is Trevor! I was wondering if anyone
                could help me generate 3 different sounds using a piezo
                speaker on a msp430 using only assembly language. I
                understand these different 3 sounds are different
                frequencies and are thus controlled by DCOCTL and the
                different BSCCTL registers. In theory, I believed a jump
                statement could go to different labels where the
                settings of the registers and the DCOCTL could be
                changed ,however i keep getting the same output sound.</span></p>
            <br>
            <br>
          </blockquote>
          <br>
        </div>
      </blockquote>
      <br>
      <br>
      <div width="1"></div>
    </blockquote>
    <br>
  



<!-- |**|begin egp html banner|**| -->

<br>


<br>

<!-- |**|end egp html banner|**| -->


<div width="1" style="color: white; clear: both;"/>__._,_.___</div>

      
  

    
    <div id="fromDMARC" style="clear:both; margin-top: 10px;">
         <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
         Posted by: Onestone &lt;[email protected]&gt;         <hr style="height:2px ; border-width:0; color:#E3E3E3; background-color:#E3E3E3;">
    </div>
<!-- Start Recommendations -->
<!-- End Recommendations -->


<!-- |**|begin egp html banner|**| -->

<br><br>
<tt>
To unsubscribe from the msp430 group, send an email to:<BR>
[email protected]<BR>
<BR>
</tt>
<br><br>

<!-- |**|end egp html banner|**| -->



<!-- |**|begin egp html banner|**| -->

  <img src="http://geo.yahoo.com/serv?s=97476590/grpId=2342629/grpspId=1705005378/msgId=52533/stime=1479440504" width="1" height="1"> <br>

<!-- |**|end egp html banner|**| -->

    
<!-- |**|begin egp html banner|**| -->

<br>



   
     
 
        <!-- |**|begin egp html banner|**| -->
        <div id="ygrp-vital" style="background-color: #f2f2f2; font-family: Verdana; font-size: 10px; margin-bottom: 10px; padding: 10px;">

        <span id="vithd" style="font-weight: bold; color: #333; text-transform: uppercase; "><a href="https://groups.yahoo.com/neo/groups/msp430/info;_ylc=X3oDMTJlb2lnaWxoBF9TAzk3MzU5NzE0BGdycElkAzIzNDI2MjkEZ3Jwc3BJZAMxNzA1MDA1Mzc4BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQ3OTQ0MDUwNA--" style="text-decoration: none;">Visit Your Group</a></span>

     <ul style="list-style-type: none; margin: 0; padding: 0; display: inline;">
                                                    </ul>
  </div>


<div id="ft" style="font-family: Arial; font-size: 11px; margin-top: 5px; padding: 0 2px 0 0; clear: both;">
  <a href="https://groups.yahoo.com/neo;_ylc=X3oDMTJkaDJxdHRuBF9TAzk3NDc2NTkwBGdycElkAzIzNDI2MjkEZ3Jwc3BJZAMxNzA1MDA1Mzc4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDc5NDQwNTA0" style="float: left;"><img src="http://l.yimg.com/ru/static/images/yg/img/email/new_logo/logo-groups-137x15.png" height="15" width="137" alt="Yahoo! Groups" style="border: 0;"/></a>
  <div style="color: #747575; float: right;"> &bull; <a href="https://info.yahoo.com/privacy/us/yahoo/groups/details.html" style="text-decoration: none;">Privacy</a> &bull; <a href="mailto:[email protected]?subject=Unsubscribe" style="text-decoration: none;">Unsubscribe</a> &bull; <a href="https://info.yahoo.com/legal/us/yahoo/utos/terms/" style="text-decoration: none;">Terms of Use</a> </div>
</div>

<!-- |**|end egp html banner|**| -->

  </div> <!-- ygrp-msg -->

   


  <br>

<!-- |**|end egp html banner|**| -->


<div style="color: white; clear: both;"/>__,_._,___</div>
</body>
</html>

--------------88D98985360A3B4AEC40A67D--