Curso de programación de PIC en PICBasic Pro

Que tal amigo en la parte superior izquierda hay una ventanilla donde encontraras el pic a utilizar por defecto cuando habres microcode studio te aparecera el pic 16f628 realizas click sobre esta ventanilla y escogues el de tu aplicacion PIc16f84a y escibes lo siguiente todo el procedimiento aplica para cualquier pic que utilices con oscilador externo:
@ device xt_osc
define osc 4 ;especifica que se va a utilizar uno de 4 Mhz

led var portb.0 ;nombre del pin 6

inicio: ;nombre de subrutina de inicio
HIGH led ;enciende el led que esta conectado en el pin6
pause 1000 ;Espera un segundo
low led ;apaga el led
pause 1000 ;espera un segundo
goto inicio ;continua el programa para siempre
end ;fin del programa

por toro lado compre un computador con sistema operativo vista 7 a 64 bits y no me anda el compilador de microcode studio plus he intendo modos de compatibilidad y nada con el rroe que no me me genera el .hex , lo mismo me ocurre con Proteus 7.6 apareciendo mensajes como no se puede abrir o el que encontro un problema y se tiene que cerrar mirare si la version de Proton ide plus trabaja con este istema pra empezar con los ejemplos de los pic de la serie 18f y la comunicacion at reves de Usb con visual basic.
 
Última edición:
buenas,

amigo meca ese procedimiento que me indicas lo realizé al pie de la letra cuando lo intenté aquella vez, lo raro es que le programé el .hex que me enviaste aquella vez cuando estaba armando el pickit 2 y nada. no sé si sera qe el pic esté averiado y para mas piedra es el unico 16f84a que tengo.:enfadado:

voy a intentarlo otra vez para ver...y tambien, para descartar, le voy a exportar un .hex de un reloj que ya puse a funcionar en una pcb...luego te cuento como me fue.

Ese es el problema de los PCs de ahora que traen ese vista o el nuevo w7...ponen más problema para estos programas bajados por la red. suerte para que puedas solucionar el inconveniente.

...sigo en fase de aprendizaje, y ya estoy aprendiendo a manejar 7 segmentos...
Seria bueno si tienes un codibo en basic que sirva para hacer un reloj 7 segmentos, sin rtc.

Saludos y gracias

cheyo28:cool:
 
bien dejame ver realizare uno multiplexado en estos dias subo el codigo y el programa suerte amigo con tu aprendizaje

En la imagen que te anexo asi quedaria el circuito pero tendrias que cambiar de pic a 16f877a si le conectamos los botones de configuracion o realizarlo con el pic 16f628A pero solamenta con los botones de configuracion de horas y minutos ya que se nos va de pines.

o podriamos utilizar el circuito que posteaste pero el multiplexado no lo realizaria el pic sino el integrado conectado a los display estoy presto a tus comentarios
 

Adjuntos

  • RELOJ.pdf
    143.6 KB · Visitas: 621
  • RELOJ1.pdf
    133.9 KB · Visitas: 464
Última edición:
ok gracias meca.

pero sí seria mejor:

1-solo 4 segmentos, 2 para horas y 2 para minutos, segundos con 2 leds.
2-pic16f628a, el 16f788 se lo preste a un cuñado y ahora anda en la guajira....:rolleyes:
3-multiplexado con Deco, yo tengo un 4011, cmos para display de catodos.
4-oscilador interno rc

creo que de esta manera le quedarian mas pines al pic y hasta podriamos ir agregandole cosas a los demas pines...buzzer (alarma) relé (control), etc.

Despues iremos mirando el i2c. cada cosa a su tiempo.

Saludos y exitos

cheyo28:cool:
 
hola amigos¡¡¡
tengo un trabajo que consite en programar un robort rastedor de lineas. me gustaria que me puedan ayudar con una programacion lo mas basico...
las entradas son 4 que son de los sensors: RB1, RB2, RB3, RB4. y las salidas son 2: RA0 i RA1 que van hazia los motores. tengo q usar el pic 16F628.. cualquier sugerencia sera bien recibida....
PD: no seria mucho pedir que se incluya PWM...graciasss
 
que raro amigo acabe de entrar al foro y pulse las direcciones y se me abre de una la pagina sin errores pero aqui te dejo el codigo de el bot que te menciono busca en google seguidor de lineas hyperion y vas a encontrar el esquema para que lo armes y puedas hacer las modificaciones del caso

Código:
--------------------------------------------------------------------------------
'Seguidor de linea: Hyperion
'Giovanni Lafebre
'Cuenca - Ecuador

@ DEVICE pic16f628, INTRC_OSC_NOCLKOUT 'Reloj interno solo 
@ DEVICE pic16f628, WDT_OFF ' Watchdog Timer desconectado 
@ DEVICE pic16f628, PWRT_ON ' Power-On Timer conectado 
@ DEVICE pic16f628, BOD_ON ' Brown-Out Detect conectado 
@ DEVICE pic16f628, MCLR_OFF ' Master Clear Externo desconectado 
@ DEVICE pic16f628, LVP_OFF ' Low-Voltage Programming desconectado 
@ DEVICE pic16f628, CPD_OFF ' Data Memory Code Protect desconectado 

TRISA=%11111111

cmcon=7

pause 2000

loop:

    select case PORTA
        case 0
            gosub izquierda
        case 1
            gosub adelante
        case 3
            gosub derecha
    end select
    goto loop

    adelante:
        high 0:high 1: low 2
        high 3:high 4: low 5
        return
    atras:
        high 0:low 1: high 2
        high 3:low 4: high 5
        return
    izquierda:
        high 0:low 1: high 2
        high 3:high 4: low 5
        return
    derecha:
        high 0:high 1: low 2
        high 3:low 4: high 5
        return
end
 
Última edición por un moderador:
que tal compañeros he estudiado el proyecto del termometro digital y esta todo perfecto pero tengo una duda que es como hacer para que pueda leer la temperatura con decimales (25C, 25.1C,25.2C....26C,) con precicion de 0.1C . ya le busque y no logro realizarlo.

espero sus comentarios ¡¡¡
 
Haber amigo mira en las paginas anteriores del foro ahi hay un lector analogo digital que va desde 0 a 100 con incrementos de uno en uno y en otro mensaje hay un lector analogo digital creo que era un voltimetro ahi esta como debes colocar el segundo decimal miralos analizalos he implementalos en tu programa y avisa para ver como se te puede ayudar

una pregunta amigos alguien sabe como usar el easy hid de microcode me podrian ayudar con esto por favor
 
Última edición:
Hola que tal a todos los foristas
alguien me puede ayudar??
estoy programando en pic basic pro pero no se como guardar el valor de una variable en la eeprom escribo esta instruccion:

EEPROM 1, [variable]
y me marca un error, solo se pueden almacenar constantes con este metodo??
tambien si luego quiero guardar otra cosa en esa misma direccion en otra parte del programa me amrca eeprom collision
alguien me puede ayudar???
gracias y saludos
Jorge
 
ok gracias atricio por responder ¡¡

y jorge sanchez para grabar una constante en la eeprom seria asi:

EEPROM {Location ,} [ constante {,constante ...} ]
Guarda constantes en un chip EEPROM . Si se omite el valor opcional Location ,la primera declaración se guarda en la dirección 0 del EEPROM y las subsiguientes en las siguientes direcciones del mismo .Si se indica un valor Location , éste indica la dirección de comienzo para guardar los datos .
Constante puede ser una constante numérica ó una cadena de constantes .Solo se guardan los bytes menos significativos de los valores numéricos . Las cadenas son guardadas como bytes consecutivos d valores ASCII .No se agregan automáticamente terminadores ,ni se completa el largo .
EEPROM solo trabaja con micro controladores con EEPROM incorporado como el PIC16F84 y PIC16C84 . Dado que el EEPROM es una memoria no volátil , los datos permanecerán intactos aún sin alimentación .
Los datos son guardados en el EEPROM solo una vez , cuando el micro controlador es programado , no cada vez que se ejecuta el programa .Se puede usar WRITE para colocar valores en el EEPROM en el momento de la ejecución .
´ Guardar 10 ,20 , 30 comenzando en la dirección 5
EEPROM 5, [ 10,20,30 ]




y para escribir en la eeprom el valor de una variable es con la instruccion WRITE :

WRITE Address,Value
Graba valores(valor de la variable) en la EEPROM incorporado en la dirección Address especificada . .Esta instrucción solo puede ser usada con un microPIC que tenga un EEPROM incorporado como el PIC16F84 ó PIC16C84
Es usado para colocar datos en el EEPROM durante el momento de la ejecución .Para grabar datos en el EEPROM durante la programación ,se usan las declaraciones DATA y EEPROM .
Cada WRITE se auto regula en tiempo y toma aproximadamente 10 milisegundos ejecutarlo en un microPIC .
WRIT 5,B0 ´ graba el valor de B0 en la direccion 5 de la EEPROM del pic (B0 puede sustituirse por la variable)


saludos ¡¡
 
Hola que tal a todos los foristas, a ver si alguien me puede ayudar
Estoy haciendo una alarma para un horno y ya me atore en estsa parte:

la puerta del horno esta cerrada y para que la alarma no suene debe de accesarse un codigo con un telcado numerico, esa parte ya esta terminada, el punto es , si alguien abre la puerta la alarma debe de esperar 10 segundos antes de activar la sirena, pero si el codigo se introduce durante ese tiempo esta debe de desactivarse, entonces,
no se como usar el timer del 16f84 para esto
tengo una ligera idea pero no entiendo como usar el preescaler,
lo que quiero hacer es , activar el timer, y luego de pasados los 10 segundos, salte a un int, y verifique si la alarma esta activada, si es true pues suena y si no , pues es que esta desactivada, alguien me puede ayudar??
Saludos !!
alguien me puede ayudar, o donde consigo info de como configurar el timer
 
Jorge Sanchez lee esto:

Hay encontrara la informacion para utilizar el Timer 0 del pic 16f84A.

jafernandez2 si necesitas un progrmador en destacados hay dos por USB, si necesitas ayuda en la formulacion de su programa en Basic sube los rerquerimientos y lo que llevas hecho con mucho gusto se te ayudara.
 
Cordial saludo, para todos los foristas

Soy un tanto novato en el tama de los PIC, y desearia que me ayudaran con lo siguiente:

Debo desarrollar una aplicacion con PIC y una LCD 2x16, la cual cumpla con el siguiente objetivo:
1- en la primera linea de la LCD debe aparacer un mensaje "CONTADOR"
2- en la linea dos de la LCD debe aparcer a la izquierda el mensaje "TURNO (X)" siendo X (1 ó 2 ó 3) de acuerdo al turno, seleccionado previamente por medio de un pulsador, que sera conectado a uno de los pines del PIC.
3- en la linea dos de la LCD pero al lado derecho debe aparecer el valor de un proceso de conteo con cinco dogitos XXXXX, el cual es resultado de una señal externa generada por un sensor que sera conectado a otro de los pines del PIC y esta contando piezas.
4- el valor del conteo que se esta visualizando en la LCD, el PIC lo debe guardar en memoria, tal que si se cambia de turno se guarde la informacion del turno anterior, se visualice el conteo acumulado del turno seleccionado y sobre este se siga escribiendo ó acumulando el conteo del nuevo turno. Si hay un corte de energia los adatos de conteo que se llevaban deben quedar en memoria, para recuperarlos luego de reestablecer el suministro de energia.

mi pregunta es:
¿cual PIC me recomiendan para este tipo de proyectos, que pueda trabajar con la memoria EEPROM, del mismos PIC, escribiendo y leyendo sobre esta memoria, los datos del conteo en cada turno?

Aclaro: en un lapso de 24 horas horas de trabajo, se debe contar aproximadamente 300 , +/- 100 en turno 1, +/- 100 en turno 2 y +/- 100 en turno 3.

Agradezco su atencion y su sugerencia a la pregunta,

Estoy abierto a sugerencias.
 
Interesante el proyecto pero:

1.Manejaras el LCD a comunicacion de 4 o 8 BITS ? En cables seria 4 u 8 respectivamente pero mayor demora , no tan notable en la comunicacion de 4 BITS. Ami manera manejo mejor la comunicacion de 4 bits por la conexion y la poca utilizacion de cables eso depende de tu criterio.

2.Un pulsado como turno X hasta 3. Hay un contador de pulsao como proyectos con Display se puede acondicionar el codigo para que funcione con LDC.

3.Se diaria que se utilizara un sensor digital para el proyecto que realizara la actividad de conteo XXXXX hasta 99999. hay un proyecto con referente a esto en proyectos de LCD en este mismo tema, me parece que esta en las 4 primeras hojas.

4. la grabacion de la memoria que me acuerde directamente en el Pic no se ha menejado en este hilo pero seria un buen comienzo para aplicarlo en tu proyecto.

5. Te recomendaria el pic 16f873A que es de 28 pines buena capacidad de memoria y tres puertos de coneccion A, B y C Respectivamente, pero cuando lo preguntas en las tiendas de electronica tiene el mismo valor que el 16f877A que posee 40 pines un puerto de mas y otras prestaciones interesantes. $ 70000
 
Disculpen a ver si alguien me podria ayudar ya que soy nuevo en lo que es PICs.
Encontré un código asm PIC 16f84A de un contador simple ascendente con un 7 segmentos y un pulsador, lo unico es que modifiqué es que tenga otro pulsador para conteo descendente, PERO !!!! cuando desciende a 0 se bloquéa a ver si alguien me puede decir que hice mal.
Físicamente configuré (RB0 a RB6 a,b,c,d,e,f,g Respectivamente del 7 Segmentos Cátodo común) RB7 1K a 0v y Pulsador a 5v
Luego agregué RA2 con el otro pulsador igual para descender y como les contaba, llega a 0 y se bloquéa, ( al ascender anda super pasa el 0 y vuelve a contar ) solo es al descender el problema, aqui va el codigo
Código:
; **** Encabezado ****
list p=16F84A
#include P16F84A.inc
__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
Contador equ  0x0C ; Registro para almacenar conteo
Contador1 equ  0x0D ; Registro utilizado en demora.-
Contador2 equ  0x0E ; Registro utilizado en demora.-
Pulsador equ  7 ; Definimos Pulsador como el bit 7, en este caso sera para PORTB
Pulsador2 equ  2 ; Bit 2  PORTA
;**** Inicio  del Micro ****
Reset  org  0x00  ; Aqui comienza el micro.- 
   goto Inicio  ; Salto a inicio de mi programa.-    
;**** Tabla de conversion BCD a 7 Segmentos ****
; Se coloca al inicio para asegurar ubicacion en Pagina.- 
  org 0x05  ; Origen del codigo de tabla.-
BCD7SEG:    ; retlw b'gfedcba'  para display catodo comun 
  addwf PCL,1  ; Se incrementa el contador del programa.- 
  retlw b'0111111' ; 0  
  retlw b'0000110' ; 1  
  retlw b'1011011' ; 2  
  retlw b'1001111' ; 3  
  retlw b'1100110' ; 4  
  retlw b'1101101' ; 5  
  retlw b'1111101' ; 6  
  retlw b'0000111' ; 7  
  retlw b'1111111' ; 8  
  retlw b'1101111' ; 9  
  clrf Contador ; Si llega 10, se resetea contador 
  retlw b'0111111' ; 0 
;*****************************************************************************************
;**** Programa principal ****
;**** Configuración de puertos ****
Inicio  bsf STATUS,RP0  ; Pasamos de Banco 0 a Banco 1.- 
   movlw b'10000000' ; RB7 como entrada y los demas como salida.- 
   movwf TRISB 
   bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0 
   movlw b'0111111' ; Comienza en cero.- 
   movwf PORTB 
   clrf Contador
;**** Testeo de Pulsador ****
Testeo  btfss PORTB,Pulsador  ; Testeamos si esta a 1 logico.- 
   goto Testeo2  ; No, seguimos testeando.- 
   call Demora_20ms ; Eliminamos Efecto rebote 
   btfss PORTB,Pulsador ; Testeamos nuevamente.- 
   goto Testeo2  ; Falsa Alarma, seguimos testeando.- 
   incf Contador,1 ; Se ha pulsado, incrementamos contador.- 
   movfw Contador ; pasamos contador a W 
   call BCD7SEG  ; Llamamos tabla.- 
   movwf PORTB  ; Cargamos valor recibido por Tabla en PORTB 
   btfsc PORTB,Pulsador ; Esperamos a que se suelte el pulsador -**- 
   goto $-1  ; No, PCL - 1, --> btfss PORTA,Pulsador.- 
   call Demora_20ms ; Eliminamos efecto rebote.- 
   btfsc PORTB,Pulsador ; Testeamos nuevamente.- 
   goto $-4  ; No, Falsa alarma, volvemos a testear a que se suelte (**).- 
   goto Testeo2  ; Si, Testeamos nuevamente.- 
 
;*******ESTO ES LO AGREGADO************
;
Testeo2  btfss PORTA,Pulsador2  ; está a 1 ?
   goto Testeo  ; no, Seguimos testeando
   call Demora_20ms ; Rebote
   btfss PORTA,Pulsador2 ; Testeamos de nuevo
   goto Testeo  ; Falsa alarma
   decf Contador,1 ; Pulsado se decrementa 1
   movfw Contador ; Movemos contador a w
   call BCD7SEG  ; Tabla
   movwf PORTB  ; Cargamos Tabla en PORTB
   btfsc PORTA,Pulsador2 ; esperamos soltar el boton
   goto $-1  ; No, PCL - 1, --> btfss PORTA,Pulsador.-
   call Demora_20ms ; Rebote
   btfsc PORTA,Pulsador2 ; Nuevamente
   goto $-4  ; Falsa alarma  
   goto Testeo  ; Nuevamente
 
;**** Demora ****
Demora_20ms movlw 0xFF  ;  
   movwf Contador1 ; Iniciamos contador1.-
Repeticion1 movlw 0x19  ;  
   movwf Contador2 ; Iniciamos contador2
Repeticion2 decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-   
   goto Repeticion2 ; Si no es 0 repetimos ciclo.- 
   decfsz Contador1,1 ; Decrementa Contador1.- 
   goto Repeticion1 ; Si no es cero repetimos ciclo.- 
   return    ; Regresa de la subrutina.-  
end

Desde yá muchas gracias .... ATTE. Victor Angel
 
Última edición por un moderador:
buenas noches, les escribo porque tengo un problemita con el proteus y el picbasic pro el asunto es que estoy trabajando con simulaciones con el pìc12f509 encendiendo unos led's, es un programita bien sencillo pero a la hora de simularlo no me esta activando el gpio.2 todos los demas pines del puerto funcionan bien pero cuando mando activar justamente el pin 2 del puerto no me lo activa. Ahora mi duda es sera que le falta algo al programa como digitalizar las salidas por ejemplo, o sera el picbasic pro o el proteus? aca les anexo todo lo referido al problema si alguien lo puede probar y decirme si es mi maquina o mi software gracias...

ya encontre el problema, simplemente era cololar OPTION_REG.5 = 0 antes de la declaracion trisio, lo cual lo consegui en el data sheet del integrado para que no les suceda lo mismo tomen en cuenta ese pequeño detalle a la hora de programar el 12f509 gracias de todas maneras...saludos
 

Adjuntos

  • 12c509A.rar
    36.9 KB · Visitas: 330
Última edición:
Atrás
Arriba