Autor Tema: del papel al circuito midiScratch  (Leído 17186 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
del papel al circuito midiScratch
« en: 26 de Septiembre de 2007, 17:07:19 »
hola a todos.  Me estreno en este apartado del foro para compartir el proyecto hasta donde lo he desarrollado y que a quien le apetezca aportar alguna idea para mejorar las opciones lo comente en algún lugar :mrgreen: y no en mi correo, que asi  queda constancia de sus dudas y aportes al proyecto que pueden beneficiar a otros

es un controlador midi para sincronizar la posicion y la velocidad de secuenciadores a traves de un codigo grabado en vinilo o un encoder,etc he visto cosas parecidas sobre cinta magnetica
 el pic usado es un 16f877-a, programado en ensamblador con mplab y simulado en proteus isis.

voy a intentar explicar que hace el programa de forma breve supongo que seria una especie de
mini esquema de como funciona:
el prog inicia configurando puertos, igualdades , moviendo de un lado a otro la configuracion de los dispositivos
como las entradas analogicas o la usart .....

el bucle principal PROGRAMA envia una señal active sensing cada tercio de segundo unos 333 milseg
lo que sigue al programa es lo que hace en funcion de lo que suceda en las interrupciones

TMR0 hace una interrupcion si pasa a 0, x veces seguidas, sin que un envio por la usart refresque el timer y el registro de las repeticiones
llamado ESPERA. al final del asm hay una linea de codigo  en la que se puede cambiar  el tiempo en que tarda en terminar su cometido. este es mandar la señal de stop si el aparato está andando y se para el disco

PB0 esta lo que recibe es la suma de los impulsos generados por el encoder, vinilo... lo que a cada uno le convenga , la suma quiere decir
que si el pulso a es         __XX__XX_
               y el pulso b es _XX__XX__
la suma de los dos es     _XXX_XXX_
es una señal repetitiva de 01 grabada en cada canal desfasadas 90 grados unos 47.8 Hz a 120BPM lo que dice unos 6 tiks por negra,24 por nota blanca, 96 ticks por compas de 4/4 (corrijanme aqui si hace falta que me lio con los ticks y tocktuk)
esta configurada para que salte la interrupcion de PB0 cada vez que pasa del flanco descendente  0, al ascendente 1
entonces testea el estado de las patillas RD0 y RD1en funcion de si es uno o cero cambia la direccion del programa
   hacia adelante testea que no venga de estar parado, si estaba parado envia la señal de posicion SPP seguido de  continue  y  el correspondiente timming clock  , asi empieza en la posicion que se haya guardado , si ya estaba en marcha solo envia la señal de timming clock
 si por el contrario va hacia atras, envia la señal de stop, y recupera posiciones en el SPP.

las interrupciones de portb 4567

son continue, stop  no uso start por que empieza siempre al principio

reset limpia los registros de SPP que son MSB-PHRASE; LSB-STEP; POINTS-SUMA y empieza desde el principio

cue , copia el valor de los reg del tmr2 sobre los registros del del SPP para empezar en ese punto de la cancion cada vez que se presione
la patilla de entrada de contador de eventos TMR1 tiene puesto otro interruptor para avanzar posiciones en el contador asi al pulsar el boton de cue coge del tmr1 los datos para saber la posicion donde tiene que empezar el secuenciador

ya queda preparar el circuito

este es el pcb que voy a hacer para las pruebas ,no es mas que una placa modificada de ucapps

Implementación MIDI 1.0
Syncing Sequence Playback
Final Scratch

un saludo    :-) 


« Última modificación: 14 de Noviembre de 2007, 13:59:45 por alogic.on »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18311
    • MicroPIC
Re: del papel al circuito midiScratch
« Respuesta #1 en: 27 de Septiembre de 2007, 02:17:23 »
Conste que no me he enterado de nada de lo que hace tu circuito, porque no tengo ni idea de MIDI. Sólo escribo para darte las gracias por compartirlo y para decirte que me ha encantado el ruteo de esa placa; se ve muy ordenado y limpio.
¿Lo has probado ya?

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: del papel al circuito midiScratch
« Respuesta #2 en: 27 de Septiembre de 2007, 06:59:30 »
hola
lo estoy montando a ver si funciona, cruzo los dedos pues es mi primer programa que intento poner en práctica, a parte de mil pruebas echas en el isis.
 
la placa debería funcionar, de donde saque el modelo original  anda perfectamente,
solo le he añadido conectores para usarla como placa de pruebas  :-)

un saludo y gracias
« Última modificación: 01 de Octubre de 2007, 11:52:44 por alogic.on »

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: del papel al circuito midiScratch
« Respuesta #3 en: 28 de Septiembre de 2007, 07:10:35 »
primera impresion, me ha explotado el condensador de 2200uf en la cara  :?, hice un corto mientras medía.¡¡toma ya¡¡
segundo intento , con mas cuidado de no cargarme nada jejej ,y no hace nada, no varia el estado de ninguna de las puertas.
a la tercera va la vencida dicen algunos... lo vuelvo a poner en cargador y le meto un programa muy sencillo , solo para mover unos leds en el puerto b
Código: ASM
  1. LIST         p=16f877A
  2.                 #include <p16f877.inc>
  3. ;------------------------------------
  4. PDel0   EQU             0X22
  5. PDel1   EQU             0X23
  6. PDel2   EQU             0X24
  7.  
  8.                         org     0
  9.         goto    empieza
  10.     org     4
  11.         goto    programin
  12.         org             6
  13. ;------------------------------------
  14. ;------------------------------------
  15. empieza
  16.         BSF     STATUS,5
  17.         movlw   b'00000000'
  18.         movwf   TRISB
  19.  
  20. programin
  21.         BCF     STATUS,5
  22.         CALL    retardo
  23.         inCfsz  PORTB
  24.         GOTO    programin
  25. programine
  26.         call    retardo
  27.         decfsz  PORTB
  28.         GOTO    programine
  29.         movlw   b'10101010'
  30.         MOVWF   PORTB
  31.         CALL    retardo
  32.         movlw   b'01010101'
  33.         MOVWF   PORTB
  34.         CALL    retardo
  35.         movlw   b'10101010'
  36.         MOVWF   PORTB
  37.         CALL    retardo
  38.         movlw   b'01010101'
  39.         MOVWF   PORTB
  40.         CALL    retardo
  41.         movlw   b'10101010'
  42.         MOVWF   PORTB
  43.         CALL    retardo
  44.         movlw   b'01010101'
  45.         MOVWF   PORTB
  46.         RLF             PORTB
  47.         CALL    retardo
  48.         RLF             PORTB
  49.         CALL    retardo
  50.         RLF             PORTB
  51.         CALL    retardo
  52.         RLF             PORTB
  53.         CALL    retardo
  54.         RLF             PORTB
  55.         CALL    retardo
  56.         CLRF    PORTB
  57.         GOTO    programin
  58.        
  59. ;---------------------------------
  60. retardo
  61.         movlw   .125
  62.         movwf   PDel0
  63. retardon  
  64.         incfsz  PDel0
  65.         GOTO    retardon       
  66.         clrf    PDel0
  67.         return
  68.                 end
y en el simulador funciona tanto en isis como en picsimulator  :?, ya daba por echo que era el circuito lo que estaba mal , pero le he metido otro programa , un sistema operativo de ucapps y el programa funciona perfectamente  :( :( asi que por eliminacion algo hago mal a la hora de cargar mi programa. me voy a la seccion de principiantes a ver si encuentro una solución

gracias y un saludo

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: del papel al circuito midiScratch
« Respuesta #4 en: 01 de Octubre de 2007, 03:42:39 »
¿Qué secuenciador pretendes manejar?
Por lo que he logrado entender, quieres trabajar con Virtual Dj o alguno similar.
Yo ando haciéndome una LC también basándome en el material de ucapps y el perfil de Mackie Control, para tabajar con Nuendo.
Por el momento estoy desarrollando en Delphi una emulación software que conecto al secuenciador a través de Midi-Yoke para ir definiendo funcionalidades y destripando lo más posible el protocolo del hardware que pretendo imitar,aunque estoy teniendo algún problemilla con la gestión del midi...más que nada consistente en que al cerrar el puerto,a Nuendo no le sienta demasiado bien y tengo que desconectarle de dicho puerto también antes de volver a ejecutar mi soft controlador.Lo tuyo es puramente hard externo por lo que supongo que no has lidiado con este tema.
Comentas que tu programa no va pero el SO de ucapps si ¿te refieres a MIOS? que yo sepa,ese simplemente hace de bootloader y gestiona la comunicación midi,pero no implementa funcionalidad alguna con la que puedas hacer trapicheos midi.
¿Qué se supone que debería hacer tu programa? ¿has probado a monitorizar con MIDI-OX?

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: del papel al circuito midiScratch
« Respuesta #5 en: 01 de Octubre de 2007, 11:50:14 »
hola
Citar
¿Qué secuenciador pretendes manejar?
Por lo que he logrado entender, quieres trabajar con Virtual Dj o alguno similar.
esta pensado para manejar secuenciadores hard. o tipo ableton cubase,

Citar
Comentas que tu programa no va pero el SO de ucapps si ¿te refieres a MIOS? que yo sepa,ese simplemente hace de bootloader y gestiona la comunicación midi,pero no implementa funcionalidad alguna con la que puedas hacer trapicheos midi.
mi programa no utiliza mios, decia que el circuito si funciona con mios, todavia no consigo comprender bien como funciona mios para hacer mis propias aplicaciones basadas en el.

Citar
¿Qué se supone que debería hacer tu programa? ¿has probado a monitorizar con MIDI-OX?
no todavia no funciona en el circuito pero es donde tendré que verificar antes de probarlo, con respecto a lo que hace el programa es muy sencillo sincroniza un esclavo con un maestro, en este caso un encoder incremental , con la diferencia de final scratch o serato .... estos cuando se mueve el disco envian ordenes al programa de posicion y direccion de giro el mio solo envia la posicion de giro y stop en vez de hacia atras y cuando vuelve hacia adelante posicion y continue, usease solo suena hacia adelante  yo uso grooveboxes tipo hard. y estas no tienen la versatilidad de un vinilo , menos todavia los programas del ordenador

un saludo y gracias voy a seguir haciendo pruebas a ver si soluciono el por que no furrula el programa sobre el micro

PD- si le quereis echar un ojo a mi controlador de 64 entradas analogicas imitando al de ucapps os lo dejo adjunto
« Última modificación: 14 de Noviembre de 2007, 14:00:16 por alogic.on »

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: del papel al circuito midiScratch
« Respuesta #6 en: 01 de Octubre de 2007, 16:21:09 »
MIOS es un bootloader de dos niveles que permite comunicar al micro con el host vía midi para labores de gestión y configuración que "la aplicación (tu programa)" pueda implementar,además de permitir reprogramar al micro cuando quieras y con lo que quieras vía midi.
Aparte del bootloader,si no estoy confundiendo conceptos,MIOS también se compone de su correspondiente aplicación en el host que hace de downloader y otras muchas cositas interesantes.
La mayor utilidad que le veo es la posibilidad de reprogramación del micro de forma fácil a través del puerto midi,y poco más,aunque ojeando los screenshots de la aplicación host de MIOS, ésta se ve bastante seriota,potente y funcional.
Para llevar a cabo estas labores,el firmware MIOS implementa las funciones necesarias para la transmisión y recepción midi mediante la usart del micro,además del protocolo necesario para la comunicación con el downloader.Esto quiere decir que si tu firmware va a correr bajo MIOS,tendrás que implementarlo siguiendo las pautas que marcan el uso de un bootloader,además de que todo lo que sea acceso al puerto serie (midi) deberás hacerlo a través de ese bootloader y sus funciones implementadas a tal efecto.
En ucapps hay montones de código útil,y en concreto hay una especie de código fuente esqueleto del cual partir para desarrollar tu aplicación basada en MIOS,disponibles tanto en asm como en C,si no recuerdo mal.
En mi caso,no tengo pensamiento de usar MIOS para mi controladora,pero si de hacerle su bootloader con una filosofía parecida.
Créeme que te vendrá muy bien midi-ox para depurar tu programa,ya que te permite monitorizar el tráfico de datos en los puertos midi del pc.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: del papel al circuito midiScratch
« Respuesta #7 en: 02 de Octubre de 2007, 15:46:58 »
hola y gracias, excelente programa midi-ox lo utilizo desde hace tiempo para actualizar los sintes que tengo
creo que no me explique bien, el programa midiScratch no es una aplicacion para mios, decia que si le cargo mios , por tenerlo a mano ya ensamblado y listo para ser quemado, este corre sobre el pic, cosa que no hace ninguno de los programas que yo hice.Por una u otra causa  :(
Con respecto a mios lo unico que puedo decir es que decidi empezar a programar para poder comprender bien como funciona, pero de momento estoy con los pic16xxx cosa que me lia cuando veo el codigo de mios y mientras estudio van saliendo programas ejemlo como este, que no son programables desde la usart, no se basan en mios, ni nada parecido, pero que van surgiendo de un culo inquieto como yo :-) :-) , los usuarios de midibox me han aconsejado que piense en el bootloader como si fuera la bios de un ordenador, mios el sistema operativo y las aplicaciones como si fueran programas, que asi me seria mas sencillo entenderlo, y bueno voy haciendo mis pinitos con eso, como cambiar el orden de los mensajes en pantalla o utilizar dec de 7 segmentos en vez de leds, uso los esqueletos de asm pues no conozco nada de c, dicen que es mas facil pero yo de momento no le veo la logica, cuando haya mascado bien el asm tendre algo que aprender mientras tanto lo he dejado de lado
coincido contigo en que lo mas interesante es el poder modificar el programa a traves de la usart me tiene perplejo , todavia intrigado en como se hace, pero todo se andará
con respecto a lo que me has comentado sobre el proyecto en que estas embarcado solo puedo desearte suerte y ningiun problema, cuando vayas a enseñarlo tenme en cuenta, que me gustaria verlo  :mrgreen:

gracias y un saludo

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: del papel al circuito midiScratch
« Respuesta #8 en: 02 de Octubre de 2007, 19:13:45 »
Suerte espero tener yo también,aunque ningún problema...eso es...imposible.Ya los estoy teniendo y sólo estoy trabajando en una emulación software,sin hardware ninguno implicado,pero bueno,todo se andará :)

Volviendo al tema del bootloader...
Supongamos que no hay bootloader,como en el caso de ese programita que no consigues hacer funcionar.
Cuando el micro es reseteado o cuando le conectas la alimentación,él empieza la ejecución en la dirección 0 de la memoria de programa,es decir,en tu caso ejecutaría la instrucción:

goto empieza ; DE AHI QUE VAYA PRECEDIDA POR "org 0",PARA QUE SEA UBICADA EN ESA DIRECCION

...y acto seguido se pondría a ejecutar la rutina "empieza".

Previamente a todo esto,has necesitado programar el pic de alguna forma,ya sea con un programador o mediante ICSP, con el objetivo de que tu pic pueda correr la aplicación que has escrito y después le has transferido a su memoria de programa.

Ahora vamos a hacerlo con un bootloader.
Cada bootloader tiene sus peculiaridades y no todos tienen por qué comportarse exactamente de la forma que voy a detallar,pero para que le pilles mejor el rollo a como funciona el asunto,demos por hecho que sí.
Un bootloader es una aplicación,como puede serlo la tuya,pero con unas características y una misión concretas.Este bootloader se escribe en asm,C o en el lenguaje que sea y después se le transfiere al pic de la misma forma que se hace con cualquier archivo .hex.
Lo que hace especial al bootloader que convivirá con la aplicación es que éste ocupará las primeras posiciones de memoria,incluida la posición 0 (para asegurarse el "mando" del micro tras un reset),y también las últimas (donde está el grueso de su código, qué basicamente consiste en una rutina de manejo del puerto serie y de otra para escribir datos en la memoria de programa).
Ahora bien,todo bootloader que se precie debe estar pensado y desarrollado para funcionar en conjunto con un Downloader,el cual no es mas que una aplicación en el pc que le puedes cargar ficheros .hex para que los transfiera por el puerto serie,de una forma similar a la que midi-ox te permite cargar ficheros (sysex supongo) y mandárselos a tus sintes.

Vamos a suponer,por decir un número,que el bootloader ocupa las 10 primeras posiciones de memoria de programa del micro y las 100 últimas.
Pues bien,al hacerle un reset al pic,se empezaría a ejecutar el bootloader,que lo primero que haría sería preguntar por puerto serie "hey downloader, ¿estás ahí?" ,en el caso de no recibir respuesta,automáticamente el bootloader cedería el paso a la aplicación,haciendo por ejemplo un "goto 10",posición a partir de la cual debería estar la aplicación,que no soltaría los mandos del micro hasta el supuesto de producirse un nuevo reset.
Si al llamar a su downloader,el bootloader recibe respuesta,entonces se iría al grueso de su código en las última posiciones de memoria del micro y se quedaría en un bucle esperando órdenes de dicho downloader.Y la orden estrella sería "atento,que te envío byte a byte un archivo .hex para que lo vayas escribiendo en la memoria de programa".
Evidentemente,a la hora de escribir tu aplicación en el compilador o ensamblador,debes hacer uso de las directivas "org" para asegurarte de que dicha aplicación será colocada a partir de la posición 10 de memoria y no machaques el bootloader,si no,se jode el invento.

La comparación con una bios es perfecta,al arrancar o resetear un pc,quien primero entra en juego es la bios,si no recibe el estímulo a través del teclado para entrar en su menú,se quita de enmedio y deja paso al sistema operativo,quien se encargará de gestionar el hardware del ordenador y pemitir a los programas que puedan interaccionar con él,haciendo de intermediario.

De ahí que me refiriese a MIOS como un bootloader de dos niveles...
El primer nivel sería el encargado de hacer la primera llamada al donwloader (MIOS host) y llevar a cabo una posible reprogramación del micro con una nueva aplicación,o bien,si no recibiese respuesta a su llamada,se encargaría de dar paso,si no me equivoco,al segundo nivel,lo que sería el sistema operativo.Este sistema operativo implementaría el protocolo para poder comunicarse también con MIOS host,el cual, además de permitir la reprogramación del micro a través del primer nivel del bootloader,implementa unas pocas más de funcionalidades que pueden proporcionar versatilidad a las aplicaciones.De todo esto deduzco,y creo que no voy mal encaminado,que el sistema operativo no suelta el control del micro en ningún momento,digamos que lo comparte con la aplicación,ya que todos los datos,sean mensajes midi o sysex,pasan a través de él.Y en un momento dado una cadena sysex entrante podría ser perfectamente un comando enviado por MIOS host,por lo que el sistema operativo debe estar ahí atento para tomar las riendas o para dejar pasar los datos a la aplicación.

Agusto me he quedao con el tostón que he soltao :mrgreen:
« Última modificación: 02 de Octubre de 2007, 19:18:34 por Modulay »

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: del papel al circuito midiScratch
« Respuesta #9 en: 03 de Octubre de 2007, 05:50:20 »
toma ya¡¡¡¡ agusto te has quedado  :mrgreen:
donde puedo encontrar informacion sobre como programar el micro por la usart, cada vez me gusta mas la idea de poder actualizar el soft sin tener que quitar el pic del circuito  :-)

dejo un enlace por si no lo conocian, seguro que por lo menos se rien con el humor del individuo que lo escribió  :mrgreen:
http://www.borg.com/~jglatt/


y a seguir buscando el fallo en el programa "otro dia movidito"
un saludo y gracias

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: del papel al circuito midiScratch
« Respuesta #10 en: 03 de Octubre de 2007, 17:02:33 »
Para programar el micro vía serie necesitas usar un bootloader con su correspondiente downloader.
Yo antes de meterme en esos berenjenales,procuraría buscarle solución al problema que tienes ahora.
Por cierto ¿R25 es de 100 ohmios?

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: del papel al circuito midiScratch
« Respuesta #11 en: 03 de Octubre de 2007, 17:06:47 »
Ahí va una imagen del aspecto que va teniendo la emulacion de la mackie control :-)


Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: del papel al circuito midiScratch
« Respuesta #12 en: 03 de Octubre de 2007, 17:09:38 »
Hola Modulay. La verdad que está de lujo. Felicitaciones.

Saludos.  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: del papel al circuito midiScratch
« Respuesta #13 en: 03 de Octubre de 2007, 17:57:08 »
Gracias Leon.
La gestión de los puertos midi me está dando algún problemilla,por lo que debo desconectar al secuenciador del midi-out (que sería el midi-in de emucontrol) previamente a ejecutar Emucontrol,ya que al cerrar Emucontrol,también cierro el puerto midi,y eso no le sienta bien al secuenciador,hasta tal punto que se queda colgado si no le desconecto de dicho puerto antes de volver a ejecutar Emucontrol.
Veremos sin consigo solucionarlo.
Saludo

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: del papel al circuito midiScratch
« Respuesta #14 en: 04 de Octubre de 2007, 04:54:28 »
hola, te esta quedando estupenda  :mrgreen: y si, R25 es de 100 ohm. si quieres desde el privado te cuento como abrir mi archivo de eagle jeje , pero tienes el circuito original en ucapps, modulo core
ya se que estaba haciendo mal, mil gracias a todos los que me ayudaron. Eran los fuses que por alguna razon el programa de Brenner no los configura, hay que hacerlo desde el mplab, que se le va a hacer.De momento he podido probar un programitas para encender unos leds.
A seguir donde lo dejé y ver que sale  :-/

esta es la linea que le faltaba al programa:
;-------------------------------------palabra de configuracion--------------------------------------
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC&_BODEN_ON&_LVP_OFF
;-------------------------------------------------------------------------------------------------------
voy a dejar la programacion por la usart.... de momento. Pero ya les preguntare a todos ustedes donde encontrar info de como hacerlo.

gracias y un saludo