Curso de programación de PIC en PICBasic Pro

hola a todos los felicito veo que saben muchisimo de este tema, por eso me animo a molestarlos a ver sí me pueden ayudar con esto, quisiera saber como convierto un código escrito en MCS para 16f628a para que me funcione con un 16f873a ó un 16f877a estoy haciendo un robot sencillo pero el 16f628a se me esta quedando pequeño por falta de más puertos por eso decidí cambiarlo les agradezco de antemano su ayuda.
 
Sube el codigo y te echo una mano, casi es solo de de cambiar los fuses y si no usas analogos en lugar de poner cmCon=7 pones AdcOn1=7 (creo que a si es) y compilarlo como 16f8XXA...

pero seria cuestion de darle una checadita...
 
Sube el código y te echo una mano, casi es solo de de cambiar los fuses y si no usas análogos en lugar de poner cmCon=7 pones AdcOn1=7 (creo que a si es) y compilarlo como 16f8XXA...

pero seria cuestion de darle una checadita...

hola gracias por ver mi mensaje te cuento es un robot seguidor de lineas pero tiene otras funciones como buscar la luz y todas las luces de un vehículo real pero también quiero que tenga el pito de la reversa, que según la inclinación del terreno ó el peso que lleve haga cambios de velocidad pues es un camión y no me alcanzan los puertos además quiero añadirle otras funciones pues tengo pensado convertirlo en una retroexcavadora te envió la simu y el código a ver como uso un pic más grande inicialmente lo hice con 16f84a pero me presntaba fallas veras mucha repetición pero es para evitar errores en las subrutinas de antemano muchas gracias
 

Adjuntos

  • robot.rar
    55.4 KB · Visitas: 178
Última edición:
Pue si amigo.... creo que lo unico que tienes que quitar es el alldigital, y ponerle adcon1=7

respetar los mismo puertos y deberia funcionar...
PD. no lo simule porque los colores de los cablecitos esta muy feos :D y casi no se ven...
 
Hola a todos, estuve probando el PBP y cuando le pongo el codigo @ device xt_osc o de esta forma @device xt_osc me manda un error al compilar bueno no entiendo porque y si alguien lo sabe porfa responda gracias
 
hola a todos otra vez por aqui molestando. Quisiera saber como escribo un codigo y como configuro 2 puertos del 16f84a porta.0 y porta.1 para detectar una señal de por ejemplo 455 khz o menos que a su vez sea generada por el porta.2 ¿si existe una función inversa a frecOut? ¿algo como frecIn? para no tener que utlizar un LM567 como decodificador aparte del pic de antemano gracias por su ayuda
 
Última edición:
hola a todos otra vez por aqui molestando. Quisiera saber como escribo un codigo y como configuro 2 puertos del 16f84a porta.0 y porta.1 para detectar una señal de por ejemplo 455 khz o menos que a su vez sea generada por el porta.2 ¿si existe una función inversa a frecOut? ¿algo como frecIn? para no tener que utlizar un LM567 como decodificador aparte del pic de antemano gracias por su ayuda

Si, hay una funcion llamada PULSIN que es para leer los pulsos que entran en un pin, por ejemplo quieres leer los pulsos que llegan a un puerto, tienes que declarar el puerto por donde se van a leer los pulsos y una variable.

La resolución de PULSIN depende de la frecuencia del oscilador . Si se usa un oscilador de 4 Mhz , el
ancho de pulso se obtiene en incrementos de 10 us .Si se usa un oscilador de 20 Mhz ,el ancho de pulso
tendrá una resolución de 2 us .Definir un valor de OSC no tiene efectos sobre PULSIN . La resolución
siempre cambia con la velocidad del oscilador en uso .


DEFINE OSC 4 ;Definir oscilador a 4Mhz(claro puedes usar uno mayor, ese lo coloco de ejemplo.

TRISB=%00000010 ;Se especifican los puertos de entrada y salida "0" salida "1" entrada, se cuentan de mayor a menor en sentido de izquierda a derecha, osea, 7,6,5,4,3,2,1,0 el 1 que es el puerto PORTB.1 es la entrada.

Leer VAR PORTB.1 ;PIN por el que se leeran los pulsos.

Contar VAR WORD ;Variable contar con un peso de 65535.

LED_AMARILLO VAR PORTB.2 ;LED para simular la salida como ejemplo del conteo de pulsos si llega a ser mayor de 455000 Hz.

LED_ROJO VAR PORTB.3 ;LED para simular la salida como ejemplo del conteo de pulsos si llega a ser menor de 455000 Hz.


INICIO:

PULSIN Leer,1000,Contar ;Se prepara la función para leer los pulsos por el puerto 1 a un 1 segundo.

IF Contar>455000 THEN encender_led_amarillo ;Si Contar es mayor a 455000 Hz entonces encender led amarillo.

IF Contar<455000 THEN encender_led_rojo ;Si Contar es menor a 455000 Hz entonces encender led rojo.

LOW LED_AMARILLO:LOW LED_ROJO ;Mantener apagado a led amarillo y rojo.

GOTO INICIO ;Volver al INICIO.

encender_led_amarillo:

HIGH LED_AMARILLO
LOW LED_ROJO

GOTO INICIO

encender_led_rojo:

B]HIGH[/B] LED_ROJO
LOW LED_AMARILLO

GOTO INICIO

END


Espero que te sirva de ayuda el ejemplo que te he puesto ahí, saludos.
 
Si, hay una funcion llamada PULSIN que es para leer los pulsos que entran en un pin, por ejemplo quieres leer los pulsos que llegan a un puerto, tienes que declarar el puerto por donde se van a leer los pulsos y una variable.

La resolución de PULSIN depende de la frecuencia del oscilador . Si se usa un oscilador de 4 Mhz , el
ancho de pulso se obtiene en incrementos de 10 us .Si se usa un oscilador de 20 Mhz ,el ancho de pulso
tendrá una resolución de 2 us .Definir un valor de OSC no tiene efectos sobre PULSIN . La resolución
siempre cambia con la velocidad del oscilador en uso .


DEFINE OSC 4 ;Definir oscilador a 4Mhz(claro puedes usar uno mayor, ese lo coloco de ejemplo.

TRISB=%00000010 ;Se especifican los puertos de entrada y salida "0" salida "1" entrada, se cuentan de mayor a menor en sentido de izquierda a derecha, osea, 7,6,5,4,3,2,1,0 el 1 que es el puerto PORTB.1 es la entrada.

Leer VAR PORTB.1 ;PIN por el que se leeran los pulsos.

Contar VAR WORD ;Variable contar con un peso de 65535.

LED_AMARILLO VAR PORTB.2 ;LED para simular la salida como ejemplo del conteo de pulsos si llega a ser mayor de 455000 Hz.

LED_ROJO VAR PORTB.3 ;LED para simular la salida como ejemplo del conteo de pulsos si llega a ser menor de 455000 Hz.


INICIO:

PULSIN Leer,1000,Contar ;Se prepara la función para leer los pulsos por el puerto 1 a un 1 segundo.

IF Contar>455000 THEN encender_led_amarillo ;Si Contar es mayor a 455000 Hz entonces encender led amarillo.

IF Contar<455000 THEN encender_led_rojo ;Si Contar es menor a 455000 Hz entonces encender led rojo.

LOW LED_AMARILLO:LOW LED_ROJO ;Mantener apagado a led amarillo y rojo.

GOTO INICIO ;Volver al INICIO.

encender_led_amarillo:

HIGH LED_AMARILLO
LOW LED_ROJO

GOTO INICIO

encender_led_rojo:

B]HIGH[/B] LED_ROJO
LOW LED_AMARILLO

GOTO INICIO

END


Espero que te sirva de ayuda el ejemplo que te he puesto ahí, saludos.

hola gracias por tu ayuda lo probe y funciona bien pero y si quisiera detectar al mismo tiempo 2 señales distintas y obtener respuesta en 2 puertos como lo haria? la verdad siempre he estado trabajando con pics pero con funciones digitales no habia necesitado hacerlo con señales y no se muy bien como se hace por ejemplo:
Define osc 4
trisa = %11111111
trisb = %00000000

if porta.0 = 455khz and porta.1 = 450khz then
high portb.0
high portb.1
endif

if porta.0 = 455khz and porta.1 = 0khz then
high portb.0
low portb.1
endif

ahí me perdonas la ignorancia y la molestadera
 
Última edición:
Me parece que esto no es asi...

PULSIN Leer,1000,Contar ;Se prepara la función para leer los pulsos por el puerto 1 a un 1 segundo.


es PULSIN Pin, State,Var

si pones...
PULSIN PORTA.0,1,LUBECK Va a colocar en la variable LUBECK el tiempo que dure en estado alto(1) el puertoA.0

si pones...
PULSIN PORTA.0,0,LUBECK Va a colocar en la variable LUBECK el tiempo que dure en estado bajo(0) el puertoA.0
 
Me parece que esto no es asi...




es PULSIN Pin, State,Var

si pones...
PULSIN PORTA.0,1,LUBECK Va a colocar en la variable LUBECK el tiempo que dure en estado alto(1) el puertoA.0

si pones...
PULSIN PORTA.0,0,LUBECK Va a colocar en la variable LUBECK el tiempo que dure en estado bajo(0) el puertoA.0

Pues que raro yo e usado justo como el manual picbasic me dice

PULSIN PORTA.0,1500,LUBECK y es a 1500 milisegundos y funciona, bueno.
 
:unsure: estaremos hablando de lo mismo???

Dibujo.JPG

Traduccion:
Mide el Ancho del pulso en el Pin. Si "State" es cero, el ancho del pulso en bajo es medido, si "State" es 1 el ancho del pulso en Alto es medido.La medicion del ancho del pulso es puesto en "Var".Si el cambio de estado nunca ocurre o es demasiado largo para ser medido, "Var" sera igual a cero.
 
Última edición:
:unsure: estaremos hablando de lo mismo???

Ver el archivo adjunto 54417

Traduccion:
Mide el Ancho del pulso en el Pin. Si "State" es cero, el ancho del pulso en bajo es medido, si "State" es 1 el ancho del pulso en Alto es medido.La medicion del ancho del pulso es puesto en "Var".Si el cambio de estado nunca ocurre o es demasiado largo para ser medido, "Var" sera igual a cero.

Bueno Lubeck ahí si me quede corto amigo, seria bueno si subes un ejemplo para asi entender mejor, de todas maneras tus aportes siempre son buenos, gracias.
 
buenas en el foro he visto proyectos con matrix de leds y me dio curiosidad para del desarrollo de uno a través de teclado como este:

http://www.youtube.com/watch?v=G24WxjtKsqQ

he logrado esto con un pic 182550( dejo simulación en proteus me falta la comunicacion pc -pic o teclado-pic), vere como puedo avanzar :LOL:
hola autotronico estoy interesado en tu proyecto te agradeceria su pusieras los codigos en PBP recien estoy aprendiendo a usar este lenguaje de programación .. :aplauso: gracias ... atte Jeff
 
demonjeff
autotronico estoy interesado en tu proyecto te agradeceria su pusieras los codigos en PBP

:unsure:
recien estoy aprendiendo a usar este lenguaje de programación ..

:unsure::unsure:


:eek:

Empieza con cosas mas sencillas como prender un led... o directamnte pidele que te regale su trabajo!!!


Autotronico
he logrado esto con un pic 182550( dejo simulación en proteus me falta la comunicacion pc -pic o teclado-pic), vere como puedo avanzar :LOL:

Comenta si ya lograste eso del teclado... yo ya lo consegui y podria echarte una mano...
 
Última edición:
lubeck:

Que tal ya realice el control por teclado pero no me reconoce todos los caracteres deseo llegar a algo como esto:


por lo que he estado usado el comando select case para contener todos los caracteres del teclado cuando pueda subo avances.

saludos.

este es un pequeño fragmento del programa:

tabla:
Select case caracter
case "A"
For T=0 to 7
lookup2 T,[$7C,$7E,$13,$11,$13,$7E,$7C,$00],O_Kar
Gosub Ata

next
case "B"
For T=0 to 7
lookup2 T,[$7F,$7F,$49,$49,$49,$7F,$36,$00],O_Kar
Gosub Ata

next
case "C"
For T=0 to 7
lookup2 T,[$3E,$7F,$41,$41,$41,$63,$22,$00],O_Kar
Gosub Ata

next
case 199 'Ç
For T=0 to 7
lookup2 T,[$3E,$7F,$C1,$C1,$41,$63,$22,$00],O_Kar
Gosub Ata

next
case "D"
For T=0 to 7
lookup2 T,[$7F,$7F,$41,$41,$7F,$3E,$00,$00],O_Kar
Gosub Ata

next
case "E"
For T=0 to 7
lookup2 T,[$7F,$7F,$49,$49,$49,$63,$63,$00],O_Kar
Gosub Ata

next
case "F"
For T=0 to 7
lookup2 T,[$7F,$7F,$09,$09,$09,$03,$03,$00],O_Kar
Gosub Ata

next
case "G"
For T=0 to 7
lookup2 T,[$3E,$7F,$41,$49,$49,$7B,$32,$00],O_Kar
Gosub Ata

next
case 208 'Ð
For T=0 to 7
lookup2 T,[$3C,$7E,$43,$53,$53,$76,$24,$00],O_Kar
Gosub Ata

next
case "H"
For T=0 to 7
lookup2 T,[$7F,$7F,$08,$08,$08,$7F,$7F,$00],O_Kar
Gosub Ata

next
case "I"
For T=0 to 7
lookup2 T,[$00,$00,$41,$7F,$7F,$41,$00,$00],O_Kar
Gosub Ata

next
case 221 'Ý
For T=0 to 7
lookup2 T,[$00,$00,$44,$7D,$7D,$44,$00,$00],O_Kar
Gosub Ata

next
case "J"
For T=0 to 7
lookup2 T,[$20,$60,$40,$41,$7F,$3F,$01,$00],O_Kar
Gosub Ata

next
case "K"
For T=0 to 7
lookup2 T,[$7F,$7F,$08,$1C,$36,$63,$41,$00],O_Kar
Gosub Ata

next
case "L"
For T=0 to 7
lookup2 T,[$7F,$7F,$40,$40,$40,$60,$60,$00],O_Kar
Gosub Ata

next
case "M"
For T=0 to 7
lookup2 T,[$7F,$7F,$02,$0C,$02,$7F,$7F,$00],O_Kar
Gosub Ata

next
case "N"
For T=0 to 7
lookup2 T,[$7F,$7F,$06,$0C,$18,$7F,$7F,$00],O_Kar
Gosub Ata

next
case "O"
For T=0 to 7
lookup2 T,[$3E,$7F,$41,$41,$41,$7F,$3E,$00],O_Kar
Gosub Ata

next
case 214 'Ö
For T=0 to 7
lookup2 T,[$3C,$7E,$43,$42,$43,$7E,$3C,$00],O_Kar
Gosub Ata

next
case "P"
For T=0 to 7
lookup2 T,[$7F,$7F,$09,$09,$09,$06,$06,$00],O_Kar
Gosub Ata

next
case "R"
For T=0 to 7
lookup2 T,[$7F,$7F,$09,$09,$09,$76,$76,$00],O_Kar
Gosub Ata

next
case "S"
For T=0 to 7
lookup2 T,[$26,$6F,$49,$49,$49,$7B,$32,$00],O_Kar
Gosub Ata

next
case 222 'Þ
For T=0 to 7
lookup2 T,[$26,$6F,$49,$C9,$C9,$7B,$32,$00],O_Kar
Gosub Ata

next
case "T"
For T=0 to 7
lookup2 T,[$01,$01,$7F,$7F,$01,$01,$00,$00],O_Kar
Gosub Ata

next
case "U"
For T=0 to 7
lookup2 T,[$3F,$7F,$40,$40,$40,$7F,$3F,$00],O_Kar
Gosub Ata

next
case 220 'Ü
For T=0 to 7
lookup2 T,[$3D,$7D,$40,$40,$40,$7D,$3D,$00],O_Kar
Gosub Ata

next
case "V"
For T=0 to 7
lookup2 T,[$1F,$3F,$70,$70,$30,$1F,$0F,$00],O_Kar
Gosub Ata

next
case "Y"
For T=0 to 7
lookup2 T,[$07,$0F,$18,$70,$18,$0F,$07,$00],O_Kar
Gosub Ata

next
case "Z"
For T=0 to 7
lookup2 T,[$63,$73,$59,$4D,$47,$63,$61,$00],O_Kar
Gosub Ata

next

case "Q"
For T=0 to 7
lookup2 T,[$3E,$7F,$41,$51,$61,$7F,$3E,$00],O_Kar
Gosub Ata

next

case "W"
For T=0 to 7
lookup2 T,[$3F,$7F,$40,$38,$40,$7F,$3F,$00],O_Kar
Gosub Ata

next

case "X"
For T=0 to 7
lookup2 T,[$43,$66,$3C,$18,$3C,$66,$43,$00],O_Kar
Gosub Ata

next

case " "
For T=0 to 7
lookup2 T,[$00,$00,$00,$00,$00,$00,$00,$00],O_Kar
Gosub Ata

next

case "0"
For T=0 to 7
lookup2 T,[$3E,$7F,$51,$49,$45,$7F,$3E,$00],O_Kar
Gosub Ata

next

case "1"
For T=0 to 7
lookup2 T,[$00,$42,$7F,$7F,$40,$00,$00,$00],O_Kar
Gosub Ata

next

case "2"
For T=0 to 7
lookup2 T,[$42,$63,$71,$59,$4D,$47,$42,$00],O_Kar
Gosub Ata

next

case "3"
For T=0 to 7
lookup2 T,[$22,$63,$41,$49,$49,$7F,$36,$00],O_Kar
Gosub Ata

next

case "4"
For T=0 to 7
lookup2 T,[$30,$38,$2C,$26,$7F,$7F,$20,$00],O_Kar
Gosub Ata

next

case "5"
For T=0 to 7
lookup2 T,[$27,$67,$45,$45,$45,$7D,$39,$00],O_Kar
Gosub Ata

next

case "6"
For T=0 to 7
lookup2 T,[$38,$7C,$4E,$4B,$79,$30,$00,$00],O_Kar
Gosub Ata

next

case "7"
For T=0 to 7
lookup2 T,[$01,$01,$71,$79,$0D,$07,$03,$00],O_Kar
Gosub Ata

next

case "8"
For T=0 to 7
lookup2 T,[$36,$7F,$49,$49,$49,$7F,$36,$00],O_Kar
Gosub Ata

next

case "9"
For T=0 to 7
lookup2 T,[$06,$0F,$49,$49,$69,$3F,$1E,$00],O_Kar
Gosub Ata

next

case ":"
For T=0 to 7
lookup2 T,[$00,$00,$00,$66,$66,$00,$00,$00],O_Kar
Gosub Ata

next

case "-"
For T=0 to 7
lookup2 T,[$00,$00,$08,$08,$08,$08,$00,$00],O_Kar
Gosub Ata

next

case "+"
For T=0 to 7
lookup2 T,[$00,$18,$18,$7E,$7E,$18,$18,$00],O_Kar
Gosub Ata

next

case "."
For T=0 to 7
lookup2 T,[$00,$00,$60,$60,$00,$00,$00,$00],O_Kar
Gosub Ata

next

case ","
For T=0 to 7
lookup2 T,[$00,$00,$B0,$70,$00,$00,$00,$00],O_Kar
Gosub Ata

next

case ";"
For T=0 to 7
lookup2 T,[$00,$00,$B6,$76,$00,$00,$00,$00],O_Kar
Gosub Ata

next

case "&"
For T=0 to 7
lookup2 T,[$00,$36,$49,$55,$22,$50,$00,$00],O_Kar
Gosub Ata

next

CASE "'"
For T=0 to 7
lookup2 T,[$00,$00,$03,$07,$07,$00,$00,$00],O_Kar
Gosub Ata

next

CASE "!"
For T=0 to 7
lookup2 T,[$00,$00,$00,$5F,$5F,$00,$00,$00],O_Kar
Gosub Ata

next

CASE "%"
For T=0 to 7
lookup2 T,[$42,$25,$12,$08,$24,$52,$21,$00],O_Kar
Gosub Ata

next
CASE "?"
For T=0 to 7
lookup2 T,[$02,$52,$51,$09,$09,$06,$06,$00],O_Kar
Gosub Ata

next
case else
For T=0 to 7
lookup2 T,[$00,$00,$00,$00,$00,$00,$00,$00],O_Kar
Gosub Ata

next

end select

return
 
Última edición:
lubeck:

Que tal ya realice el control por teclado pero no me reconoce todos los caracteres deseo llegar a algo como esto:

http://www.youtube.com/watch?v=sVivRBtGikE&feature=player_detailpage

por lo que he estado usado el comando select case para contener todos los caracteres del teclado cuando pueda subo avances.

saludos.

este es un pequeño fragmento del programa:

Deberias explicar como lo hiciste? se ve genial y si es en lenguaje Basic uffs mucho mejor, para eso es el foro no!! Para impartir conocimiento :D
 
Atrás
Arriba