desktop

Curso de programación de PIC en PICBasic Pro

Me estoy iniciando en Programación P.B.P.
Necesito ayuda con la instrucción SELECT CASE, información más detallada que en los libros y ejemplos fáciles de entender.



Estoy Practicando con el libro de microcontroladores 16f628a y el pic16f877a.
También no puedo convertir la salida del puerto A, hago el ejemplo del libro y no funcionan algunas luces del puerto A, se mantiene encendido.
Todo en lenguaje PICBasic Pro.

hola compañero si colocas tu código y un diagrama si es en proteus mejor, puedo ayudarte saudos
 
Me estoy iniciando en Programación P.B.P.
Necesito ayuda con la instrucción SELECT CASE, información más detallada que en los libros y ejemplos fáciles de entender.



Estoy Practicando con el libro de microcontroladores 16f628a y el pic16f877a.
También no puedo convertir la salida del puerto A, hago el ejemplo del libro y no funcionan algunas luces del puerto A, se mantiene encendido.
Todo en lenguaje PICBasic Pro.
Usa la opción de Buscar en este Tema o la Búsqueda Avanzada para encontrar posts que contengan ejemplos.
Te podría sugerir que uses el Manual de PicBasic Pro en Castellano, pero no aparece ayuda para SELECT CASE
Es que en realidad es muy sencillo su uso y no deberías tener complicación para aplicarla.

En la ayuda de MicroCode Studio viene explicado el uso de SELECT CASE

Saludos.
 
Hola de nuevo, revisando el codigo me doy cuenta que esta echo para una matrix de 8x8 por lo cual si tomas en cuenta que para una matriz de 24 puntos horizontales lo cuales vas a ir activando los led verticales según sea necesario para ir armando la imagen.

hermano muchas muchas gracias eres un mago:aplauso:, seguí tus instrucciones y funciono perfectamente pero no logro que el mensaje se desplace más rápido por fa dime como lo acelero:apreton:
 

Adjuntos

  • prueba2 matriz 8x24 16f88.rar
    25.6 KB · Visitas: 84
Amigos buenas, tengo una pregunta que quisiera que me puedan ayudar, la verdad no se si estoy en el foro correcto, pido disculpas de antemano, si así fuese. Estaba realizando un proyecto y en el programa al compilarlo, me ha salido un error, el cual hace referencia que me he pasado de la o las paginas del pic (16F877A), e investigado y se que hay un registro llamado PCLATH; he leido ya mucha teoría referente a ese registro, pero no se como aplicarlo en el programa como tal. Por favor necesito su gran ayuda.
 
Amigos buenas, tengo una pregunta que quisiera que me puedan ayudar, la verdad no se si estoy en el foro correcto, pido disculpas de antemano, si así fuese. Estaba realizando un proyecto y en el programa al compilarlo, me ha salido un error, el cual hace referencia que me he pasado de la o las paginas del pic (16F877A), e investigado y se que hay un registro llamado PCLATH; he leido ya mucha teoría referente a ese registro, pero no se como aplicarlo en el programa como tal. Por favor necesito su gran ayuda.
Con PICBasic Pro, no debes preocuparte por ese mensaje, es una advertencia del compilador cuando el programa es muy grande y se ha cambiado de página, pero PBP se encarga de que todo marche bien.

En versiones del compilador PBP como la 2.60X no conozco forma de solucionar esta advertencia, pero en PBP3 si se puede suprimir usando @ errorlevel -306 para que el compilador no mande ese mensaje.

Saludos.
 
Con PICBasic Pro, no debes preocuparte por ese mensaje, es una advertencia del compilador cuando el programa es muy grande y se ha cambiado de página, pero PBP se encarga de que todo marche bien.

En versiones del compilador PBP como la 2.60X no conozco forma de solucionar esta advertencia, pero en PBP3 si se puede suprimir usando @ errorlevel -306 para que el compilador no mande ese mensaje.

Saludos.

Estimado amigo, muchas gracias por tu respuesta, pero la duda que tengo esque por este mensaje que sale al parecer no me deja modificar nada en el programa, ejem: si quiero agregar una nueva salida para que active un led, al momento de grabar en el pickit 2 no surge efecto, como digo al parecer no m deja hacer ninguna modificacion mientras aparezca este mensaje; con todo voy a probar con el fuse que me dejas para ver si por ahi es la solución.

saludos
 
Estimado amigo, muchas gracias por tu respuesta, pero la duda que tengo esque por este mensaje que sale al parecer no me deja modificar nada en el programa, ejem: si quiero agregar una nueva salida para que active un led, al momento de grabar en el pickit 2 no surge efecto, como digo al parecer no m deja hacer ninguna modificacion mientras aparezca este mensaje; con todo voy a probar con el fuse que me dejas para ver si por ahi es la solución.

saludos

Hola pienso que lo mejor es una imagen del error un print pant, así poder ver el error exacto ya que a mi me ha dado el mismo error y lo e solucionado de diferentes formas abecés no me deja hacer nada y es por una variable o un registro mal configurado y otras no pasa nada, lo otro seria que colocaras el código para probarlo en otros pc haber si es cuestión de software...saludosss
 
Una Sugerencia se deberia hacer un compilado de todos los proyectos con sus respectivos nombres y archivos rar.
Hacer una clase de Tutorial, hacerlo de acuerdo a la complejidad de los proyectos
 
TECLADO 6X6 CON DISPLAY DE 7 SEGMENTOS Y SUMADOR

Hola buenas tardes:

Ojala me pudieran ayudar he realizado con exito, al menos en la simulacion, un teclado de 6x6 con dos display de 7 segmentos y ademas vaya sumando el valor de cada tecla.
El unico problema que tengo es que quisiera que en lugar de que los switches del teclado fueran momentaneos, fueran permanentes , es decir, que si dejo presionado porejemplo la tecla 1 y despues sin soltar presiono la tecla 2, me de la suma de 3 sin necesidad de soltar la tecla 1.

Cabe mencionar que es para autoamizar un sistema de los juegos de canicas que existen en las ferias, donde la canica dejaria presionada cada tecla.
Anexo los archivos y agradeceria mucho su ayuda.

La distribucion y valor de lasteclas es el siguiente

1 2 3 4 5 6
6 5 4 3 2 1
1 2 3 4 5 6
6 5 4 3 2 1
1 2 3 4 5 6
6 5 4 3 2 1


Saludos

codigo:

Código:
'****************************************************************
trisb = %00111111
trisc = 0
trisd = 0
portb = 0
portc = 0
portd = 0
cuenta var byte
cuentabcd var byte
nu var byte
nu1 var byte
nu2 var byte
nu3 var byte
nu4 var byte
nu5 var byte
nu6 var byte
nu7 var byte
nu8 var byte
nu9 var byte
nu10 var byte
nu11 var byte
nu12 var byte
nu13 var byte
nu14 var byte
nu15 var byte
nu16 var byte
nu17 var byte
nu18 var byte
nu19 var byte
nu20 var byte
nu21 var byte
nu22 var byte
nu23 var byte
nu24 var byte
nu25 var byte
nu26 var byte
nu27 var byte
nu28 var byte
nu29 var byte
nu30 var byte
nu31 var byte
nu32 var byte
nu33 var byte
nu34 var byte
nu35 var byte
nu36 var byte

                           

inicio:

'primera fila
portd = %00000001
if portb = %00000000 then nu = 0
if portb = %00000001 then nu1 = 1
if portb = %00000010 then nu2 = 2
if portb = %00000100 then nu3 = 3
if portb = %00001000 then nu4 = 4
if portb = %00010000 then nu5 = 5
if portb = %00100000 then nu6 = 6

pause 10
'segunda fila
portd = %00000010
if portb = %00000001 then nu7 = 6
if portb = %00000010 then nu8 = 5
if portb = %00000100 then nu9 = 4
if portb = %00001000 then nu10 = 3
if portb = %00010000 then nu11 = 2
if portb = %00100000 then nu12 = 1
pause 10
'tercera fila
portd = %00000100
if portb = %00000001 then nu13 = 1
if portb = %00000010 then nu14 = 2
if portb = %00000100 then nu15 = 3
if portb = %00001000 then nu16 = 4
if portb = %00010000 then nu17 = 5
if portb = %00100000 then nu18 = 6
pause 10
'cuarta fila
portd = %00001000
if portb = %00000001 then nu19 = 6
if portb = %00000010 then nu20 = 5
if portb = %00000100 then nu21 = 4
if portb = %00001000 then nu22 = 3
if portb = %00010000 then nu23 = 2
if portb = %00100000 then nu24 = 1
pause 10
'quinta fila
portd = %00010000
if portb = %00000001 then nu25 = 1
if portb = %00000010 then nu26 = 2
if portb = %00000100 then nu27 = 3
if portb = %00001000 then nu28 = 4
if portb = %00010000 then nu29 = 5
if portb = %00100000 then nu30 = 6
pause 10
'sexta fila
portd = %00100000
if portb = %00000001 then nu31 = 6
if portb = %00000010 then nu32 = 5
if portb = %00000100 then nu33 = 4
if portb = %00001000 then nu34 = 3
if portb = %00010000 then nu35 = 2
if portb = %00100000 then nu36 = 1
pause 10

cuenta = nu+nu1+nu2+nu3+nu4+nu5+nu6+nu7+nu8+nu9+nu10+nu11+nu12+nu13+nu14+nu15+nu16+nu17+nu18+nu19+nu20+nu21+nu22+nu23+nu24+nu25+nu26+nu27+nu28+nu29+nu30+nu31+nu32+nu33+nu34+nu35+nu36

cuentabcd = ((cuenta / 10) << 4) + (cuenta // 10)

portc = cuentabcd

Ya por ultimo me podrian dar la configuracion de este pic ya que al momento de programarlo en el MASTER PROG me sale esta leyenda
AVISO FALTAN LOS BITS DE CONFIGURACION EN EL ARCHIVO HEX
 

Adjuntos

  • TECLADO MAT 6X6.rar
    80.5 KB · Visitas: 74
Última edición:
hola a todos
de nuevo por aquí molestandoles a ver sí alguien me puede decir de donde me sale este mensaje en el programador es primera vez que me aparece y no logro hacer lo que me pide, reformando la configuración en el programa en el microcode tampoco hay cambio en el pickit, aquí les dejo 2 imágenes para que vean de que estoy hablando, les agradezco mucho su ayuda y su paciencia:apreton:
 

Adjuntos

  • pickit2.jpg
    pickit2.jpg
    141.1 KB · Visitas: 62
  • pickit2 2.jpg
    pickit2 2.jpg
    140.9 KB · Visitas: 48
El formato para la palabra de configuración en el PIC16F88 es de esta forma...

;*******************************************************************************
@ DEVICE PIC16F88
@ DEVICE HS_OSC, WDT_OFF, PWRT_ON, MCLR_ON, BOD_OFF, LVP_OFF
@ DEVICE2 IESO_OFF, FCMEN_OFF

;*******************************************************************************
DEFINE OSC 20
;*******************************************************************************

Prueba incluyendo de esta forma la palabra de configuración en tu programa.

Saludos.
 
La forma en que yo lo hago es copiando directamente del archivo .INC los fuses correspondientes al pic y luego lo voy modificando según sea lo que necesite. En este caso de la matrix yo lo coloque así.

@ DEVICE PIC16F88
@ DEVICE XT_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE BOD_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE WRT_OFF
@ DEVICE DEBUG_OFF
@ DEVICE CCPMX_OFF
@ DEVICE PROTECT_OFF
 
La forma en que yo lo hago es copiando directamente del archivo .INC los fuses correspondientes al pic y luego lo voy modificando según sea lo que necesite. En este caso de la matrix yo lo coloque así.

@ DEVICE PIC16F88
@ DEVICE XT_OSC
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE MCLR_OFF
@ DEVICE BOD_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE WRT_OFF
@ DEVICE DEBUG_OFF
@ DEVICE CCPMX_OFF
@ DEVICE PROTECT_OFF
Este PIC tiene dos direcciones para la palabra de configuración: 0x2007 y 0x2008
En la dirección 0x2007 (CONFIG1) se establecen los fuses que muestras, pero en 0x2008 se establecen estos otros:
CONFIG2:
FCMEN = Fail-Safe Clock Monitor Enable bit
IESO = Internal External Switchover bit

Solo se establecen los primeros 2 bits (0 y 1) de los 13 bits del registro CONFIG2.
Por eso los incluí usando @ DEVICE2

No ocurrirá problema en nuestro programa si estos bits al no ser configurados quedan activos, mientras no falle el oscilador principal, pero si llegara a fallar se activaría el oscilador interno a la frecuencia que haya sido configurado en el registro OSCCON que por default será de 4MHz.
Y esto podría prestarse a confusiones sobre los tiempos de trabajo en el programa si se usa otra frecuencia.

Por aquí expuse unos ejemplos demostrando el funcionamiento del sistema "Fail-Safe Clock Monitor"

Saludos.
 
Última edición:
Gracias por la información muy bueno ese dato, ya revise y efectivamente esta incluido un poco mas abajo en el archivo .INC del 16f88 algo nuevo que aprendí hoy muchas gracias.:D(y)
 
Este PIC tiene dos direcciones para la palabra de configuración: 0x2007 y 0x2008
En la dirección 0x2007 (CONFIG1) se establecen los fuses que muestras, pero en 0x2008 se establecen estos otros:
CONFIG2:
FCMEN = Fail-Safe Clock Monitor Enable bit
IESO = Internal External Switchover bit

Solo se establecen los primeros 2 bits (0 y 1) de los 13 bits del registro CONFIG2.
Por eso los incluí usando @ DEVICE2

No ocurrirá problema en nuestro programa si estos bits al no ser configurados quedan activos, mientras no falle el oscilador principal, pero si llegara a fallar se activaría el oscilador interno a la frecuencia que haya sido configurado en el registro OSCCON que por default será de 4MHz.
Y esto podría prestarse a confusiones sobre los tiempos de trabajo en el programa si se usa otra frecuencia.

Por aquí expuse unos ejemplos demostrando el funcionamiento del sistema "Fail-Safe Clock Monitor"

Saludos.

Hola Darkbytes gracias por tu ayuda esta muy interesante esta información te cuento que puse los fuses como dijiste y en efecto ya no me sale el mensaje de error en el pickit2, y se deja cargar bien en el pic pero no da señales de vida, no logro que el pic arranque, subo el código a ver sí le encuentras donde está el error en la simulación en proteus funciona bien pero en protoboard no hace nada, muchas gracias de antemano:apreton:
 

Adjuntos

  • prueba matriz 8x24 16f88.rar
    26.3 KB · Visitas: 94
Compañero ferdy575 aun otra cosa se me olvido explicarte antes fue las configuraciones de los registros que controlar el hardware del microcontrolador, debes tomar en cuenta que el micro en si tiene una estructura interna que debes conoces bien asi como los fuses, también hay registros de control para los periféricos internos y externos del microcontrolador. En tu caso el micro tiene comparadores A/D y conversores A/D los cuales deben ser desactivados si no se van a utilizar de lo contrario van a estar activados. Estos registros normalmente son el CMCON y el ADCON0 y ADCON1 y ANSEL.
Como no los vas a usar colócalos así:

CMCON = 7 'desactiva modulo comparador
ADCON0 = 0 'desactiva modulos conversores
ADCON1 = 0 'controla modulos conversores
ANSEL = 0 'configura todos los canales del A/D a digitales

ADCON1 no influye si ADCON0 esta desactivado pero igual yo coloco todo a 0 para estar mas tranquilo con respecto a los módulos A/D.

Por otra parte e falto en los fuses

@ DEVICE2 IESO_OFF, FCMEN_OFF

Espero sea la solución a tu problema y si funciona coloca unas imágenes a ver como quedo...saludos
 
Necesitas configurar el puerto A como digital I/O, ya que usas los pines RA2 y RA3.
Utiliza ANSEL = 0 al inicio del programa para que el puerto A sea configurado con entradas y salidas digitales.

Suerte.
Compañero ferdy575 aun otra cosa se me olvido explicarte antes fue las configuraciones de los registros que controlar el hardware del microcontrolador, debes tomar en cuenta que el micro en si tiene una estructura interna que debes conoces bien asi como los fuses, también hay registros de control para los periféricos internos y externos del microcontrolador. En tu caso el micro tiene comparadores A/D y conversores A/D los cuales deben ser desactivados si no se van a utilizar de lo contrario van a estar activados. Estos registros normalmente son el CMCON y el ADCON0 y ADCON1 y ANSEL.
Como no los vas a usar colócalos así:

CMCON = 7 'desactiva modulo comparador
ADCON0 = 0 'desactiva modulos conversores
ADCON1 = 0 'controla modulos conversores
ANSEL = 0 'configura todos los canales del A/D a digitales

ADCON1 no influye si ADCON0 esta desactivado pero igual yo coloco todo a 0 para estar mas tranquilo con respecto a los módulos A/D.

Por otra parte e falto en los fuses

@ DEVICE2 IESO_OFF, FCMEN_OFF

Espero sea la solución a tu problema y si funciona coloca unas imágenes a ver como quedo...saludos
Señores los felicito y les agradezco su ayuda ustedes son unos monstruos para esta vaina segui sus consejos y funciona de maravilla nuevamente muchas gracias:aplauso:
 
Atrás
Arriba