Transmisor FM, PLL (Redfield29) ver. 2.0

Hola,
En primer lugar, que mi título es incorrecto, eso debería ser de 100Khz a 50Khz.

Conozco ese método, ya estoy tratando de multiplicar por 20 y otro por 2, pero todavía no obtengo exactamente 50Khz, si lo hiciera con otro valor, obtendré un resultado de frecuencia más baja y de otra manera es superior.

Lahmun.

Hola,
Este es mi cálculo:
Código:
FDecimal = (Freq_Step*10/2)//100
FE       = (Freq_step*10/2)/100


Hecho.

Lahmun.
 
Última edición:
No le alcanzo a comprender exactamente que necesita pero asumo que es esto de aquí

Código:
Frecuencia = 88100    ' frecuencia
F_Step = 50    ' 50KHz
N_Step = Frecuencia / F_Step  ' Numero a cargar en los divisores
Frecuencia_KHz = (N_Step // 10) / 2 ' parte despues del punto de KHz
Frecuencia_MHz = (N_Step / 10) / 2  ' MHz de la frecuencia


Frecuencia = 88100 '  frecuencia
F_Step = 100   ' 100KHz
N_Step = Frecuencia / F_Step ' Numero a cargar en los divisores
Frecuencia_KHz = N_Step  // 10
Frecuencia_MHz = N_Step  / 10

lahmun No respondo consultas por mensaje privado que puedan ser evacuadas por el foro.

En cuanto a tu consulta y de la hoja de datos del IC TSA5511 página Nº:6

ts.JPG
Por lo que claramente con 3.2MHz de frecuencia de oscilación al ser dividida por 512 de forma fija, da 6.25KHz y como tiene un prescaler el divisor general por 8 se debe multiplicar por este factor lo que da 50KHz. De igual forma al ser el oscilador 6.4MHz la única posibilidad es que el step sea 100KHz
ts1.JPG

No se puede lograr step de 100KHz con frecuencias de cristal de 3.2MHz, así como no se puede lograr step de 50KHz con cristal de 6.4MHz.

No depende del software que se le cargue al PIC si no de la estructura interna del IC.

Por otro lado en el archivo subido al foro en el correspondiente tema (aquí )están incluidas las dos opciones de funcionamiento del PLL con cristal de 3.2MHz y 6.4MHz y LCD de 1 y 2 lineas.
 
Hola,
Conozco ese cálculo, independientemente de que 6,4Mhz esté funcionando para un paso de 100khz y un cystal de 3,2Mhz es un paso de 50Khz.

Además, mi primer código que funciona muy bien en un paso de 100Khz sin problemas, lo probé en proteus, solo necesito traer el problema para hacer un paso de 50khz, luego trato de cambiar el cálculo por
Código:
FDecimal = (Freq_Step*10/2)//100
FE       = (Freq_step*10/2)/100

Además de este código, también funciona para el paso 50Khz, pero aparece un problema con el ejemplo 107.00 Mhz, esto mostrará 107.0 Mhz, o 106.0 Mhz mostrará 106.0 Mhz, otro es 106.50 Mhz o 106.55 Mhz está funcionando bien, también refiérase a método, obtuve una frecuencia mínima de 50 Mhz.

¿Pueden ayudarme a agregar eso a mi código?

Código:
'************************** 50Khz Step **************************

'Frecuencia = 88100    ' frecuencia
'F_Step = 50    ' 50KHz
'N_Step = Frecuencia / F_Step  ' Numero a cargar en los divisores
'Frecuencia_KHz = (N_Step // 10) / 2 ' parte despues del punto de KHz
'Frecuencia_MHz = (N_Step / 10) / 2  ' MHz de la frecuencia

'F_Step <=>  FREKANS_step       'F_Step changes
'N_Step <=>  FREKANS_ric        'N_Step changes
 'FREKANS_ric = Frecuencia / FREKANS_step


'---------------------------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 ADRES As Byte            'TSA5511 için adres deðiþkeni

Dim N_Step As Word
Dim  F_Step As Word
Dim  FREKANS_ric As Word
Dim  Frecuencia As Word 



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

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


 '************************ Get FREKANS STEP ****************** 
  'Frecuencia=88100 
 
 FREKANS_step = 50
 
 F_Step = FREKANS_step
 N_Step = FREKANS_ric

 '******************************************
   FREKANS_ric = Frecuencia / FREKANS_step 
   FREKANS_Onda = (FREKANS_step//10)/2
   

  FREKANS_Tam =  (FREKANS_step/10)/2

Intento con el cálculo anterior, obtengo un paso de 100Khz, no un paso de 50Khz, ¿podrían ayudarme a solucionar lo que está mal allí?


Gracias
Lahmun
 
Última edición:
Por el sistema de impresión usada en ese programa siempre se dará que cuando la parte digital es "0" o "5" se mostrará de esa forma(101.0 y 101.5), cuando debería ser 101.00 y 101.05 y pasara con todos los casos, no es problema de la forma que se haga el calculo si no de la representación en el display.

Para solucionarlo habría que estudiar y modificar el programa para que contemple dichas situaciones o cambiar la forma de mostrar la frecuencia.

La opción de pasos de 50KHz y 100KHz son las que ya están en el foro en el tema correspondiente.

Subo los archivos con la corrección correspondiente para subsanar ese bug del programa.
 

Adjuntos

  • Pll50KHz_100KHz.rar
    19.3 KB · Visitas: 60
Última edición:
Por el sistema de impresión usada en ese programa siempre se dará que cuando la parte digital es "0" o "5" se mostrará de esa forma(101.0 y 101.5), cuando debería ser 101.00 y 101.05 y pasara con todos los casos, no es problema de la forma que se haga el calculo si no de la representación en el display.

Para solucionarlo habría que estudiar y modificar el programa para que contemple dichas situaciones o cambiar la forma de mostrar la frecuencia.

La opción de pasos de 50KHz y 100KHz son las que ya están en el foro en el tema correspondiente.

Subo los archivos con la corrección correspondiente para subsanar ese bug del programa.

Una consulta ricbevi, cual es el IDE (editor, compilador) para ese código fuente que has subido? es gratis?
Saludos
 
Hola,
Ricbevi,
En primer lugar, les agradezco por ayudar y resolvió ese paso de frecuencia a 50 Khz. Verifiqué en Proteus que el código de piezas para pasar a 50Khz funciona muy bien.

Americo,
Ese código bajo Proton Compiler, tienen alguna versión, y también tienen RDVV bajo Oshonsoft y PicBasic.

D@rkbytes,
Debidamente notificado.

Debajo de la versión bajo PIC16F88 :
Código:
Print $fe, 1
Print At 1, 1, "Scan FM"

If PORTB.6 = 1 Then freq_set
Print At 2, 1, "Pw 0.0 W Rf 0.0 W"

GoSub pw
GoTo tsa

kitli:
I2COut sda, scl, adress, [hi, lo, $8e, $21]  '[HI, LO, $ 8E, $ 24]
freq_mhz = (freq_step * 10/2)//100
freq_khz = (freq_step * 10/2)/100
Print $fe, 1
Print At 1, 1, "OnAir  Z "
If PORTB.6 = 1 Then freq_set
GoSub pw

ADCON0 = %11100101
pw:
snelheid = ERead 0
While 1 = 1
If toetshoger = loo And snelheid < 250 Then Inc snelheid
If toetslager = loo And snelheid > 0 Then Dec snelheid
PWM pwm_sig, snelheid, startsnelheid
'If snelheid<>ERead 0 Then EWrite [snelheid]

Print At 2, 1, "Pw 0.0 W Rf 0.0 W"

'Adcin 4,adval  'A / D [RA4 AN4]
'adval = (adval)*/quanta
'If adval < 1000 Then Print At 2, 4, "", Dec1 adval Dig 2, ".", Dec1 adval Dig 1
'If adval > 999 Then Print At 2, 4, Dec1 adval Dig 3, Dec1 adval Dig 2, ".", Dec1 adval Dig 1

'Adcin 3, adval1  'A / D [RA3 AN3]
'adval1 = (adval1) * / quanta
'Print At 2, 16, Dec1 adval1 Dig 2, ".", Dec1 adval1 Dig 1
'If PORTB.6 = 1 Then freq_set
Wend

End

Esta versión holandesa:

Código:
If tune = 0 And lock = 0 And data.6 = 1 And data.7 = 0 Then  'Indien power OK is en wel een lock, LOCK op display en eindtrap inschakelen
    Lcdcmdout LcdLine1Pos(11)  'LCD schrijven op regel 1 vanaf positie 11
    Lcdout "LOCKED"  'Locked in display
    WaitMs 1000  '1 seconde wachten
    PORTA.3 = 1  'Eindtrap inschakelen
    lock = 1  'Lockbit op 1 zetten (Lockstatus wordt hierna niet meer opnieuw uitgelezen)
    GoSub schrijf  'Opnieuw TSA5511 programmeren
EndIf
Return                                           
'Data naar TSA5511 schrijven
schrijf:
deelgetal = ((100 * mhz) + khz) / 5  'Deelgetal berekenen, getal groot maken omdat we niet achter de komma kunnen rekenen

'Berekenen deelgetal eerste 8 bits
first = 0
If deelgetal >= 8192 Then
    deelgetal = deelgetal - 8192
    first = first + 32
EndIf
If deelgetal >= 4096 Then
    deelgetal = deelgetal - 4096
    first = first + 16
EndIf
If deelgetal >= 2048 Then
    deelgetal = deelgetal - 2048
    first = first + 8
EndIf
If deelgetal >= 1024 Then
    deelgetal = deelgetal - 1024
    first = first + 4
EndIf
If deelgetal >= 512 Then
    deelgetal = deelgetal - 512
    first = first + 2
EndIf
If deelgetal >= 256 Then
    deelgetal = deelgetal - 256
    first = first + 1
EndIf

'Berekenen deelgetal tweede 8 bits
second = 0
If deelgetal >= 128 Then
    deelgetal = deelgetal - 128
    second = second + 128
EndIf
If deelgetal >= 64 Then
    deelgetal = deelgetal - 64
    second = second + 64
EndIf
If deelgetal >= 32 Then
    deelgetal = deelgetal - 32
    second = second + 32
EndIf
If deelgetal >= 16 Then
    deelgetal = deelgetal - 16
    second = second + 16
EndIf
If deelgetal >= 8 Then
    deelgetal = deelgetal - 8
    second = second + 8
EndIf
If deelgetal >= 4 Then
    deelgetal = deelgetal - 4
    second = second + 4
EndIf
If deelgetal >= 2 Then
    deelgetal = deelgetal - 2
    second = second + 2
EndIf
If deelgetal >= 1 Then
    deelgetal = deelgetal - 1
    second = second + 1
EndIf

I2CStart
I2CSend 0xc2
addr.HB = first
addr.LB = second
I2CSend addr.HB  '1e regel versturen
I2CSend addr.LB  '2e regel versturen
If lock = 0 Then addr.HB = 206  'Indien geen lock, chargepump op 220uA
If lock = 1 Then addr.HB = 142  'Indien lock, chargepump op 50uA
If lock = 0 Then addr.LB = 0  'Indien geen lock, lockled uit, eindtrap uit
If lock = 1 Then addr.LB = 20  'Indien lock, lockled aan, eindtrap aan
I2CSend addr.HB  '3e regel versturen
I2CSend addr.LB  '4e regel versturen
I2CStop
Return

Una vez más, gracias por todos ustedes.

Lahmun.
 
Una consulta ricbevi, cual es el IDE (editor, compilador) para ese código fuente que has subido? es gratis?
Saludos

Americo8888 Como aclaró el amigo y tocayo D@rkbytes el compilador es el Proton Basic.

Efectivamente con la directiva Dec2 se puede solucionar en este caso dicha falla y es lo que hice en los programas que subi pero estructuralmente y aunque es funcional, es un programa muy básico y que cualquier programador podría depurar para hacer lo mismo de otra forma o si se quiere de forma más eficientemente en cuanto al espacio ocupado, la estructura del programa en si, etc.

Yo no lo he usado más allá de la simulación ya que no tengo dicho IC PLL y jamas lo he usado o visto usar en los equipos que he tenido que reparar/atender.

Se que se usa en TV pero en este caso yo permanezco del lado de la pantalla de los mismos y no de la parte de atrás :) .

Saludos.
 
Última edición:
Hola,
¿Alguien aquí puede explicar qué significan estas piezas aparte en el lado TSA5511:
Código:
I2COut SDA,SCL,$C2, [HI,LO,$8E,$10] 'Write to TSA 5511
I2COut SDA,SCL,$C2, [HI,LO,$8E,$00] 'Unlock System HERE FOR UNLOCK <-> ACTUAL USED THIS
I2COut SDA,SCL,$C2,[HI,LO,$8E,$24]  'Lock System HERE FOR LOCK <-> TEST ONLY

Qué diferencia y estos:
Código:
I2CSend 0xc6  'Byte 1 => Addres for TSA5511 (write)  (11000110)
'I2CSend 0xc2  'Byte 1 => Addres for TSA5511 (write) (11000010)
I2CSend divider.HB  'Byte 2 => first byte
I2CSend divider.LB  'Byte 3 => Second byte
I2CSend 0xce  'Byte 4 => Chargepump set to 220uA  (11001110)  = (1 CP T1 T0 1 1 1 OS)
'I2CSend 0x8e  'Byte 4 => Chargepump set to 50uA   (10001110) = (1 CP T1 T0 1 1 1 OS)
I2CStop

Y a continuación hay una referencia:
Código:
'&h8e = binary 10001110

'Charge-pump
'And test bits
'1 CP T1 T0 1 1 1 OS
'1 0 0 0 1 1 1 0 (&h8e)

'CP charge-pump current
'cp = 0 50 µa
'cp = 1 220 µa
'p3 To p0 = 1 limited-current Output is active
'p7 To p4 = 1 open-collector Output is active
'p7 To p0 = 0 outputs are in High impedance state
't1, t0, os = 0 0 0 normal operation
't1 = 1 p6 = fref, p7 = fdiv
't0 = 1 3-state charge-pump
'os =1 operational ampli?er Output is switched off (varicap drive Disable)

Gracias,
Lahmun
 
Yo como no lo he usado y no he tenido tiempo de estudiarlo no lo he visto con detalle pero esas preguntas las contestas si estudias debidamente la hoja de datos del IC.

En él está debidamente explicado en qué forma se debe comunicar con él y qué significa cada cosa sobre todo a partir de la hoja Nº6 en adelante.

Por si no lo tienes y no está ya en el foro, lo subo aquí.

Los moderadores dispondrán en caso de ser información redundante.
 

Adjuntos

  • tsa5511.pdf
    146 KB · Visitas: 42
Hola a todas,

Encontré este código, cuando hice la compilación, hay un error, ¿podría alguien aquí como experto y maestro ayudarme? .


Código:
'****************************************************************
'* Name : 16F88 TSA5511.BAS *
'* Author : Winate_K *
'* Notice : Copyright © 2012 *
'* : All Rights Reserved *
'* Date : 29/5/2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 16F88
@CONFIG_REQ
@__CONFIG _CONFIG1, cp_off & ccp1_rb0 & debug_off & wrt_protect_off & cpd_off & lvp_off & boden_off & mclr_on & PWRTE_ON & WDT_OFF & INTRC_IO
@__CONFIG _CONFIG2, IESO_OFF & FCMEN_OFF
#define I2C_SCLOUT On
All_Digital = TRUE
TRISA = %11111000
TRISB = %11100000
OSCCON =%01101110
ANSEL = $00011000
Declare LCD_Lines = 2' LCD 4 Line
Declare LCD_DTPin = PORTB.0 'LCD Data Pin
Declare LCD_Interface = 4' LCD Data Pin 4
Declare LCD_RSPin = PORTB.4 'LCD RS Pin
Declare LCD_ENPin = PORTA. 6 'LCD AND Pin
Declare Adin_Res 10
Declare Adin_Tad frc
Declare Adin_Stime = 100

Symbol SDA = PORTA.1' I2C SDA PORTA.1
Symbol SCL = PORTA.0 'I2C Scl PORTA.0
Symbol LED = PORTA.2
Symbol LOO = 0
Symbol Speed = 10
Symbol PWM_SIG = PORTA.7
Symbol Key Higher = PORTB.7
Symbol Key Lower = PORTB.5

Dim Speed As Byte
Dim FREQ_step As Word 'Frequency step
Dim FREQ_khz As Word 'Frequency Khz
Dim FREQ_mhz As Word 'Frequency Mhz
Dim FREQ As Word
Dim F_CONTROL As Word
Dim ADRESS As Byte 'TSA5511 i2c adres
Dim LO As FREQ.LowByte
Dim HI As FREQ.HighByte

quanta con 30 '+Vref = 5V : Quanta=5V/1023*256=1.251
adval var Word
adval1 var Byte
ADCON1 = %11000000 'Right Justify A/D result
Clear
PORTA.2 = 1
Cls
Print $fe, 1
Print At 1,1," HELLO "
Print At 2,1," WECOME TO FM PLL "
DelayMS 1500
Print At 1,1," FM TRANSMITTER "
Print At 2,1," *SISAKET PLL V1* "
DelayMS 1500

loop:
ADRESS = $C0 'TSA5511 in adres
FREQ_step = ERead 02
If FREQ_step > 0 Then TSA

FREQ_set:
DelayMS 100
FREQ_mhz = (FREQ_step*10/2)//100
FREQ_khz = (FREQ_step*10/2)/100
Print $fe, 1
Print At 1, 1, "Set FM"
Print At 2, 1, "Pw 0.0 W Rf 0.0 W"
DelayMS 100
If PORTB.5 = 1 Then UP_freq
If PORTB.7 = 1 Then DOWN_freq
If PORTB.6 = 1 Then SET_freq

'----------------------- Tsa5511 --------------------------
FREQ = FREQ_step
I2COUT SDA,SCL,ADRESS,[HI,LO,$8E,$10]
GoTo FREQ_set

UP_freq:
DelayMS 50
FREQ_step = FREQ_step + 1 'step 5
If FREQ_step > 2160 Then FREQ_step = 1750
GoTo FREQ_set

DOWN_freq:
DelayMS 50
FREQ_step = FREQ_step - 1 'step 5
If FREQ_step < 1750 Then FREQ_step = 2160
GoTo FREQ_set
'--------------------------data ---------------------------
SET_freq:
EWrite 02, [FREQ_step]
DelayMS 200
'----------------------- Tsa5511 --------------------------
TSA:
FREQ = FREQ_step
I2COUT SDA,SCL,ADRESS,[HI,LO,$8E,$00] '[HI,LO,$8E,$OO]
DelayMS 200
'----------------------Tsa5511 Control ----------------------
I2CIN SDA,SCL,ADRESS,[F_CONTROL]
If F_CONTROL.6 = 1 Then kitli
FREQ_mhz = (FREQ_step*10/2)//100
FREQ_khz = (FREQ_step*10/2)/100
Print $fe, 1
Print At 1, 1, "Scan FM"
If PORTB.6 = 1 Then FREQ_set
Print At 2, 1, "Pw 0.0 W Rf 0.0 W"
'GoSub PW
GoTo TSA

kitli:
I2COUT SDA,SCL,ADRESS,[HI,LO,$8E,$21] '[HI,LO,$8E,$24]
FREQ_mhz = (FREQ_step*10/2)//100
FREQ_khz = (FREQ_step*10/2)/100
Print $fe, 1
Print At 1, 1, "OnAir FM"
If PORTB.6 = 1 Then FREQ_set
GoSub PW

'ADCON0 = %11100101
PW:
Snelheid = ERead 0
While 1 = 1
If ToetsHoger = LOO And Snelheid < 250 Then Inc Snelheid
If ToetsLager = LOO And Snelheid > 0 Then Dec Snelheid
PWM PWM_SIG,Snelheid,StartSnelheid
If Snelheid <> ERead 0 Then EWrite 0,[Snelheid]
Print At 2, 1, "Pw 0.0 W Rf 0.0 W"
Adcin 4, adval 'A/D [RA4 AN4]
adval = (adval) */ quanta
If adval < 1000 Then Print At 2,4," ", Dec1 adval Dig 2, ".", Dec1 adval Dig 1
If adval > 999 Then Print At 2,4, Dec1 adval Dig 3, Dec1 adval Dig 2, ".", Dec1 adval Dig 1

Adcin 3, adval1 'A/D [RA3 AN3]
adval1 = (adval1) */ quanta
Print At 2, 16, Dec1 adval1 Dig 2, ".", Dec1 adval1 Dig 1
If PORTB.6=1 Then FREQ_set
Wend

End


Muchas gracias
 
No se si me alcanzaras a entender pero a mi criterio es mejor empezar con un programa desde el comienzo que no solucionar los errores de este ya que los hay de todo tipo y variedad.

Si aun persistes aquí lo tienes corregidor en cuanto a los problemas por los que no compilaba pero no garantizo que funcione.
Código:
'****************************************************************
'* Name : 16F88 TSA5511.BAS *
'* Author : Winate_K *
'* Notice : Copyright © 2012 *
'* : All Rights Reserved *
'* Date : 29/5/2012 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
Device = 16F88
@CONFIG_REQ
@__CONFIG _CONFIG1, cp_off & ccp1_rb0 & debug_off & wrt_protect_off & cpd_off & lvp_off & boden_off & mclr_on & PWRTE_ON & WDT_OFF & INTRC_IO
@__CONFIG _CONFIG2, IESO_OFF & FCMEN_OFF
#define I2C_SCLOUT On
All_Digital = TRUE
TRISA = %11111000
TRISB = %11100000
OSCCON =%01101110
ANSEL = %00011000
Declare LCD_Lines = 2' LCD 4 Line
Declare LCD_DTPin = PORTB.0 'LCD Data Pin
Declare LCD_Interface = 4' LCD Data Pin 4
Declare LCD_RSPin = PORTB.4 'LCD RS Pin
Declare LCD_ENPin = PORTA. 6 'LCD AND Pin
Declare Adin_Res 10
Declare Adin_Tad frc
Declare Adin_Stime = 100

Symbol SDA = PORTA.1' I2C SDA PORTA.1
Symbol SCL = PORTA.0 'I2C Scl PORTA.0
Symbol LED = PORTA.2
Symbol LOO = 0
Symbol Speed = 10
Symbol PWM_SIG = PORTA.7

Dim FREQ_step As Word 'Frequency step
Dim FREQ_khz As Word 'Frequency Khz
Dim FREQ_mhz As Word 'Frequency Mhz
Dim FREQ As Word
Dim F_CONTROL As Word
Dim ADRESS As Byte 'TSA5511 i2c adres
Dim LO As FREQ.LowByte
Dim HI As FREQ.HighByte
Dim Snelheid As Byte  ' Velocidad
Dim ToetsHoger As Byte ' subir
Dim ToetsLager As Byte  ' bajar
Dim StartSnelheid As Byte ' velocidad de inicio


Symbol quanta = 30 '+Vref = 5V : Quanta=5V/1023*256=1.251
Dim adval As Word
Dim adval1 As Byte
ADCON1 = %11000000 'Right Justify A/D result
Clear
High LED
Cls
Print $fe, 1
Print At 1,1," HELLO "
Print At 2,1," WECOME TO FM PLL "
DelayMS 15000
Print At 1,1," FM TRANSMITTER "
Print At 2,1," *SISAKET PLL V1* "
DelayMS 15000

Loopi:
ADRESS = $C0 'TSA5511 in adres
FREQ_step = ERead 02
If FREQ_step > 0 Then TSA

FREQ_set:
            DelayMS 100
            FREQ_mhz = (FREQ_step*10/2)//100
            FREQ_khz = (FREQ_step*10/2)/100
            Print $fe, 1
            Print At 1, 1, "Set FM"
            Print At 2, 1, "Pw 0.0 W Rf 0.0 W"
            DelayMS 100
            If PORTB.5 = 1 Then UP_freq
            If PORTB.7 = 1 Then DOWN_freq
            If PORTB.6 = 1 Then SET_freq

'----------------------- Tsa5511 --------------------------
            FREQ = FREQ_step
            I2COut SDA,SCL,ADRESS,[HI,LO,$8E,$10]
            GoTo FREQ_set

UP_freq:
        DelayMS 50
        FREQ_step = FREQ_step + 1 'step 5
        If FREQ_step > 2160 Then FREQ_step = 1750
        GoTo FREQ_set

DOWN_freq:
          DelayMS 50
          FREQ_step = FREQ_step - 1 'step 5
          If FREQ_step < 1750 Then FREQ_step = 2160
          GoTo FREQ_set
'--------------------------data ---------------------------
SET_freq:
            EWrite 02, [FREQ_step]
            DelayMS 200
'----------------------- Tsa5511 --------------------------
TSA:
        FREQ = FREQ_step
        I2COut SDA,SCL,ADRESS,[HI,LO,$8E,$00] '[HI,LO,$8E,$OO]
        DelayMS 200
'----------------------Tsa5511 Control ----------------------
        I2CIn SDA,SCL,ADRESS,[F_CONTROL]
        If F_CONTROL.6 = 1 Then kitli
        FREQ_mhz = (FREQ_step*10/2)//100
        FREQ_khz = (FREQ_step*10/2)/100
        Print $fe, 1
        Print At 1, 1, "Scan FM"
        If PORTB.6 = 1 Then FREQ_set
        Print At 2, 1, "Pw 0.0 W Rf 0.0 W"
        'GoSub PW
        GoTo TSA

kitli:
        I2COut SDA,SCL,ADRESS,[HI,LO,$8E,$21] '[HI,LO,$8E,$24]
        FREQ_mhz = (FREQ_step*10/2)//100
        FREQ_khz = (FREQ_step*10/2)/100
        Print $fe, 1
        Print At 1, 1, "OnAir FM"
        If PORTB.6 = 1 Then FREQ_set
        GoSub PW

'ADCON0 = %11100101
PW:
        Snelheid = ERead 0     '
    While 1 = 1
        If ToetsHoger = LOO And Snelheid < 250 Then Inc Snelheid
        If ToetsLager = LOO And Snelheid > 0 Then Dec Snelheid
        PWM PWM_SIG,Snelheid , StartSnelheid
        If Snelheid <> ERead 0 Then EWrite 0,[Snelheid]
        Print At 2, 1, "Pw 0.0 W Rf 0.0 W"
        Adcin 4, adval 'A/D [RA4 AN4]
        adval = (adval) */ quanta
        If adval < 1000 Then
            Print At 2,4," ", Dec1 Dig 2,adval, ".", Dec1 Dig 1, adval
        EndIf
        If adval > 999 Then
            Print At 2,4, Dec1 Dig 3,adval , Dec1 Dig 2,adval , ".", Dec1 Dig 1,adval
        EndIf

        Adcin 3, adval1 'A/D [RA3 AN3]
        adval1 = (adval1) */ quanta
        Print At 2, 16, Dec1 Dig 2,adval1, ".", Dec1 Dig 1, adval1
        If PORTB.6 = 1 Then FREQ_set
    Wend

End
 
Hola Ric,
Mucha gente es muy discreta sobre códigos antiguos como este, podría ser esto muy importante.

De todos modos gracias, lo estudiaré para entender.

Algunos de ellos simplemente copian y pegan de fredsxx, hace mucho tiempo.


Gracias,
Lahmun
 
Hola Ric,
Mucha gente es muy discreta sobre códigos antiguos como este, podría ser esto muy importante.

De todos modos gracias, lo estudiaré para entender.

Algunos de ellos simplemente copian y pegan de fredsxx, hace mucho tiempo.


Gracias,
Lahmun
Hola, más que muy importante, es un negocio hacer los PLLs con microcontroladores PIC, por eso los que tienen su código fuente lo guardan celosamente, aunque si lo hicieran con Arduino, sería hasta más barato desde un punto de vista de hardware, pero sería abierto y eso no lo quieren hacer!!!
Saludos
 
Hola,
son muy afortunados, porque hace mucho tiempo, un foro cuyo nombre es fredsforum discute mucho sobre HF o este transmisor, por lo que algunas personas tienen suerte de copiar y pegar desde allí, pero ahora ese foro estaba cerrado, podría ser el propietario ... intente para visitar allí, entonces sabes, en este momento no puedes acceder o registrarte en ese foro.

Gracias
Lahmun
 
Hola, más que muy importante, es un negocio hacer los PLLs con microcontroladores PIC, por eso los que tienen su código fuente lo guardan celosamente, aunque si lo hicieran con Arduino, sería hasta más barato desde un punto de vista de hardware, pero sería abierto y eso no lo quieren hacer!!!
Saludos

OFF-TOPIC

Desde siempre todo diseñador ha tratado de proteger su diseño contra copia si eso es posible( a nivel de acciones propias o mediante la ley).

Cuando no existían los PIC también se limaban los IC o los componentes donde estaba la identificación para dificultar que cualquiera, con poco trabajo, se hiciera del trabajo del que lo diseño.

Con la invención de los micro-controladores con protección contra lectura, ese trabajo es mas "limpio" si se quiere por que con negar el acceso a la lectura del software diseñado es similar el resultado.

Diseñar un software con su respectivo hardware que funcione correctamente, de ese tipo, conlleva un trabajo importante para ser ofrecido para un copy-paste sin más.
 
Si el archivo del hex del PIC y el circuito del LM7001 indican un cristal de 7.200KHz te saldrá en la realidad todo corrido de frecuencia por que el patrón en vez de estar donde debiera, esta desplazado 40KHz hacia abajo o mas de donde debería estar.

Puede andar con uno de 7.199 0 7.201 pero mucho mas no me arriesgaría.
 
Saludos a todos los colegas gracias por esa informacion que comparten .
Estoy haciendo pruebas con el BH1415 con un codigo sencillo en pic c la idea es mejorarlo con mas funciones.
Si alguien en el foro a probado con este pll para compartir informacion.
 

Adjuntos

  • imagen 01.jpg
    imagen 01.jpg
    261.7 KB · Visitas: 60
hermes30 revisa el buscador de foro(lupa con la inscripción de Buscar en la esquina superior derecha de la pagina) con la nomenclatura del IC y veras que ya fue mencionado algunas veces.

Revisa lo que hay al respecto y por cierto no es un PLL si no un sistema mas completo de emisión de audio inalámbrico en FM.

Saludos.

Ric.
 
Arriba