RDVV PLL PIC16F628A

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
Dim Freq As Word 'Based Frequency
Dim Freq_Control As Word 'Frequency Control
'----------------------------------- End Addressing ------------ -----------------------------------------------

'-------------------------- I2C Connection of 2 Pin ------------------ -----------------------------------------
Dim LO As Freq.LowByte 'Frequency in Low
Dim HI As Freq.HighByte 'Frequency in High


Symbol SCL = PORTB.3 'This pin is SCL As A PORTB.3
Symbol SDA = PORTB.4 'This pin is SDA As A PORTB.4

Symbol LEDPower = PORTD. 0 'LED as a Power Led, when system up
'Symbol LED_LOCK = PORTA.4' LED Lock
'---------------------------------- End I2C Connection ------------ ---------------------------------------------

PORTA = 0: PORTB = 0 'Activated PORTA and PORTB as Output

bas:
High LEDPower 'Led Power up

Print At 1,3, "FM PLL RAMDAN " 'Show in Line 1
Print At 2,2, "RADIO MOKU" 'Show in Line 2
DelayMS 1000
Frequency_Step = ERead 02 'Read data 02
If Frequency_Step> 0 Then Tune 'If Frequency step is high then 0, then go To Tune
 
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
 
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


Código:
'************************************************* ***************
'* 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
 
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.
 
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.
 
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.

Código:
'************************************************* ***************
'* 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.
 

Adjuntos

  • Vero_PLL_Arranque100MHz.zip
    3.6 KB · Visitas: 37
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.

Código:
'************************************************* ***************
'* 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.
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.
 
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.

Código:
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.
Código:
'------------------------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.
 
Última edición:
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 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.
 
Última edición:
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í.
 

Adjuntos

  • Vero_99.9.zip
    3.9 KB · Visitas: 24
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.

 
@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.

Código:
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.
Código:
'------------------------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.
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
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
 
@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.
 

Adjuntos

  • RV_PLL_99.9KHz_Step100KHz.zip
    3.9 KB · Visitas: 28
@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.
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.
 
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.
 
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:
 
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.
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
 
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.
 
Arriba