Autor Tema: Ejemplos en PBP y PROTEUS  (Leído 266838 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplos en PBP y PROTEUS
« Respuesta #150 en: 25 de Enero de 2007, 19:32:53 »
Hola mira esos son tipos de variables que podemos usar los valores son el rango es decir:

si vas a utilizar una variable que solo tome 2 valores puedes usar BIT eso depende de ti.
Si vas a usar un variable que almacene diferentes valores que no pasen de 100 puedes usar una variable BYTE
Si vas a usar una variable que almacena valores mayores a 1000 tendras que usar variable tipo WORD.

En el ejemplo i no se reemplaza se declara Byte porque la usaremos en un FOR que va de 0 a 7 y en tipo byte cabe perfectamente.

Un for es un bucle una instruccion que se repite de m hasta n veces donde m en este caso es 0 y n es 7 es decir esta instruccion se repetira 8 veces contando el cero.

Cuando ponemos HIGH i esto quiere decir que corresponde al indice de i, es decir, empezara en 0 por lo tanto prendera el PORTB.0 espera medio segundo y apaga el PORTB.0 espera medio segundo e incrementa el indice, osea en la siguiente cuenta i tiene un valor de 1 por ende prende el PORTB.1 y asi hasta el 7.

Parte de la sintaxis del HIGH y LOW es que si ponemos un valor de 0 a 7 correponden al PORTB, porque? porque asi lo dispusieron quienes hicierion el programa. para prender cualquier otro puerto es necesario poner PORTX.X donde las x corresponden al puerto y al pin.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Ejemplos en PBP y PROTEUS
« Respuesta #151 en: 25 de Enero de 2007, 19:55:58 »
si ESO YA LO ENTENDI PERO NO SE CUAL ES BIEN EL FIN , NO TENDRIAS ALGUN EJEMPLO ASI YA CEIRRO ESTE TEMA.! MUCHAS GRACIAS!
PICMANIACO!

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplos en PBP y PROTEUS
« Respuesta #152 en: 25 de Enero de 2007, 20:47:27 »
Como cual es el fin??? es un ejemplo de como activar los puertos de un PIC es el clasico ejemplo con el que se empieza, es decir no hay n fin en especial.

Saludos
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado facundo_10

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 179
    • DAVINCIPIC
Re: Ejemplos en PBP y PROTEUS
« Respuesta #153 en: 25 de Enero de 2007, 21:30:44 »
ahora entiendo pero WORD cuando se utiliza?
PICMANIACO!

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Ejemplos en PBP y PROTEUS
« Respuesta #154 en: 25 de Enero de 2007, 21:38:53 »
Hola:

Veamos, un ejemplo sencillo seria el de una variable que necesites que cuente hasta 40

for i = 0 to 40
-
-
-
-
next i

En ese caso i debe ser de tipo byte, porque tomara como un valor maximo 40, pero si por ejemplo vas a hacer el mismo contador que cuente hasta 1000

for i = 0 to 1000
-
-
-
-
next i

la variable i debera ser MAS GRANDE, para eso tienes que declararla de tipo WORD, ya que esta puede hacer que tu variable tome mas valores.

La diferencia entre uno y otro tipo de variable esta dada practicamente por el tamaño que quieres que tenga tu variable, pero tampoco o mas bien no es recomendable que todas tus variables declares de tipo WORD (ya que son las de mayor tamaño en pbp) porque dependiendo del TAMAÑO ocupan espacio en la memoria del microcontrolador.

Espero que te haya quedado claro Facundo  :mrgreen:

Desconectado jorge_gm

  • PIC12
  • **
  • Mensajes: 66
Re: Ejemplos en PBP y PROTEUS
« Respuesta #155 en: 26 de Febrero de 2007, 14:29:02 »
Hola a todos, una felicitacion por su gran capacidad y paciencia para transmitir sus conocimientos a los que menos entendemos de este tema, yo quiero colaborar con este programa, que lo que hace es simular pwm para 3 led (rgb) y generar diferentes colores de acuerdo al valor de las variables, hay que ajustar los tiempos de las pausas para lograr una frecuencia de 50hz por ejemplo para que no se noten parpadeo en los leds pero es minima la modificacion que hay que hacer, en cuanto lo tenga al cien subire las correcciones, por otro lado quisiera preguntar  si alguien me puede ayudar a corregirlo ya que quiero cambiar los valores de tiempo de cada color a travez de la interrupcion (serin)y no logro hacerlo , de momento  solo tengo el serin para modificar el color azul pero no logro cambiar el valor de este. lo de la interrupcion lo copie de algun post que encontre por aqui :mrgreen:, por cierto agrtadesco a todos en este foro ya que he aprendido gracias a ustedes.

    include "modedefs.bas"

'***********configuracion del pic******************************************
 
    @ device  pic12f629, INTRC_OSC, wdt_off, pwrt_on, mclr_off, bod_off, protect_off
    'dispositivo 12f629, ocilador interno,wath dog off, master clear off,
    OPTION_REG=%00000000 ' RESISTENCIAS PULL UP ABILITADAS
    WPU.2=1   'RESISTENCIA PARA GPIO2 ACTIVA
    INTCON.4=1 'INTE - INTERRUPCION POR EL PIN GPIO2 ENABLE
    INTCON.7=1 'GIE - interrupciones generales ABILITADAS
    CMCON = 7 ' Set GP<2:0> to Digital, Disable comparator
    TRISIO = %00001100 ' ENTRADAS GPIO3 Y GPIO2
    Define  INTHAND  _Interrupcion
   

wsave        var byte bank0 system  ' estos registros en banco 0 obligatorio
ssave        var byte bank0 system
psave        var byte bank0 system
azul         var byte bank0 system
verde        var byte bank0 system
rojo         var byte bank0 system


    ac var byte [3]
    sumat var byte
    j var byte
    i var byte
    menor var byte
    indice var byte
   
    gpio=0
    azul =200
    verde=100
    rojo=100
   
   
goto inicio   '***********saltamos el handler de interrupciones******

Interrupcion: '********* Asegurate que este en pagina 0 *************
 
  intcon.7=0 'desabilita interrupciones generales
    serin gpio.2,t2400,["A"],azul

    toggle gpio.5  'solo utilizo este pin para detectar si esta entrando
                    'a la interrupcion
asm
 
      BTFSS intcon,INTF   ; Salta si la interrupción es GPIO2
      RETFIE      ; Interrupción desconocida, regresar
               ; (es un mecanismo de seguridad).
               
    bcf   INTCON , INTF  ; Resetea bandera de interrupcion por gpio2
    bsf INTCON , GIE   ; Activa interrupciones generales
    movf  psave,w      ; restaura
    movwf PCLATH
    swapf ssave,w
    movwf STATUS
    swapf wsave,f
    swapf wsave,w
    retfie
EndAsm
'**************empieza el programa principal*****************   

   inicio:
    gpio.0=1  'ACTIVA LAS SALIDAS 0,1,Y 4 DEL PIC QUE CORRESPONDEN
    gpio.1=1  ' A LOS LEDS AZUL,VERDE, ROJO
    gpio.4=1
   
   
    ac[0]=azul   'asigna el valor de las variables de color al arreglo.
    ac[1]=verde   'da lo mismo asignar directamente los valores al arreglo
    ac[2]=rojo   
   
   sumat=0        ' esta variable guarda el valor de el tiempo de la pausa anterior
   for j =0 to 2               'en esta parte del programa busca el valor del color
      menor=201                'que debe estar menor tiempo encendido, manda la pausa
    for i=0 to 2               'correspòndiente, guarda el valor como tiempo
        if ac< menor  then  'transcurrido cambia el valor de la variable que
            menor=ac        'fue apagada para que en el siguiente ciclo
            indice=i           'sea ignorada y tomada la siguiente menor y asi
         endif                 'sucesivamente hasta que simula pwm diferente
                               'para cada led. en el ciclo for interior se compara
    next i                     'el valor menor y el indice en el que se encuentra
                               'para saber cual sera la pausa y el puert0 a apagar.
                               
     ac[indice]=201
       
        pause (menor-sumat)
        sumat=menor
       
        select case indice
        case 0
        gpio.0 =0
        case 1
        gpio.1 =0
        case 2
        gpio.4 =0
        end select
     next j
        pause 100
         
   goto inicio     
« Última modificación: 26 de Febrero de 2007, 14:35:14 por jorge_gm »

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Ejemplos en PBP y PROTEUS
« Respuesta #156 en: 26 de Febrero de 2007, 14:37:01 »
Hola:

Gracias por el aporte Jorge  :-/

Desconectado jorge_gm

  • PIC12
  • **
  • Mensajes: 66
Re: Ejemplos en PBP y PROTEUS
« Respuesta #157 en: 26 de Febrero de 2007, 21:33:48 »
Es lo menos que puedo hacer Lord ya que como mencione lo poco que se, lo debo a ustedes, y como lo prometido es deuda ya corregi el programa anterior. con las pausas que tengo el pwm para los leds es de 50 hz aprox, tambien agregue un efecto aleatorio para que cambie automaticamente, ahora solo falta agregar mas efectos, pero entendiendo el primero no sera dificil crear otros, tambien  tengo pensado hacer algo de soft en basic.net  para enviar los datos desde la pc en cuanto lo tenga lo pondre a sus manos.

ah se me olvidaba, los valores asignados a las variables de color deben de estar entre 0 y 254 el 255 lo uso para verificar queel flanco de ese color ya fue apagado por lo que no debe de utilizarse.
 
saludos desde Mexico
    include "modedefs.bas"

'***********configuracion del pic******************************************
 
    @ device  pic12f629, INTRC_OSC, wdt_off, pwrt_on, mclr_off, bod_off, protect_off
    'dispositivo 12f629, ocilador interno,wath dog off, master clear off,
    OPTION_REG=%10000000 ' RESISTENCIAS PULL UP DESABILITADAS
    INTCON.4=1 'INTE - INTERRUPCION POR EL PIN GPIO2 ENABLE
    INTCON.7=1 'GIE - interrupciones generales ABILITADAS
    CMCON = 7 ' Set GP<2:0> to Digital, Disable comparator
    TRISIO = %00001100 ' ENTRADAS GPIO3 Y GPIO2
    Define  INTHAND  _Interrupcion
   
 '*********declaracion de variables******************************************
wsave        var byte bank0 system  ' estos registros en banco 0 obligatorio
ssave        var byte bank0 system
psave        var byte bank0 system
azul         var byte bank0 system
verde        var byte bank0 system
rojo         var byte bank0 system


    ac var byte [3]
    arreglo2 var byte [3]
    sumat var byte
    j var byte
    i var byte
    menor var byte
    indice var byte
    tlow var byte
    fx var byte
    n var byte
    m var byte
    l var byte
   
    rnd var word
    fx=0
    gpio=0
   azul =200
    verde=20
    rojo=100
    arreglo2=100
 
    frec con 70
   
goto inicio   '***********saltamos el handler de interrupciones******

Interrupcion: '***********rutina de atencion de interrupciones*******
 
  intcon.7=0 'desabilita interrupciones generales
    serin gpio.2,t2400,["DATA"],azul,verde,rojo,fx 'espera datos por gpio2
    toggle gpio.5  'solo utilizo este pin para detectar si esta entrando
                    'a la interrupcion
asm
               
    bcf   INTCON , INTF  ; Resetea bandera de interrupcion por gpio2
    bsf INTCON , GIE   ; Activa interrupciones generales
    movf  psave,w      ; restaura
    movwf PCLATH
    swapf ssave,w
    movwf STATUS
    swapf wsave,f
    swapf wsave,w
    retfie
EndAsm
'**************empieza el programa principal**************************   

   inicio:
   
 select case fx 
    case 0
    gosub out
    case 1
    gosub fx1
  end select
   
   goto inicio
 '*******incrementa y decrementa aleatoriamente las variables de color********
 fx1 :
       for n=0 to 2 
        random rnd
        while (rnd>32000) and (arreglo2[n]<200)
            'for m=1 to 10
            arreglo2[n]=(arreglo2[n]+1)
            azul=arreglo2[0]
            verde=arreglo2[1]
            rojo=arreglo2 [2]
            gosub retardo
            'next m
        wend       
       
        while (rnd<32000) and (arreglo2[n]>0)
            'for m=1 to 100
            arreglo2[n]=(arreglo2[n]-1)
            azul=arreglo2[0]
            verde=arreglo2[1]
            rojo=arreglo2 [2]
     
            gosub retardo
           ' next m
        wend
       
      next n
     
  return
 
 '*******genera pausa para que el incremento/decremento sea suave************

  retardo:
    for l=0 to 5
    gosub out
    next l
    return
'****************genera pwm para los leds ***********************************   
 out:   
   
    ac[0]=azul
    ac[1]=verde
    ac[2]=rojo
   
    gpio.0=1  'ACTIVA LAS SALIDAS 0,1,Y 4 DEL PIC QUE CORRESPONDEN
    gpio.1=1  ' A LOS LEDS AZUL,VERDE, ROJO
    gpio.4=1
   
   sumat=0        ' esta variable guarda el valor de el tiempo de la pausa anterior
   for j =0 to 2               'en esta parte del programa busca el valor del color
      menor=255                'que debe estar menor tiempo encendido, manda la pausa
    for i=0 to 2               'correspòndiente, marca esta pausa como tiempo
        if ac< menor  then  'transcurrido cambia el valor de la variable que
            menor=ac        'fue apagada para que en el siguiente siclo
            indice=i           'sea ignorada y tomada la siguiente menor y asi
         endif                 'sucesivamente hasta que simula pwm diferente
                               'para cada led. en el ciclo for interior se compara
    next i                     'el valor menor y el indice en el que se encuentra
                               'para saber cual sera la pausa y el puert0 a apagar.
                               'los valores pueden ser de 0 a 254para una frecuencia
     ac[indice]=255            'pwm de 50hz aproximadamente
       
        pauseus((menor-sumat)*frec)
        sumat=menor
       
        select case indice
        case 0
        gpio.0 =0
        case 1
        gpio.1 =0
        case 2
        gpio.4 =0
        end select
     next j
tlow=(254-menor)
pauseus (tlow*frec)
 
  return     
« Última modificación: 26 de Febrero de 2007, 21:40:07 por jorge_gm »

Desconectado dheimosdj

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplos en PBP y PROTEUS
« Respuesta #158 en: 06 de Agosto de 2007, 19:27:42 »
Hola:

Bueno, por el pedido de algunos usuarios, aqui les dejo un ejemplo para un contador en 4 displays multiplezados, este incrementa la cuenta cada ves que se precione el pulsante.

Código: [Seleccionar]
cont var word
unid var byte
dece var byte
cent var byte
mile var byte

TRISB = 0
TRISA.0 = 1
cont=0

inicio:
    if PORTA.0 = 0 then
        cont = cont+1
        PAUSE 200
    ENDIF
    unid = cont dig 0
    PORTB = unid + 16
    PAUSE 5
    dece = cont dig 1
    PORTB = dece + 32
    PAUSE 5
    cent = cont dig 2
    PORTB = cent + 64
    PAUSE 5
    mile = cont dig 3
    PORTB = mile + 128
    PAUSE 5
    GOTO INICIO

HOLA LORDLAFEBRE gracias por los codigos de multiplexacion de led 7 segmentos pero tengo unos problemas, lo hice en el proteus 6.7 pero mucho retardo en los displays y ademas lelga al segundo 1 o 2 y me sale error de proteus:

[SPICE] Error 106 - TRAN:  Timestep too small; time = 0.258446, timestep = 6.93889e-018: trouble with node "#00008"

Y NO PUEDO SEGUIR SIMULANDO.GRACIAS

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplos en PBP y PROTEUS
« Respuesta #159 en: 06 de Agosto de 2007, 19:47:00 »
Ah ese error es comun, bueno al menos mas de 4 usuarios lo hemos tenido pero en la realidad funcionan sin ningun problema. Puedes probarlo y nos cuentas
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado dheimosdj

  • PIC10
  • *
  • Mensajes: 3
Re: Ejemplos en PBP y PROTEUS
« Respuesta #160 en: 08 de Agosto de 2007, 04:46:24 »
Ah ese error es comun, bueno al menos mas de 4 usuarios lo hemos tenido pero en la realidad funcionan sin ningun problema. Puedes probarlo y nos cuentas

Gracias aunque aun no lo intente, sin embargo ya que estoy empezando con algunas cosiilas del picbasic me gustaria q alguien se aportara con un pequeño project hecho en proteus con una multiplexacion de led 7 segmentos usando el 7447 o 74ls48. ya que de tanto buscar encontre codigo pero no me funcionan y si tuviera el proyecto del proteus (archivo DSN) creo q no habria fallas.
GRacias de antemano

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: Ejemplos en PBP y PROTEUS
« Respuesta #161 en: 04 de Enero de 2008, 17:12:41 »
Contribuyo con un circuito que me dio dolores de cabeza.

PIC 12F675
1 Potenciometro conectado a GPIO 0 (AN0)
4 Leds en los puertos GPIO 1, 2, 4, 5 .
De a cuerdo a la posicion del potenciometro se van prendiendo los leds.

Adjunto archivo y simulacion. Probado fisicamente , luego de varios meses que programo un pic.  :(

Saludos
“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado lublackhm

  • PIC10
  • *
  • Mensajes: 1
Re: Ejemplos en PBP y PROTEUS
« Respuesta #162 en: 08 de Enero de 2008, 19:32:27 »
AQUI les dejo, un ejemplo de  un Puente H, con motor de DC, y Tres botones Paro, GiroA,Giro Inverso, conectado a un 16F877, claro con un 84A es igual y menos desperdicio de pines. :mrgreen:

les adjunto EL BAS. Y EL ARCHIVO DE PROTEUS V 6.7 sp3

Hola que tal,  podrias subir el codigo HEX de tu ejemplo, Gracias.

Desconectado Mc Guiver

  • PIC10
  • *
  • Mensajes: 31
Re: Ejemplos en PBP y PROTEUS
« Respuesta #163 en: 20 de Marzo de 2008, 11:55:39 »
 alguien que me de una mano con el comando "pot"

¿Como reemplazo el comando readadc de picaxe en pbp ? ¿tengo que usar un pic con entrada analógica? pues estoy usando un 16f84 y no lo puedo hacer andar. alguien qie me responda mil gracias!!!!!!
abrazo para todos

Daniel de Argentina (Mc Guiver)

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Ejemplos en PBP y PROTEUS
« Respuesta #164 en: 24 de Marzo de 2008, 11:21:58 »
Ah ese error es comun, bueno al menos mas de 4 usuarios lo hemos tenido pero en la realidad funcionan sin ningun problema. Puedes probarlo y nos cuentas

Gracias aunque aun no lo intente, sin embargo ya que estoy empezando con algunas cosiilas del picbasic me gustaria q alguien se aportara con un pequeño project hecho en proteus con una multiplexacion de led 7 segmentos usando el 7447 o 74ls48. ya que de tanto buscar encontre codigo pero no me funcionan y si tuviera el proyecto del proteus (archivo DSN) creo q no habria fallas.
GRacias de antemano

Los ejemplos estan sobre este mismo post, los hizo LordLafebre y estan muy sencillos el circuito funciona aunque segun la version del Proteus te puede dar erroro el display.

Contribuyo con un circuito que me dio dolores de cabeza.

PIC 12F675
1 Potenciometro conectado a GPIO 0 (AN0)
4 Leds en los puertos GPIO 1, 2, 4, 5 .
De a cuerdo a la posicion del potenciometro se van prendiendo los leds.

Adjunto archivo y simulacion. Probado fisicamente , luego de varios meses que programo un pic.  :(

Saludos

Muchas Gracias Vegue. Saludos al Peke


alguien que me de una mano con el comando "pot"

¿Como reemplazo el comando readadc de picaxe en pbp ? ¿tengo que usar un pic con entrada analógica? pues estoy usando un 16f84 y no lo puedo hacer andar. alguien qie me responda mil gracias!!!!!!
abrazo para todos

Daniel de Argentina (Mc Guiver)

El comando POT no te sirve como para leer un ADC, el 16f84 no tiene un ADC te recomiendo el 16F88 ese si trae y ejemplos podras encontrar en el foro del uso del comando ADCIN
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."