Hola romyggar,
muchas gracias por toda la información, nos queda claro todos los puntos a tener cuenta. Más o menos es como nosotras habíamos planteado, pero las estrategias que nos comentas las implementaremos para mejorar el código.
No obstante, tenemos una duda en cuanto a la configuración porque compramos unos transmisores (RFM12B) para una frecuencia de 433,92Mhz, pero en la hoja del fabricante nos dice que tenemos que configurarlo para indicarle la frecuencia de trabajo, el cristal que le incorporamos, velocidad, las posibles interrupciones... ¿Aunque hallamos comprado los transmisores para una frecuencia determinada debemos configurarlo igualmente? De ser así ¿se tendría que configurar en el mismo apartado que configuramos las lineas USART y SPI? Te adjunto el datasheet del transmisor por si quieres ver la parte esa que te digo donde aparecen los bits de configuración.
Respecto a las dudas que me comentas:
1. En principio ambos deberían transmitir a la misma velocidad, porque el objetivo del proyecto es tratar de establecer una comunicacion bidireccional y simultánea.
2. Sí, para cambiar la velocidad del pic en las pruebas tenemos que reprogramarlo.
3. También tiene que caber la posibilidad de interconectar más PCs (hasta 8 en un futuro)

Esta es una de las mejoras que se comentarán en el proyecto, pero de momento solo vamos a realizar pruebas con 2 PCs.
P.D: El proyecto tenemos que entregarlo la primera semana de mayo

De ahí que esté tan apurada con esto, porque la base que tenemos no es muy buena
Muchas gracias de nuevo. Saludos.
Hola de nuevo
jecyka1,
Bueno, estuve mirando el pdf que adjuntaste...y me surgió una duda: ¿Porqué elegiste precisamente este módulo?...¿fué porque usa una conexión SPI?...es que alguna vez tuve que hacer un enlace inhalámbrico entre 2 micros, y los transceptores que usé eran de lo mas sencillo de utilizar....
En lo que pude detallar, a este módulo rf, se le debe programar casi todo, sin embargo al solo encenderlo el carga unos valores por defecto en los registros internos de configuracion (Pág 14).
Te recomiendo algo, Primero conecta ambos pic usando cables, luego te preocupas por hacer funcionar los módulos RF...desde que te funcione bien la comunicacion usando cables, solamente te quedarían 2 tareas: hacer funcionar los RFs, y recalibrar los tiempos de ejecucion en los micros 8ya que al parecer, hay que programar los RFs al menos 1 vez). Aqui es donde tener cada "cosita" que hace el micro como subrutinas te es de gran ayuda, porque teniendo ya todo funcionando alámbricamente, solamente sería
incluir una subrutina extra(Ej: Configurar_rf) y ya tendrías todo andando inalámbricamente...
Lo segundo es que no te puedo dar una respuesta exacta de que si debes programar o no los módulos antes de usarlos, pero creería que si, aunque mirando los valores que traen por defecto, pareciera que se necesita poca programación (la mayoría de registros vienen precargados con los valores adecuados).
Sin embargo quise entrar mas en detalle en cada registro....prepárate porque estará larga la explicación (ojalá te sirva):
Asumo las siguientes cosas:
- El RF usa la banda de 433MHz
#------- Nombre del Registro --------------------- Valor despues de un Reset de encendido(Hexa)
1 - Configuration Setting Command ------------------------------------ 8008h
2 - Power Management Command -------------------------------------- 8208h
3 - Frequency Setting Command --------------------------------------- A680h
4 - Data Rate Command ----------------------------------------------- C623h
5 - Receiver Control Command ----------------------------------------- 9080h
6 - Data Filter Command ----------------------------------------------- C22Ch
7 - FIFO and Reset Mode Command ------------------------------------ CA80h
8 - Synchron Pattern Command ---------------------------------------- CED4h
9 - Receiver FIFO Read Command ------------------------------------ B000h
10 - AFC Command --------------------------------------------------- C4F7h
11 - TX Configuration Control Command -------------------------------- 9800h
12 - PLL Setting Command -------------------------------------------- CC77h
13 - Transmitter Register Write Command ------------------------------- B8AAh
14 - Wake-Up Timer Command ----------------------------------------- E196h
15 - Low Duty-Cycle Command ---------------------------------------- C80Eh
16 - Low Battery Detector and Microcontroller -------------------------- C000h
Clock Divider Command
17 - Status Read Command -------------------------------------------- 0000h
Nota: Reset de encendido es lo mismo que POR (Power On Reset)
----------------------------------------------------------------------------------------------------
Primer registro
Entonces, para el primer registro la forma de analizar su estado binario sería:
Configuration Setting => El valor 8008h se traduciría como "Cristal Load Capacitance" = 12pF
Bits 15 al 8 no se usan
Bit 7 = "el" = internal data register = 0 = Off.
Bit 6 = "ef" = FIFO mode = 0 = Off (por favor mirar en el pdf el efecto de tener este bit en 0)
Bit 5 y 4 = b1 y b0 = Banda de frecuencia = 0 , 0 = Reservada: Aqui deberías poner un valor
------------------------------------------------------------- diferente de 0, 0, por ejemplo
------------------------------------------------------------- 0, 1 = 433Mhz.
Bits 3 al 0 = Crystal Load Capacitance = 1,0,0,0 = 12pf (1000 = 8 y segun la fórmula esto equivale
a 12pf segun al tabla: 0000 = 8,5pf - 0001 = 9pf....entonces 1000b(8d) x 0.5pf + 8.0pf = 12pf
b = binario, d = decimal.
de aqui en adelante simplifcaré las explicaciones para no hacer tan largo el post. Es tu deber leer
con paciencia y entender el porque de lo que yo escriba (pude que me equivoque

)
----------------------------------------------------------------------------------------------------
Segundo registro: Power Management = 8208h
Traduce: "Enciende el cristal oscilador"
Bit 3 "ex" = 1.
----------------------------------------------------------------------------------------------------
Tercer registro: Frequency Setting = A680h
Traduce: "Frecuencia de operacion" = 10*(C2 + 680h(1664d)/4000) = 434.16Mhz (mira la fórmula y
comprueba este resultado) Banda = 433MHz.
Bits 10,9,7 = 1
----------------------------------------------------------------------------------------------------
Cuarto registro: Data Rate = C623
Traduce: Mirar fórmula, mis cálculos dan para Tx = 9.578kbps, para Rx = 2.6h(3h)
Bits 5,4,2,1,0 = 1
----------------------------------------------------------------------------------------------------
Quinto registro: Receiver Control = 9080
Traduce: Pin 16 = Interrupt input, response = fast, Receiver baseband = 200Khz, LNA gain select = 0
RSSI detector = -103
----------------------------------------------------------------------------------------------------
Sexto registro: Data Filter = C22C
Traduce: Filter Type = Digital filter, DOD = 4d (calcular con fórmula)
----------------------------------------------------------------------------------------------------
Séptimo registro: FIFO and Reset Mode = CA80
Traduce: Numero máximo de eventos FIFO para generar una interrupcion = 8d, Synchron pattern = 2DD4h,
FIFO fill start condition = synchron pattern, FIFO fill off, Highly sensitive RESET mode = Off.
----------------------------------------------------------------------------------------------------
Octavo registro: Synchron Pattern = CED4
Traduce: Mirar comando anterior, aqui se usan los bits b7 al b0, segun la opcion "Synchron pattern"
del registro séptimo.
----------------------------------------------------------------------------------------------------
Noveno registro: Receiver FIFO Read = B000
Traduce: Mirar primer registro, en la opcion Bit 6.
----------------------------------------------------------------------------------------------------
Decimo registro: AFC = C4F7
Traduce: Operation Mode = Keep the f.offset value independently from the state of the VDI signal,
Max deviation = +3 f res to -4 f res (mirar tabla en pdf para entender lo que significa)
Strobe edge = off, Modo de veracidad fina = On (mirar que es veracidad
aqui), Bit 1 y 0, activan
los registros de calibracion del PLL interno y del circuito AFC.
----------------------------------------------------------------------------------------------------
Undecimo registro: TX Configuration Control = 9800
Traduce: Aqui se configuran los parámetros de la modulación FSK (mirar fórmula y calcularlos),
Output power = 0 DB.
----------------------------------------------------------------------------------------------------
Duodécimo registro: PLL Setting = CC77
Traduce: Cambia la frecuencia de reloj generada desde el micro, es decir, la que viene desde el micro
y es usada por el módulo (ver el pdf si te confundes), en este caso = 5 or 10 MHz (recommended)
Retraso en el PLL = desactivado, Dithering en el PLL loop = apagado, Ancho de banda del PLL = -102DB
----------------------------------------------------------------------------------------------------
Décimo tercer registro: Transmitter Register Write = B8AA
Traduce: Despues de enviar este comando, se puede empezar a transmitir los datos. Mirar la grafica que
muetsra un ejemplo de transmision, ytambien mirar que el bit "el" del primer registro este habilitado
----------------------------------------------------------------------------------------------------
Décimo cuarto registro: Wake-Up Timer = E196
Traduce: 1.03*M*2^R + 0.5 [ms] = 1.03*(M=96h,150d)*2^(1h,1d) + 0.5 = 309ms
----------------------------------------------------------------------------------------------------
Décimo quinto registro: Low Duty-Cycle = C80E
Traduce: Ciclo util = (111b(7d)*2+1)/M*100 = 10%; M = 150 (mirar registro anterior).
----------------------------------------------------------------------------------------------------
Décimo sexto registro: Low Battery Detector and Microcontroller Clock Divider = C000
Traduce: Maneja el detector de bateria baja y una salida de reloj parausar en un micro, en este caso
la frecuencia del reloj = 1Mhz, y los bits V1 al V0 indicarían el estado del voltaje de alimentacion
con respecto a un factor Vtb (mirar formula).
----------------------------------------------------------------------------------------------------
Décimo séptimo registro: Status Read = 0000
Traduce: Indica el estado actual del trancesptor, mirar trabla.
----------------------------------------------------------------------------------------------------
Espero y te haya sido de utilidad este post tan largo.
PD: Sube cuando puedas alguna foto de tu montaje....
