No tengo muchos conocimientos del tema, pero te intentare ayudar en lo que pueda... asi me preparo para cuando me llegue la universidad a mi, y me pongan semejantes proyectos... no olvides rayarle el coche a tu profe, se lo merece "de todo corazon"...
Al grano. El teclado supongo que será un 4x4 verdad? Por lo tanto, usariamos un puerto entero para el manejo de este teclado (4 filas + 4 columnas = 8 salidas ).
Veamos, para la entrada de la voz, usariamos un ADC, en este caso el del PIC. Si 10 bits no son suficientes, tal vez deberias usar un ADC externo con mas resolucion, pero talvez sea complicar todo demasiado. Por lo tanto, para la entrada usamos el ADC enclavado en PORTA.
Para sacar los datos a los altavoces, debes de usar un DAC externo, que tenga bastante resolucion, y que sea rapido. No conozco mucho sobre DACs pero seria cuestion de documentarse.
La velocidad debe de ser la maxima, 20mhz en este caso. Si pudieras usar un 18F452, mejor, pues este soporta 40mhz. No obstante no creo que debas de hacer uso de las interrupciones para nada.
Los algoritmos, espero que te gusten:
-Placa madre
>Arranque (variables,declaraciones etc)
2>Esperar respuesta del teclado (pulsacion)
>Leer datos de la memoria, y enviarlos al DAC externo. (4seg,altavoz)
>Activar lectura de ADC 10 bits, enviar datos serialmente a los modulos esclavo, primero el numero clave(*). (microfono conectado a ADC)
>Acaba transmision, borrar datos temporales, ir a [2]
-Placas esclavo
1 >Chequear numero clave(*) en bucle infinito, si corresponde, seguir adelante.
>Recibir datos serialmente , y redirigirlos al DAC externo.
>Si hay mas de medio segundo de inactividad, ir a [1]
--------------
Te habras dado cuenta de que he puesto (*) en "numero clave". La cuestion es la siguiente:
Todos los dispositivos esclavo compartiran el "bus de datos" que enviara los datos referentes al ADC (cuando hablamos). Necesitamos regular la recepcion de datos segun el esclavo que seleccionemos, pues de lo contrario siempre estaremos hablando a TODOS los esclavos. Yo propongo el siguiente protocolo:
Usamos un puerto cualquiera, pero lo usamos enteramente:
BIT 7 : todos los esclavos obedecen a este BIT.
BIT 6...0 : Bits 6...0 del codigo
Cada "esclavo" tendria grabado un codigo en él, que difiera de todos los demas. Asi , antes de empezar a enviar datos de voz serialmente, activariamos los bits correspondientes a este bus. Si te has dado cuenta, asi podemos activar hasta 128 esclavos (por si piensas patentarlo a alguna mansion marbellí
.
Asi, para activar el esclavo 4: 00000100
42: 00101010
Para activar TODOS los esclavos: 10000000
Osea, el BIT 7 seria el bit global, osea el que activa todos los esclavos. Los demas son los que seleccionan el esclavo.
Espero haberte ayudado lo más posible.
salu2