Autor Tema: ayuda con programa en microcode studio+  (Leído 8589 veces)

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

Desconectado pipoforos

  • PIC10
  • *
  • Mensajes: 12
ayuda con programa en microcode studio+
« en: 15 de Noviembre de 2007, 11:17:32 »
Hola amigos del foro,, quisiera saber si hay (debe haber) alguna manera de hacer que este programa que adjunto se pueda reducir, no se, obviando algunas cosas q podrian estar de mas o utilizando un metodo mas reducido,, el problema es qe al momento de compilar me sale ocupa mucha memoria del pic 16f877a,, y creo que me esta trayendo problemas a la hora de probarlo....
la idea del programa es la de controlar un intercomunicador, al pin0 del portd esta conectdo un pulsador que he difinico como cuenta,, en el se va a almacenar la cantidad de veces que se ha pulsado que significa el numero de usuario que quiero conectar el intercomunicador por un tiempo de 4seg, luego va a verificar si se encuentra mandando un pulso a un piezo electrico al usuario, si se encuentra activará el swtich conectado el portd.1 y comenzara la comunicacion y en el lcd aparecerá "conectado.." y ccuando cuelgue aparecerá ·fin..adios", y si no, aparecera en el lcd "no disponible"
el codigo es el sgte:
' Conexiones obligatorias a la LCD, no requiere inicializar puertos del PIC.
'       LCD     PIC
'       DB4     PortB.0
'       DB5     PortB.1
'       DB6     PortB.2
'       DB7     PortB.3
'       RS      PortB.4
'       E       PortB.5
'       RW      Ground
'       Vdd     5 volts
'       Vss     Ground
'       Vo      20K potentiometer (or ground)
'       DB0-3   No connect
        DEFINE LCD_DREG PORTB
        DEFINE LCD_DBIT 0
        DEFINE LCD_RSREG PORTB
        DEFINE LCD_RSBIT 4
        DEFINE LCD_EREG PORTB
        DEFINE LCD_EBIT 5
        DEFINE LCD_LINES 4
        led0 var PORTC.0
        led1 var portc.1
        led2 var portc.2
        led3 var portc.3
        led4 var portc.4
        led5 var portc.5
        led6 var portc.6
        led7 var portc.7
        boton var PORTD.0
        contesta var PORTD.1
        i var byte
        j var byte
        m var byte
        p var byte
        aux var byte
        cuenta var byte
        CLEAR
        Pause 500       ' Inicialización de LCD, 0.5 segundos.
'******************************************************
       
com:    lcdouT  $fe, 1   ' Limpia pantalla LCD
        FOR i=0 to 15
        lookup i,["cargando, espere.."],aux
        LCDOUT aux
        pause 200
        next i
       
'*******************************************************
ini:   
        CLEAR
        PORTC=0
        CUENTA=0
        LcdouT  $fe, 1   ' Limpia pantalla LCD
        pause 250
        Lcdout "Presione las bcs"  ' Despliega mensaje
        pause 100
        Lcdout $fe, $C0   ' Salta a segunda línea
        lcdout "para llamar....."
        TRISD.0=1
        TRISD.1=1
        count boton,4000,cuenta
        pause 100
        IF CUENTA=0 THEN
        GOTO INI
        ENDIF       
llamando
        LCDOUT $fe, 1
        pause 250
        lcdout "llamando........"
        pause 100
        lcdout $fe, $C0
        lcdout "....espere......"
     select case cuenta
        case 1
         high led4
         pause 1000
         low led4
         pause 1000
         high led4
         pause 1000
         low led4
         pause 1000
         GOTO contest
        case 2
         high led5
         pause 1000
         low led5
         pause 1000
         high led5
         pause 1000
         low led5
         pause 1000
         GOTO contest
        case 3
         high led6
         pause 1000
         low led6
         pause 1000
         high led6
         pause 1000
         low led6
         pause 1000
         GOTO contest
        case 4
         high led7
         pause 1000
         low led7
         pause 1000
         high led7
         pause 1000
         low led7
         pause 1000
         GOTO contest
     end select
        'pause 3000
contest
     SELECT CASE contesta
        case 0
        lcdout $fe,1
        'pause 250
        lcdout "no disponible..."
        pause 250
        goto ini
        CASE 1
        pause 250
        lcdout $fe,1
        pause 250
        lcdout "conectado......."
        goto conectar
     END SELECT   
conectar
     select case cuenta
        case 1
         high led0
         goto loop
        case 2
         high led1
         goto loop
        case 3
         high led2
         goto loop
        CASE 4
         HIGH led3
         GOTO loop
     end select
loop
        if contesta=1 then
        goto loop
        else
        lcdout $fe,1
        pause 250
        lcdout "fin... adios"
        pause 1000
        goto ini
        endif       
        end

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: ayuda con programa en microcode studio+
« Respuesta #1 en: 15 de Noviembre de 2007, 11:53:12 »
Hola bueno primero que nada bienvenido, el uso de low y high quizas es lo que mas te genera esa perdida de memoria asi como el pause. Podrias quitar los LOW y HIGH y definir tu variable con 1 y 0 por ejemplo led1=1 o Led1=0 y las pausas que sean repetitivas haz una rutina de pausa y mandala llamar. Y nos cuentas que tal
"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 LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: ayuda con programa en microcode studio+
« Respuesta #2 en: 15 de Noviembre de 2007, 12:04:42 »
Hola:

No entiendo a que te refieres con eso de que te sale un mensage que ocupa mucha memoria, lo he compilado y ocupa 1020 words de un total de 8192 words de las que dispone, te falta muchísimo para llenar la memoria.

Puedes depurar un poco el programa en los CASE, en todos en los que utilizas:

         high led5
         pause 1000
         low led5
         pause 1000
         high led5
         pause 1000
         low led5
         pause 1000

Puedes hacer un bucle y usar TOGGLE , para que te evites esas líneas de código.


TOGGLE Pin

Invert the state of the specified Pin. Pin is automatically made an output. Pin may be a constant, 0 - 15, or a variable that contains a number 0 - 15 (e.g. B0) or a pin name (e.g. PORTA.0).

Example

LOW 0 ' Start Pin0 as low
TOGGLE 0 ' Change state of Pin0 to high


Desconectado pipoforos

  • PIC10
  • *
  • Mensajes: 12
Re: ayuda con programa en microcode studio+
« Respuesta #3 en: 15 de Noviembre de 2007, 13:24:04 »
gracias amigo lord por la ayuda,, pero dejo en claro q no sale mensaje de memoria llena, solo que pienso que 1022 palabras es mucho, y por eso queria saber si se podia hacer mas pequeño..
ahh y otra cosa como seria en el caso de proton+, he tratado de hacerlo y no me prende la lcd

Desconectado pipoforos

  • PIC10
  • *
  • Mensajes: 12
Re: ayuda con programa en microcode studio+
« Respuesta #4 en: 15 de Noviembre de 2007, 13:34:01 »
lord lo que pasa es q esas lineas las he puesto xq ahi va un speaker que suena con un periodo de 500ms que sirve como aviso a la otra persona qe lo estan tratando de llamar, si al termino de ese tiempo no activa el sw del portd.1 salta y dice no disponible", entonces como utilizando el toggle puedo ree`mplazarlo??? :-)...

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: ayuda con programa en microcode studio+
« Respuesta #5 en: 15 de Noviembre de 2007, 13:39:50 »
Hola:

El toggle cambia el estado de un pin, es lo mismo que haces con high y low, podrías cambiarlo por:

Low led5
for i=0 to 3
     toggle led5
next i

en ese caso cambiaría el estado del led5 cuatro veces, primero, prende, luego apaga, luego prende y apaga.

Puedes probarlo así estaría un poco más optimizado, aunque tendrías que comilar para ver cuanta memoria ocupa.

Respecto al protón, pon el código para verlo.

Desconectado pipoforos

  • PIC10
  • *
  • Mensajes: 12
Re: ayuda con programa en microcode studio+
« Respuesta #6 en: 15 de Noviembre de 2007, 14:17:59 »
lord solo lo he abierto el mismo archivo desde el pic basic plus y lo he complaido con el proton, no me genera ningun error en la compilacion y el ensamblado lo cual significa q esta bien??? supongo, lo he puesto el hex en el proteus en el mismo circuito y na, sale una especia de aviso como si el tiempo de sincronia entre el pic y el lcd no concordaran...
el xtal es de 4 y device 16f877a

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: ayuda con programa en microcode studio+
« Respuesta #7 en: 15 de Noviembre de 2007, 14:33:08 »
Hola:

Son compiladores diferentes, hay algunas cosas que soporta proton respecto a PBP, pero no todo, mira solamente el encabezado, esto es la declaracion del pic, cristal y unas cuantas variables, no es lo mismo.


Device 18F452
XTAL 20

Declare LCD_TYPE 0
Declare LCD_DTPIN PORTC.0 
Declare LCD_ENPIN PORTC.4
Declare LCD_RSPIN PORTC.5
Declare LCD_INTERFACE 4
Declare LCD_LINES 2

Dim num1  As Byte
Dim num2  As Byte
Dim unid  As Byte
Dim dece  As Byte
Dim tatal As Byte
Dim i     As Byte
Dim Array[10] As Byte



 

anything