darkbyte muchas gracias por tu aporte use los 74hc14 y funciono gracias
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Miren implemente el siguiente programa y circuito con proteus y microcode .Trata de una matriz de 5x7 donde aparece un muñeco que saluda con movimientos y programación sencilla.
He implementado el circuito pero el puerto a no me responde como salida digital ni para el 16f628a ni para el 16f877a quisiera saber si se trata de un error del microcode . Ya que en la hoja de datos dice que funcionan como entradas y salidas digitales o analogicas gracias.
Hola alguien hizo control de velocidad de un motor de 12VCC 100 RPM con HPWM , miis dudas son las sgts:
1: configurar el HPWM para el pin portd0 y portd1 puesto que los toma por defecto al portc le hize el cambio con el define pero no me sale
2:cuando le da run o inicio y se va ala rutina funciona viste, pero cuando tiene que volver a " inicio" no se apaga sigue generando pulsos , lo que hice fue poner en low esos pines pero sigue andando. Segun lei este comando es programado por hardware es decir genera el pwm y el pic puede hacer al mismo tiempo otaras funciones barbaro ,pero el tema es que nose como detenerlo.
Trabaja el teclado con números enteros, por ejemplo tecla = 1 no tecla = "1"El problema es que no está en decimal, (me parece que está en ASCII)[/SIZE]
Tan solo tienes que sumarlas.¿Cómo convierto los valores (parecido a concatenar en EXCEL) de dos variables a 2 dígitos y en decimal?Ejemplo:T1=0T2=9T=09 (minutos)
giro:
for x = 1 to 6 'Repite 6 veces la parte comprendida entre' FOR y NEXT
portc= %1100
pause v
portc= %0110
pause v
portc= %0011
pause v
portc= %1001
pause v
NEXT
pause 100
for x =1 to 6
portc= %1001
pause v
portc= %0011
pause v
portc= %0110
pause v
portc= %1100
pause v
next
pause 100
GOTO giro:
Para hacer eso, tendrás que hacer uso de interrupciones, porque las pausas congelaran el proceso.Ahora se me presenta el siguiente problema:…Donde pongo el siguiente código (corresponde a un motor PAP) que se ejecute mientras el led esté encendido y pare cuando se apague, sin perturbar el tiempo de temporización.
Con PicBasic Pro no podrás obtener el resultado de esa formula porque PBP no trabaja con punto flotante.Otra consulta:
si hago t=99
u=(1/t)*1000
u=10.10101010
el resultado me da con decimales
¿tengo que usar algún artificio para obtener la parte entera (como lo hace int o entero en excel) o PBP sobreentenderá y trabajará con la parte entera?
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
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 LongCó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
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.
hola a todos. aquí desparchado sin nada que hacer me dedique a realizar una matriz para adorno de mi banco de trabajo y haciendo pruebas hice 2 programitas uno para una figura fija y otro para una móvil pero: al compilar la fija funciona perfectamente y al compilar la móvil el compilador no hace nada y genera el asm pero no el hex y se queda bloqueado incluso para que funcione de nuevo debo reiniciar el pc como sí se tratara de un virus:cabezon:, sera que alguien me puede ayudar echándole un ojito a mi proyecto? a ver sí puedo hacer funcionar la figura móvil? aquí les subo los archivos para que los vean les agradezco de antemano su ayuda
La version del PBP es la 2.60. A partir de esta version puedes declarar variables LONG de 32 bits, siempre que utilizes PIC de la serie 18. La version del Microcode Studio es la 4.0.0.0, y en opciones del compilador tienes que marcar la casilla "use PBPL".Hola...Bienvenido al foro y yo estuve hace tiempo pensando en un proyecto similar pero por aquí se hace muy difícil conseguir en el mercado local los materiales necesarios e imposible importarlos...¿que compilador estas usando? por que ni el Proton ni el PBP (al menos las versiones que yo tengo) reconocen la variable definidas como LONG.
Lo del teclado deberías dejar el puerto B libre y allí colocarlo.
Saludos.
Ric.
La version del PBP es la 2.60. A partir de esta version puedes declarar variables LONG de 32 bits, siempre que utilizes PIC de la serie 18. La version del Microcode Studio es la 4.0.0.0, y en opciones del compilador tienes que marcar la casilla "use PBPL".
Los materiales los consigo por ebay.
La parte de 20MHz a 200MHz la tengo hecha y funcionando con 4 osciladores (2 VCO de micro-circuits (POS200 y POS100 comprados por internet en una tienda de Australia), y 2 VCO hechos con transistores fet. La parte de 400KHz a 20MHz es la que voy hacer con un modulo DDS AD9850 comprado en ebay por 3€. Luego cuando pase de 20MHz quiero utilizar el DDS como fuente para el PLL y pilotar los otros VCO. Tengo tambien un nivelador de amplitud funcionando perfectamente que conecto a las salidas del DDS y VCO's. Me falta por hacer un amplificador de banda ancha, un atenuador y un medidor de la potencia de la señal.
El teclado lo tengo en el portB, pero no consigo que me funcione bien. Realmente lo que quiero es introducir cualquier numero entre 1 y 200000000, que me lo vaya mostrando en el LCD y cuando pulse por ejemplo "#" que me lo introduzca en la variable "frecuencia".
Piensa que cuando ulitize la funcion de "sweep" (barrido), tengo que introducir 3 frecuencias. A saber: Inicial, Final e Incremento. Tambien quiero poner 2 barridos con frecuencias centrales de 455KHz y 10,7MHz para ajustar los filtros de las FI.
Si estas interesado puedo enviarte mas informacion, aunque la tengo todavia como borrador, y los link donde he comprado las cosas.
Cristobal