Hola. Quiero comenzar a programar con PICBasic Pro. ¿Conocen algún curso virtual que pueda realizar? Muchas 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.
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 14/04/2022 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
'******************CONFIGURACION DE FUSIBLES*********************
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'***********CONFIGURACION DE PUERTOS Y FRECUENCIA DE RELOJ*********************
INCLUDE "modedefs.bas"
DEFINE OSC 20 'DECLARAMOS UN RELOJ DE 4MHZ
CMCON = 7 'DESACTIVAMOS LOS OPERACIONALES DEL PIC
TRISA=%11111111 'DECLARAMOS PORTA.0 A 7 COMO ENTRADA
TRISB=%00000111 'DECLARAMOS TODO EL PUERTO B COMO SALIDA
PORTA=%11111111 'INICIALIZAMOS PORTA.0 A 7 EN UNO LOGICO
PORTB=%00000111 'INICIALIZAMOS TODO EL PUERTO B EN CERO LOGICO
'*******************************************************************************
DATO VAR BYTE
RECIBE:
SERIN PORTB.0,N9600,2000,RES,DATO
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
GOTO RECIBE
ABRE:
LOW PORTB.1
PAUSE 1000
HIGH PORTB.1
GOTO RECIBE
CIERRA:
LOW PORTB.2
PAUSE 1000
HIGH PORTB.2
GOTO RECIBE
RES:
HIGH PORTB.1
HIGH PORTB.2
DATO=0
GOTO RECIBE
END
Hola Darío, probaste usando la interrupción por usart? Ejemplo:Hola gente, tanto tiempo sin entrar al foro jeje... bueno, el foro es como Dios, solo nos acordamos de el cuando nos hace falta...
bueno, les cuento que hace 2 dias que estoy peleando con un pic16f628A y la comunicacion serial. estoy intentando usar un modulo bluetooth HC05 para comunicar una pc con un pic. el problema es con el receptor, que no me quiere funcionar. en realidad funciona erraticamente. no le interesa el numero que le mande, hace cualquiera de las dos funciones que le he programado y esto cuando quiere... aca les comparto el codigo del receptor a ver si alguien me da una manito...
como transmisor, estoy usando un asistente virtual que llevo tiempo usando para mi robot animatronic, del que he compartido el proyecto en este foro, pero tambien estoy usando una app que instale en mi celular, se llama Bluetooth terminal HC05. esta muy buena para experimentar. bueno, aca les dejo el codigo por si alguien me puede ayudar... saludos a todos!!!
Código:'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 14/04/2022 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** '******************CONFIGURACION DE FUSIBLES********************* @ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF '***********CONFIGURACION DE PUERTOS Y FRECUENCIA DE RELOJ********************* INCLUDE "modedefs.bas" DEFINE OSC 20 'DECLARAMOS UN RELOJ DE 4MHZ CMCON = 7 'DESACTIVAMOS LOS OPERACIONALES DEL PIC TRISA=%11111111 'DECLARAMOS PORTA.0 A 7 COMO ENTRADA TRISB=%00000111 'DECLARAMOS TODO EL PUERTO B COMO SALIDA PORTA=%11111111 'INICIALIZAMOS PORTA.0 A 7 EN UNO LOGICO PORTB=%00000111 'INICIALIZAMOS TODO EL PUERTO B EN CERO LOGICO '******************************************************************************* DATO VAR BYTE RECIBE: SERIN PORTB.0,N9600,2000,RES,DATO IF DATO=10 THEN ABRE IF DATO=20 THEN CIERRA GOTO RECIBE ABRE: LOW PORTB.1 PAUSE 1000 HIGH PORTB.1 GOTO RECIBE CIERRA: LOW PORTB.2 PAUSE 1000 HIGH PORTB.2 GOTO RECIBE RES: HIGH PORTB.1 HIGH PORTB.2 DATO=0 GOTO RECIBE END
Hola martin, gracias por responder. probe un codigo parecido que compartieron aqui en el foro, es este que dejo aca. lo probe tal cual, pero sn exito... voy a hacer otra prueba haciendo algunas modificaciones, saludos.Hola Darío, probaste usando la interrupción por usart? Ejemplo:
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On
....
Hserin 100,continuo,[dato]
...
IF DATO=10 THEN ABRE
IF DATO=20 THEN CIERRA
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
@ __CONFIG _XT_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
'INCLUDE "modedefs.bas"
CMCON = 0
DEFINE OSC 4
'*******************************************************************************
CMCON = 7
TRISA = %00000000
TRISB = %00010010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TcSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On
LED var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'*******************************************************************************
pause 1000
PORTB.0 = 1 '*************************
pause 500 'esto es para saber q el pic vive
PORTB.0 = 0 '*************************
inicio:
HSERIN 100,continuo,[led]
continuo:
if led = "A" then
PORTB.0 = 1
pause 500
endif
if led = "B" then
PORTB.0 = 0
pause 500
endif
goto inicio
end
Lo primero que tiene que hacer, es evitar usar la instrucción PAUSE y saltar al siguiente nivel de programación, PAUSE es para primaria.Hola gente, tanto tiempo sin entrar al foro jeje... bueno, el foro es como Dios, solo nos acordamos de el cuando nos hace falta...
bueno, les cuento que hace 2 dias que estoy peleando con un pic16f628A y la comunicacion serial. estoy intentando usar un modulo bluetooth HC05 para comunicar una pc con un pic. el problema es con el receptor, que no me quiere funcionar. en realidad funciona erraticamente. no le interesa el numero que le mande, hace cualquiera de las dos funciones que le he programado y esto cuando quiere... aca les comparto el codigo del receptor a ver si alguien me da una manito...
como transmisor, estoy usando un asistente virtual que llevo tiempo usando para mi robot animatronic, del que he compartido el proyecto en este foro, pero tambien estoy usando una app que instale en mi celular, se llama Bluetooth terminal HC05. esta muy buena para experimentar. bueno, aca les dejo el codigo por si alguien me puede ayudar... saludos a todos!!!
Código:'**************************************************************** '* Name : UNTITLED.BAS * '* Author : [select VIEW...EDITOR OPTIONS] * '* Notice : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] * '* : All Rights Reserved * '* Date : 14/04/2022 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** '******************CONFIGURACION DE FUSIBLES********************* @ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF '***********CONFIGURACION DE PUERTOS Y FRECUENCIA DE RELOJ********************* INCLUDE "modedefs.bas" DEFINE OSC 20 'DECLARAMOS UN RELOJ DE 4MHZ CMCON = 7 'DESACTIVAMOS LOS OPERACIONALES DEL PIC TRISA=%11111111 'DECLARAMOS PORTA.0 A 7 COMO ENTRADA TRISB=%00000111 'DECLARAMOS TODO EL PUERTO B COMO SALIDA PORTA=%11111111 'INICIALIZAMOS PORTA.0 A 7 EN UNO LOGICO PORTB=%00000111 'INICIALIZAMOS TODO EL PUERTO B EN CERO LOGICO '******************************************************************************* DATO VAR BYTE RECIBE: SERIN PORTB.0,N9600,2000,RES,DATO IF DATO=10 THEN ABRE IF DATO=20 THEN CIERRA GOTO RECIBE ABRE: LOW PORTB.1 PAUSE 1000 HIGH PORTB.1 GOTO RECIBE CIERRA: LOW PORTB.2 PAUSE 1000 HIGH PORTB.2 GOTO RECIBE RES: HIGH PORTB.1 HIGH PORTB.2 DATO=0 GOTO RECIBE END
Ok, ahora estoy usando solo la aplicacion del celular. probe el circuito en proteus usando virtual terminal. puse uno para enviar el caracter y otro conectado al tx del micro para ver que caracteres cargaba en la variable. puse en marcha la simulacion y cuando envio una A, me devuelve una y minuscula y cuando envio una B, me devuelve una r minuscula. probe en el montaje fisico y cuando envio una A, me devuelve unos caracteres raros... igual si envio una B... eso quiere decir que la variable se carga con cualquier cosa, menos con los datos enviados... adjunto el nuevo codigo...No te estará pasando como me pasó en algún momento con el tema de puerto ocupado? Me acuerdo que darkbyte me ayudó en aquel entonces. Me pasó que cuando quería hacer comunicación serial desde pic al micro, no me funcionaba; Si no mal recuerdo, me dijo que use esos software de puertos virtuales y ahí caímos que era eso, que el puerto no lo podía usar por qué estaba ocupado... Después googleando caí que el verdadero conflicto era por usar un win desatendido ... Migre a otro win y quedó funcional... Chequea con otro micro en paralelo para ver si tenés comunicación. O sea, usa este mismo programa y en el otro micro mándale las instrucciones que le mandarías por el soft que estás usando
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSCILADOR
@ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF
INCLUDE "modedefs.bas"
DEFINE OSC 20
'*******************************************************************************
CMCON = 7
TRISA = %00000000
TRISB = %00010010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On
LED var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'*******************************************************************************
pause 1000
PORTB.0 = 1 '*************************
pause 1000 'esto es para saber q el pic vive
PORTB.0 = 0 '*************************
inicio:
Hserin 10,INICIO,[led]
HSEROUT [led]
if led = "Y" then
PORTB.0 = 1
pause 500
endif
if led = "R" then
PORTB.0 = 0
pause 500
endif
goto inicio
END
Ok, ahora estoy usando solo la aplicacion del celular. probe el circuito en proteus usando virtual terminal. puse uno para enviar el caracter y otro conectado al tx del micro para ver que caracteres cargaba en la variable. puse en marcha la simulacion y cuando envio una A, me devuelve una y minuscula y cuando envio una B, me devuelve una r minuscula. probe en el montaje fisico y cuando envio una A, me devuelve unos caracteres raros... igual si envio una B... eso quiere decir que la variable se carga con cualquier cosa, menos con los datos enviados... adjunto el nuevo codigo...
Gracias por la sugerencia unmonje, la tendre en cuenta por si n logro salir de esta jeje... iba a usar Arduino, pero es demasiado sencillo y la verdad, no me gusta jeje...
PD: ya probe tambien con conexion fisica y tampoco funciona...
Código:'******************************************************************************* ' DEFINICIÓN DE FUSES Y OSCILADOR @ __CONFIG _HS_OSC & _WDT_OFF & _MCLRE_OFF & _LVP_OFF & _CP_OFF INCLUDE "modedefs.bas" DEFINE OSC 20 '******************************************************************************* CMCON = 7 TRISA = %00000000 TRISB = %00010010 '******************************************************************************* ' INICIALIZANDO USART DEFINE HSER_BAUD 9600 DEFINE HSER_RCSTA 90h DEFINE HSER_TXSTA 24h DEFINE HSER_SPBRG 25 DEFINE HSER_Clear On LED var byte '******************************************************************************* PORTA = %00000000 PORTB = %00000000 '******************************************************************************* pause 1000 PORTB.0 = 1 '************************* pause 1000 'esto es para saber q el pic vive PORTB.0 = 0 '************************* inicio: Hserin 10,INICIO,[led] HSEROUT [led] if led = "Y" then PORTB.0 = 1 pause 500 endif if led = "R" then PORTB.0 = 0 pause 500 endif goto inicio END
Adapté un código que tenía por ahí conforme a lo que intentas hacer.PD: Ya probé también con conexión física y tampoco funciona.
Creo que se usa el operador matemático DiGSaludo a todo el grupo, tenia tiempo sin usar este tipo de lenguaje ya que emprendí en otras plataformas, mi duda es si hay algún comando en pbp que pueda extraer dicho numero de una variable, por ejemplo tengo:
VALOR VAR BYTE
VALOR = 234
Quiero extraer un numero especifico de la variable, quiera sacar el 2, 3 o el 4, como haría para ubicarme en la posición de la variable?
Saludo a todo el grupo, tenia tiempo sin usar este tipo de lenguaje ya que emprendí en otras plataformas, mi duda es si hay algún comando en pbp que pueda extraer dicho numero de una variable, por ejemplo tengo:
VALOR VAR BYTE
VALOR = 234
Quiero extraer un numero especifico de la variable, quiera sacar el 2, 3 o el 4, como haría para ubicarme en la posición de la variable?
Exactamente tienes toda la razon, habia olvidado por completo el uso de este comando, si marco:Creo que se usa el operador matemático DiG
variable = valor DIG 2
Este es el codigo que estoy empleando para ese sencillo ejemplo, tuve que hacer del uso de la LCD para ver si era correcto el resultado.Exactamente tienes toda la razon, habia olvidado por completo el uso de este comando, si marco:
VALOR VAR BYTE
VALOR = 234
RESULT VAR BYTE
RESULT = VALOR DIG 2
Con esto saca el primer numero, el "2" y asi sucesivamente con el resto de los otros dos digitos, si marco 1 o 0. Ahora mi otra duda es como paso a binario el resultado, en realidad quiero mostrar en un display de 7 segmento el resultado que me entrega la variable, se que si digo:
PORTB = %******** Me mostrara un valor binario en el display, la cosa ahora es pasar la variable, usando el BIN?
en realidad quiero mostrar en un display de 7 segmento el resultado que me entrega la variable, se que si digo:
PORTB = %******** Me mostrara un valor binario en el display, la cosa ahora es pasar la variable, usando el BIN?
Unisgned char digitos[] = { // XGFEDCBA <<--- Los digitos a prender
00111111, // Muestra el 0
00000110, // Muestra el 1
........
00000000 // Display apagado };
Exacto al final eso hice, se me ocurrio crear un array y luego tomar el valor de la variable por cada posicion y alli me ubico y lo saco directamente al display.Según el esquema que adjuntas no lo tienes que pasar a binario porque ese display es de 7 segmentos, no entiende "binario puro", osea que si envías 0000000 no muestra 0.
Normalmente se crea una tabla donde cada posición posee la combinación para mostrar en el display, algo así:
(Esto es de lo que recuerdo en C, en PBP ni idea como es pero no es muy distinto).
C++:Unisgned char digitos[] = { // XGFEDCBA <<--- Los digitos a prender 00111111, // Muestra el 0 00000110, // Muestra el 1 ........ 00000000 // Display apagado };
Ahí la posición elegida (0 - 9) ya devuelve la conversión correcta para manejar el display (la posición 11 apagaría el display pero con poner el puerto a 0 es lo mismo).