desktop

Construir receptor de enlace para FM desde cero (UHF 300 Mhz)

Daniel, supongo que la curva de respuesta del filtro también se puede analizar con métodos más "tradicionales". Osease, con un generador de RF senoidal cuya amplitud a lo largo del espectro sea lo más constante posible y analizar la atenuación que esta misma señal presenta en la salida (tras pasar por el filtro) con ayuda de un osciloscopio (monitorizando la amplitud de la señal aunque para esto se necesita un osciloscopio con mucho ancho de banda cosa que es carísimo) o con un medidor de campo.
en ese caso es mas conmun enpleyar una carga fictia de 50Ohmios seguido de un diodo detector y para visualizar lo resultado un multimetro o un osciloscopio.
Lo rango dinamico dese arreglo no es de los mejores pero es mejor que nada en las manos.
!Saludos!
 
Hola, siguiendo con lo que me convoca, dejo unas actualizaciones del pcb ya que al momento de armar la placa tal como la publiqué, encontré un par de errores que ya corregidos, pude tener el enclave del pll.

Dentro del archivo .rar va la actualización de la pcb creada con Sprint Layout 6


Saludos
Buenas noches colega, impresionante tu trabajo, me gustaria pedirte un favor si de casualidad tienes el diagrama esquenatico, para elaborar en otro software, quedo atento y gracias de antemano
 
Hola me gustaría un poco de ayuda para modificar el receptor y ampliar el rango de funcionamiento y que quede de 300 hasta 360 MHz ya que al sobrepasar los 327.65 MHz como se muestra en el video, la frecuencia en pantalla no corresponde a la de transmisión, pero el receptor si llega a los 360 MHz según el instrumento.



El código es el siguiente en lenguaje BASIC utilizando PRONON IDE 1.0.4.6
Esto ha pasado con varios integrados, varias placas. Es básicamente el mismo circuito que utilizo para hacer algunos equipos de FM

Código:
'****************************************************************
'*  Author  : [Hüseyin GÜNER - ViProje]                         *
'*  Notice  : Copyright (c) 2010                                *
'*  Date    : 06.05.2010                                        *
'*  Version : 2.0                                               *
'****************************************************************
Device = 16F628A 'PIC'i tanýtýyoruz. 
Config INTRC_OSC_CLKOUT, MCLRE_OFF, LVP_OFF, WDT_OFF, PWRTE_OFF, CP_OFF, BODEN_OFF
Declare I2C_SCLOUT On   
'---------------------------LCD--------------------------------     
        LCD_DTPIN = PORTB.0
        LCD_RSPIN = PORTB.4
        LCD_ENPIN = PORTA.3
        LCD_INTERFACE = 4    ' 4-bit Interface
        LCD_LINES = 2
        LCD_TYPE = 0
        CMCON = 7
'---------------------------Adresler----------------------------
Dim FREKANS_step As Word     'Frekans Onda sayý
Dim FREKANS_Tam As Word      'Frekans Tam sayý
Dim FREKANS_Onda As Word     'Frekans stepi
Dim FREKANS As Word          'Frekans bilgisi deðiþkeni
Dim F_KONTROL As Word        'KONTROL deðikenini tanýmladýk

Dim LO As FREKANS.LowByte    'Frekans deðiþkeninin düþük byte'ý
Dim HI As FREKANS.HighByte   'Frekans deðiþkeninin yüksek byte'ý 

'--------------------------Portlar------------------------------
Symbol SDA = PORTA.1         'I2C'nin SDA'sý PORTA.1'ya baðlý     
Symbol SCL = PORTA.0         'I2C'nin Scl'si PORTA.0'ya baðlý
Symbol LED = PORTA.2         'LED PORTA.2'e baðlý

PORTA=0 : PORTB=0     'PORTA ve PORTB sýfýrlandý
'------------------------Eepromdan OKu--------------------------

bas:
High LED
Print At 1,1, " TRANSMISORES FM "
Print At 2,1, "    JOGYWEB "
DelayMS 3000
FREKANS_step = ERead 02 'Frekans Deyerini EData dan okuyor
If  FREKANS_step > 0   Then  TsaYaz 'Frekans Bilgisi 0 Dan Büyük ise Tsa yaza gidiyor
'----------------------Frekans Deðiþtir-------------------------
Frekans_set:
FREKANS_Onda = (FREKANS_step*10/2)//100
FREKANS_Tam =  (FREKANS_step*10/2)/100
Print  At 1,1, "Frec: ", Dec FREKANS_Tam, ".", Dec FREKANS_Onda," MHz " 'LCD Yaz
Print  At 2,1, " Cambiar Frecuencia " 'LCD Yaz
DelayMS 100
If  PORTB.5=1   Then    Artir_frekans
If  PORTB.7=1   Then    Azalt_frekans
If  PORTB.6=1   Then    Kaydet_frekans
'----------------------- Tsa5511 e yaz--------------------------
FREKANS = FREKANS_step
I2CWRITE SDA,SCL,$C2, [HI,LO,$8E,$10]
GoTo Frekans_set

Artir_frekans:
            FREKANS_step=FREKANS_step + 1                  'içeriði 5 artir
            If FREKANS_step > 7200 Then FREKANS_step=6000 'içerik 10800 dan büyük ise 8750 yap
            GoTo Frekans_set
Azalt_frekans:
            FREKANS_step=FREKANS_step-1                    'içeriði 5 azalt
            If FREKANS_step < 6000 Then FREKANS_step=7200 'içerik 8750 den küçük ise 10800 yap
            GoTo Frekans_set
            
'--------------------------Edataya yaz---------------------------
Kaydet_frekans:
EWrite 02 ,[FREKANS_step] 'Frekans Bilgisini Edataya yazýyor
DelayMS 500
'----------------------- Tsa5511 e yaz--------------------------
TsaYaz:
FREKANS_Onda = (FREKANS_step*10/2)//100
FREKANS_Tam =  (FREKANS_step*10/2)/100
Print  At 1,1, "Ajustando Frec.     ", Dec FREKANS_Tam, ".", Dec FREKANS_Onda, " MHz " 'lcd yaz
Print  At 2,1, " TRANSMISOR  FM " 'LCD Yaz
FREKANS = FREKANS_step
I2CWRITE SDA,SCL,$C2, [HI,LO,$8E,$00]
DelayMS 1000

'----------------------Tsa5511i Kontrol et----------------------
If  PORTB.6=1   Then    Frekans_set
I2CREAD SDA,SCL,$C2,[F_KONTROL]
If F_KONTROL.6=1 Then Kitli
GoTo TsaYaz
Kitli:                                                   
I2CWRITE SDA,SCL,$C2, [HI,LO,$8E,$24]
FREKANS_Onda = (FREKANS_step*10/2)//100
FREKANS_Tam =  (FREKANS_step*10/2)/100
Print  At 1,1, "Frec: ", Dec FREKANS_Tam, ".", Dec FREKANS_Onda, " ", "MHz " 'lcd Yaz
Print  At 2,1, " TRANSMISOR  FM " 'LCD Yaz
K_buton:
DelayMS 100
If  PORTB.5=1   Then    LCD_Led_Off
If  PORTB.7=1   Then    LCD_Led_On
If  PORTB.6=1   Then    Frekans_set
GoTo K_buton
LCD_Led_On:
High LED
GoTo K_buton
LCD_Led_Off:
Low LED
GoTo K_buton
End

Lo otro, como este es un receptor, para enlazar con el transmisor, tengo que sumar 10.7MHz del Filtro para que queden enlazados y me gustaría si se pudiese visualizar la suma, por ejemplo.
Transmisor de enlace en 320MHZ
Receptor tiene que estar 10.7MHz bajo esa frecuencia (309.3 MHz) por lo que me gustaría se pudiera sumar el resultado total en pantalla por medio del programa, no se si me expliqué bien.

Saludos y atento a comentarios para ir haciendo pruebas y modificaciones en el circuito si se requiere.
 
Hola me gustaría un poco de ayuda para modificar el receptor y ampliar el rango de funcionamiento y que quede de 300 hasta 360 MHz ya que al sobrepasar los 327.65 MHz como se muestra en el video, la frecuencia en pantalla no corresponde a la de transmisión, pero el receptor si llega a los 360 MHz según el instrumento.

.......

Por que la variable que usas para visualizar no permite mas que 32768 (2^15). No estoy seguro si es cuando les das "DIM ..... as Word"



Salu2.-
 
.

No creo que sea necesario cambiar todas, sino solo la usada para "indicar la frecuencia" ....

... pero hay que tener mucho cuidado porque en un paso la separa el "LowByte" y "HighByte" ....

con lo cual aparecerá el problema al enviarlo al TSA5511 ya que dejo de ser "Word" y paso a "Double Word"




Creo que para entender un poco mejor cómo funciona el programa deberías traducir todo el texto que se encuentra como "comentarios" después de un "'" .
Hay muchos saltos (Goto) y así al menos a mi me cuesta seguir dichos saltos.

No uso Proton y no sabria decirte de que manera determina WORD y DWORD, ni las otras posibilidades que seguro tiene.




Salu2.-
 
No creo que sea necesario cambiar todas,
Solo pude cambiar 2, las que hacen mención con la respuesta en pantalla, intenté con todas, con algunas, con estas 2, y nada.
Al intentar pasar todas a DWord no compilaba, luego puse solo las primeras 3 y no compila, luego las ultimas 2 más 1 de las primeras 3 y cambiando luego por otra, pero nada y solo funcionó la compilación con las que se ven remarcadas, pero en pantalla hace lo mismo.

32.jpg
 
.

Por eso dije recién que las separa en LowByte y High Byte y esta justo abajo de lo que has resaltado


El tema que no entiendo los comentarios que están después del ' y entonces me resulta difícil seguir el hilo por los saltos (goto) que realiza. Como dije antes no uso Proton ni programo Pic's solo tengo una idea general.

Hay que encontrar cual es "la frecuencia" o donde la define, porque el programa lo que hace es verificar los pulsadores y de acuerdo a cual se pulse sube ó baja el step previamente definido.

Deberás tomarte la molestia de traducir todos los comentarios/rem ubicados luego del ' ó esperar otra ayuda.



Salu2.-
 
Por lo que veo FREKANS_Tam es la variable que se muestra en el LCD como parte entera de la frecuencia (MHz), y FREKANS_Onda es la parte decimal (kHz).
A la primera le deberías restar (o sumar, depende de como saques la FII) 10 y a la otra 7 antes de la siguiente línea que es en la que el programa envía esas variables al display.
No aseguro que funciones al 100% pero yo experimentaría por ahí.
 
No aseguro que funciones al 100% pero yo experimentaría por ahí.
Hice la suma en ambas variables por separado, paro al sumar en FREKANS_Onda que vendría siendo los decimales, no pasa a los enteros después de llegar a 95, si no que queda aumentando solo después del punto decimal. por ejemplo si tengo 300.90 Mhz y sumo 100 Khz, queda 300.100 Mhz cuando se pensaría que marcaría en pantalla 301.0 MHz
 
Tiene sentido que pase esto, porque no hay carry entre las dos variables, no había caído en esa posibilidad.
Prueba manipulando FREKANS_Step que es la variable antes de separarla en dos para el LCD.
Quizás tengas que pasar el valor de la variable original a otra de tu creación y manipular esa para enviarla después al LCD, por si la original se usa para otros procesos y se pueda destrastabillar al sumarle una constante (la FI).
 
El programa utiliza la variable FREKANS_step para gestionar la frecuencia.
Y dos variables a partir de ella para mostrar la frecuencia en el display.
Si la frecuencia varía bien, entonces quizás solo es un problema estético.

Conociendo la precedencia de operadores en BASIC, esta línea:
FREKANS_Tam = (FREKANS_step*10/2)/100
se puede escribir así:
FREKANS_Tam = (FREKANS_step*5)/100
Del mismo modo:
FREKANS_Onda = (FREKANS_step*10/2)//100
sería:
FREKANS_Onda = (FREKANS_step*5)//100

Pero en esta última linea veo un doble signo de división anómalo --> //100
Quizás mejor:
FREKANS_Onda = (FREKANS_step*5)/10000

--------
Vamos a visualizar el valor real de FREKANS_step, el cual nos dará pistas:
Sustituimos la linea:
Print At 1,1, "Frec: ", Dec FREKANS_Tam, ".", Dec FREKANS_Onda," MHz "
por:
Print At 1,1, "Ste: ", Dec FREKANS_step, " Frec: ", Dec FREKANS_Tam, ".", Dec FREKANS_Onda," MHz "

--------
Aquí es donde sube y baja la frecuencia y limita su valor:

Artir_frekans:
FREKANS_step=FREKANS_step + 1 ' hacia arriba
If FREKANS_step > 7200 Then FREKANS_step=6000 ' Si es mayor de 7200, entonces hacemos que valga 6000
GoTo Frekans_set
Azalt_frekans:
FREKANS_step=FREKANS_step - 1 ' hacia abajo
If FREKANS_step < 6000 Then FREKANS_step=7200 ' Si es menor de 6000, hacemos que valga 7200
GoTo Frekans_set

Modifica esos límites, a ver qué pasa.
 
Última edición:
Más cosas:

El programa define FREKANS y FREKANS_step como tipo WORD:

Dim FREKANS As Word
Dim FREKANS_step As Word

Llena FREKANS_step con el valor leído:

FREKANS_step = ERead 02

Asigna a FREKANS el valor de FREKANS_step:

FREKANS = FREKANS_step

Halla los bytes bajo y alto de FREKANS:

Dim LO As FREKANS.LowByte
Dim HI As FREKANS.HighByte

y se los endosa como parámetros a la función de escritura en el I2C:

I2CWRITE SDA,SCL,$C2, [HI,LO,$8E,$10]
 
Hola....Aclarando algunas cosas sobre Proton

Las variables Word tienen 16bit(0-65535) y las Dword son de 32bit(0-4294967295)

EL operador // según la ayuda de propio Proton es:

Returns the remainder after dividing one integer value by another. / Devuelve el resto después de dividir un valor entero por otro.
 
En PBP se utiliza DIV 32 inmediatamente para obtener la división de un Long de 32 bits y no perder ese resultado, tal vez lo mejor sería cambiar el valor del step del PLL para no tener que trabajar con variables muy grandes.
 
En PBP se utiliza DIV 32 inmediatamente para obtener la división de un Long de 32 bits y no perder ese resultado, tal vez lo mejor sería cambiar el valor del step del PLL para no tener que trabajar con variables muy grandes.
El PLL divide el oscilador entre 512 y ese es el step por lo que habría que cambiar la frecuencia del cristal para hacer tal cosa y en la hoja de datos especifica 3.2MHz mínimo y 4.48Mhz Máximo.

Captura de pantalla 2023-08-14 174014.jpg

Ya usándolo a 6.4MHz se esta lejos de esta especificaciones pero habría que probar hasta donde "funciona de forma segura" el conjunto oscilador/divisor fijo.

Con ese oscilador(6.4Mhz), el step queda en 100KHz ya que para tener 50KHz debe tener cristal de 3.2Mhz debido a que la frecuencia de entrada sufre una división de 8 antes de entrar al divisor programable de 15bit
A.jpg

Explicado en la hoja de datos claramente
Captura de pantalla 2023-08-14 180945.jpg
 
Última edición:
.



@jogyweb del primer video creo entender que si bien el Tx sale en 330 MHz en forma estable en frecuencia (locked) el display solo te muestra 1.77 MHZ


Es correcto esto que entiendo ????




Salu2.-
 
Lo otro, como este es un receptor, para enlazar con el transmisor, tengo que sumar 10.7MHz del Filtro para que queden enlazados y me gustaría si se pudiese visualizar la suma, por ejemplo.
Transmisor de enlace en 320MHZ
Receptor tiene que estar 10.7MHz bajo esa frecuencia (309.3 MHz) por lo que me gustaría se pudiera sumar el resultado total en pantalla por medio del programa, no se si me expliqué bien.

Ahora que sabemos que la variable FREKANS_step es un número entero y las operaciones que se hacen para mostrar la frecuencia en pantalla, podemos mostrar en ella lo que queramos.
Tenemos que:
FREKANS_Tam = (FREKANS_step*5)/100 nos muestra la parte entera de la frecuencia.
FREKANS_Onda = (FREKANS_step*5)//100 nos muestra la parte fraccionaria de la frecuencia.

Con esto, averiguamos el valor que toma FREKANS_step para una frecuencia dada.

Entonces, 6400 serían 320 MHz porque:
(6400*5)/100 = 320
Y 214 serían 10.7 MHz
(214*5)/100 = 10.7

Ahora, en el programa:
-Definimos arriba una variable nueva llamada FREKANS_Suma:
Dim F_KONTROL As Word
Dim FREKANS_Suma as Word
Dim LO As FREKANS.LowByte
-Añadimos y cambiamos lo que está en negrita:
Frekans_set:
FREKANS_Suma = FREKANS_step + 214
FREKANS_Onda = (FREKANS_Suma*10/2)//100
FREKANS_Tam = (FREKANS_Suma*10/2)/100
Print At 1,1, "Suma: ", Dec FREKANS_Tam, ".", Dec FREKANS_Onda," MHz "

Insisto, todo esto es estético, la frecuencia original no cambia.

Prueba y reporta feedback... que igual no es 214!
 
Atrás
Arriba