# RDVV PLL PIC16F628A



## lahmun (Abr 2, 2021)

Hola a todas

He construido con éxito este transmisor de FM.
Pero estoy confundido, una vez que compilé un código fuente en un archivo hexadecimal y lo quemé en PIC16F628A, la frecuencia que se ejecuta o se muestra en una pantalla LCD es superior a 250Mhz, pero el rango de código en el interior es 87.50Mhz-107.50Mhz.
una vez que esto ya se sintoniza y luego se ejecuta la última vez que se lee eeprom (está bien para mí, funciona bien), entonces, cómo hacer que la frecuencia cuando se compile por primera vez y quemar sea de 100Mhz.
Esperando alguna idea de ustedes, de todos modos gracias a RICBEVI por su sugerencia y consejo.

Aquí hay algunos fragmentos de códigos, todos ustedes, chicos, creo que ya lo saben para el código completo.

Esperando su ayuda para proporcionarme alguna información o un código nuevo

Muchas gracias..
Lahmun.



> '--------------------------- Variable Addressing -------------------- ------------------------------------------
> Dim Frequency_Step As Word 'Frequency Step
> Dim Freq_Mhz As Word 'Frequency In Mhz
> Dim Freq_Khz As Word 'Frequency In Khz
> ...


----------



## ricbevi (Abr 2, 2021)

Para ayudar a los que participantes te quieran ayudar *debes subir todo el código* que utilizaste para obtener el archivo "hex" y analizarlo y determinar si hay algún error en él o como se puede solucionar lo del arranque.

Posiblemente agregando algunas líneas de código a lo ya existente se puede comenzar desde el primer encendido con una frecuencia por defecto ya cargada en el IC PLL si es que aun no se programo ninguna otra.

PD: Para todos como info adicional y a fin de aclarar el agradecimiento/mención personal, el participante me consulto mediante mensaje personal en idioma Ingles y le sugerí que para una mayor posibilidad de solución a su inquietud debería hacer una consulta al foro en idioma Español usando cualquier traductor gratuito como el de Goggle.
Tal vez por eso cuesta un poco "saber de que va la cosa" @Daniel Lopes


----------



## lahmun (Abr 2, 2021)

Hola a todas,

aquí hay un código completo sobre mi código anterior se ha subido.

Veo que aquí hay un resultado para guardarlo en eeprom y almacenarlo para la próxima ejecución del transmisor :
 Frecuencia_step = ERead 02 'Frecuencia de inicio

Pero cuando se compila por primera vez y se graba en PIC16F628A, la primera vez que se muestra una pantalla lcd tiene un resultado de más de 250 Mhz, entonces, ¿cómo llegar a la frecuencia de 100 Mhz?

Gracias por una respuesta de ustedes



```
'************************************************* ***************
'* Author : [Hüseyin GÜNER - ViProje] *
'* Notice : Copyright (c) 2010 *
'* Date : 06.05.2010 *
'* Version : 2.0 *
'* Version : 2.01 traduccion del turco by RicBevi 25/10/14*
'************************************************* ***************
Device = 16F628A 'PIC usado
Config INTRC_OSC_CLKOUT, MCLRE_OFF, LVP_OFF, WDT_OFF, PWRTE_OFF, CP_OFF, BODEN_OFF
Declare Bus_SCL On
'---------------------------LCD--------------------------------
'Symbol LCD_DTPin = PORTB.0
'Symbol LCD_RSPin = PORTB.4
'Symbol LCD_ENPin = PORTA.3
'Symbol LCD_Interface = 4 ' 4-bit Interface
'Symbol LCD_Lines = 2
'Symbol LCD_Type = 0

    Declare LCD_DTPin = PORTB.0
    Declare LCD_RSPin = PORTB.4
    Declare    LCD_ENPin = PORTA.3
    Declare    LCD_Interface = 4    ' 4-bit Interface
    Declare    LCD_Lines = 2
    Declare    LCD_Type = 0
    Declare LCD_CommandUs = 2000
    Declare LCD_DataUs = 50

CMCON = 7
'---------------------------Variables----------------------------
Dim Frecuencia_step As Word 'Variable paso de frecuencia
Dim Frecuencia_Entera As Word ' Variable Frecuencia parte entera
Dim Frecuencia_Decimal As Word ' Variable Frecuencia parte decimal
Dim Frecuencia As Word ' Variable Frecuencia
Dim F_CONTROL As Word 'Variable CONTROL definida

Dim LO As Frecuencia.LowByte 'parte baja Frecuencia
Dim HI As Frecuencia.HighByte 'parte alta Frecuencia

'--------------------------Puertos------------------------------
Symbol SDA = PORTA.1 'I2C pin SDA
Symbol SCL = PORTA.0 'I2C pin SCL
Symbol LED = PORTA.2 'LED en PORTA.2

PORTA=0 : PORTB=0 ' limpia PORTA  PORTB

'------------------------Lectura EEProm--------------------------


        High LED
        Print At 1,1, " FM TRANSMITTER "
        Print At 2,1, " Rdvv ViProje "
        DelayMS 1000  ' 300
        Frecuencia_step = ERead 02 'Frecuencia de inicio
        If Frecuencia_step > 0 Then ComPLL



'---------------------- Frecuencia-------------------------
Frecuencia_set:
                Frecuencia_Decimal = (Frecuencia_step*10/2)//100
                Frecuencia_Entera = (Frecuencia_step*10/2)/100
                Print At 1,1, " FRE SET ", Dec Frecuencia_Entera, ",", Dec Frecuencia_Decimal," "
                Print At 2,1, " RDVV 8Watt PLL "
                DelayMS 9028  '28
                If PORTB.5 = 1 Then Subir_Frecuencia  'Subir
                If PORTB.7 = 1 Then Bajar_Frecuencia  'Bajar Frecuencia
                If PORTB.6 = 1 Then Guarda_Frecuencia 'Guardar frecuencia


'-----------------------manda hacia el Tsa5511--------------------------

                Frecuencia = Frecuencia_step
                I2COut SDA,SCL,$C2, [HI,LO,$8E,$10]
                GoTo Frecuencia_set

Subir_Frecuencia:
                    Frecuencia_step = Frecuencia_step + 1 ' Incrementa
                    If Frecuencia_step > 2160 Then Frecuencia_step=1750 'Si llega a 10800 entonces cambia a 8750
                    GoTo Frecuencia_set

Bajar_Frecuencia:
                    Frecuencia_step = Frecuencia_step-1 ' Decrementa
                    If Frecuencia_step < 1750 Then Frecuencia_step=2160 'Si llega a 8750 entonces cambia a 10800
                    GoTo Frecuencia_set


Guarda_Frecuencia: '--------------------------Escribe Datos Eprom---------------------------
                    EWrite 02 ,[Frecuencia_step] 'Guarda el Paso en la EEprom
                    DelayMS 350   '50


ComPLL: '----------------------- Escribe en el Tsa5511 --------------------------
        Frecuencia_Decimal = (Frecuencia_step*10/2)//100
        Frecuencia_Entera = (Frecuencia_step*10/2)/100
        Print At 1,1, " UnLock ", Dec Frecuencia_Entera, ",", Dec Frecuencia_Decimal, " "
        Print At 2,1, " RDVV 8Watt PLL "
        Frecuencia = Frecuencia_step
        I2COut SDA,SCL,$C2, [HI,LO,$8E,$00]
        DelayMS 8050  '150

'----------------------Verifica estatus Tsa5511i ----------------------
        If PORTB.6 = 1 Then Frecuencia_set 'Si esta pulsado PORTB.6 va al principio
        'I2CREAD SDA,SCL,$C2,[F_CONTROL]
         I2CIn SDA,SCL,$C2,[F_CONTROL]
        If F_CONTROL.6 = 1 Then Bloqueo ' Si el bit 6 de F_CONTROL esta a 1 entonces el PLL esta enganchado LOCK
        GoTo ComPLL

Bloqueo:
        I2COut SDA,SCL,$C2, [HI,LO,$8E,$24]
        Frecuencia_Decimal = (Frecuencia_step*10/2)//100
        Frecuencia_Entera = (Frecuencia_step*10/2)/100
        Print At 1,1, " Lock ", Dec Frecuencia_Entera, ",", Dec Frecuencia_Decimal, " "
        Print At 2,1, " RDVV 8Watt PLL "


K_buton:
        DelayMS 20  '20
        If PORTB.5= 1 Then LCD_Led_Off ' Si se pulsa Subir apaga el led
        If PORTB.7=1 Then LCD_Led_On  ' Si se pulsa Bajar prende el led
        If PORTB.6=1 Then Frecuencia_set ' Si se pulsa Guardar va al comienzo
        GoTo K_buton

LCD_Led_On:
            High LED
            GoTo K_buton

LCD_Led_Off:
            Low LED
            GoTo K_buton

End
```


----------



## switchxxi (Abr 2, 2021)

Si mal no recuerdo, la memoria EEPROM de los PIC contiene el valor 0xFF después de un borrado (o cuando son nuevos).

Hay dos opciones faciles:

- No se usar el basic pero busca si hay alguna forma de guardar valores en la EEPROM en el momento de la grabación. En ensamblador se inicializa la EEPROM con "ORG 0x2100" para apuntar a la dirección de la EEPROM y luego "DE 0x00, 0x01, 0x02, etc".

- Poner en el programa, al inicio, una verificación que lea el valor de la EEPROM y si esta fuera de los parámetros normales corregirlo grabando el menor valor o un valor por defecto.

La opción mas difícil: Cuando se vaya a grabar el PIC, generalmente se puede modificar manualmente en el programa del quemador el valor de la EEPROM.


----------



## jogyweb (Abr 2, 2021)

Eso se produce solo la primera vez que echas a correr el integrado, luego de programar la frecuencia que necesitas y grabas, no se produce más es efecto de al encender el pll quede fuera del rango de frecuencia que tienes establecido.


----------



## ricbevi (Abr 2, 2021)

A ver si así te funciona @lahmun . Lo modifique para que ante la situación de que la EEPROM este en valores mayores a los esperados para la frecuencias de 87.500 a 108.000MHz tome el valor por defecto de 100MHz .

Nunca arme uno por lo que no tengo para probar en la realidad si funciona.


```
'************************************************* ***************
'* Author : [Hüseyin GÜNER - ViProje] *
'* Notice : Copyright (c) 2010 *
'* Date : 06.05.2010 *
'* Version : 2.0 *
'* Version : 2.01 traduccion del turco by RicBevi 25/10/14*
* 2/4/2021 Modificado para que el primer arranque posterior a la programación
'* la frecuencia sea 100MHz
'************************************************* ***************
Device = 16F628A 'PIC usado
Config INTRC_OSC_CLKOUT, MCLRE_OFF, LVP_OFF, WDT_OFF, PWRTE_OFF, CP_OFF, BODEN_OFF
Declare Bus_SCL On
'---------------------------LCD--------------------------------
'Symbol LCD_DTPin = PORTB.0
'Symbol LCD_RSPin = PORTB.4
'Symbol LCD_ENPin = PORTA.3
'Symbol LCD_Interface = 4 ' 4-bit Interface
'Symbol LCD_Lines = 2
'Symbol LCD_Type = 0

    Declare LCD_DTPin = PORTB.0
    Declare LCD_RSPin = PORTB.4
    Declare    LCD_ENPin = PORTA.3
    Declare    LCD_Interface = 4    ' 4-bit Interface
    Declare    LCD_Lines = 2
    Declare    LCD_Type = 0
    Declare LCD_CommandUs = 2000
    Declare LCD_DataUs = 50

CMCON = 7
'---------------------------Variables----------------------------
Dim Frecuencia_step As Word 'Variable paso de frecuencia
Dim Frecuencia_Entera As Word ' Variable Frecuencia parte entera
Dim Frecuencia_Decimal As Word ' Variable Frecuencia parte decimal
Dim Frecuencia As Word ' Variable Frecuencia
Dim F_CONTROL As Word 'Variable CONTROL definida

Dim LO As Frecuencia.LowByte 'parte baja Frecuencia
Dim HI As Frecuencia.HighByte 'parte alta Frecuencia

'--------------------------Puertos------------------------------
Symbol SDA = PORTA.1 'I2C pin SDA
Symbol SCL = PORTA.0 'I2C pin SCL
Symbol LED = PORTA.2 'LED en PORTA.2

PORTA=0 : PORTB=0 ' limpia PORTA  PORTB

'------------------------Lectura EEProm--------------------------


        High LED
        Print At 1,1, " FM TRANSMITTER "
        Print At 2,1, " Rdvv ViProje "
        DelayMS 1000  ' 300
        Frecuencia_step = ERead 02 'Frecuencia de inicio
        If Frecuencia_step > 2160 Then Frecuencia_step = 2000 ' Si la variable esta fuera de 10800-87500MHz(1750-2160) cargo valor por defecto de 100MHz
        If Frecuencia_step > 0 Then ComPLL



'---------------------- Frecuencia-------------------------
Frecuencia_set:
                Frecuencia_Decimal = (Frecuencia_step*10/2)//100
                Frecuencia_Entera = (Frecuencia_step*10/2)/100
                Print At 1,1, " FRE SET ", Dec Frecuencia_Entera, ",", Dec Frecuencia_Decimal," "
                Print At 2,1, " RDVV 8Watt PLL "
                DelayMS 9028  '28
                If PORTB.5 = 1 Then Subir_Frecuencia  'Subir
                If PORTB.7 = 1 Then Bajar_Frecuencia  'Bajar Frecuencia
                If PORTB.6 = 1 Then Guarda_Frecuencia 'Guardar frecuencia


'-----------------------manda hacia el Tsa5511--------------------------

                Frecuencia = Frecuencia_step
                I2COut SDA,SCL,$C2, [HI,LO,$8E,$10]
                GoTo Frecuencia_set

Subir_Frecuencia:
                    Frecuencia_step = Frecuencia_step + 1 ' Incrementa
                    If Frecuencia_step > 2160 Then Frecuencia_step=1750 'Si llega a 10800 entonces cambia a 8750
                    GoTo Frecuencia_set

Bajar_Frecuencia:
                    Frecuencia_step = Frecuencia_step-1 ' Decrementa
                    If Frecuencia_step < 1750 Then Frecuencia_step=2160 'Si llega a 8750 entonces cambia a 10800
                    GoTo Frecuencia_set


Guarda_Frecuencia: '--------------------------Escribe Datos Eprom---------------------------
                    EWrite 02 ,[Frecuencia_step] 'Guarda el Paso en la EEprom
                    DelayMS 350   '50


ComPLL: '----------------------- Escribe en el Tsa5511 --------------------------
        Frecuencia_Decimal = (Frecuencia_step*10/2)//100
        Frecuencia_Entera = (Frecuencia_step*10/2)/100
        Print At 1,1, " UnLock ", Dec Frecuencia_Entera, ",", Dec Frecuencia_Decimal, " "
        Print At 2,1, " RDVV 8Watt PLL "
        Frecuencia = Frecuencia_step
        I2COut SDA,SCL,$C2, [HI,LO,$8E,$00]
        DelayMS 8050  '150

'----------------------Verifica estatus Tsa5511i ----------------------
        If PORTB.6 = 1 Then Frecuencia_set 'Si esta pulsado PORTB.6 va al principio
        'I2CREAD SDA,SCL,$C2,[F_CONTROL]
         I2CIn SDA,SCL,$C2,[F_CONTROL]
        If F_CONTROL.6 = 1 Then Bloqueo ' Si el bit 6 de F_CONTROL esta a 1 entonces el PLL esta enganchado LOCK
        GoTo ComPLL

Bloqueo:
        I2COut SDA,SCL,$C2, [HI,LO,$8E,$24]
        Frecuencia_Decimal = (Frecuencia_step*10/2)//100
        Frecuencia_Entera = (Frecuencia_step*10/2)/100
        Print At 1,1, " Lock ", Dec Frecuencia_Entera, ",", Dec Frecuencia_Decimal, " "
        Print At 2,1, " RDVV 8Watt PLL "


K_buton:
        DelayMS 20  '20
        If PORTB.5= 1 Then LCD_Led_Off ' Si se pulsa Subir apaga el led
        If PORTB.7=1 Then LCD_Led_On  ' Si se pulsa Bajar prende el led
        If PORTB.6=1 Then Frecuencia_set ' Si se pulsa Guardar va al comienzo
        GoTo K_buton

LCD_Led_On:
            High LED
            GoTo K_buton

LCD_Led_Off:
            Low LED
            GoTo K_buton

End
```

Evidentemente es un código que yo ya manipule en su momento(año 2014) y no recordaba como era.

Saludos.


----------



## jogyweb (Abr 2, 2021)

ricbevi dijo:


> A ver si así te funciona



funciona, pero no permite luego cambiar de frecuencia


----------



## lahmun (Abr 2, 2021)

ricbevi dijo:


> A ver si así te funciona @lahmun . Lo modifique para que ante la situación de que la EEPROM este en valores mayores a los esperados para la frecuencias de 87.500 a 108.000MHz tome el valor por defecto de 100MHz .
> 
> Nunca arme uno por lo que no tengo para probar en la realidad si funciona.
> 
> ...


Hola Ricbevi,

En primer lugar, muchas gracias por cualquier información y por favor dígame cómo hacerlo, es muy inteligente manipularlo para que esté dentro del rango de Banda del transmisor FM.

Después de la prueba en el simulador, lo leí por 107.40Mhz, de todos modos fue muy bueno que fuera del rango de frecuencia de Radio FM.

Muchas gracias,
Lahmun.


----------



## ricbevi (Abr 3, 2021)

jogyweb dijo:


> funciona, pero no permite luego cambiar de frecuencia


@jogyweb
Posiblemente por lo que veo que hace no coincide el archivo que me ofrecieron para modificar con el circuito que tu tienes ya que fíjate que queda en "Frec set" y no debería arrancar así a menos que el botón de grabado de memoria de frecuencia este a +5 o estado alto y no en estado bajo como debe originalmente.

Dime a que pines del PIC van conectados en tu esquema el conector donde haces los cambios(Set, UP, DWN) y en que estado arrancan o si tienen resistencias a Pull-UP o DWN.

La otra posibilidad es que se te "cuelgue" el microcontrolador y no responda a ninguna acción.

Si esto es así, cambia la lineal de los fusibles de programación por esta otra que te adjunto y prueba.


```
Config INTOSC_OSC_NOCLKOUT, WDTE_OFF, PWRTE_ON, MCLRE_OFF, BOREN_OFF, LVP_OFF, CPD_OFF, CP_OFF
```

@lahmun
La instrucción que agregue en el software y en el lugar que lo hice no debería afectar en lo absoluto al normal funcionamiento del programa ya que solo comparo si la variable que maneja la frecuencia(Frecuencia_step )esta fuera de los valores que debería tomar cuando el PLL esta en el rango de frecuencias de 87.500-108.000 (valores entre 1750 y 2160)y actuó en consecuencia asignándole el valor que debería tener si se quiere estar en 100MHz(2000).

De donde sale ese valor preguntaran y la respuesta esta si leen y entienden como funciona el IC PLL que se uso en esa placa.

Básicamente es múltiplo de 50KHz que es el paso(Step) que maneja dicho IC y 100MHz/0.05MHz = 2000

La lógica que use es que sí el IC nunca fue programado con alguna frecuencia y esta con los valores de fabrica la menoría EEPROM del PIC donde se almacena dicha información valdrá $FFFF o DEC 65535 al ser una variable del tipo Word por lo que superara el valor de 2160 que toma para una frecuencia de 108MHz.
Si se cumple dicha condición(If Frecuencia_step > 2160 Then), entonces le asigno un valor fijo(Frecuencia_step = 2000) antes mencionado que corresponde a 100MHz.

La lineal agregada en cuestión esta en la ante ultima lineal y esta comendada con la explicación.

```
'------------------------Lectura EEProm--------------------------


        High LED
        Print At 1,1, " FM TRANSMITTER "
        Print At 2,1, " Rdvv ViProje "
        DelayMS 1000  ' 300
        Frecuencia_step = ERead 02 'Frecuencia de inicio
        If Frecuencia_step > 2160 Then Frecuencia_step = 2000 ' Si la variable esta fuera de 10800-87500MHz(1750-2160) cargo valor por defecto de 100MHz
        If Frecuencia_step > 0 Then ComPLL



'---------------------- Frecuencia-------------------------
```

El simulador no sirve como verificación porque toma siempre el ultimo valor de la simulación a menos que nunca se hubiera corrido dicha simulación o se programe la opción de que siempre limpie los valores al iniciar cargando un archivo con valores $FF. 

Les recuerdo que yo no soy el autor del programa si no Hüseyin GÜNER y solo lo traduje del Turco original que lo encontré al Español y lo adapte en su sintaxis al Basic del Proton Basic Compiler actual. 


Ric.


----------



## jogyweb (Abr 3, 2021)

Hoa, hice las modificaciones, pero sigo con un detalle al no poder cambiar de frecuencia. Si pude probar la función de encender y apagar la pantalla utilizando los botones de subir y bajar frecuencia, también me respondió el botón de set para cambiar al estado de cambiar frecuencia, pero ahí es donde queda un poco pegado.
Saludos.


----------



## ricbevi (Abr 3, 2021)

@jogyweb  Para cambiar la frecuencia de forma secuencial se debe pulsar el botón SET y mantenerlo así(estado alto) hasta haber terminado de cambiar con UP o DWN la frecuencia.
Luego al terminar y pasar dicho pulsador a estado bajo(liberarlo) queda almacenado el ultimo valor que se mostro en el display.

Como lo haces tú(que solo tocas y sales...pasa de estado bajo a alto y luego a bajo nuevamente) entras al menú de cambio y sales por lo que los resultados pueden ser aleatorios dado el método de tocar con una pinza cocodrilo y no tener un teclado en sí puede dar con mayor frecuencia toques múltiples o "revotes" y en el esquema no hay ningún capacitor para filtrar "algo".

Fíjate que hay una lineal que posiblemente se me escapo un par de números donde dice *DelayMs 9028* debería decir *DelayMs 90* solamente, eso hace que el incremento y actualización de la frecuencia sea mas lenta de lo normal ya que espera mucho mas antes de verificar el estado de los pulsadores y dicha línea esta en la subrutina *Frecuencia_set:*

Comenta como te fue, sabemos que la lógica y el resto esta bien pero como te comente jamás arme uno y solo me metí en el tema para entender como interactuaba el programa con el PLL en este caso.

Hay otra lineal que la veo rara con el delay y esta en ComPLL: '----------------------- Escribe en el Tsa5511 ------

Hay un delay raro también de 8050 cuando originalmente creo tenia DelayMs 150, posiblemente lo quise incrementar porque era muy rápido...prueba con el valor original de 150 a ver que pasa.


----------



## ricbevi (Abr 3, 2021)

Subo el programa y las modificaciones que anteriormente explique...como demore en unas simulaciones no me dio el tiempo para unificar con el mensaje anterior.

Como en Argentina la norma es canales de 200KHz e impares, coloque el arranque en 99.9MHz

Aclaración:
Para subir o bajar la frecuencia se debe mantener el pulsador de SET y mantener el pulsador de UP o DWN según se quiera hasta lograr la frecuencia deseada y para que quede almacenado ha que soltar ambos pulsadores.

Fue importante lo de subir el video porque de esa forma me pude dar cuenta donde estaba el problema en sí.


----------



## jogyweb (Abr 3, 2021)

Ya hice las modificaciones y quedó perfecto como el amigo lahmun necesitaba.
Gracias a ricbevi por su ayuda y disposición.
Dejo la última prueba con transmisor y botoncitos. El equipo que usé para probar se lo llevaron.
Si se necesita hacer mas ensayos de ese circuito u otro, estoy a disposición para realizar las pruebas. Cuento con un poco de instrumentación y componentes electrónicos con lo que se puede poner en práctica algunos circuitos de rf.
Saludos y por aqui estoy por algo puedo ayudar.


----------



## lahmun (Abr 4, 2021)

ricbevi dijo:


> @jogyweb
> Posiblemente por lo que veo que hace no coincide el archivo que me ofrecieron para modificar con el circuito que tu tienes ya que fíjate que queda en "Frec set" y no debería arrancar así a menos que el botón de grabado de memoria de frecuencia este a +5 o estado alto y no en estado bajo como debe originalmente.
> 
> Dime a que pines del PIC van conectados en tu esquema el conector donde haces los cambios(Set, UP, DWN) y en que estado arrancan o si tienen resistencias a Pull-UP o DWN.
> ...


Hola Ricbive,
Ayer, no lo probé en hardware real, solo lo probé en una simulación.

Usé PIC16F18877 no PIC16F628A, así como los esquemas básicos para un PIC16F628A, luego lo refiero, por qué usé PIC16F18877, porque quiero actualizarlo con otra cosa en el futuro basado en este código.

Pero todavía aprendo con este compilador, también espero que otras personas puedan compartir una característica en este código, como si usted hubiera sido un profesional en este compilador, podría querer actualizar a 40 Pic PIC para más funcional, como el control por PWM, VSWR, FW, SENSING u otro control.

Una vez más, su explicación es muy clara y muy útil para mí, creo ... también para todos los aquí presentes.

Muchas gracias,
Lahmun


jogyweb dijo:


> Ya hice las modificaciones y quedó perfecto como el amigo lahmun necesitaba.
> Gracias a ricbevi por su ayuda y disposición.
> Dejo la última prueba con transmisor y botoncitos. El equipo que usé para probar se lo llevaron.
> Si se necesita hacer mas ensayos de ese circuito u otro, estoy a disposición para realizar las pruebas. Cuento con un poco de instrumentación y componentes electrónicos con lo que se puede poner en práctica algunos circuitos de rf.
> Saludos y por aqui estoy por algo puedo ayudar.


Hola Jogyaweb,
Se ve bien y funciona como se esperaba, buen hermano de prueba.

Gracias,
Lahmun


----------



## ricbevi (Abr 4, 2021)

@jogyweb 
Te subo una actualización donde limpia mejor el display cuando pasa de una frecuencia del orden de dos cifras a tres cifras porque en el video se ve que queda un cero "descolocado" en la parte derecha del mismo.

También modifique para que en vez de saltar de a 50KHz el paso sea de a 100KHz dado que no hay estaciones en esos canales intermedios.

En cuanto a la terminación esta bien solo debes pegarle una "calco"  encima  

@lahmun 
Como entrenamiento esta bien pero el programa se puede mejorar más en cuanto a la presentación en el display, manejo de la botonera, etc.

Con las modificaciones actuales en cuanto a disponibilidad de capacidad, se esta usando aproximadamente el 50% de la capacidad de memoria de este PIC pero con una optimización sobre todo de los mensajes del display supongo que esta aumentara drásticamente ya que se muestran mensajes redundantes que a veces ya esta impreso.

Este compilador es muy potente y con una larga lista de comandos y permite hacer muchas cosas.

En lo personal solo soy un autodidacta de la programación y lo hago como hobby y de forma muy eventual, eso sí, desde hace mas de 40 años.


----------



## lahmun (Abr 4, 2021)

ricbevi dijo:


> @jogyweb
> Te subo una actualización donde limpia mejor el display cuando pasa de una frecuencia del orden de dos cifras a tres cifras porque en el video se ve que queda un cero "descolocado" en la parte derecha del mismo.
> 
> También modifique para que en vez de saltar de a 50KHz el paso sea de a 100KHz dado que no hay estaciones en esos canales intermedios.
> ...


Hola Ricbive,,
Intento modificarlo con un PIC16F8877, pero todavía me quedo atascado.

¿Puede darme una muestra en un código para incluir la temperatura para controlar o detectar el disipador de calor del transistor final y mostrarle un valor a una pantalla lcd?

Gracias,
Lahmun.


----------



## ricbevi (Abr 4, 2021)

Con respecto al PIC no te puedo ayudar porque nunca lo trabaje y dudo que se consiga en Argentina ya que es de la línea mas moderna de Microchip y aquí generalmente se consiguen en el mercado los mas antiguos.

El foro tiene un hilo destacado del uso de Proton Basc Compiler y de Pic Basic Pro (las referencias contienen link) que tienen muchos ejemplos de programación de diferentes temas y la temperatura es tratado en algunos de ellos como en el uso de una incubadora de huevos, etc. 

Para lo que quieres hacer hay varias cosas a definir como que tipo de sensor se usara, de que forma, etc.

En mi experiencia los equipos de este tipo suelen funcionar solos sin atención durante mucho tiempo y tener indicación de temperatura si nadie lo supervisa es superfluo y un sistema de corte por exceso de temperatura en el radiador del transistor final se hace mucho mas fiable y fácilmente con electrónica convencional.
Puede ser mediante el uso de un simple termostato bimetálico(Clixon),  el uso de un circuito comparador, etc.  

Con el microcontrolador se puede medir con un simple resistencia NTC, diodo, LM35 o un DS18B20 y cada uno se implementa mediante diferentes líneas de código y hardware.

Debes investigar y mostrar lo que llevas echo/diseñado/programado para poder ayudarte ya que el primer paso en la resolución de tú problema lo debes dar tú.

Ric.


----------



## Americo8888 (Abr 4, 2021)

Y si utilizan Arduino mini, o su compatible chino? para controlar el PLL, incorpora ADC para medidas de temperatura o potencia RF directa o reflejada
Aquí un ejemplo:


----------



## lahmun (Abr 4, 2021)

ricbevi dijo:


> Con respecto al PIC no te puedo ayudar porque nunca lo trabaje y dudo que se consiga en Argentina ya que es de la línea mas moderna de Microchip y aquí generalmente se consiguen en el mercado los mas antiguos.
> 
> El foro tiene un hilo destacado del uso de Proton Basc Compiler y de Pic Basic Pro (las referencias contienen link) que tienen muchos ejemplos de programación de diferentes temas y la temperatura es tratado en algunos de ellos como en el uso de una incubadora de huevos, etc.
> 
> ...


Hola Ricbevi,
Sé que la configuración de PIC16F8877 no es famosa, por lo que muchas personas no están familiarizadas con hacerlo, olvídelo en PIC16F8877, pero ¿cómo puedo hacerlo con PIC16F628A? Necesito saber el lugar donde debe ir el código de piezas para un buen funcionamiento de la temperatura. .

Sí, eres cierto, la temperatura la podemos usar LM 35 o etc.

Ric, una vez más, solo quiero saber dónde está el lugar correcto para agregar el código de piezas de temperatura dentro de un código RDVV PLL.

Gracias,
Lahmun


----------



## ricbevi (Abr 5, 2021)

Yo lo colocaría el llamado al censado de temperatura dentro de la rutina " Frecuencia_set: " ya que es la que esta activa la mayor parte del tiempo.

Por esa causa (si se esta haciendo otra cosa/rutina) y resulta que hay que actuar por la temperatura, no esta disponible la acción.

Tendría que involucrar el uso de interrupciones o agilizar el programa para que el tiempo de respuesta se minimice ante una eventual falla por exceso de temperatura.

@Americo8888 

Sí, se puede hacer un montón de cosas con las placas que ya viene armadas el tema que aquí con convoca es ajustado de algunos detalles del software de Hüseyin GÜNER  en Basic del control de la placa con el PLL TSA5511 en el esquema Veronica con el uso del PIC 16F628A.

Con es PIC también se puede medir la temperatura pese a que no tienen ADC ya que se puede implementar con el uso de un sensor 1-Wire tipo DS18B20.


----------



## jogyweb (Abr 5, 2021)

Hola, como protección de temperatura utilizo este circuito que es lo más simple, pero también siempre me ha funcionado ya que no es crítico para mi circuito protegerlo de temperaturas altas pudiendo trabajar en 60° a 80° sin problemas.


----------



## Americo8888 (Abr 5, 2021)

Electrónica analógica simple y pura, hace tiempo que no veía algo así!!! la sonda es un termistor, el trimpot ajusta el voltaje On/off del transistor para energizar el relé, una muestra que podemos vivir sin microcontroladores


----------



## lahmun (Abr 7, 2021)

ricbevi dijo:


> Yo lo colocaría el llamado al censado de temperatura dentro de la rutina " Frecuencia_set: " ya que es la que esta activa la mayor parte del tiempo.
> 
> Por esa causa (si se esta haciendo otra cosa/rutina) y resulta que hay que actuar por la temperatura, no esta disponible la acción.
> 
> ...


Hola Ricbevi,
Gracias por brindarme una información.
Después de referirte y mirar un flujo, obtuve un punto y probarlo en hardware para una temperatura está funcionando bien.
Una vez más muchas gracias por orientarme.

Muchas gracias,
Lahmun.


----------



## RockiN (Abr 7, 2021)

jogyweb dijo:


> Hoa, hice las modificaciones, pero sigo con un detalle al no poder cambiar de frecuencia. Si pude probar la función de encender y apagar la pantalla utilizando los botones de subir y bajar frecuencia, también me respondió el botón de set para cambiar al estado de cambiar frecuencia, pero ahí es donde queda un poco pegado.
> Saludos.


Jogyweb,
Soy un novato en este foro, miro aquí discutir sobre el TRANSMISOR FM PLL, consulte el código de Ricbevi Intento seguirlo para hacer mi RDVV PLL, así como
No tengo un hardware que significa que mi placa no está lista, ¿pueden probar mi código aquí :



```
:100000000000000000005C29A101A117B200FE3031
:10001000EC203208EC28A01126080319A0150530A1
:10002000A5002730AC00103021200330AC00E830B0
:100030002120AC0164302120AC010A3021202D08A0
:100040002828AB002E08AA002D08A900262129087F
:10005000A900A5030319A0112608031932282502B7
:10006000031839282908031DA011A0193928303E8A
:10007000EC280800B00085110612831685110612BF
:10008000F030860583123008A01864283E30AA009C
:10009000803012213330AF0079201330AA0088302D
:1000A000122179206430112179206430112122300D
:1000B000AF007920283063200C30632006306320A5
:1000C000A014300864282014AF00201C72280612E7
:1000D000033C031C772877200730AA00D030122178
:1000E000031408002014FE3C031986280616AF0EE0
:1000F000201C20108515F03086052F080F39860446
:100100008511AF0E20187928323011213008582976
:100110002016201E2012A01A9128A016CA2003180B
:10012000B8280830AC00DE20AB0DAC0B9328201EA5
:10013000C320E820E420201AB820BD202B0803109B
:1001400058292016201E2012201BAB28FE39A8009B
:10015000201703105829A01BB328AF00A017CA20EE
:100160000318B8282F08D1200318B828201E5829B2
:10017000C320E8202013A013A0122208840027081F
:1001800084178004C9282208840027098005841761
:1001900080050800BD20E820C320E4202808A01A1C
:1001A0000138AB000830AC00AB0D0318BD20031CB8
:1001B000C320E820E420AC0BD428BD20E82022088E
:1001C000840027080005FF3E230884002409C62870
:1001D000230884002408C028A11B3A28080083169D
:1001E0009A001C1555309D00AA309D009C149C1847
:1001F000F7281C119B0A582983169B0083169C0123
:100200001C141A089B0A5829AC01AB00FF30AB073D
:10021000031CAC07031C58290330AA00DF3012214D
:100220000629AA01E83EA900AA09FC30031C1B29E3
:10023000A90703181829A9070000AA0F18292918C7
:100240002129A91C2529000025290800AE01AD019E
:100250001030AF002A0DAD0DAE0D2B08AD022C08ED
:10026000031C2C0FAE0203183C292B08AD072C08E9
:1002700003182C0FAE070310A90DAA0DAF0B2A29E6
:10028000290808001030B300AA01A901B00CAF0C76
:10029000031C50292B08A9072C0803182C0FAA07A8
:1002A000AA0CA90CAE0CAD0CB30B46292D08080006
:1002B000831383120313080083120313A001073072
:1002C0009F0007309F00850186010030FC20B600AA
:1002D000033036020318642AB60A83169B01831280
:1002E0003608EF200330AC00483005218316051195
:1002F000831205158030A100042046303A206F306B
:100300003A2072303A206F303A2073303A20203051
:100310003A2044303A2065303A2020303A204530A7
:100320003A206C303A2065303A2063303A207430FD
:100330003A2072303A206F303A206E303A206930DD
:100340003A208030A100C130042043303A204130AF
:100350003A2020303A2050303A204C303A203A208F
:1003600020303A2052303A2044303A2056303A2059
:100370003A2020303A203A203A203A200130AC008E
:100380002C3005210230FC20B700FE20B8000830D8
:100390003802031CD729031DD12971303702031CF1
:1003A000D729831203130830B8001030B70037087C
:1003B0003804031DB62A831203133808B500370822
:1003C000B4003508B0003408AF00AC010A30AB000F
:1003D0004221B4002E08B5000310B50CB40C35084A
:1003E000AA003408A900AC016430AB0026212E0815
:1003F000BA002D08B9003808B5003708B400350830
:10040000B0003408AF00AC010A30AB004221B400A8
:100410002E08B5000310B50CB40C3508AA0034083A
:10042000A900AC016430AB002621BB002A08BC0047
:100430002330AC00283005218030A1000420543046
:100440003A2065303A2073303A2074303A20203018
:100450003A208030A100C030042046303A2072306B
:100460003A2065303A2071303A2020303A208030EE
:10047000A100C6300420A6013B08AD003C08AE0038
:100480000B202C303A200230A6003908AD003A0883
:10049000AE000B2020303A204D303A2068303A2010
:1004A0007A303A2020303A203A203A203A203A2036
:1004B0003A203A203A203A203A203A203A20033093
:1004C000AC0048300521692A1F2C2130AC00663071
:1004D0000521861A862A861B9A2A061BAA2A37080D
:1004E000BD003808BE000530A2000230A70005306C
:1004F000A3000130A400C230A3203E08A3203D0881
:10050000A3208E30A3201030A120DB29B70A0319C5
:10051000B80A08303802031C992A031D932A713047
:100520003702031C992A831203130630B800D63011
:10053000B700DB29B703370A0319B80306303802BE
:10054000D630031937020318A92A0830B8007030D2
:10055000B700DB29831602309B0083123708EF2097
:100560003808EF201430AC00E63005213808B5001B
:100570003708B4003508B0003408AF00AC010A30C9
:10058000AB004221B4002E08B5000310B50CB40C2A
:100590003508AA003408A900AC016430AB0026215C
:1005A0002E08BA002D08B9003808B5003708B40085
:1005B0003508B0003408AF00AC010A30AB0042216E
:1005C000B4002E08B5000310B50CB40C3508AA0011
:1005D0003408A900AC016430AB002621BB002A0816
:1005E000BC008030A100042055303A206E303A2003
:1005F0006C303A206F303A2063303A206B303A202A
:1006000020303A208030A100C030042046303A200B
:1006100072303A2065303A2071303A203A303A2030
:1006200020303A208030A100C6300420A6013B08CB
:10063000AD003C08AE000B202C303A200230A60062
:100640003908AD003A08AE000B2020303A204D307A
:100650003A2068303A207A303A2020303A203A2046
:100660003A203A203A203A203A203A203A203A20BA
:100670003A203A203708BD003808BE000530A200F5
:100680000230A7000530A3000130A400C230A3202F
:100690003E08A3203D08A3208E30A3200030A120D7
:1006A0001430AC00E6300521061BDB290530A20022
:1006B0000230A7000530A3000130A400C230A320FF
:1006C0008A20C0008820BF003F1B672BB62A053058
:1006D000A2000230A7000530A3000130A400C23000
:1006E000A3203E08A3203D08A3208E30A320243061
:1006F000A1203808B5003708B4003508B000340828
:10070000AF00AC010A30AB004221B4002E08B500A6
:100710000310B50CB40C3508AA003408A900AC01CC
:100720006430AB0026212E08BA002D08B900380825
:10073000B5003708B4003508B0003408AF00AC018C
:100740000A30AB004221B4002E08B5000310B50CEE
:10075000B40C3508AA003408A900AC016430AB0021
:100760002621BB002A08BC008030A10004204630AE
:100770003A204D303A2020303A204C303A206F3029
:100780003A2063303A206B303A2020303A203A2029
:100790003A203A203A203A203A203A203A20803033
:1007A000A100C030042046303A2072303A20653033
:1007B0003A2071303A2020303A203A303A20203026
:1007C0003A208030A100C6300420A6013B08AD00CD
:1007D0003C08AE000B202C303A200230A60039082D
:1007E000AD003A08AE000B2020303A204D303A20C0
:1007F00068303A207A303A2020303A203A203A20A5
:100800003A203A203A203A203A203A203A203A2018
:100810003A2096300421861A192C861B142C061BAC
:10082000DB2996300421092C831605118312051546
:10083000092C8316051183120511092C1E2C8030FA
:10084000A100042046303A206F303A2072303A201E
:100850006F303A2073303A2020303A2044303A202A
:1008600065303A2020303A2045303A206C303A202A
:1008700065303A2063303A2074303A2072303A20A2
:100880006F303A208030A100C03004202B303A2055
:100890007B303A205D303A205B303A203B303A20C2
:1008A0006C303A202D303A203D303A202E303A201C
:1008B0002C303A205C303A205B303A2060303A20CD
:1008C00079303A2069303A202C303A200530AC009B
:1008D000DC3005218030A100042020303A203A206D
:1008E0003A203A203A203A203A203A203A203A2038
:1008F0003A203A203A203A203A203A200F30042178
:100900008030A1008130042020303A204A303A2043
:100910006F303A2067303A2079303A2077303A20E9
:1009200065303A2062303A202D303A2052303A2059
:1009300044303A2056303A203A2020303A203A20AB
:100940000530AC00DC3005218030A10004202030CF
:100950003A203A203A203A203A203A203A203A20C7
:100960003A203A203A203A203A203A203A203A20B7
:040970001F2CB92C53
:02400E00193F58
:00000001FF
```

Quiero probar que la grabación de mis archivos hexadecimales con Proton Compiler esté funcionando o no.

Una vez que grabe en su PIC16F628A, intente en funcionamiento real y luego encienda y apague la fuente de alimentación 5 veces.

Rock


----------



## jogyweb (Abr 7, 2021)

RockiN dijo:


> Una vez que grabe en su PIC16F628A, intente en funcionamiento real y luego encienda y apague la fuente de alimentación 5 veces.


 Hola estimado, hice las pruebas de encender y apagar mas de 10 veces pero no habia cambio. seguia pantalla sin iluminación y caracteres extraños que no dicen nada.


----------



## RockiN (Abr 8, 2021)

jogyweb dijo:


> Hello dear, I did the tests of turning on and off more than 10 times but there was no change. The screen was still without lighting and strange characters that did not say anything.
> 
> [MEDIA = youtube] ShwuvAnAHdI [/ MEDIA]


Hello Jogyaweb,
Sorry, can you try this hex file? Turn it on and off about 5-6 times. 

Hope my test code works now,  

I don't really have the board ready for the FM PLL transmitter.
.
. Thanks,
.RockIN


RockiN dijo:


> Hello Jogyaweb,
> Sorry, can you try this hex file? Turn it on and off about 5-6 times.
> 
> Hope my test code works now,
> ...


Hola Jogyaweb,
Lo siento, ¿puedes probar este archivo hexadecimal? Enciéndalo y apáguelo unas 5-6 veces.

Espero que mi código de prueba funcione ahora,

Realmente no tengo la placa lista para el transmisor FM PLL.
.
. Gracias,
.RockIN


----------



## jogyweb (Abr 8, 2021)

Lo mismo, no veo cambios.


----------



## jogyweb (Abr 9, 2021)

Hola estimado, no es ningun problema hacer esto, al contrario.
Me gusta la electrónica, teniendo el tiempo puedo ayudar en lo que este a mi alcance.
Saludos y buen trabajo. No dude en preguntarme cuando necesite algo en que pueda ayudar.
Saludos


----------



## ricbevi (Abr 9, 2021)

Gracias jogyweb por las molestias de los testeos y el tiempo dedicado a las pruebas/videos.

Subo una versión "tuneada" que envié por mensaje personal para que pruebe jogyweb

Aparentemente funciona bien es el programa original de Hüseyin GÜNER para Proton Basic pero alterada las rutinas sin perder la estructura del mismo.
Cambie la coma como separador de la parte entera de la frecuencia por el punto que es mas usado aquí y los canales saltan de a 200KHz en los impares como es la norma de la región y arranca si nunca se modifico la frecuencia y por única vez en 99.9Mhz(primer encendido después de la grabación del PIC)
El resultado es un programa mas ágil y que ocupa menos espacio, son libres de modificar lo que quieran pero compartan o publiquen para ayudar a los que recién comienzan en la programación.

```
'****************************************************************
'*  Author  : [Hüseyin GÜNER - ViProje]                         *
'*  Notice  : Copyright (c) 2010                                *
'*  Date    : 06.05.2010                                        *
'*  Version : 2.0                                               *
'* Reformas de salto de 200KHz, canales en numeros impares      *
'* cambio de la "," por el "." en separacion, arranque 99.9MHz  *
'* ordenamiento y limpieza de frases a mostrar en el display... *
'* By:RicBevi en https://www.forosdeelectronica.com 09.04.2021  *
'*****************************************************************

Device = 16F628A 'PIC Usado

'----------Fusibles de configuracion usados-----------------------------

Config INTRC_OSC_CLKOUT, MCLRE_OFF, LVP_OFF, WDT_OFF, PWRTE_OFF, CP_OFF, BODEN_OFF, CPD_OFF

'-----------------------Declaraciones--------------------------------------

Declare Xtal 4 ' Se declara la velocidad del cristal/reloj interno
Declare Bus_SCL On  '
All_Digital = true ' Todas las entradas son digitales
CMCON = 7   ' se apagan los compardores analogicos

'---------------------------LCD--------------------------------
   
        Declare LCD_DTPin = PORTB.0   ' Pin de datos de 4 bit a partir de PortB.0 hasta PortB.3
        Declare LCD_RSPin = PORTB.4  ' Pint de RS en PortB.4
        Declare LCD_ENPin = PORTA.3  ' Pin de Enable en PortA.3
        Declare LCD_Interface = 4    ' 4-bit Interface
        Declare LCD_Lines = 2  ' Display de dos lineas
        Declare LCD_Type = 0  ' Tipo alfanumerico
       
'-----------------------Dimensionamiento de las variables----------------------------

Dim Frec_Paso As Word      'Paso de la Frecuencia
Dim Frec_Decimal As Word   'Parte decimal de laFrecuencia
Dim Frec_Entero As Word    'Parte entera de la Frecuencia
Dim Frecuencia As Word     'Frecuencia
Dim F_Control As Word      'Palabra de Control

Dim LO As Frecuencia.LowByte    'Parte baja de la frecuencia
Dim HI As Frecuencia.HighByte   'Parte alta de la frecuencia

'--------------------------Symbolos------------------------------

Symbol SDA = PORTA.1      'I2C' PORTA.1 señal de SDA  
Symbol SCL = PORTA.0      'I2C' PORTA.0 señal de SCL
Symbol LED = PORTA.2      'LED PORTA.2

PORTA = 0 : PORTB = 0     'PORTA, PORTB limpio

'------------------------Mensaje de comienzo--------------------------

High LED ' Enciendo la iluminacion del display
Print At 1,1, " FM TRANSMITTER " ' Mensajes de comienzo
Print At 2,1, " Rdvv ViProje   " ' idem
DelayMS 2000   ' Espero 2seg para que se muestre
Print At 1,11, "."  ' Imprimo el punto de la separacion entre digital y decimal de la frecuencia
Print At 1,14,"MHz " ' Muestro MHz en las tres ultimas posiciones del display
Print At 2,7, "8Watt PLL" ' Actualizo la informacion  de la segunda linea, solo lo que cambia
Frec_Paso = ERead 02 'Se recupera valor de la Frecuencia almacenada en la EEPROM
If Frec_Paso > 2160 Or Frec_Paso < 1750 Then Frec_Paso = 1998 ' Si esta fuera de 107.9 a 87.5 se la asigna 99.9
GoTo  Muestro ' Voy a mostrar la informacion

'----------------------Cambio de Frecuencia-------------------------
Cambiar_Frec:
                 Print  At 1,1, "FRE SET " ' Se mustra mensaje que habilita el cambio de frecuencia
Actual:          GoSub Calculo ' voy a la rutina de Calculo y muestreo de la informacion
            Do   ' lazo de espera a accion de subir, bajar o almacenar
                DelayMS 200
                If  PORTB.5=1 Then Subir_Frecuencia
                If  PORTB.7=1 Then Bajar_Frecuencia
                If  PORTB.6=1 Then Guardar_Frecuencia
            Loop

Subir_Frecuencia: '--------Rutina de subir frecuencia---------------

            Frec_Paso = Frec_Paso + 4                  'Subo 200KHz
            If Frec_Paso > 2158 Then Frec_Paso = 1750 'Si esta fuera de 10800 le asigno 87.5
            GoTo Actual

Bajar_Frecuencia:'-----Rutina de bajar frecuencia------------------
         
            Frec_Paso = Frec_Paso - 4                    'bajo 200KHz
            If Frec_Paso < 1750 Then Frec_Paso = 2158 'Si esta mas abajo de 87.5 le asigno 107.9
            GoTo Actual
           
'--------------------------Almacenamiento en la EEPROM---------------------------

Guardar_Frecuencia:

                EWrite 02 ,[Frec_Paso] 'Almaceno la frecuencia en forma de pasos en la menoria EEPROM
                DelayMS 50
               
'----------------------- Comunicacion con el TSA5511 --------------------------
Muestro:
                Print  At 1,1, "UnLock "
                Frecuencia = Frec_Paso ' Frecuencia tiene el valor almacenado en Frec_Paso
                GoSub Calculo  ' Voy a calcular y mostrar informacion
                I2COut SDA,SCL,$C2, [HI,LO,$8E,$00] ' Se lo cargo al PLL
                DelayMS 150

'----------------------Control de Enclabamiento----------------------

                If  PORTB.6 = 1 Then Cambiar_Frec ' Si el boton de almacenar esta en alto voy a Cambiar_Frec
                I2CIn SDA,SCL,$C2,[F_Control] ' Recibo el estado de PLL y lo almaceno en F_Control
                If F_Control.6 = 1 Then Enclabado ' si el bit 6 de la F_Control esta a 1 es porque el PLL engancho
                GoTo Muestro   ' Voy a mostrar la intformacion
               
Enclabado:  '------Rutina de aviso/accion de enclavado exitoso del PLL---------------
                I2COut SDA,SCL,$C2, [HI,LO,$8E,$24]
                Print  At 1,1, "  Lock " '
                GoSub Calculo ' Voy a calcular los valores y mostrarlos en el display
               
           
             Do  '----- Habilito la accion de apagar o no el background del display si el PLL engancho------------------------
                DelayMS 200
                If  PORTB.5 = 1  Then Low LED ' Se apaga
                If  PORTB.7 = 1  Then High LED ' Se enciende
                If  PORTB.6 = 1  Then Cambiar_Frec ' Sale para la rutina de Modificcion de la fecuencia
             Loop


Calculo:  '------------------Calculo y mustreo de cifras-------------------------

          Frec_Entero = (Frec_Paso * 5)//100 ' parte decimal
          Frec_Decimal =  (Frec_Paso >> 1)/10  ' parte entera
          If  Frec_Decimal > 99 Then ' si la parte entera es mayor a 99
                Print At 1,8,Dec Frec_Decimal  ' imprimo desde la posicion 8 del dispaly
          Else
                Print At 1,8, " ",Dec Frec_Decimal ' si es menor a 100 imprimo un espacio vacio y luego la cifra de dos digitos
          EndIf
          Print At 1,12, Dec Frec_Entero  ' imprimo la parte digital
          Frecuencia = Frec_Paso
          I2COut SDA,SCL,$C2, [HI,LO,$8E,$10]
          Return

End  ' Fin del programa
```

El archivo compilado para ser cargado al PIC.

```
:100000000000000000005C29A101A117B200FE3031
:10001000EC203208EC28A01126080319A0150530A1
:10002000A5002730AC00103021200330AC00E830B0
:100030002120AC0164302120AC010A3021202D08A0
:100040002828AB002E08AA002D08A900262129087F
:10005000A900A5030319A0112608031932282502B7
:10006000031839282908031DA011A0193928303E8A
:10007000EC280800B00085110612831685110612BF
:10008000F030860583123008A01864283E30AA009C
:10009000803012213330AF0079201330AA0088302D
:1000A000122179206430112179206430112122300D
:1000B000AF007920283063200C30632006306320A5
:1000C000A014300864282014AF00201C72280612E7
:1000D000033C031C772877200730AA00D030122178
:1000E000031408002014FE3C031986280616AF0EE0
:1000F000201C20108515F03086052F080F39860446
:100100008511AF0E20187928323011213008582976
:100110002016201E2012A01A9128A016CA2003180B
:10012000B8280830AC00DE20AB0DAC0B9328201EA5
:10013000C320E820E420201AB820BD202B0803109B
:1001400058292016201E2012201BAB28FE39A8009B
:10015000201703105829A01BB328AF00A017CA20EE
:100160000318B8282F08D1200318B828201E5829B2
:10017000C320E8202013A013A0122208840027081F
:1001800084178004C9282208840027098005841761
:1001900080050800BD20E820C320E4202808A01A1C
:1001A0000138AB000830AC00AB0D0318BD20031CB8
:1001B000C320E820E420AC0BD428BD20E82022088E
:1001C000840027080005FF3E230884002409C62870
:1001D000230884002408C028A11B3A28080083169D
:1001E0009A001C1555309D00AA309D009C149C1847
:1001F000F7281C119B0A582983169B0083169C0123
:100200001C141A089B0A5829AC01AB00FF30AB073D
:10021000031CAC07031C58290330AA00DF3012214D
:100220000629AA01E83EA900AA09FC30031C1B29E3
:10023000A90703181829A9070000AA0F18292918C7
:100240002129A91C2529000025290800AE01AD019E
:100250001030AF002A0DAD0DAE0D2B08AD022C08ED
:10026000031C2C0FAE0203183C292B08AD072C08E9
:1002700003182C0FAE070310A90DAA0DAF0B2A29E6
:10028000290808001030B300AA01A901B00CAF0C76
:10029000031C50292B08A9072C0803182C0FAA07A8
:1002A000AA0CA90CAE0CAD0CB30B46292D08080006
:1002B00083138312031308008301A00107309F00FA
:1002C0009F00850186018316051183120515803074
:1002D000A100042020303A2046303A204D303A2008
:1002E00020303A2054303A2052303A2041303A20DF
:1002F0004E303A2053303A204D303A2049303A209F
:1003000054303A203A2045303A2052303A202030BA
:100310003A208030A100C030042020303A205230F2
:100320003A2064303A2076303A203A2020303A2081
:1003300056303A2069303A2050303A2072303A2014
:100340006F303A206A303A2065303A2020303A2027
:100350003A203A200730AC00D03005218030A1008F
:100360008A3004202E303A208030A1008D300420C5
:100370004D303A2048303A207A303A2020303A2026
:100380008030A100C630042038303A2057303A205F
:1003900061303A2074303A203A2020303A205030F0
:1003A0003A204C303A203A200230FC20B700FE20A0
:1003B000B80008303802031CE329031DE529713019
:1003C00037020318E5290301031D013083120313CB
:1003D000B60006303802031CF529031DF329D63078
:1003E0003702031CF5290301031D01308312031397
:1003F000B6040319FF290730B800CE30B700B81B88
:10040000052A37083804031D532A8312031380304A
:10041000A100042046303A2052303A2045303A209C
:1004200020303A2053303A2045303A2054303A2098
:1004300020303A20C422C8300421861A242A861B80
:10044000392A061B492A1B2A0430B7070318B80AA1
:1004500008303802031C382A031D322A6F30370255
:10046000031C382A063083120313B800D630B700B5
:100470001A2A0430B702031CB80306303802D630FB
:10048000031937020318482A0830B8006E30B70045
:100490001A2A023083169B0083123708EF2038088F
:1004A000EF20323004218030A100042055303A2062
:1004B0006E303A204C303A206F303A2063303A2088
:1004C0006B303A2020303A203708BD003808BE0093
:1004D000C4220530A2000230A7000530A30001307D
:1004E000A400C230A3203E08A3203D08A3208E30E4
:1004F000A3200030A12096300421061B052A0530D8
:10050000A2000230A7000530A3000130A400C230D1
:10051000A3208A20C0008820BF003F1B902A532AB6
:100520000530A2000230A7000530A3000130A4006E
:10053000C230A3203E08A3203D08A3208E30A32074
:100540002430A1208030A100042020303A203A201D
:100550004C303A206F303A2063303A206B303A20EA
:1005600020303A20C422C8300421861EBB2A8316BC
:10057000051183120511861FC12A831605118312E6
:100580000515061B052AB32A3808B0003708AF0046
:10059000AC010530AB004221B4002E08B50035088F
:1005A000AA003408A900AC016430AB0026212E0853
:1005B000BC002D08BB003808B0003708AF00AC0104
:1005C0000530AB004221B4002E08B5003508AA0062
:1005D0003408A900AC016430AB002621B9002A0818
:1005E000BA00BA08031DF82A64303902031C052B2F
:1005F000803083120313A10087300420A60139083C
:10060000AD003A08AE000B20112B8030A1008730DE
:10061000042020303A20A6013908AD003A08AE0087
:100620000B208030A1008B300420A6013B08AD00D8
:100630003C08AE000B203708BD003808BE0005306E
:10064000A2000230A7000530A3000130A400C23090
:10065000A3203E08A3203D08A3208E30A320103005
:08066000A1200800322B332B0E
:02400E00193F58
:00000001FF
```
Lo subí también como adjunto en formato ZIP. Espero que les sea de utilidad y lo disfruten.

Saludos.

Ric.


----------

