Autor Tema: Subir y bjar modo rapido  (Leído 4201 veces)

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

Desconectado melectro

  • PIC10
  • *
  • Mensajes: 21
Subir y bjar modo rapido
« en: 26 de Junio de 2008, 13:17:48 »
Hola A todos , estoy tratando de hacer un  contador ascendente-descendente (similares a los usados en estacion que controlan la temperatura ) que al mantenes presionado el pulsador sube de a diez unidades Ej. 1-2-3-pulsado 4-10-20-30-etc.y lo mismo bajan.
Si halguien tiene algun ejemplo .

Tengo una lijera idea de como podria ser pero no se como implementarla
Seria algo asi:

inicio
Boton subir en 1
s=s+1
si boton = 1
pause 20
si boton = 1 salta a s=+10
salta a inicio :-/
.
.
.
.
.
si boton bajar en 1
s=s-1
.
.
.
.
salta inicio :-/


Saludos.
Jorge

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Subir y bjar modo rapido
« Respuesta #1 en: 28 de Junio de 2008, 10:36:45 »
En que lenguaje de programacion estas trabajando?
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado melectro

  • PIC10
  • *
  • Mensajes: 21
Re: Subir y bjar modo rapido
« Respuesta #2 en: 28 de Junio de 2008, 19:10:09 »
Hola , gracias por responder ,estoy trabajando con PBP 2.46.
Saludos.
PD el ejemplo es a modo de idea de codigo no es el programa en si.

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Subir y bjar modo rapido
« Respuesta #3 en: 29 de Junio de 2008, 09:44:32 »
Me imagino que es Basic, verdad?, no he programado mucho en basic pero las ideas para programar algo pueden aplicarse en cualquier lenguaje,  estuve revisando tu idea y parece estar bien , solo que debes ajustar los tiempos para que se logre ver como va cambiado el display unos 200 ms entre digitos es suficiente, como piensas visualizar la informacion, usando displays de 7 segmentos o un LCD , esto porque tienes que considerar el tema de refresco.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado melectro

  • PIC10
  • *
  • Mensajes: 21
Re: Subir y bjar modo rapido
« Respuesta #4 en: 30 de Junio de 2008, 14:13:11 »
Aqui copio el programa tal cual pero NO funciona.No logro que salte de 10 en  10 y tampoco de 100 en 100.
Funciona si saco las lineas que uso para pasar de a 10 y 100.Es decir si suma 1 anda bien.
Otro problema es que en la linea PAUSE T1  si da 1000 (1000 MS = 1 segundo ) es un tiempo mayor a casi el doble o mas.....
Agradeceria alguna ayuda .
 



                define LCD_BITS 4
                define LCD_LINES 2
                digit  var word

                M       VAR     BYTE      ' Used to count and specify the case
                W0      var     byte
                M1      var     word
                T3      var     byte
                T       var     word
                B1      var     byte
                T1      var     word
                P       var     word
                ;portb.6 = modo y sube.
                ;portb.5 = baja.
                ;portb.7 = enter.
                ;portb.2 =
                 
            PAUSE 50
            lcdout $fe,1,"Melectro" , $fe,$c0 ,"      08"
            PAUSE 1500
           

M1 = 0
modo1:      lcdout $fe,1,"Modo1  ",#M1,"  MS"
            PAUSE 150
                     
             
            pause 50
                   
            if portb.5 = 0 then call sube
            t = t+1
   
            if portb.5 = 0 and T>10 then call suberap
            if portb.5 = 0 and T>100 then call suberap2
           
         
           
            if portb.6 = 0 then call baja
            if portb.6 = 0 and T>10 then call bajarap
            if portb.6 = 0 and T>100 then call bajarap2
            if portb.7 = 0 then call start 
            goto modo1
            return   
           
sube:       M1 = M1 + 1
            pause 50             
                               
            if M1 > 9999 then M1 = 0           
           
            return
           
baja:       M1 = M1 - 1
            pause 100           
            if M1 > 9999 then M1 = 0
           
            return                       

suberap:    M1 = M1 + 10
            pause 100           
            return

suberap2:   M1 = M1 + 100
            pause 100           
            return           
           
bajarap:    M1 = M1 - 10
            pause 100           
            return           
           
bajarap2:    M1 = M1 - 100
            pause 100         
            return           
start:       
            lcdout $fe,1,"Tiempo = ",#M1," MS "
            pause 100

            Pulsin portb.2,0,B1               
            If B1 <> 0  Then disparo1
             
            goto start           
           
disparo1:   low portb.4   
            lcdout $fe,1,#M1,"  MS"," INICIADOS"
           
            T1 = (M1)*1000
            pause T1
            call dispa
             

           
dispa:     
            high portb.4:high portb.1              ;salida a led y a beeper
             
            pause 1000
            low portb.4 :low portb.1
            goto modo1
            end

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Subir y bjar modo rapido
« Respuesta #5 en: 02 de Julio de 2008, 23:28:10 »
Como te mencioe anteriormente no soy un experto en Basic, pero veo que no declaras la variable T que utilizas en tu comparacion antes de ir a la subrutina suberap, capaz y ahi esta tu error ya que lo que la variable que vas incrementando es t, otra cosa en que estas probando tu programa en algun simulador o ya armaste el circuito.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado melectro

  • PIC10
  • *
  • Mensajes: 21
Re: Subir y bjar modo rapido
« Respuesta #6 en: 03 de Julio de 2008, 11:37:00 »
Hoal , si esta declarada com t = word.
Lo simulo en Proteus .
Saludos.
PD.Tal vez tenga que moverlo al subforo de picbasic no??

Desconectado sander

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 627
Re: Subir y bjar modo rapido
« Respuesta #7 en: 03 de Julio de 2008, 14:28:55 »
Si , veo que la declaras ,pero en el programa que posteaste la declaras con mayuscula y al momento de incrementarla usas una t minuscula
Código: [Seleccionar]
      T       var     word

t = t+1

Acaso en basic no importa como definiste la variable? la verdad no lo se , y si el foro de basic posiblemente consigas mas ayuda.

Saludos
La electrónica es el arte de manipular señales eléctricas que transportan información
Jan Davidse

Visita mi blog
Visita mi canal de youtube

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Subir y bjar modo rapido
« Respuesta #8 en: 03 de Julio de 2008, 15:09:47 »
para nada sander, BASIC es bastante poco exigente con esas cosas. Si la implementación es según el estándar, no tienes que declarar las variables ni su tipo, haces algo así y no pasa ni hostia:

T=10
C=Hola
B=T+C

y en principio el compilador no debe ni chistar, claro que te saldrán gerigonzas, aunque hay implementaciones que te dan warnings y cosas por el estilo. Por eso me gusta el C y el PASCAL, con lo regado que soy sy me dejan hacer esas cosas ni DIOS entendría mis programas.

melectro, has declarado a T y la usas, pero en ninguna parte veo que la inicializas, prueba a inicializarla a ver que pasa.

Saludos
Reinier

Desconectado Nichita

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 86
Re: Subir y bjar modo rapido
« Respuesta #9 en: 06 de Julio de 2008, 00:54:45 »
Aqui copio el programa tal cual pero NO funciona.No logro que salte de 10 en  10 y tampoco de 100 en 100.
Funciona si saco las lineas que uso para pasar de a 10 y 100.Es decir si suma 1 anda bien.
Otro problema es que en la linea PAUSE T1  si da 1000 (1000 MS = 1 segundo ) es un tiempo mayor a casi el doble o mas.....
Agradeceria alguna ayuda .
 



                define LCD_BITS 4
                define LCD_LINES 2
                digit  var word

                M       VAR     BYTE      ' Used to count and specify the case
                W0      var     byte
                M1      var     word
                T3      var     byte
                T       var     word
                B1      var     byte
                T1      var     word
                P       var     word
                ;portb.6 = modo y sube.
                ;portb.5 = baja.
                ;portb.7 = enter.
                ;portb.2 =
                 
            PAUSE 50
            lcdout $fe,1,"Melectro" , $fe,$c0 ,"      08"
            PAUSE 1500
           

M1 = 0
modo1:      lcdout $fe,1,"Modo1  ",#M1,"  MS"
            PAUSE 150
                     
             
            pause 50
                   
            if portb.5 = 0 then call sube
            t = t+1
   
            if portb.5 = 0 and T>10 then call suberap
            if portb.5 = 0 and T>100 then call suberap2
           
         
           
            if portb.6 = 0 then call baja
            if portb.6 = 0 and T>10 then call bajarap
            if portb.6 = 0 and T>100 then call bajarap2
            if portb.7 = 0 then call start 
            goto modo1
            return   
           
sube:       M1 = M1 + 1
            pause 50             
                               
            if M1 > 9999 then M1 = 0           
           
            return
           
baja:       M1 = M1 - 1
            pause 100           
            if M1 > 9999 then M1 = 0
           
            return                       

suberap:    M1 = M1 + 10
            pause 100           
            return

suberap2:   M1 = M1 + 100
            pause 100           
            return           
           
bajarap:    M1 = M1 - 10
            pause 100           
            return           
           
bajarap2:    M1 = M1 - 100
            pause 100         
            return           
start:       
            lcdout $fe,1,"Tiempo = ",#M1," MS "
            pause 100

            Pulsin portb.2,0,B1               
            If B1 <> 0  Then disparo1
             
            goto start           
           
disparo1:   low portb.4   
            lcdout $fe,1,#M1,"  MS"," INICIADOS"
           
            T1 = (M1)*1000
            pause T1
            call dispa
             

           
dispa:     
            high portb.4:high portb.1              ;salida a led y a beeper
             
            pause 1000
            low portb.4 :low portb.1
            goto modo1
            end

Dando una vista rápida, no veo que hayas configurado como entrada los pines RB6, RB7, etc.