Autor Tema: para que descifrar la libreria "tones.c" del ccs? aca una mejor y en ASM  (Leído 23457 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
hola amigos del foro, yo soy hincha del assembler es un vicio para mi, asi q necesitaba una rutina para generar melodias y me tope con esta libreria "tones.c" del programa CCS de lenguaje C para pics, lo q sucede es q necesito esa rutina para montarla sobre un programa mas grande q hice, asi q..... como no me gusta el c ni el basic.... lo usare pero no dejare q el C me use  :x  , cuando lo termine lo subo pa q lo cojan y lo apliquen en sus aplicaciones en asm, chau!!!  :-/

PD: si alguien ya lo hice q avise pa no hacerlo denuevo , plop!  :-)
« Última modificación: 31 de Enero de 2007, 03:10:02 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
No sé cuál sea esa librería (no uso C) pero si puedes compilarla, puedes desensamblarla.
Casi nunca reviso lo que produce el compilador pero en ocaciones me ha dado curiosidad y ese código lo miro en el MPLAB (una sugerencia).

A lo mejor ya lo hiciste, esa sería una manera rápida de saber cómo le hicieron.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado LeSs

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 81
Como estas Norberto, si he revisado varias veces los ejemplos que detallas anteriormente, pero la verdad no se como utilizarlos.
Hace mucho tiempo quiero introducir musik a los proyectos que hago con micros, para hacerlos + diverti2.
Encontre un soft, en version demo que tenia algo parecido, estaba la famos "We are the Champios" y algunas de Rock. luego que revise por alli les dejo el link para que lo prueben.

Pero por el momento si no es mucha molestia, nos podrias indikr komo reproducir diferentes melodias??? :? :?
El hambre produce poemas inmortales. La abundancia únicamente indigestión y torpezas.
Aprendiendo a programar en C.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: descifrando la libreria "tones.c" del ccs es decir, lo quiero pasar a assemb
« Respuesta #4 en: 19 de Enero de 2007, 19:43:36 »
en el CCS esta esa libreria para generar tonos musicales , todas las notas do re mi...si, y tiene cuatro octavas  de cada nota, osea q es bastante y suficiente para componer una melodia, simplemente te pide que añadas la frecuencia de la nota (que esta escrita como comentario en el archivo "tones.c") y la duracion q quieres. ahora la duracion vendria a ser la redonda blanca negra corchea semicorchea fusa semifusa, jjje con esa herramienta puedes componer si sabes algo de musica sobrado por eso lo quiero pasar a assembler mi lenguaje nativo  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
micro_cadaver:

voy a ver donde está el ejemplo del CCS C, lo compilo y paso por aquí el Mixed C-ASM que genera. Por lo menos sabrás qué es lo que hacen en ASM los señores que diseñaron el CCS C.  :)

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: descifrando la libreria "tones.c" del ccs es decir, lo quiero pasar a assemb
« Respuesta #6 en: 20 de Enero de 2007, 12:18:41 »
hola redpic precisamente de ese archivo estoy colgandome para psarlo totalmente a ASM, del mixed, aunque ni tan mixed porq no ponen algunas cosas como la cabezera y el end  :shock: jejeje, bueno ahora tb el amigo jhonny me pidio q traduciera el comentario del archivo "tones.c" lo termino y lo subo, no desespereis poshh hombre!!! :D
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: descifrando la libreria "tones.c" del ccs es decir, lo quiero pasar a assemb
« Respuesta #7 en: 20 de Enero de 2007, 12:43:38 »
cabezera del archivo tones.c

//////////////////   Driver to generate musical tones    /////////////////////
////                                                                                             ////
////  generate_tone(frequency, duration)     Generates wave at set  ////
////                                                          frequency (Hz) for set   ////
////                                                          duration (ms)               ////
////                                                                                            ////
//////////////////////////////////////////////////////////////////////////////////

el resto del mensaje es puro floro, lo unico q aqui dice es q la rutina "generate_tone" te pide en su sintaxis 2 datos con los cuales (esto dice traducido) genera una onda o señal segun la frecuencia configurada en Hz y una duracion determinada en ms q tambien la configuras, todo de esta manera

generate_tone(440,500);

Es un ejemplo, el valor 440 corresponde a 440Hz q lo sacas de la tabla de valores q te da el mismo archivo tones.c por ejemplo ese valor corresponde a la primera octava de la tavla de la nota LA o A(notacion general)

const long A_NOTE[4]  ={ 440,     880,    1760,    3520};

y el otro valor 500 pues es simplemente 500"ms" una duracion.


este es el archivo ex_tones.c q esta como ejemplo de como usar esa rutina.
/////////////////////////////////////////////////////////////////////////////////
////                          EX_TONES.C                                               ////
////                                                                                           ////
////  This example plays the song "Happy Birthday."                      ////
////                                                                                           ////
////  Configure the CCS prototype card as follows:                        ////
////     Connect the positive wire of the speaker to pin 47 (B0)       ////
////     Connect the negative wire of the speaker to pin 27 (Gnd)    ////
////                                                                                           ////
/////////////////////////////////////////////////////////////////////////////////

ahi lo q dice es q el pin por donde saldra la onda con los tonos sera el pin RB0 del pic. esto esto estodo amigos!!!   :-/


a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Al código en C al que yo me refería es Ring Tone Player - Plays ring tones on PICDEM2 plus board en el CCS C Forum.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
saludos amigo micro cadaver
bueno la verdad que yo leia siempre tus notas sobre este famoso driver Tones.c .. pero la verdad es que nunca me anime  a revisarlo , ya que no sabia nada del lenguaje C, pero como te platique la vez pasada por el msn. ahora que ya estoy aprendiendo un poquito de este lenguaje,  me puse a analisarlo y y no me parese tan complicado la cosa... pero como todo en la vida tambien tiene su pero.. ja ja ja ( nada es  lo que parece)..... bueno estube viendo el ex_tones que biene enn el programa... lo quise compilar con el mismo ..y me arrojo un error .. no se porque bueno el mensaje de error dice " A #DEVICE required before this line " no se porque me sale esto.... tal vez me puedas aclarar un poco el panorama...
Atte.
Johnny Bravo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: descifrando la libreria "tones.c" del ccs es decir, lo quiero pasar a assemb
« Respuesta #10 en: 22 de Enero de 2007, 00:22:48 »
sube el archivo C q tienes, derepnte cambiastes algo sin darte cuenta  o quizas te falto algo por ahi.  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
no lo creo que haya movido algo.. pero por las dudas. aqui esta el ex_tones
y luego te pongo el driver tones.c.. bueno yo creo que hay algo de malo aqui en el driver .. ya que cuando compilo..se va al ventana del driver tones.c y me remarca creo que el problema.. la primera C que la pongo en negrita de la tabla del driver.. mas abjo esta todo completo tal cual lo copie de verdadero archivo para pegarlo aqui.

//            NOTE                 FREQUENCY
//                     Octave0  Octave1  Octave2  Octave3
const long C_NOTE[4]  ={ 262,     523,    1047,    2093};
const long Db_NOTE[4] ={ 277,     554,    1109,    2217};
const long D_NOTE[4]  ={ 294,     587,    1175,    2349};
const long Eb_NOTE[4] ={ 311,     622,    1245,    2489};
const long E_NOTE[4]  ={ 330,     659,    1329,    2637};

/////////////////////////////////////////////////////////////////////////
////                          EX_TONES.C                             ////
////                                                                 ////
////  This example plays the song "Happy Birthday."                  ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////     Connect the positive wire of the speaker to pin 47 (B0)     ////
////     Connect the negative wire of the speaker to pin 27 (Gnd)    ////
////                                                                 ////
////  This example will work with the PCM and PCH compilers.  The    ////
////  following conditional compilation lines are used to include a  ////
////  valid device for each compiler.  Change the device and clock   ////
////  pins for your hardware if needed.                              ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#endif

#include <tones.c>

#define SIZE 25

const struct note
{
   long tone;
   long length;
} happy_bday[SIZE] = {
C_note[0],350, C_note[0],100, D_note[0],500, C_note[0],500, F_note[0],500, E_note[0],900,
C_note[0],350, C_note[0],100, D_note[0],500, C_note[0],500, G_note[0],500, F_note[0],900,
C_note[0],350, C_note[0],100, C_note[1],500, A_note[0],500, F_note[0],500, E_note[0],500, D_note[0],900,
Bb_note[0],350, Bb_note[0],100, A_note[0],500, F_note[0],500, G_note[0],500, F_note[0],1200};


void main(void)  {
   int i;

   while(TRUE)
   {
      for(i=0; i<SIZE; ++i)
      {
         generate_tone(happy_bday.tone,happy_bday.length);
         delay_ms(75);
      }
   }
}


////////////////// Driver to generate musical tones /////////////////////
////                                                                 ////
////  generate_tone(frequency, duration)     Generates wave at set   ////
////                                         frequency (Hz) for set  ////
////                                         duration (ms)           ////
////                                                                 ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#ifndef  MUSIC_NOTES
#define  MUSIC_NOTES

//            NOTE                 FREQUENCY
//                     Octave0  Octave1  Octave2  Octave3
const long C_NOTE[4]  ={ 262,     523,    1047,    2093};
const long Db_NOTE[4] ={ 277,     554,    1109,    2217};
const long D_NOTE[4]  ={ 294,     587,    1175,    2349};
const long Eb_NOTE[4] ={ 311,     622,    1245,    2489};
const long E_NOTE[4]  ={ 330,     659,    1329,    2637};
const long F_NOTE[4]  ={ 349,     698,    1397,    2794};
const long Gb_NOTE[4] ={ 370,     740,    1480,    2960};
const long G_NOTE[4]  ={ 392,     784,    1568,    3136};
const long Ab_NOTE[4] ={ 415,     831,    1661,    3322};
const long A_NOTE[4]  ={ 440,     880,    1760,    3520};
const long Bb_NOTE[4] ={ 466,     923,    1865,    3729};
const long B_NOTE[4]  ={ 494,     988,    1976,    3951};
#endif

#define TONE_PIN  PIN_B0


void do_delay(int ms_delay, int num_ms, int us_delay, int num_us)  {
 int i;

 for(i=0;i<num_ms;i++)
  delay_ms(250);
 delay_ms(ms_delay);
 for(i=0;i<num_us;i++)
  delay_us(250);
 delay_us(us_delay);
}


void generate_tone(long frequency, long duration)
{
   int32 total_delay_time;                      // in microseconds
   long total_ms_delay_time, total_us_delay_time;
   int num_us_delays, num_ms_delays, ms_delay_time, us_delay_time;
   long num_periods;

   total_delay_time = (1000000/frequency)/2-10; // calculate total delay time (10 for error)

   total_ms_delay_time = total_delay_time/1000; // total delay time of ms
   num_ms_delays = total_ms_delay_time/250;     // number of 250ms delays needed
   ms_delay_time = total_ms_delay_time%250;     // left over ms delay time needed

   total_us_delay_time = total_delay_time%1000; // total delay time of us (ms already acounted for)
   num_us_delays = total_us_delay_time/250;     // number of 250us delays needed
   us_delay_time = total_us_delay_time%250;     // left over us delay time needed

   num_periods = ((int32)duration*1000)/(1000000/frequency);

   while((num_periods--) != 0)
   {
      do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
      output_high(TONE_PIN);
      do_delay(ms_delay_time, num_ms_delays, us_delay_time, num_us_delays);
      output_low(TONE_PIN);
   }

   return;
}
« Última modificación: 22 de Enero de 2007, 05:44:12 por Nocturno »
Atte.
Johnny Bravo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: descifrando la libreria "tones.c" del ccs es decir, lo quiero pasar a assemb
« Respuesta #12 en: 22 de Enero de 2007, 10:37:20 »
tio porq copias de nuevo la tabla de valores??????


//            NOTE                 FREQUENCY
//                     Octave0  Octave1  Octave2  Octave3
const long C_NOTE[4]  ={ 262,     523,    1047,    2093};
const long Db_NOTE[4] ={ 277,     554,    1109,    2217};
const long D_NOTE[4]  ={ 294,     587,    1175,    2349};
const long Eb_NOTE[4] ={ 311,     622,    1245,    2489};
const long E_NOTE[4]  ={ 330,     659,    1329,    2637};           porq copias todo esto?

/////////////////////////////////////////////////////////////////////////
////                          EX_TONES.C                             ////
////                                                                 ////
////  This example plays the song "Happy Birthday."                  ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////     Connect the positive wire of the speaker to pin 47 (B0)     ////
////     Connect the negative wire of the speaker to pin 27 (Gnd)    ////
////                                                                 ////
////  This example will work with the PCM and PCH compilers.  The    ////
////  following conditional compilation lines are used to include a  ////
////  valid device for each compiler.  Change the device and clock   ////
////  pins for your hardware if needed.                              ////

#include <tones.c>   si aca estas incluyendolo denuevo!!!


cuando pones ea linea include tones.c ya estas colocando todo el contenido del archiv tones.c al programa ex_tones.c, ademas el ejmplo viene sin la tabla q le has puesto jijiji, eso tu los agregado o no? jijij porq!!!!,  :-), bueno ese es el error porque yo no toque nada y salia normal. saludos y exitos!!!!!!!!!!!!! :-/


a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado johnnybravo

  • PIC12
  • **
  • Mensajes: 76
bueno man eso fue un error ... pero solo aqui en el foro.. esque  estube intentando muchas veces subir una fotito del mensaje de error que me da mi pc... y al final no lo pude subir ..no se porque .. pero en duarnte esa mechadera con la pese por subir la foto... parece que se me colo ese retaso del codigo por ahi arriba.... pero no te preocupes que eso no aparece en el ejemplo ex_tones.c.. aqui esta de nuevo .. y me sigue dando error.. no se porque?

Código: [Seleccionar]
/////////////////////////////////////////////////////////////////////////
////                          EX_TONES.C                             ////
////                                                                 ////
////  This example plays the song "Happy Birthday."                  ////
////                                                                 ////
////  Configure the CCS prototype card as follows:                   ////
////     Connect the positive wire of the speaker to pin 47 (B0)     ////
////     Connect the negative wire of the speaker to pin 27 (Gnd)    ////
////                                                                 ////
////  This example will work with the PCM and PCH compilers.  The    ////
////  following conditional compilation lines are used to include a  ////
////  valid device for each compiler.  Change the device and clock   ////
////  pins for your hardware if needed.                              ////
/////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,2003 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.  Derivative programs created using this software    ////
//// in object code form are not restricted in any way.              ////
/////////////////////////////////////////////////////////////////////////


#if defined(__PCM__)
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

#elif defined(__PCH__)
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#endif

#include <tones.c>

#define SIZE 25

const struct note
{
   long tone;
   long length;
} happy_bday[SIZE] = {
C_note[0],350, C_note[0],100, D_note[0],500, C_note[0],500, F_note[0],500, E_note[0],900,
C_note[0],350, C_note[0],100, D_note[0],500, C_note[0],500, G_note[0],500, F_note[0],900,
C_note[0],350, C_note[0],100, C_note[1],500, A_note[0],500, F_note[0],500, E_note[0],500, D_note[0],900,
Bb_note[0],350, Bb_note[0],100, A_note[0],500, F_note[0],500, G_note[0],500, F_note[0],1200};


void main(void)  {
   int i;

   while(TRUE)
   {
      for(i=0; i<SIZE; ++i)
      {
         generate_tone(happy_bday.tone,happy_bday.length);
         delay_ms(75);
      }
   }
}

aqui esta el codigo tal i como aparece en el el ejemplo.. la verdad es que no he movido nada .. ni si quiera una coma....
ayudame porfa ..tal vez puedas mandarme tu ejemplo.. tal ves algo esta mal con el mio ....no lo se
« Última modificación: 23 de Enero de 2007, 06:38:05 por Nocturno »
Atte.
Johnny Bravo

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: descifrando la libreria "tones.c" del ccs es decir, lo quiero pasar a assemb
« Respuesta #14 en: 23 de Enero de 2007, 01:56:44 »
q raro¿? encontre algo diferente en el codigo q posteastes en el ultimo,

este es el q tengo en mi maquina

Código: [Seleccionar]
while(TRUE)
   {
      for(i=0; i<SIZE; ++i)
      {
         generate_tone(happy_bday[i].tone,happy_bday[i].length);
         delay_ms(75);
      }
   }
}


ves la diferencia con el tuyo?, le faltan los indices del array ""  esto, ponle y ve q fue, porsiaca te mando el q esta en maquina. eso e slo unico distinto, exitos amigo!!!  :-/

PD: sigo traduciendo el codigo, ta feo hay una parte q no entiendo ya mañana lo subo con mas calma, hasta luego amigos  :-/ !!!
« Última modificación: 23 de Enero de 2007, 06:37:44 por Nocturno »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything