Hola a todos.
Escribo este primer mensaje como presentación en este magnifico foro.
Estoy haciendo un generador de RF mezcla DDS y VCO's. Utilizare el DDS un ad9850 hasta los 20MHz y los VCO hasta los 200MHz. La parte de los VCO la tengo terminada, y la parte del DDS estoy un poco estancado. Tengo funcionando el AD9850 y un codificador con el siguiente código:
Utilizo un PIC de la serie 18 para utilizar variables Long
Pero me gustaría ponerle un teclado matricial 4x4 para poder introducir la frecuencia. Por ejemplo escribir "4566000MHz". Me gustaría hacer que tenga barrido, introduciendo la frecuencia de inicio, la frecuencia final y los incrementos de frecuencia.
Todas las ideas serán bienvenidas.
Escribo este primer mensaje como presentación en este magnifico foro.
Estoy haciendo un generador de RF mezcla DDS y VCO's. Utilizare el DDS un ad9850 hasta los 20MHz y los VCO hasta los 200MHz. La parte de los VCO la tengo terminada, y la parte del DDS estoy un poco estancado. Tengo funcionando el AD9850 y un codificador con el siguiente código:
Código:
DEFINE LCD_DREG PORTA ' Puerto de Datos del PIC
DEFINE LCD_DBIT 0 ' Empieza en PORTA.0 hasta PORTA.3
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4 ' Posicion de la linea RS
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 5 ' Posicion de la linea E
DEFINE LCD_BITS 4 ' 4-bit data bus
DEFINE LCD_LINES 2 ' LCD lineas
DEFINE LCD_COMMANDUS 1000 ' Retardo Comandos
DEFINE LCD_DATAUS 50 ' Retardo Datos
DEFINE OSC 48 ' Especifica reloj
'_________________________________________________
' Configuracion registros PIC
'_________________________________________________
TRISA = %00000000 ' Configura in/out 0=salida
TRISB = %11111111 ' Configura in/out 1=entrada
TRISC = %00110000 ' Configura in/out
PORTA = 0
PORTB = 0
PORTC = 0
LATA = 0 ' Registros Latch
LATB = 0
LATC = 0
ADCON0 = $00 ' Deshabilita ADC
ADCON1 = $0F ' Pines ADC todos digitales
CMCON = $07 ' Comparador deshabilitado
UCON = %00000000 ' Deshabilita USB y habilita RC4 e RC5
UCFG.3 = 1 ' Deshabilita USB Transceiver
INTCON2.7=0 ' Habilita R de pull-up
'T2CON = %00000100 ' Prescaler=1 TMR2=ON
PORTA = 0
PORTB = 0
PORTC = 0
INTCON.7 = 1 ' Habilita interrupciones globales GIE=1
INTCON.6 = 1 ' Habilita interrupciones perifericas PEIE=1
PIE1.5 = 1 ' Habilita interrupciones recepciones RCIE
' On Interrupt Goto RxService ' Asignar interrupción
'___________________________________
' Simbolos del programa
'___________________________________
symbol EA = portc.4 ' Encoder A
symbol EB = portc.5 ' Encoder B
symbol P6 = portb.6 ' Menu
symbol P7 = portb.7 '
symbol P0 = portb.0 '
'___________________________________
' Variables del programa
'___________________________________
ValorSinto VAR LONG ' Palabra de sintonia
Frecuencia var LONG ' Valor frecuencia
Control var BYTE ' Registro control DDS
Dato_pin var PortC.0 ' Pin de Datos
Reloj_pin var PortC.2 ' Pin de Reloj
Carga_Pin var PortC.1 ' Pin de actualizacion del DDS
Enc var byte ' Lectura encoder
Ent_Parte var word ' Parte entera division
Fra_Parte var word ' Parte decimal division
'___________________________________
' Titulo del LCD en PowerON
'___________________________________
pause 200
lcdout $FE,1, $FE,2 'Limpia LCD y va primera linea
LCDOUT "CCT2013 V1.0"
'___________________________________
' Inicializa variables
'___________________________________
Control=0 ' Ajuste inicial variable modificable
Frecuencia=5000000 ' Ajusta frecuenza inicial
Fre_Rango=2 ' Rango inicial
Fre_Desplaza=0 ' Modifica simbolo mas significativo
Carga_Pin= 1
pause 2000
gosub Calcular
gosub Enviar_DDS
'___________________________________
' Principal
'___________________________________
Retorno_Menu
Pause 10
if p6=0 then Retorno_Menu
call LCD_Refresco
Principal
if p6=0 then goto Menu
if ea=0 then goto Enc_Giro
goto principal
Enc_Giro
if EB=0 then Enc_Inc
Enc_Dec
Frecuencia = Frecuencia-1
GOTO Enc_Confirm
Enc_Inc
Frecuencia = Frecuencia+1
goto Enc_Confirm
Enc_Confirm
if frecuencia>20000000 then frecuencia=20000000
if Frecuencia<400000 then Frecuencia=400000
call LCD_Refresco
gosub Calcular
gosub Enviar_DDS
Enc_Complete
if EA=1 and EB=1 then Principal
goto Enc_Complete
goto Principal
'___________________________________
' Gestion pulsadores
'___________________________________
'___________________________________
' Gestiona Menus
'___________________________________
menu
goto Principal
'___________________________________
' Subprograma de calibración
'___________________________________
'___________________________________
' Actualizacion LCD
'___________________________________
LCD_Refresco
lcdout $FE,1, $FE,2
lcdout "F: "
if frecuencia < 1000000 then
Ent_Parte = Frecuencia/1000
Fra_Parte = Frecuencia//1000
lcdout #Ent_Parte, "."
if Fra_parte < 100 then lcdout "0"
if Fra_Parte < 10 then lcdout "0"
lcdout #Fra_Parte, "KHz"
else
Ent_Parte = Frecuencia/1000000
Fra_Parte = Frecuencia//1000000
lcdout #Ent_Parte, "."
if Fra_parte < 100 then lcdout "0"
if Fra_Parte < 10 then lcdout "0"
lcdout #Fra_Parte, "MHz"
endif
return
'___________________________________
' Actualiza frecuencia del DDS
'___________________________________
Calcular
ValorSinto = Frecuencia ** 2251800
return
'___________________________________
' Transferir al DDS
'___________________________________
Enviar_DDS
SHIFTOUT Dato_Pin, Reloj_pin, 0,[ValorSinto.BYTE0, ValorSinto.BYTE1, ValorSinto.BYTE2, ValorSinto.BYTE3, Control]
Carga_Pin = 1
pauseus 10
Carga_Pin = 0
pause 1000
return
Utilizo un PIC de la serie 18 para utilizar variables Long
Pero me gustaría ponerle un teclado matricial 4x4 para poder introducir la frecuencia. Por ejemplo escribir "4566000MHz". Me gustaría hacer que tenga barrido, introduciendo la frecuencia de inicio, la frecuencia final y los incrementos de frecuencia.
Todas las ideas serán bienvenidas.
Última edición por un moderador: