TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: overnat en 29 de Mayo de 2009, 04:55:28
-
Hola ,
Lo primero que quiero decir es que soy muy novato en todo esto y es posible que se lean burradas grandiosas :) .
Estoy intentando programar un pic 16F84A para enviar mensajes midi.
En principio he comenzado a intentar mandar un mensaje automatico desde el pic , es decir , he hecho un script que imprime con printf el mensaje midi .
Segun he estado leyendo para enviar mensajes midi se debe utilizar una velocidad de 31250 bps , por lo que me es imposible testear el resultado por el puerto serial del pc .
El script que utilizo es este
main {
while(TRUE)
{
printf("0x90"); //Esto se supone que enviaria el bit de status midi Note On
printf("0x40"); //Esto la nota seleccionada
printf("0xF7");//Esto seria el velocidad de la nota
delay_us(200);
printf("0x80"); //Esto enviaria el bit de status midi Note Off
printf("0x40"); //Esto la nota seleccionada
printf("0xF7");//Esto seria el velocidad de la nota
}
}
Como veis mas basico no se puede :) .
En teoria cuando inicio el chip tendria que enviar continuamente la nota 0x40 , pero estoy capturando los datos enviados por midi con un programa llamado Midi Monitor 2002 y este no me muestra nada de nada .
Podeis ayudarme un poco con el tema , la info que encuentro esta mas que nada en ensamblador y yo de esto poco + q poco .
Salu2
-
Hola de nuevo
Os dejo la respuesta a mi pregunta por si a algun otro le vale .
El tema del midi es "bastante sencillo" de implementar en un microcontrolador , ya que funciona con señales TTL y comunicacion muy similar a la comunicacion en serie RS232 .
El problema que se me planteaba a mi es que no conseguia enviar los dichosos mensajes midi al controlador midi conectado al pc .
El primer script
/*Aqui tendremos nuestros includes y la configuracion del puerto RS232 .La velocidad en baudios para el midi es de 31250 bps */
main {
while(TRUE)
{
printf("0x90"); //Esto enviaria el bit de status midi Note On
printf("0x40"); //Esto la nota seleccionada
printf("0xF7");//Esto seria el velocidad de la nota
delay_us(200); //Espero y apago la nota .
printf("0x80"); //Esto enviaria el bit de status midi Note Off
printf("0x40"); //Esto la nota seleccionada
printf("0xF7");//Esto seria el velocidad de la nota
}
}
El script anterior no funciona correctamente , por que la funcion printf no respeta la velocidad de envio de datos que hemos configurado ( Por lo menos a mi no me lo hace ) . Pero si utilizamos la funcion putc(); todo funcionara correctamente y nuestro pic enviara la nota que hallamos seleccionado ó modificara el control seleccionado .
Salu2
-
Hola de nuevo
Os dejo la respuesta a mi pregunta por si a algun otro le vale .
El tema del midi es "bastante sencillo" de implementar en un microcontrolador , ya que funciona con señales TTL y comunicacion muy similar a la comunicacion en serie RS232 .
El problema que se me planteaba a mi es que no conseguia enviar los dichosos mensajes midi al controlador midi conectado al pc .
El primer script
/*Aqui tendremos nuestros includes y la configuracion del puerto RS232 .La velocidad en baudios para el midi es de 31250 bps */
main {
while(TRUE)
{
printf("0x90"); //Esto enviaria el bit de status midi Note On
printf("0x40"); //Esto la nota seleccionada
printf("0xF7");//Esto seria el velocidad de la nota
delay_us(200); //Espero y apago la nota .
printf("0x80"); //Esto enviaria el bit de status midi Note Off
printf("0x40"); //Esto la nota seleccionada
printf("0xF7");//Esto seria el velocidad de la nota
}
}
El script anterior no funciona correctamente , por que la funcion printf no respeta la velocidad de envio de datos que hemos configurado ( Por lo menos a mi no me lo hace ) . Pero si utilizamos la funcion putc(); todo funcionara correctamente y nuestro pic enviara la nota que hallamos seleccionado ó modificara el control seleccionado .
Salu2
Hola overnat. La verdad es que tu respuesta me ha aclarado bastante cómo configurar el PIC, pero el caso es que tras comprobar (con osciloscopio) que envía los 3 bytes (note on, nota, duración) lo he conectado a un aparato con entrada midi y no hace nada. El canal midi al que me dirijo es el correcto. ¿Alguna idea?
Gracias
-
Así a ojo esto está mal:
printf("0xF7");//Esto seria el velocidad de la nota
El valor máximo para un byte de dato es 0x7F