desktop

Curso de programación de PIC en PICBasic Pro

Hola Todo el mundo,
Intenté escribió en español, sólo descargar estudio de compilador pic microcódigo básico como una versión de prueba de 15 días, quiero trató de compilar el código cuando llegué de este foro, el PIC16F628A IC así como el código, cuando compilé que tengo un error , el error, así como mi attched foto en mi primer post.
Could ayudarme por favor, qué ajustes a solucionado ese problema.
Esta es mi primera vez use un microcódigo estudio Picbasic (compilador), realmente estoy utilizar compilador MikroC, que quiero aprender a en compilador de PIC Basic.
2018-04-21 at 10-47-35.png


Gracias.

Saludos,

Kapoh
 
Es necesario ver el código completo, sobre todo, cómo fue escrita la palabra de configuración.
HS_OSC = Oscilador de alta frecuencia. (Cristal superior a 4 MHz)
También es necesario saber qué versión de prueba estás usando y qué compilador estás usando.
El entorno puede usar MPASM o sus nativos PBP Compilers.

Por favor, adjunta el código completo dentro de un archivo comprimido, o usa la opción del editor para insertar código.
 
El mensaje de error indica que estás intentando compilar un código escrito en un lenguaje que no entiende el compilador.
 
Hola buenas tardes saludos al todo el foro!!!
Después de un rato que no había entrado al foro, aquí regreso!!
aquí les comparto un código de comunicación de los Módulos TLP434(A) y RLP434(A) de Radio Frecuencia.

Radio.JPG

yo lo eh probado físicamente y no eh tenido problemas de interferencia.

Trasmisor:

Código:
''******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
_intrc_osc_pwrt_on_wdt_off_mclr_off_lvp_off_protect_off
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                         'COMPARADORES APAGADOS
TRISA = %00000000                 'SALIDA Y ENTRADAS DEL PUERTO A      
TRISB = %00000001                 'SALIDA Y ENTRADAS DEL PUERTO B
PORTA = 0                         'LIMPIAMOS EL PUERTO A
PORTB = 0                         'LIMPIAMOS EL PUERTO B
TT VAR BYTE                       'VARIABLE DONDE RECIBE EL DATO
TT = 84                           'VALOR QUE SE LE ASIGNO A LA VARIABLE
'*******************************************************************************
Include "modedefs.bas"            'INCLUYE LA LIBRERIA SERIAL

serout PORTB.1,N2400,[$FF,$FF,$10]
INICIO:
IF PORTB.0 THEN
pause 500
SEROUT  PORTB.1,N2400,[$FF,$FF,"OK","A",Tt]
ENDIF
gOTO INICIO

Receptor:


Código:
''******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
_intrc_osc_pwrt_on_wdt_off_mclr_off_lvp_off_protect_off
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                         'COMPARADORES APAGADOS
TRISA = %00000000                 'SALIDA Y ENTRADAS DEL PUERTO A        
TRISB = %00000010                 'SALIDA Y ENTRADAS DEL PUERTO B
PORTA = 0                         'LIMPIAMOS EL PUERTO A
PORTB = 0                         'LIMPIAMOS EL PUERTO B
B0 var byte                       'VARIABLE DONDE RECIBE EL DATO
'*******************************************************************************
Include "modedefs.bas"            'INCLUYE LA LIBRERIA SERIAL

INICIO:
SERin PORTB.1,N2400,[$FF,$FF,"OK","A"],B0
if b0="T" then high PortB.0:pause 1000:low PortB.0
gOTO INICIO

Les comparto los códigos y la simulación
Saludos y seguimos en contacto.
 

Adjuntos

  • modulos rf.rar
    17.7 KB · Visitas: 31
Hola a todos, estoy retomando un tema de vieja data programando un pic que me dejo con muchas dudas y nunca pude hacer que el circuito anduviera como quería.

Hace unos años compre un equipo que venía con una botonera con dos botones. El primer botón me habilita un circuito por 6 minutos y el segundo botón habilita el mismo circuito por 12 minutos. Esta botonera la reemplace por un circuito que arme donde en vez de botones puse un fichero igual al de los arcades y la idea original mia era que al introducir una ficha me habilite el circuito por los 6 minutos, luego si introduzco una segunda ficha en un periodo x, pongamos unos 4 segundos, me tiene que habilitar el timer de 12 minutos y pasado ese tiempo, si no introduzco nada debe quedar habilitado el timer de los 6 minutos.

Soy nuevo en la programación de pic, todo lo que pude lograr fue que me vaya alternando, es decir que introuzco la primer ficha y me da los 6 minutos, luego una segunda para los 12, vuelve nuevamente a los 6 y asi.

Estoy pensando en escribir nuevamente el código y había pensado en algo asi (la sintaxis no es la adecuada ya que lo escribo a medida que lo recuerdo ya que no lo tengo conmigo):

puerto1= es el puerto donde esta conectado el pulsador
T6= es el puerto donde esta la salida al rele del timer de 6 minutos
T12= es el puerto donde esta la salida al rele del timer de 12 minutos

***CODIGO***

# aca viene la preparacion de puertos y definicion de variables

inicio:
h=0
z=0

if puerto1=0 then h=h+1 ' cuando se mete la primer ficha
while z<1000
if puerto1=low then h=h+1 ' cuando se mete la segunda ficha
z=z+1
wend

if h=1 then
high_T6 ' si h=1, me habilita el timer de 6 minutos
pause 200
low_T6
end if
if h=2 then
high_T12 ' si h=2 me habilita el timer de 12 minutos
pause 200
low_T12
end if

if (T6=low) and (T12=low) then goto inicio

end

Este seria el esqueleto del nuevo código que estoy armando, necesitaría de su opinión para saber si va a funcionar. es correcto usar el while? necesito que espere al menos 4 segundos, le puse un valor de 1000 por poner ya que no se como determinar el tiempo exacto. El circuito tiene un PICF16F84.

Estoy usando picbasic

Espero sus comentarios.

Saludos y gracias
 
que tal buenas tardes vengo a pedir su ayuda
es un proyecto estas son las caracteristicas
teclado matricial 4x4 por aplicacion android que se hizo con app inventor
receptor bluetooth

lo que estoy tratando de hacer esque con la aplicacion del teclado matricial encienda y apague un led ejemplo el numero 1 enciende y con el mismo apaga el led

Código:
INICIO:
portb=0
SERIAL=0
SERIN PORTC.7,T9600,100,SIGUE,SERIAL

SIGUE
 
IF SERIAL==1 THEN
   high portb.4
   endif
goto inicio

pero no logro hacerlo funcionar tengo que encender todos los leds que estan conectados al puerto portb.0,1,2,3,4,5,6,7 con un respectivo numero del teclado matricial

saludos
 
De esa forma estás encendiendo el LED cuando recibes el número 1, pero cuando se regresa a INICIO lo vuelves a apagar porque pones en 0 todo el puerto B.
 
¿Y cómo lo cambiaste?
¿Qué microcontrolador estás usando?
¿Con qué y de qué forma estás enviando el número 1?
Ten en cuenta que si envías el 1 como texto, el microcontrolador recibirá su valor ASCII (49)
 
que tal este es el microcontrolador
es el 16f876a
desde la aplicacion de un bit (1)

Código:
define LOADER_USED 1
INCLUDE "MODEDEFS.BAS"

TRISA=0
TRISB=0
TRISC=0

ADCON1=7

SERIAL VAR BYTE

PORTA=0
PORTB=0
PORTC=0

SERIAL=0


TECLADO:
SERIAL=0
SERIN PORTC.7,T9600,100,SIGUE,SERIAL
SIGUE:
PORTB=0
IF PORTB.4==0 OR SERIAL==1 THEN
    high portb.0
    endif
    goto esperar
    
    
esperar

IF PORTB.4==0 OR SERIAL==1 THEN
    low portb.0
    endif
    goto teclado
 
Ese código sigue mal. Cuando no existen datos se brinca a la etiqueta SIGUE y pone el puerto B en 0.
O sea que cuando se reciba un 1, apenas tendrá un instante activado el pin RB0.
La etiqueta esperar está de sobra porque se ejecuta a continuación.
En Basic la comparación no se hace con == como con el C, solo se usa =

Desde la aplicación de un bit (1)
¿Cuál aplicación? Y no se envía un bit, se debe enviar 1 byte.

Ese código no tiene palabra de configuración y es importante saber con qué fuses se está grabando el PIC.
Otra cosa. El PIC16F876A tiene módulo USART y deberías aprovecharlo en lugar de usar RS-232 por software.
Así que puedes usar HSERIN y también la interrupción por recepción.
 
se hizo una aplicacion para android que simula el teclado matricial de 4x4 donde las configuraciones de la aplicacion es enviar un dato por bluetooth al pic por eso el
SERIAL=0
SERIN PORTC.7,T9600,100,SIGUE,SERIAL

si lo dejo asi desde que lo conecto enciende el led y no le e mandado ninguna instruccion

Código:
IF PORTB.4=0 OR SERIAL=1 THEN
    high portb.0
    endif
 
Pues debe de ser porque cuando pones todo el puerto B en cero como te he estado diciendo, se comprueba que RB4 está en cero y por eso RB0 se pone en uno.
Debes de comprender la lógica en tu programación.
 
que tal gracias ya quedo jejeje
Código:
define ADC_BIST 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50

define OSC 20
DEFINE LCD_DREG PORTC
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

ADCON1=%10001110  ' %10001110 SOLAMENTE PARA EL DE 10 BITS PARA EL DE 8 BITS 14 DIRECTO '

TRISA=1
TRISB=0

SENSAR VAR WORD
TEM VAR WORD
 
SENSAR=0
TEM=0


INICIO:

 ADCIN 0,SENSAR

IF tem=>43 THEN
   ELSE
   SENSAR=SENSAR-1
  
IF TEM=>63 THEN
   ELSE
   SENSAR=SENSAR-2
  
IF TEM=>120 THEN
   ELSE
   SENSAR=SENSAR-3
  
IF TEM=>293 THEN
   ELSE
   SENSAR=SENSAR-4

SENSAR=SENSAR/2
                      
LCDOUT $FE,2, "  TEMPERATURA: "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0,#SENSAR,%11011111, "C"
PAUSE 500
LCDOUT $FE,1
ENDIF
ENDIF
ENDIF
ENDIF
GOTO INICIO
ahora tengo un problema con un sensor de temperarura con lm35 a 10 bist
lo hice a 8 bits y funciono ala primera sin ningun problema pero a 10 bits no lo puedo hacer funcionar

de antemano gracias
 
Si TEM se establece en 0 al iniciar, ¿cómo es que pretendes que se pueda comparar con los valores elegidos?
¿Y por qué restas la variable SENSAR? Esta variable es la que contiene la lectura del conversor AD y su posterior modificación se verá afectada cada nueva lectura.
Supongo que debe ser al revés. O sea, comparar la variable SENSAR y modificar la variable TEM

Esos IF anidados no me agradan. Sería mejor usar una selección de datos con Select Case.
Aparte, se debe establecer un rango, porque las lecturas del conversor AD no son estables.
También sería conveniente realizar un promedio para lograr mejor estabilidad.

No sé qué pretendas hacer, pero no le encuentro sentido a ese programa.
 
gracias por responder los if anidados y las restas es para tener una mejor lectura o la mas estable posible
la Select Case. no la se utilizar si tienes un ejemplo que mejor y pues ya quedo el sensor de temperatura a 10bits ya lo proble y todo y esta funcionando lo dejo por si tienen un mejora que hacer etc

Código:
define ADC_BIST 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50

define OSC 20
DEFINE LCD_DREG PORTC
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50

ADCON1=14 
PORTB=0
TRISA=1
TRISB=0

SENSAR VAR WORD
TEM VAR WORD
 
SENSAR=0
TEM=0


INICIO:

 ADCIN  0,SENSAR

IF tem=>43 THEN
   ELSE
   SENSAR=SENSAR-1
  
IF TEM=>63 THEN
   ELSE
   SENSAR=SENSAR-2
      
IF TEM=>120 THEN
   ELSE
   SENSAR=SENSAR-3
  
IF TEM=>293 THEN
   ELSE
   SENSAR=SENSAR-4

SENSAR=SENSAR/2
LCDOUT $FE,1                     
LCDOUT $FE,2, "  TEMPERATURA: "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0,#SENSAR,%11011111, "C"
PAUSE 500
LCDOUT $FE,1
ENDIF
ENDIF
ENDIF
ENDIF

IF SENSAR>35 THEN
PORTB.0=1
PAUSE 500
LCDOUT $FE,1   'LIMPIAR PANTALLA '
LCDOUT $FE,2, "  VENTILADOR "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0, "ENCENDIDO" 'POCICION DE LA 2 LINEA'
PAUSE 2000
      ELSE
IF SENSAR=28 THEN
PORTB.0=0
PAUSE 500
LCDOUT $FE,1   'LIMPIAR PANTALLA '
LCDOUT $FE,2, "  VENTILADOR "  'POCICION DE LA LINEA 1'
LCDOUT $FE,$C0, " APAGADO " 'POCICION DE LA 2 LINEA'
PAUSE 2000
      ENDIF
   ENDIF   
GOTO INICIO:
 
los if anidados y las restas es para tener una mejor lectura o la mas estable posible
De esa forma no se logra una mejor lectura porque no se está involucrando con el conversor AD.
Con lo que se logra una lectura más estable, con lo que te mencioné.
La Select Case no la sé utilizar. Si tienes un ejemplo, que mejor.
En este tema existen varios ejemplos en donde se ha usado.
También cuentas con los temas de ayuda del entorno. Presiona la tecla F1 y aparecerá el documento de ayuda.
De igual forma, si tienes dudas con alguna instrucción, posiciona el cursor en ella y a continuación presiona la tecla F1
 
Que tal como están, una pregunta, y lo he estado buscando en el foro, y mi pregunta es éste sensor dht11 que es de temperatura y humedad, ya tengo la programación en microcode estudio de un sensor de temperatura con un lm35 pero me gustaría añadir éste que contiene los 2 , ¿se podría ? y cómo sería su configuración?, de antemano gracias
 
Atrás
Arriba