Curso de programación de PIC en PICBasic Pro

tu me perdonaras pero alli no veo que trabajen con flancos hacen lo mismo que yo

Espero te sirva este ejemplo, lo hice con el 16F628A, es un contador el cual al detectar un estado (cero o uno) incrementa o decrementa el conteo,

Código:
DEFINE OSC 4

' DEFINICIÓN DE REGISTROS PARA EL LCD
DEFINE LCD_DREG PORTB 
DEFINE LCD_DBIT 4     
DEFINE LCD_RSREG PORTB 
DEFINENE LCD_RSBIT 1   
DEFINE LCD_EREG PORTB 
DEFINE LCD_EBIT 2     
Define	LCD_BITS	4	
Define	LCD_LINES	2	
Define	LCD_COMMANDUS 2000
Define	LCD_DATAUS	50	

Conteo	var	word	

   TRISA = %11111111  	
   TRISB = %00001001
   Pause 500       ' 
   Lcdout $fe, 1   
   Lcdout "   CONTANDO "
   
   CONTEO=0
   LOP:	
   If PORTB.3 = 0 Then LOP	

loop2: 
   If PORTB.3 = 1 Then loop2	
   Pause 50

   If PORTB.0 = 1 Then Conteo = Conteo + 1
   If Conteo > 9999 then Conteo = 0
   If PORTB.0 = 0 Then Conteo = Conteo - 1
   if conteo = 0 then conteo = 9999
   

   Lcdout $fe, $c2
   lcdout $FE, $C2,#CONTEO, " PULSOS "
   Pause 100		

   
   Goto LOP		' Cierra el Bucle
   End
 
Última edición por un moderador:
Saludos AldebaranElectronico
Que código tan extraño te inventaste para tu contador.

' DEFINICIÓN DE REGISTROS PARA EL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINENE LCD_RSBIT 1 <- Esto esta mal
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 2
Define LCD_BITS 4
Define LCD_LINES 2
Define LCD_COMMANDUS 2000
Define LCD_DATAUS 50

CONTEO=0
LOP:
If PORTB.3 = 0 Then LOP <- Esto no tiene sentido :confused:

loop2:
If PORTB.3 = 1 Then loop2 <- Esto tampoco tiene sentido :unsure:
Pause 50

If PORTB.0 = 1 Then Conteo = Conteo + 1 <- Aquí incrementas la variable Conteo
If Conteo > 9999 then Conteo = 0
If PORTB.0 = 0 Then Conteo = Conteo - 1 <- Aquí la decrementas por el mismo pin
if conteo = 0 then conteo = 9999

Y la persona que hizo la pregunta, la hizo en marzo del 2010
Creo ya debió haber resuelto su duda.:apreton:
 
Última edición:
que tal volvieron a retomar el manejo de motores con encoders con el pic 18f2431 estare atento.

Que tal Amigo autotronico
dentro de unos 12 días espero me llegue el 18f2431
espero me puedas apoyar con la programación del micro

es continuar lo que empece con el 16f877 y que me apoyaste mucho
con los 18f no he tenido experiencia
una vez intente compilar el ejemplo que me enviaste de pic basic pro
pero no pude con el micro code studio....

estamos en contacto...
 
Hola, que tal ando realizando comunicacion en serie con labview, ya tengo mis programa de LV pero el del pic me esta dando problemas, lo que quiero hacer es que cuando llegue un dato de labview, en este caso un numero encienda un puerto del pic.
Mis datos a recibir son 128,64,32,16,8,4,2,1.

mi estructura es con if
if dat="1" then high portb.0
if dat="2" then high portb.1
if dat="4" then high portb.2
if dat="8" then high portb.3
if dat="16" then high portb.4

con los primeros numeros del 1 al 8 no tengo problemas, pero cuando meto un numero mayor al 10, me salen los siguientes errores:

ERROR Line 24: Bad expression.
ERROR Line 24: Bad expression or missing THEN.
ERROR Line 24: IF without a matching ENDIF.

a que se debe esto?
 
Hola: GoX F4yCk3r DB, creo que el problema te lo esta dando porque encierras los numeros en comillas y los asume como lectras prueba sin las comillas y me avisas, saludos

if dat=1 then high portb.0
if dat=2 then high portb.1
if dat=4 then high portb.2
if dat=8 then high portb.3
if dat=16 then high portb.4
 
=)
muchas gracias maxtorcampos, ese era mi problema.
Te lo agradesco
salu2 desde Mexico

Por cierto de pura casualidad sabras simular la comunicacion en serie??
Tengo el proteus y el Labview, ya descargue el serial port driver, pero no me hace la comunicacion =(
 
Hola, que tal ando realizando comunicacion en serie con labview, ya tengo mis programa de LV pero el del pic me esta dando problemas, lo que quiero hacer es que cuando llegue un dato de labview, en este caso un numero encienda un puerto del pic.
Mis datos a recibir son 128,64,32,16,8,4,2,1.

mi estructura es con if
if dat="1" then high portb.0
if dat="2" then high portb.1
if dat="4" then high portb.2
if dat="8" then high portb.3
if dat="16" then high portb.4

con los primeros numeros del 1 al 8 no tengo problemas, pero cuando meto un numero mayor al 10, me salen los siguientes errores:

ERROR Line 24: Bad expression.
ERROR Line 24: Bad expression or missing THEN.
ERROR Line 24: IF without a matching ENDIF.

a que se debe esto?

y no es mas facil que pongas...

portb=dat
asi no necesitas tantos if...then

digo como sugerencia quizas no te sirve asi...:D
 
:eek:
(y)
lo intentare =).
gracias lubeck
disculpa de casualidad sabras simular la comunicacion en serie?, tengo el proteus, labview y el virtual serial port drive..
ya lo intente pero no mas no simula =(
 
mmm.. a medias...:D

en labview no lo he usado, pero en proteus tienes que poner el compim y lo configuras a una velocidad y asignas un puerto digamos el COM1 y 9600, en el virtual serial port haces un enlace de virtual del com1 con el com2, y el labview lo configuras con COM2 y 9600, ojo que los puertos que asignes no deben existir fisicamente, podria utilizar el COM4 y COM5 o el par que quieras....
 
Hola que tal, les comento que ya logre establecer comunicacion en serie virtualmente, aunque algo le paso y ya no kiere jalar =(.
Bueno en el rato que pude establecer comunicacion, solo los 4 primeros leds hacian el corrimiento, pero lo raro es que algunos de ellos ya estaban encendidos sin aun enviar ningun dato. por que puedo estar pasando eso?
este es mi programa en microcode
------
include "modedefs.bas"
@ device xt_osc
trisc=%10000000
dat var byte
trisb=0


inicio:
serin portc.7, T2400,dat
portb=dat
goto inicio

end
----------
cuando me llega el dato 1 prende el portb.0
cuando llega el 2 prende el portb.1
cuando llega el 4 prende el portb.2
cuando llega el 8 prende el portb.3
cuando llega el 16 prende el portb.1 y portb.2
cuando llega el 32 prende el portb.1
cuando llega el 64 prende el portb.2
cuando llega el 128 prende el portb.3

y cuando le doy run al proteus se encienden los leds del puerto 0,1,2,3 y 7, sin haber establecido comunicacion en serie con el labview.
alguna sugerencia??



les agradesco mucho su ayuda. Me ha servido mucho
salu2 a todos
 
Última edición:
Hola que tal, les comento que ya logre establecer comunicacion en serie virtualmente, aunque algo le paso y ya no kiere jalar =(.
Bueno en el rato que pude establecer comunicacion, solo los 4 primeros leds hacian el corrimiento, pero lo raro es que algunos de ellos ya estaban encendidos sin aun enviar ningun dato. por que puedo estar pasando eso?

y cuando le doy run al proteus se encienden los leds del puerto 0,1,2,3 y 7, sin haber establecido comunicacion en serie con el labview.
alguna sugerencia??
Porque solo declaraste TRISB = 0 ' Puerto B como salidas
Pero no lo inicializaste con PORTB = 0 ' Para que al iniciar el programa todo el puerto B este en 0
:apreton:
 
Saludos amigo GoX F4yCk3r : acá te dejo el link de un video que te puse en youtube para darte algunas recomendaciones, primero no te recomiendo que lo hagas con la sentencia, portb=dat ya que estarías muy limitado, te aconsejo que lo hagas como inicialmente lo tenias pues allí podrás enviarle hasta letras y podrás hacer lo que quieras con las salidas, sin tener que regirte por el patrón binario aunque esto implique algunas lineas mas en el programa, el video que te subí tiene una función muy eficiente ya que el programa envía una señal al PIC y hasta que el PIC no le confirme que efectivamente recibió y procesó la señal dicho programa no mostrará la palabra encendido ni aparecerá el botón rojo, un saludo

Te recomiendo que lo veas en pantalla completa


 
Última edición:
proyectos lcd:

los LCD son utilizados para mostrar mensajes que indican la consecusion de un proceso en forma visual , instrucciones de manejo , mostrar valores , en si permiten la comunicacion entre maquinas y humanos pudiendo mostrar cualquier caracter ASCII.

El LCD mas conicido es el de 2x16, dos lineas y 16 caracteres cada una que son los que vemos porque en realidad son 40 caracteres cuestion que comprobaremos mas adelente.


Descripción de pines:

PIN Nº SIMBOLO DESCRIPCION
1 Vss Tierra de alimentación GND
2 Vdd Alimentación de +5V CC
3 Vo Contraste del cristal liquido. ( 0 a +5V )
4 RS Selección del registro de control/registro de datos:
RS=0 Selección registro de control
RS=1 Selección registro de datos

5 R/W Señal de lectura/escritura:
R/W=0 Escritura (Write)
R/W=1 Lectura (Read)

6 E Habilitación del modulo:
E=0 Módulo desconectado
E=1 Módulo conectado

7-14 D0-D7 Bus de datos bidireccional.


la declaracio LCDOUT en el compilador PBP sirve para mostrar items en el LCD seguidos de algunos de los siguientes comandos:

LCD commands
Command Operation
$FE, 1 Clear display
$FE, 2 Home cursor
$FE, $0C Cursor off
$FE, $0E Underline cursor on
$FE, $0F Blinking cursor on
$FE, $10 Move cursor left by one position
$FE, $14 Move cursor right by one position
$FE, $80 Move cursor to the beginning of first row
$FE, $C0 Move cursor to the beginning of second row
$FE, $94 Move cursor to the beginning of third row
$FE, $D4 Move cursor to the beginning of fourth row

estamos listos para nuestros primeros pasos con manejo de LDC

hola puedes poner un ejemplo usando el asd del 16f877 , quiero mostrar voltaje eb la lcd con punto decimal,pero nose como sacar los los milkivolts,, si tengo4.3 volts solo puedo mostrar 4 ...ayuda
 
:eek:

primero no te recomiendo que lo hagas con la sentencia, portb=dat ya que estarías muy limitado, te aconsejo que lo hagas como inicialmente lo tenias pues allí podrás enviarle hasta letras y podrás hacer lo que quieras con las salidas
,

GoX F4yCk3r

en picbasic no se reciben letras todo se recibe en variables solo tipo word, byte o bit, e igual puedes procesarlo a posteriori como quieras.... pero bueno es tu decision, como dije puede no servirte....

sin tener que regirte por el patrón binario
MAXTORCAMPOS

:unsure: dale una revizada a los principios basicos de la programacion/computacion.... tooooodoooo es binario....
 
Hola amigo lubeck

con todo respeto debo decirte que estas equivocado, con respecto a la recepcion de informacion de un Microcontralodor PIC, el no recibe Variables, recibe valores de variables y las almacena en variables, y debo ademas aclararte que si recibe letras, numeros, pulsos, voltaje ETC. ETC. eso no son variables son valores a los que comunmente llamamos señales, gracias por decirme que le de un vistazo a los principios de programacion, sin embargo debo confesarte que ya pase por esa etapa has mas de 15 años aca te dejo un link donde veras un tipo de comunicacion que use en una empresa y todo lo hice enviando Letras, por supuesto que para el pic leerlas debe transformar todo a su propio lenguaje que es el binario pero eso es otra cosa, un abrazo

 
torres.electronico dijo:
muchachos, creo que ambos son muy buenos foristas ya que cada uno aporta lo suyo tratando de ayudar a los demas... Dejen las diferencias de lado y veamos si podemos seguir con este topico

totalmente de acuerdo.
 
Gox

algo esta raro aqui...

cuando me llega el dato 1 prende el portb.0
cuando llega el 2 prende el portb.1
cuando llega el 4 prende el portb.2
cuando llega el 8 prende el portb.3
cuando llega el 16 prende el portb.1 y portb.2
cuando llega el 32 prende el portb.1
cuando llega el 64 prende el portb.2
cuando llega el 128 prende el portb.3

no puede ser posible que lo ponga asi, si el pic esta recibiendo bien el dato...
indiscutiblemente...
el 7ºbit =128
el 6ºbit =64
el 5ºbit =32
el 4ºbit =16
el 3rbit =8
el 2ºbit =4
el 1rbit =2
el bit0 =1

algo anda mal al enviar los datos en el labview,no?
 
Última edición:
Atrás
Arriba