Curso de programación de PIC en PICBasic Pro

gracias cripty, lo que no me queda claro tambien es donde pongo el on interrupt, al principio o al final del programa. O sea que tengo que poner un disable antes del on interrupt y despues del resume un enable, no ? En e l caso de una alarma me comviene usar el on interrupt para la activacion y desactivacion, vos que me decis ? Desde ya muchas gracias cripty y disculpe mi ignorancia. Saludos...
 
hola chicos.
les cuento que ya solucione el problema que tenia. al final cambie de instruccion y envez de usar serin/serout utilce pulsin/pulsout y quedo de maravillas XD... por fin he cumplido mi sueño de diseñar mi propio control remoto proporcional!!!
saludosss.
 
emilos; el ON INTERRUPT GOTO va una linea antes de la rutina principal, asi cuando tu programa comienza ya se esta esperando por una interrupcion, ahora en la subrutina a la que salta cuando ocurre una interrupcion tiene que ser antecedida con un disable esto para que se detenga la espera de una interrupcion (por que aunque ocurra el micro no se dara cuenta pues tiene que ser atendida la pimera interrupcion) y despues de terminar la subrutina se activa la espera de la interrupcion con un enable
el siguiente ejemplo utiliza una interrupcion por cambio de estado del porb.0 de 1 a cero logico (interrupcio externa); el micro mantiene encendido un led, cuando cambiamos el estado de la patita B.0 de 1 a 0 logico se apaga el led por un segundo y luego se prende

Código:
led  var PORTB.7

   OPTION_REG = $7f        
    INTCON = $90              ' habilita el registro de interrupciones externas 
 
  On Interrupt Goto myint  ' define a donde dirigirse al ocurrir una interrupcion
loop:                             ' rutina principal
   High led                      ' enciende el led
   Goto loop                    ' lo hace por siempre

' subrutina que se realizara al ocurrir una interrupcion
Disable                    ' no se verifica las interrupciondes desde aqui en adelante
myint:  
   Low led                    ' apaga el led
   Pause   500              ' epera medio segundo
   INTCON.1 = 0            ' setea el bit de interrupcion
   Resume                    ' retorna a la linea del programa principal 
                                ' donde ocurrio la interrupcion
   Enable                      'habilita la verificacion de las interrupciones
las interrupciones se utilizan para hacer algo en el momento que ocurren; es decir si tengo un micro que esta programado como un cronometro y quiero que cuando ocurra una interrupcion como la del ejemplo se reinicie la cuenta deberia utilizar interrupciones.

espero haber ayudado en tu duda; cualquier otra cosa no dudes en preguntar

Bye
 
tienes razon amigo cripty. acabo de comprobar en mi circuito que cuando el pic receptor deja de recibir señal, los servos se quedan talcual estavan cuando la tenian. supongo que eso no seria bueno en un modelo r/c ya que no habria forma de controlarlo y hacer algo. no lo habia tenido en cuenta :O .
voy a modificar el programa para que cuando no tenga señal, el micro haga algo al respecto. saludosss
 
Ahora entiendo... gracias por sacarme la duda. Otra duda, y que pasa cuando existe una interrupcion justo e n el momento que en el programa esta corriendo un PAUSE y solo sirve para el pin portb.0 en el caso del 16f84 ? espero no sea una pregunta boluda jeje. Cripty me diste un manon al sacarme de este dilema, me pasa que por ahi no entiendo solo leyendo el manual, a veses me hace falta que me lo expliquen de otra forma. Pero ahora resumi vastante el programa.

claro... probalo vos mismo. aca te dejo la simulacion en proteus:cool:

Dario realmente muy bueno, yo soy de barrio jardin dario cuando quieras nos juntamos a compartir ideas y te felicito por el programita es de gran utilidad. Saludos...
 
Última edición:
en pic basis pro las interrupciones no son atendidas inmediatamente, se espera a que termine el comando que se esta ejecutando luego se atiende la interrupcion, en el caso que se esta ejecutando un pause y ocurre una interrupcion, el programa terminara el pause y recien saltara a la sub rutina de interrupcion; si tienes la necesidad de hacer interrupciones que sean atendidas en el acto lo mejor es programarlas en assembler por que ahi las interrupciones se atienden inmediatamente.
nunca pienses que las preguntas son tontas, los tontos son los que saben la respuesta y no la comparten, todo lo que se de microcontroladores lo aprendi leyendo y rebuscando en la red, e igual que tu no entendia ni el manual del PBP pero con un poco de ingenio se comprende todo. hasta la proxima amigo emilos.
 
Hola a todos !! soy nuevo en este foro :) y tengo una pregunta sobre los led :

Bueno estoy usando el pic 16F84A para hacer una secuencia de luces, y tengo una duda !! Use todo el puerto B para formar una secuencia
de luces. Mi pregunta es: si no solo quisiera conectar un solo led
a cada salida, si quisiera conectar 20 leds en paralelo en cada salida del puerto B,
entonces el problema radicaria en saber cuanta corriente proporciona cada salida
del puerto B del pic!!! y creo que no va a ser la sufiente.

Ahora como podria hacer para que cada led tenga la suficiente corriente que necesite
para billar con toda su intencidad!????

Tendria que usar un transistor como amplificador de corriente o que es lo que deberia hacer ?????

adjunto el diagrama del cto en proteus i el codigo en HEX, para cargar al pic!!

Espero puedan ayudarme !! =D !!
Gracias de antemano!!
:apreton:(y)
 

Adjuntos

  • luces.rar
    79.2 KB · Visitas: 451
yo usaria un integrado ULN2003A sirve para amplificar y te da un 1 A,
ahora el otro problema seria si la fuente soportara ese consumo de corriente, deberias de usar un tranformador que soporte dicha corriente.
Haz un ejemplo conecta 20 led con sus respectivas resistencias, entonces conecta un tranformador de 127volts a 9 o 5 volt a unos 2 Amperes, conecta los led y mide cuanto consume.
no se cuanto consuma un led..pero por ejemplo que cada led consumiera 20mA, entonces como estan en paralelo, multiplica 20mA x 20 = 400mA consumiria aproximadamente...entonces como estas usando el puerto B, son 8 canales, multiplica esos 400mA x 8= 3.2Amperes conusmiria en total, entonces tendrias que usar un tranformador que soportara 4 amperes aproximadamente.
El driver ULN2003A se usaria en este caso...pero a looo mejor se calentaria porque es muy fragil...puedes usar tamb el hermano ULN2803...
 
Última edición:
Tengo un problema con un programa, cuando lo simulo en el proteus a los 8 segundos me salta un error y s e detiene. que errores me puede estar tirando que no me deja seguir probando el circuito ?
 
te aconsejo poner aqui en el foro el archivo pbp y el circuito asi podriamos ver que es lo que esta pasando y darte una mano.
saludosss

Ahi va pa Dario de cordoba:
PHP:
 '****************************************************************
'*  Name    : ALARMA.BAS                                        *
'*  Author  : EMILIANO OCAMPO                                   *
'*  Notice  : Copyright (c) 2009 EBO INC                        *
'*          : All Rights Reserved                               *
'*  Date    : 10/28/2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
 TRISA = 1
 TRISB = %00000111
 key1 var porta.0   ;activacion sonora
 key2 var porta.1   ;activacion silenciosa
 keyoff var porta.2 ;desactivacion
 ctcin var porta.3  ;señal de contacto
 tho var porta.4    ;señal de thouch
 p1 var portb.0     ;sensor puertas
 p2 var portb.1     ;sensor capot
 s1 var portb.2     ;sensor auxiliar
 buzz var portb.3   ;salida de sirena
 luz var portb.4    ;salida luses
 ctcout var portb.5 ;salida corta ignicion
 pto var portb.7    ;salida de piloto
 cnt var byte
 portb = 0
 cnt = 0
 
 inicio:
 on interrupt goto disparo
 intcon = %10010000
 activac:
 if key1 = 1 then armando1
 if key2 = 1 then armando2
 goto activac
 armando1:
 HIGH pto 
 high buzz 
 high luz
 pause 100
 low buzz 
 low luz 
 armada1:
 if p1 = 0 then disparo
 if keyoff = 1 then desarmando 
 goto armada1
 armando2:
 high pto
 high luz
 pause 100
 low luz
 armada2:          
 if p1 = 0 then disparo
 if keyoff = 1 then desarmando
 goto armada2
 desarmando:
 low buzz
 pause 500
 high luz
 high buzz
 pause 100
 low buzz
 pause 100
 high buzz
 pause 100
 low buzz
 pause 2000
 low luz
 low pto
 goto activac
 disable
 disparo:
 high buzz
 if keyoff = 1 then desarmando
 goto disparo
 enable
 end

fijense que me cuentan a ver si lo podemos resumir, de todas formas no esta terminado.
saludos...
 
les tengo un reto, como programarian un control proporcional integral derivativo (PID) en un micro con picbasic pro??? o en su defecto como programarian una integral o derivada???
 
les tengo un reto, como programarian un control proporcional integral derivativo (PID) en un micro con picbasic pro??? o en su defecto como programarian una integral o derivada???

wikipedia me saco un poco la duda... pero decime un proyecto en particular en el que se lo pueda emplar. A mi se me ocurre un sistema de inyeccion electronica en el cual se ajusta el tiempo de inyeccion de acuerdo al valor que tira la sonda lambda, ahi hay una realimentacion, no se si estoy en lo correcto.

saludos.

Quiero hacer un programa en pbp que cuente las rpm de un engranaje y que detecte cuando encuentre donde estan los dientes que faltan. Basicamente tiene que saber el giro en RPMs y saber la posicion del engranaje por los dientes que faltan, el tema es que no se me ocurre como empesar. Espero me puedan dar una mano.
Saludos.

CM22.JPG
 
Última edición:
Que tal veo que ha habido demasiado movimiento espero colaborar ya estoy de vacaciones por parte del estudio y estare presto a lo que necesiten y subire proyectos muy interesantes con pic de la familia 18f en pic basic, espero me dispulpen por no haber respondido algunas de las inquietudes que se les presentaban.

Amigo emilio interesante y aplicable tu proyecto podremos utilizar el sensor de las ruedas del sistema ABS, el sensor de posicion de Ciguieñal CKP o en su defecto el del eje de Levas CAM , el sensor de de velocidad el a transmision VSS lo unico que tendriamos que realizar es el acondicionamiento de señal para que el micro interprete la informacion y la podramos ver en un LCD, hablando de RPM, lo mas facil seria con un Osciloscopio medio la frecuancia en la terminal de transmision de datos del sensor del automovil que se baja a utilizar para poder empezar.

Lo siguiente es realizar el acondicionamiento de señal para visualizar lo que deseamos lo cual seria sencillo ya todos los sensores trabajan a 5VDC omitiendo los actudores que trabajan con tension de la bateria.

he mirato tambien tu codigo de la alarma y podemas hacerlo mas corto con la funcion Select Case pero seria bueno que subas todo lo que necesitas ya que mencionas que no esta terminado.

Amigo Cripty postea lo que desaeas relizar con control DIP y listo se pone interesante
 
Última edición:
Felicidades a mecatrodatos por las explicaciones.Soy un novato en estas cuestiones.
Me gustaría saber, como accionar 2 salidas del 16F84A indistintamente con 2 entradas a pulsador N.A. y otras 2 entradas accionadas con sensores N.A. teniendo prioridad las entradas manuales sobre las automáticas.
Si es necesario puedo aportar esquema.
Un saludo.
 
Que tal veo que ha habido demasiado movimiento espero colaborar ya estoy de vacaciones por parte del estudio y estare presto a lo que necesiten y subire proyectos muy interesantes con pic de la familia 18f en pic basic, espero me dispulpen por no haber respondido algunas de las inquietudes que se les presentaban.

Amigo emilio interesante y aplicable tu proyecto podremos utilizar el sensor de las ruedas del sistema ABS, el sensor de posicion de Ciguieñal CKP o en su defecto el del eje de Levas CAM , el sensor de de velocidad el a transmision VSS lo unico que tendriamos que realizar es el acondicionamiento de señal para que el micro interprete la informacion y la podramos ver en un LCD, hablando de RPM, lo mas facil seria con un Osciloscopio medio la frecuancia en la terminal de transmision de datos del sensor del automovil que se baja a utilizar para poder empezar.

Lo siguiente es realizar el acondicionamiento de señal para visualizar lo que deseamos lo cual seria sencillo ya todos los sensores trabajan a 5VDC omitiendo los actudores que trabajan con tension de la bateria.

he mirato tambien tu codigo de la alarma y podemas hacerlo mas corto con la funcion Select Case pero seria bueno que subas todo lo que necesitas ya que mencionas que no esta terminado.

Amigo Cripty postea lo que desaeas relizar con control DIP y listo se pone interesante

Gracias por responder mecatrodatos. El programa que tengo en la cabeza se tiene que encargar de medir las RPMs y la posicion del engranaje, las rpm las detecta con todos los dientes y la posicion con los dientes faltantes del mismo. Fijate que hay puse una imagen del acondicionador de señal que chorie por la web, a servira ?



pd: lo de la alarma la verdad que no se bien como funciona el tema de los select case, porque en el manual pbp que yo tengo no sale nada.

Saludos
 
Atrás
Arriba