'****************************************************************
'* Name : RECEPTOR NEOTEO.BAS *
'* Author : Mario G. Sacco *
'* Notice : Copyright (c) 2009 NeoTeo *
'* : All Rights Reserved *
'* Date : 17/11/2009 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'SELECCIONAMOS EL PIC Y LA FRECUENCIA DE TRABAJO (48Mhz PARA USB)
Device = 18F4550
Xtal = 48
'ESTA FILA LA GENERA EL MISMO "EASYHID USB WIZARD" Y LA COLOCA
'JUNTO A ESTE ARCHIVO .BAS DONDE TRABAJAREMOS LA APLICACIÓN
'(EN LA MISMA CARPETA)
USB_Descriptor = "RxNeoTeoDESC.inc"
'SETEO EL LCD 16X2 PARA 4 CABLES ****************************************************
LCD_DTPin = PORTB.4
LCD_RSPin = PORTB.3
LCD_ENPin = PORTB.2
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0
'BUS I2C *****************************************************************************
Declare SDA_Pin PORTB.0 'DECLARO CUALES PINES DEL PIC VAN A SER
Declare SCL_Pin PORTB.1 'SDA Y SCL CON UN BUS DE MENOS DE 8 MHZ
Declare Slow_Bus=On
ADCON1 = %00001110
TRISE = %00000100
'LOS TAMAÑOS DEL BUFFER USB ***********************************************************
Symbol USBBufferSizeMax = 32
Symbol USBBufferSizeTX = 32
Symbol USBBufferSizeRX = 32
Dim USBBuffer[USBBufferSizeMax] As Byte
'NUESTRAS VARIABLES DE TRABAJO *********************************************************
Symbol BB1 = %00000001 'BAND-SWITCH BYTE EN VHF BANDA BAJA
Symbol BB2 = %00000010 'BAND-SWITCH BYTE EN VHF BANDA ALTA
Symbol BB4 = %000001000 'BAND-SWITCH BYTE EN UHF
Symbol ADBW = %11000010 'ADRESS BYTE (TERMINA EN CERO = ESCRIBIREMOS FRECUENCIA EN EL SINTO)
Symbol CB = %11001000 'CONTROL BYTE(MODO NORMAL /AVANZAMOS POR PASOS DE 50KHZ.)
Symbol CMW = %10100000 'PALABRA DE CONTROL PARA ESCRIBIR LA MEMORIA
Symbol CMR = %10100001 'PALABRA DE CONTROL PARA LEER LA MEMORIA
Symbol X50KMAS = PORTD.0 'SUBIR DE A 50KHZ Y SUBE MEMORIAS
Symbol X50KMENOS = PORTD.1 'BAJAR DE A 50KHZ Y BAJA MEMORIAS
Symbol X1MMAS = PORTD.2 'SUBIR DE A 1MHZ
Symbol X1MMENOS = PORTD.3 'BAJAR DE A 1MHZ
Symbol X10MMAS = PORTD.4 'SUBIR DE A 10MHZ
Symbol X10MMENOS = PORTD.5 'BAJAR DE A 10MHZ
Symbol MUTE = PORTD.6 'ACTIVA EL SILENCIADOR DE AUDIO
Symbol SQUELCH = PORTD.7 'ACTIVA EL SILENCIADOR DE RUIDO ENTRE EMISORAS
Symbol CONEXION = PORTC.0 'DETECTA QUE SE CONECTÓ O DESCONECTÓ DE USB
Symbol MEM = PORTC.1 'ACTIVO LA RUTINA DE GUARDAR EN MEMORIA
Symbol VFO = PORTC.2 'SALGO DE LA RUTINA DE GRABADO DE MEMORIA Y VUELVO
'A SINTONÍA CONTÍNUA Y VICEVERSA
Symbol MUTEON = PORTE.0 'ACTIVO EL MUTE
Symbol SQUELCHON= PORTE.1 'ACTIVO EL SQUELCH
Dim MFLAG As Bit 'BANDERA DE LECTURA DE MEMORIA
Dim MODO As Bit 'BANDERA VFO <> MEMORIA
Dim DIVIDER As Word 'NÚMERO A CARGAR EN EL OSCILADOR LOCAL
Dim FREC As Dword 'FRECUENCIA QUE SE MUESTRA EN EL DISPLAY
Dim DIVIDER1 As DIVIDER.HighByte 'SUBPARTES DE LA VARIABLE DIVIDER
Dim DIVIDER2 As DIVIDER.LowByte
Dim MEMORIA As Word 'NUMERO DE MEMORIA EN DISPLAY
Dim ADDMEM As Byte 'BYTE INDICANDO DIRECCIÓN DENTRO DE LA DE MEMORIA
Dim DATO As Byte 'DATO EXTRAÍDO DESDE LA MEMORIA
Dim BB As Byte 'VARIABLE TEMPORAL DE LECTURA DE LA MEMORIA (BANDA)
Dim A As Word 'VARIABLE MULTIFUNCIóN
'***********************************************************************************
'REGISTROS Y BANDERAS
Dim PP0 As Byte System ' REGISTRO DENTRO DEL PIC USBPOLL STATUS
Symbol CARRY_FLAG = STATUS.0 ' EN ESTADO ALTO SI EL PIC NO TIENE
' EL CONTROL SOBRE EL BUFFER
Symbol ATTACHED_STATE = 6 ' SI USB ESTÁ CONECTADO
'***********************************************************************************
Clear 'LIMPIO LA RAM AL INICIAR
MODO = 0 'ARRANCO CON LA BANDERA DEL OSCILADOR EN VFO
MUTEON = 0 'ARRANCO CON EL MUTE DESACTIVADO
SQUELCHON = 0 'ARRANCO CON SQUELCH ACTIVADO
Cls 'LIMPIO DISPLAY AL INICIAR
GoSub AttachToUSB 'ME VOY A VER SI ESTÁ CONECTADO A USB
'AL INICIAR EL PROGRAMA
' *****************************************************************
' *****************************************************************
' * LAZO PRINCIPAL DEL PROGRAMA MIENTRAS SE ESTÁ CONECTADO A USB; *
' * RECUERDA QUE DEBES MANTENER LA CONEXIÓN "VIVA" CON LLAMADOS *
' * CONSTANTES A LAS RUTINAS USBPoll, USBIn or USBOut CADA ALGUNOS*
' * MILISEGUNDOS O MÁS *
' *****************************************************************
' *****************************************************************
ProgramLoop:
GoSub DoUSBIn
GoSub DoUSBOut
GoTo ProgramLoop
' ************************************************************
' * RUTINA DE RECEPCIÓN DE DATOS *
' ************************************************************
DoUSBIn:
If CONEXION = 0 Then GoTo FUERA 'CONTROLO SI SE DESCONECTÓ DE USB
USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
Return
' ************************************************************
' * RUTINA DE TRANSMISIÓN DE DATOS *
' ************************************************************
DoUSBOut:
If CONEXION = 0 Then GoTo FUERA 'CONTROLO SI SE DESCONECTÓ DE USB
USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut
Return
' ************************************************************
' * ESPERA HASTA QUE EL USB SE CONECTE *
' ************************************************************
AttachToUSB:
If CONEXION = 0 Then GoTo FUERA 'CONTROLO SI SE DESCONECTÓ DE USB
Repeat
USBPoll
Until PP0 = ATTACHED_STATE
Return
'******************************************************************************
'******************************************************************************
'** INICIO DEL PROGRAMA QUE SE DESARROLLA DE FORMA AUTÓNOMA **
'******************************************************************************
'******************************************************************************
FUERA: 'RUTINA FUERA DEL CONTACTO USB
Cls 'LIMPIO LA PANTALLA AL INICIAR
Print At 1,1," Funcionamiento " 'AVISO QUE SE DESCONECTÓ DE USB
Print At 2,1," sin USB "
DelayMS 2000 'MANTENGO EL MENSAJE Y PASO A MODO
Cls 'AUTÓNOMO
'******************************************************************************
'******************************************************************************
'** INICIO DEL PROGRAMA QUE SE DESARROLLA DE FORMA AUTÓNOMA **
'******************************************************************************
'******************************************************************************
FUERA2: 'COMIENZO LAZO CERRADO HASTA
MFLAG = 0 'ARRANCO CON LA BANDERA LIMPIA PARA LEER MEMORIA
MEMORIA = 1 'DIRECCIÓN INICIAL DE MEMORIA
GoTo OSCILADOR 'AL COMENZAR LO HAGO EN LA MEMORIA 1 Y LUEGO DESDE
'ALLÍ ME MUEVO POR TODO EL DIAL PASANDO A VFO
'**********************************************************************************************
' ACÁ LLEGO POR HABER SIDO ENVIADO DESDE LA RUTINA MEMO
'**********************************************************************************************
CANAL2: 'VHF "L" EL PROGRAMA ARRANCA EN LO MÁS BAJO QUE SE PUEDA
GoSub BAJA 'LLAMA A LA RUTINA PARA ESCRIBIR EN EL IC DEL SINTO
'LA FRECUENCIA DE INICIO
POWVHFL: 'LAZO DE DETECCIÓN DE TECLA PULSADA
If X50KMAS = 0 Then SUMAVHFL 'SI PULSAMOS +50K MANDAMOS A INCREMENTAR LA FRECUENCIA
If X50KMENOS = 0 Then RESTAVHFL 'SI PULSAMOS -50K MANDAMOS A BAJAR LA FRECUENCIA
If X1MMAS = 0 Then SUMA1VHFL 'SI PULSAMOS PARA SUBIR DE A 1MHZ
If X1MMENOS = 0 Then RESTA1VHFL 'SI PULSAMOS PARA BAJAR DE A 1MHZ
If X10MMAS = 0 Then SUMA10VHFL 'SI PULSAMOS PARA SUBIR DE A 10MHZ
If X10MMENOS = 0 Then RESTA10VHFL 'SI PULSAMOS PARA BAJAR DE A 10MHZ
If VFO = 0 Then GoSub OSCILADOR 'CONTROLAMOS SI SE PULSA EL BOTÓN VFO<>MEMORIA
If MEM = 0 Then GoTo GUARDAR 'VOY A LA RUTINA DE GUARDAR LA FRECUENCIA EN MEMORIA
If MUTE = 0 Then
Toggle MUTEON 'ACTIVO EL MUTE DE AUDIO
DelayMS 250 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
If SQUELCH = 0 Then
Toggle SQUELCHON 'ACTIVO EL SQUELCH
DelayMS 250 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
DelayMS 1 'PEQUEÑO RETARDO
GoTo POWVHFL 'CIERRO EL LAZO DE INTERROGACIÓN DE TECLAS
'Y REINICIO EL CICLO DE INTERROGACIÓN
SUMAVHFL: 'CUANDO RECIBIMOS LA INSTRUCCIÓN DE SUBIR
DIVIDER = DIVIDER + 1 'SUMAMOS 50KHZ (LE AGREGAMOS UNA UNIDAD A LA VARIABLE "DIVIDER")
GoTo MASVHFL 'PULSADA LA TECLA SALTAMOS A INCREMENTAR VHFL
SUMA1VHFL: 'SE PULSÓ 1MHZ+
MODO = 0 'SI ESTABAMOS EN MEMORIA PASAMOS A VFO
DIVIDER = DIVIDER + 20 'SUMAMOS 1MHZ (LE AGREGAMOS 20 UNIDADES A LA VARIABLE "DIVIDER")
GoTo MASVHFL 'PULSADA LA TECLA SALTAMOS A INCREMENTAR VHFL
SUMA10VHFL: 'SE PULSÓ 10MHZ+
MODO = 0 'SI ESTABAMOS EN MEMORIA PASAMOS A VFO
DIVIDER = DIVIDER + 200 'SUMAMOS 10MHZ (LE AGREGAMOS 200 UNIDADES A LA VARIABLE "DIVIDER")
MASVHFL:
If DIVIDER > 3580 Then GoTo CANAL7 'SI NOS PASAMOS, SALTAMOS DE VHFL A VHFH
GoTo CANAL2 'SINÓ, VOLVEMOS AL INICIO DE LA BANDA EN QUE ESTÁBAMOS (VHFL)
RESTAVHFL: 'CUANDO RECIBIMOS LA INSTRUCCIÓN DE BAJAR
DIVIDER = DIVIDER - 1 'BAJAMOS 50KHZ
GoTo MENOSVHFL 'PULSADA LA TECLA SALTAMOS A DECREMENTAR VHFL
RESTA1VHFL: 'SE PULSÓ 1MHZ-
MODO = 0 'SI ESTABAMOS EN MEMORIA PASAMOS A VFO
DIVIDER = DIVIDER - 20 'BAJAMOS 1MHZ
GoTo MENOSVHFL 'PULSADA LA TECLA SALTAMOS A DECREMENTAR VHFL
RESTA10VHFL: 'SE PULSÓ 10MHZ-
MODO = 0 'SI ESTABAMOS EN MEMORIA PASAMOS A VFO
DIVIDER = DIVIDER - 200 'BAJAMOS 10MHZ
MENOSVHFL: 'SI BAJANDO EXCEDEMOS EL LÍMITE
If DIVIDER < 1800 Then DIVIDER = 20823:GoTo TECLAS51 'SALTAMOS AL FINAL DEL DIAL
GoTo CANAL2 'VOLVEMOS AL INICIO
CANAL7: 'VHF "H"
GoSub MEDIA 'LLAMA A LA RUTINA PARA ESCRIBIR EN EL IC DEL SINTO
POWVHFH:
If X50KMAS = 0 Then SUMAVHFH 'MANDAMOS A SUBIR 50KHZ
If X50KMENOS = 0 Then RESTAVHFH 'MANDAMOS A BAJAR 50KHZ
If X1MMAS = 0 Then SUMA1VHFH 'MANDAMOS A SUBIR 1MHZ
If X1MMENOS = 0 Then RESTA1VHFH 'MANDAMOS A BAJAR 1MHZ
If X10MMAS = 0 Then SUMA10VHFH 'MANDAMOS A SUBIR 10MHZ
If X10MMENOS = 0 Then RESTA10VHFH 'MANDAMOS A BAJAR 10MHZ
If VFO = 0 Then GoSub OSCILADOR 'CONTROLAMOS SI SE PULSA EL BOTÓN VFO<>MEMORIA
If MEM = 0 Then GoTo GUARDAR 'VOY A LA RUTINA DE GUARDAR LA FRECUENCIA EN MEMORIA
If MUTE = 0 Then
Toggle MUTEON 'ACTIVO EL MUTE DE AUDIO
DelayMS 250 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
If SQUELCH = 0 Then
Toggle SQUELCHON 'ACTIVO EL SQUELCH
DelayMS 250 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
DelayMS 1 'PEQUEÑO RETARDO
GoTo POWVHFH 'VUELVO A INICIAR EL CICLO DE INTERROGACIÓN DE TECLAS
SUMAVHFH: 'CUANDO RECIBIMOS LA INSTRUCCIÓN DE SUBIR
DIVIDER = DIVIDER + 1 'SUMAMOS 50KHZ (LE AGREGAMOS UNA UNIDAD A LA VARIABLE "DIVIDER")
GoTo MASVHFH
SUMA1VHFH:
MODO = 0
DIVIDER = DIVIDER + 20
GoTo MASVHFH
SUMA10VHFH:
MODO = 0
DIVIDER = DIVIDER + 200
MASVHFH:
If DIVIDER > 8250 Then GoTo TECLAS51
GoTo CANAL7
RESTAVHFH:
DIVIDER = DIVIDER - 1
GoTo MENOSVHFH
RESTA1VHFH:
MODO = 0
DIVIDER = DIVIDER - 20
GoTo MENOSVHFH
RESTA10VHFH:
MODO = 0
DIVIDER = DIVIDER - 200
MENOSVHFH:
If DIVIDER < 3579 Then GoTo CANAL2
GoTo CANAL7
TECLAS51:
GoSub CANAL51
POW51:
If X50KMAS = 0 Then SUMA51
If X50KMENOS = 0 Then RESTA51
If X1MMAS = 0 Then SUMA1UHF
If X1MMENOS = 0 Then RESTA1UHF
If X10MMAS = 0 Then SUMA10UHF
If X10MMENOS = 0 Then RESTA10UHF
If VFO = 0 Then GoSub OSCILADOR 'CONTROLAMOS SI SE PULSA EL BOTÓN VFO<>MEMORIA
If MEM = 0 Then GoTo GUARDAR 'VOY A LA RUTINA DE GUARDAR LA FRECUENCIA EN MEMORIA
If MUTE = 0 Then
Toggle MUTEON 'ACTIVO EL MUTE DE AUDIO
DelayMS 250 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
If SQUELCH = 0 Then
Toggle SQUELCHON 'ACTIVO EL SQUELCH
DelayMS 250 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
DelayMS 1
GoTo POW51
SUMA51:
DIVIDER = DIVIDER + 1
GoTo SUMAUHF
SUMA1UHF:
MODO = 0
DIVIDER = DIVIDER + 20
GoTo SUMAUHF
SUMA10UHF:
MODO = 0
DIVIDER = DIVIDER + 200
SUMAUHF:
If DIVIDER > 20823 Then DIVIDER = 1800:GoTo CANAL2
GoTo TECLAS51
RESTA51:
DIVIDER = DIVIDER - 1
GoTo RESTAUHF
RESTA1UHF:
MODO = 0
DIVIDER = DIVIDER - 20
GoTo RESTAUHF
RESTA10UHF:
MODO = 0
DIVIDER = DIVIDER - 200
RESTAUHF:
If DIVIDER < 8249 Then CANAL7
GoTo TECLAS51
BAJA:
GoSub DISPLAY 'MUESTRO LA FRECUENCIA EN EL DISPLAY
BStart 'INICIO EL CONTACTO I2C
BusOut ADBW 'ENVÍO EL BYTE DE ADDRESS PARA ESCRIBIR EN EL SINTO
BusOut DIVIDER1 'ENVÍO EL PRIMER BYTE DEL DIVISOR PROGRAMABLE (DIVIDER1)
BusOut DIVIDER2 'ENVÍO EL SEGUNDO BYTE DEL DIVISOR PROGRAMABLE (DIVIDER2)
BusOut CB 'ENVÍO EL CONTROL BYTE
BusOut BB1 'ENVÍO EL BAND-SWITCH BYTE (VHFL)
BStop 'TERMINO EL CONTACTO I2C
DelayMS 300
BB = BB1 'TRANSMITO A LA VARIABLE BB EL DATO DE LA BANDA SINTONIZADA
Return
MEDIA:
GoSub DISPLAY 'MUESTRO LA FRECUENCIA EN EL DISPLAY
BStart 'INICIO EL CONTACTO I2C
BusOut ADBW 'ENVÍO EL BYTE DE ADDRESS PARA ESCRIBIR EN EL SINTO
BusOut DIVIDER1 'ENVÍO EL PRIMER BYTE DEL DIVISOR PROGRAMABLE (DIVIDER1)
BusOut DIVIDER2 'ENVÍO EL SEGUNDO BYTE DEL DIVISOR PROGRAMABLE (DIVIDER2)
BusOut CB 'ENVÍO EL CONTROL BYTE
BusOut BB2 'ENVÍO EL BAND-SWITCH BYTE (VHFH)
BStop 'TERMINO EL CONTACTO I2C
DelayMS 300
BB = BB2 'TRANSMITO A LA VARIABLE BB EL DATO DE LA BANDA SINTONIZADA
Return
CANAL51:
GoSub DISPLAY 'MUESTRO LA FRECUENCIA EN EL DISPLAY
BStart 'INICIO EL CONTACTO I2C
BusOut ADBW 'ENVÍO EL BYTE DE ADDRESS PARA ESCRIBIR EN EL SINTO
BusOut DIVIDER1 'ENVÍO EL PRIMER BYTE DEL DIVISOR PROGRAMABLE (DIVIDER1)
BusOut DIVIDER2 'ENVÍO EL SEGUNDO BYTE DEL DIVISOR PROGRAMABLE (DIVIDER2)
BusOut CB 'ENVÍO EL CONTROL BYTE
BusOut BB4 'ENVÍO EL BAND-SWITCH BYTE (UHF)
BStop 'TERMINO EL CONTACTO I2C
DelayMS 300
BB = BB4 'TRANSMITO A LA VARIABLE BB EL DATO DE LA BANDA SINTONIZADA
Return
'**********************************************************************************************
' MUESTRO FRECUENCIA Y LEYENDA EN PANTALLA
'**********************************************************************************************
DISPLAY: 'MUESTRO EN EL DISPLAY LA FRECUENCIA DE RECEPCIÓN
Print At 1,1,"Receptor NeoTeo "
FREC = DIVIDER * 50
FREC = FREC -42500 'ACÁ SE RESTA EL VALOR DE LA FRECUENCIA INTERMEDIA
Print At 2,1,Dec FREC,"Khz " 'MUESTRO A LA IZQUIERDA DEL SEGUNDO RENGLÓN LA FRECUENCIA EN Khz
Return
'**********************************************************************************************
' RUTINA AL INICIAR EL EQUIPO O AL PULSAR EL BOTÓN M<>VFO
'**********************************************************************************************
OSCILADOR: 'LLEGO ACÁ SI SE PULSÓ EL BOTON M<>VFO
DelayMS 200 'TIEMPO PARA EL BOTÓN
MODO = MODO + 1 'INCREMENTO LA BANDERA QUE INDICARÁ QUE ESTOY EN MEMORIA
If MODO = 0 Then 'SI LA BANDERA MODO ESTÁ EN CERO VOY A VFO
Print At 2,10," VFO" 'Y LO MUESTRO EN PANTALLA
Else 'SINO
Print At 2,13,"M:",Dec2 MEMORIA 'ESCRIBO MEMORIA Y SU NÚMERO
DelayMS 200
MFLAG = 0 'DEBO SALIR Y ESCRIBI EL VALOR DE LA MEMORIA
GoTo MEMO 'SALTO AL LAZO DE MEMORIA
EndIf
Return 'REGRESO A DONDE ME LLAMARON
'************************************************************************************
' INGRESAMOS AL MODO MEMORIA
'************************************************************************************
MEMO:
If X50KMAS = 0 Then 'SI SE PULSA PARA AVANZAR UNA MEMORIA
MEMORIA = MEMORIA + 1 'INCREMENTO EL NÚMERO EN PANTALLA
If MEMORIA > 79 Then MEMORIA = 1 'SI LLEGO AL MÁXIMO DE LOS VALORES VUELVO A LA PRIMERA
Print At 2,13,"M:",Dec2 MEMORIA 'ESCRIBO EN PANTALLA LA LETRA Y EL NÚMERO DE MEMORIA
MFLAG = 0 'VACÍO LA BANDERA PARA PODER SALTAR A LEER EL NUEVO VALOR
End If
DelayMS 150 'TIEMPO PARA PULSAR EL BOTÓN
If X50KMENOS = 0 Then 'SI SE PULSA PARA RETROCEDER UNA MEMORIA
MEMORIA = MEMORIA - 1 'DECREMENTO EL NÚMERO EN PANTALLA
If MEMORIA < 1 Then MEMORIA = 79 'SI LLEGO AL MÍNIMO DE LOS VALORES VUELVO A LA MÁXIMA
Print At 2,13,"M:",Dec2 MEMORIA 'ESCRIBO EN PANTALLA LA LETRA Y EL NÚMERO DE MEMORIA
MFLAG = 0 'VACÍO LA BANDERA PARA PODER SALTAR A LEER EL NUEVO VALOR
End If
DelayMS 150 'TIEMPO PARA PULSAR EL BOTÓN
If MUTE = 0 Then
Toggle MUTEON 'ACTIVO EL MUTE DE AUDIO
DelayMS 100 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
If SQUELCH = 0 Then
Toggle SQUELCHON 'ACTIVO EL SQUELCH
DelayMS 100 'CON TIEMPO PARA EVITAR REBOTE DEL BOTÓN
EndIf
If MFLAG = 1 Then GoTo SALGO 'SI EL SELECTOR YA FUÉ LEÍDO SALTO LA INSTRUCCIÓN
'DE VOLVER A LEERLO PARA EVITAR RUIDOS RAROS
GoSub LEO 'ME VOY A LEER LA MEMORIA
'SINO, CONTINÚO EN ESTE LAZO ESPERANDO Y ESCUCHANDO
'LA ÚLTIMA MEMORIA SELECCIONADA
SALGO: 'VUELVO A MANEJAR LA POSIBILIDAD DE SALIR
If VFO = 0 Then 'SI SE PULSA VFO
DelayMS 500 'TIEMPO PARA EL BOTÓN
Print At 2,10," VFO" 'AL SALIR A VFO VAMOS A TENER EL VALOR DE DIVIDER
'Y CON ESO LO SACAMOS DE ESTE LAZO Y LO MANDAMOS
'A LA POSICIÓN (L/H/UHF) QUE LE TOQUE AL SALIR DE MEMORIA.
MODO = 1 'MODO VFO
'***********************************************************************************************
' DEVOLVER AL VFO INDICADO PARA QUE FUNCIONE EL SELECTOR DE BANDAS
'***********************************************************************************************
If BB > 1800 Or BB < 3579 Then 'DEVUELVO AL VFO DESDE LA FRECUENCIA
GoTo POWVHFL 'Y BANDA DONDE ESTUVE ESCUCHANDO LA
End If 'ÚLTIMA EMISORA PARA ESCUCHAR SINTONIAS
If BB > 3579 Or BB < 8249 Then 'CERCANAS Y GRABAR NUEVAS MEMORIAS SEGÚN LO
GoTo POWVHFH 'RECUPERADO DESDE DIVIDER Y BB
End If
If BB > 8249 Or BB < 20823 Then
GoTo POW51
End If
'***********************************************************************************************
End If
GoTo MEMO 'SINO CIERRO EL CICLO DE MEMORIA
'************************************************************************************
' ACÁ MANEJAMOS EL I2C CON LA MEMORIA PARA LEER Y OBTENEMOS EL DIVIDER Y EL BB
'************************************************************************************
LEO:
MFLAG = 1 'CAMBIO EL ESTADO DE LA BANDERA PARA NO VOLVER A ESTA SUBRUTINA
ADDMEM = MEMORIA * 3 'LA POSICIÓN DENTRO DE LA MEMORIA ES EL TRIPLE (SON TRES BYTES)
ADDMEM = ADDMEM - 2 'SACANDO DOS ARRANCO DESDE EL PRIMERO DE LOS TRES
'AL TENER LA POSICIÓN, YA PUEDO LEER
BStart 'ABRO EL CONTACTO I2C
BusIn CMR,ADDMEM,[BB] 'LEO EL DATO DE LA BANDA GRABADA (PREVIO ENVIAR DIRECCIÓN Y POSICIÓN)
BStop 'TERMINO EL CONTACTO I2C
DelayMS 20 'ESPERO A QUE SE GRABE
ADDMEM = ADDMEM + 1 'INCREMENTO A LA SIGUIENTE POSICIÓN
BStart 'ABRO EL CONTACTO I2C
BusIn CMR,ADDMEM,[DIVIDER]'LEO EL DATO DE LA BANDA GRABADA (PREVIO ENVIAR DIRECCIÓN Y POSICIÓN)
BStop 'TERMINO EL CONTACTO I2C
DelayMS 20 'ESPERO A QUE SE DESPEJE EL BUS I2C
BStart 'INICIO EL CONTACTO I2C
BusOut ADBW 'ENVÍO EL BYTE DE ADDRESS PARA ESCRIBIR EN EL SINTO
BusOut DIVIDER1 'ENVÍO EL PRIMER BYTE DEL DIVISOR PROGRAMABLE (DIVIDER1)
BusOut DIVIDER2 'ENVÍO EL SEGUNDO BYTE DEL DIVISOR PROGRAMABLE (DIVIDER2)
BusOut CB 'ENVÍO EL CONTROL BYTE
BusOut BB 'ENVÍO EL BAND-SWITCH BYTE
BStop 'TERMINO EL CONTACTO I2C
DelayMS 20 'ESPERO A QUE SE GRABE
GoSub DISPLAY 'MUESTRO EN PANTALLA LO QUE PUSE EN EL SINTO
Return 'VUELVO AL SITIO DE DONDE NOS ENVIARON
'*************************************************************************************************
' RUTINA PARA GUARDAR FRECUENCIA EN MEMORIA
'*************************************************************************************************
GUARDAR:
Print At 2,13,"M:",Dec2 MEMORIA 'ESCRIBO EN PANTALLA LA LETRA Y EL NÚMERO DE MEMORIA
DelayMS 300 'LO DEJO UN TIEMPO
Print At 2,13,"M: " 'APAGO EL NÚMERO
If X50KMAS = 0 Then 'SI SE PULSA PARA AVANZAR UNA MEMORIA
MEMORIA = MEMORIA + 1 'INCREMENTO EL NÚMERO EN PANTALLA
End If
DelayMS 150 'TIEMPO PARA PULSAR EL BOTÓN
If MEMORIA > 80 Then MEMORIA = 1 'SI LLEGO AL MÁXIMO DE LOS VALORES VUELVO A LA PRIMERA
If X50KMENOS = 0 Then 'SI SE PULSA PARA RETROCEDER UNA MEMORIA
MEMORIA = MEMORIA - 1 'DECREMENTO EL NÚMERO EN PANTALLA
End If
DelayMS 150 'TIEMPO PARA PULSAR EL BOTÓN
If MEMORIA = 0 Then MEMORIA = 80 'SI LLEGO AL MÍNIMO DE LOS VALORES VUELVO A LA MÁXIMA
If MEM = 1 Then GoTo GUARDAR 'SI NO SE VUELVE A PULSAR "M" SE QUEDA TITILANDO
'EL Nº DE MEMORIA
MFLAG = 0 'LEVANTO LA BANDERA PARA QUE AL SALIR AL MODO MEMORIA
'NO REENVÍE EL DATO AL SINTO
ADDMEM = MEMORIA * 3 'LA POSICIÓN DENTRO DE LA MEMORIA ES EL TRIPLE (SON TRES BYTES)
ADDMEM = ADDMEM - 2 'SACANDO DOS ARRANCO DESDE EL PRIMERO DE LOS TRES
'AL TENER LA POSICIÓN, YA PUEDO ESCRIBIR
BStart 'INICIO EL CONTACTO I2C
BusOut CMW,ADDMEM,[BB] 'ENVÍO LA DIRECCIÓN, LA LA POSICIÓN Y GRABO LA BANDA SELECCIONADA
BStop 'TERMINO EL CONTACTO I2C
DelayMS 20 'ESPERO UN TIEMPO
ADDMEM = ADDMEM + 1 'INCREMENTO UN POSICIÓN DE MEMORIA
BStart 'INICIO EL CONTACTO I2C
BusOut CMW,ADDMEM,[DIVIDER]'ENVÍO LA DIRECCIÓN, LA LA POSICIÓN Y GRABO LA FRECUENCIA SELECCIONADA
BStop 'TERMINO EL CONTACTO I2C
DelayMS 300
Print At 2,13,"M:",Dec2 MEMORIA 'ESCRIBO EN PANTALLA LA LETRA Y EL NÚMERO DE MEMORIA
GoTo MEMO 'CIERRO EL LAZO EN LA RUTINA DE MEMORIA
'*************************************************************************************************
If CONEXION = 1 Then GoTo ProgramLoop 'CONTROLO SI SE CONECTÓ A USB
GoTo FUERA2 'CIERRO EL LAZO EJEMPLO DE ACTIVIDADES QUE
'PUEDE ESTENDERSE A LA CANTIDAD QUE NECESITEMOS
'DURANTE EL FUNCIONAMIENTO SIN CONEXIÓN USB