Autor Tema: Problema con programa  (Leído 5846 veces)

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

Desconectado mancupic

  • PIC10
  • *
  • Mensajes: 13
Re: Problema con programa
« Respuesta #15 en: 28 de Mayo de 2008, 16:45:47 »
Hola, no se mucho de C, pero por lo visto no es muy diferente a PBP, si no estas apurado... creo que puedo darte una idea... ahora estoy trabajando, pero cuando llegue a casa veo de hacer un diagrama de flujo para simplificar tu programa, de tal manera que puedas hacerlo entrar en la memoria del micro y te sobre espacio para agregarle si queres mas funciones... Ya tengo una idea de como hacerlo, asi que si queres luego te lo explico, por ahora lo unico que te puedo adelantar es que po lo que veo, la diferencia entre una sentencia y la otra es el valor de la frecuencia a emitir, por lo tanto fijate de  poner algo asi:

donde VAR es una variable dinamica:
(O como sea en C )

*--------------------------------------------------------------------------------*
inicio:
    IF (A=0)and(B=0)AND(C=0)AND(D=0)AND(ENT=0) THEN
         Var := 440
    endif
     IF (A=1)AND(B=0)AND(C=0)AND(D=1)AND(ENT=0) THEN
         Var := 262
     endif
     IF (A=1)AND(B=1)AND(C=0)AND(D=1)AND(ENT=0) THEN
         Var := 402
     endif
     call emitir
goto inicio

emitir:
         freqout GPIO.0,1, VAR
Return

*--------------------------------------------------------------------------------*


Como (, freqout GPIO.0,1 , Var) es siempre igual, y lo unico que se modifica es VAR, entonces usa los if los usas solo para modificar el valor de var y no repetir (, freqout GPIO.0,1,var ,)
De esta manera evitas repetir siempre la misma sentencia y no malgastas la memoria del microcontrolador....

Bueno, alfinal creo que te explique todo ahora....

No me dejes con la intriga, contame como te fue...

Saludos! 

Desconectado mancupic

  • PIC10
  • *
  • Mensajes: 13
Re: Problema con programa
« Respuesta #16 en: 28 de Mayo de 2008, 16:48:37 »
  :? Ojo, fijate que lo mio no es el C, una de esas tenes que adaptarlo ,  :-) Pero la ideaq es esa...

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con programa
« Respuesta #17 en: 29 de Mayo de 2008, 20:35:59 »
Nose porque dices que eso es C si es PicBasic.

Por otro lado tu idea fue buena yo lo habia pensado pero no sabia que se podia poner como variable la frecuencia. Bueno hice la modificacion lo probe y sigue superando el limite de la memoria.

Otra cosa es que en proteus a mis circuitos con micros siempre le tengo que colocar el MCLR a 5 V nose como puedo hacer para que sea una entrada como tal.

Gracias por tu ayuda

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problema con programa
« Respuesta #18 en: 29 de Mayo de 2008, 21:18:37 »

Otra cosa es que en proteus a mis circuitos con micros siempre le tengo que colocar el MCLR a 5 V nose como puedo hacer para que sea una entrada como tal.

Gracias por tu ayuda


Pues desactivas el MCLR en el fuse. Y con eso se hara I/O
"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 yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con programa
« Respuesta #19 en: 30 de Mayo de 2008, 12:33:03 »
gracias con eso solucione el problema

Desconectado mancupic

  • PIC10
  • *
  • Mensajes: 13
Re: Problema con programa
« Respuesta #20 en: 30 de Mayo de 2008, 14:43:34 »
 :-/ Bien!
Pero aun no solucionamos el tema de la memoria... Fijate si pedes hacer algo asi:

inicio:
         if gpio = 000111 then  Var = 440
         if gpio = 000011 then  Var = 420
         if gpio = 001111 then  Var = 500
         call emitir
goto inicio

emitir:
         freqout GPIO.0,1, VAR
Return

end

La idea es:
    No ponerle  nombres a los puertos.
    Evitar el uso de las sentencias AND.
    Evitar el uso del endif.
Para:
    Permitirle al compilador, compilar  :D el programa sin usar las librerias de compuertas...
    Lo de evitar el endif, es solo por una cuestion de orden, el compilador sabe que si solo hay una sentencia sedpues del if, la misma se ejecuta dentro de si mismo y no la que le sigue. Cuando usas mas de una sentencia, es necesario usar el endif.

Suerte! :lol:

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con programa
« Respuesta #21 en: 30 de Mayo de 2008, 17:51:08 »
bueno en vista del problema de la memoria opte por solo usar las 7 notas musicales y sus octavas con lo cual hice este programa.

@ DEVICE pic12F675, MCLR_OFF
                ' Master Clear Options (Internal)

TRISIO=%00001000
CMCON=%00000111
ANSEL=%00000000
symbol ENT = GPIO.3
symbol SEL=GPIO.5
A VAR GPIO.1
B VAR GPIO.2
C VAR GPIO.4

FREQ VAR WORD

main:
A=0
B=0
C=0

FREQ = 0

if (A=0)and(B=0)AND(C=0)AND(ENT=0) THEN
FREQ=262 'DO
ENDIF


HIGH a
IF (A=1)AND(B=0)AND(C=0)AND(ENT=0) THEN
FREQ=294 'RE
ENDIF

LOW A
high B
IF (A=0)AND(B=1)AND(C=0)AND(ENT=0) THEN
freq=330 'MI
ENDIF

HIGH A
high b
IF (A=1)AND(B=1)AND(C=0)AND(ENT=0) THEN
freq=349 'FA
ENDIF

LOW A
low B
IF (A=0)AND(B=0)AND(C=1)AND(ENT=0) THEN
freq=392 'SOL
ENDIF

HIGH A
high c
IF (A=1)AND(B=0)AND(C=1)AND(ENT=0) THEN
freq=440 'LA
ENDIF

LOW A
HIGH B

IF (A=0)AND(B=1)AND(C=1)AND(ENT=0) THEN
freq=494 'SI
ENDIF

CALL sonido
GOTO MAIN


sonido:
if sel=0 then
freq=freq*2
endif
while ENT=0
FREQOUT GPIO.0,1,FREQ
WEND
RETURN

el problema es q no me corre en el proteus nose porq parece que es un problema en el 74ls151 que estoy usando.

Desconectado yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con programa
« Respuesta #22 en: 03 de Junio de 2008, 16:29:31 »
Alguien que me ayude no quiero dejar este proyecto a medias.

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Problema con programa
« Respuesta #23 en: 03 de Junio de 2008, 18:37:44 »
porque no nos pones la ventana del debug o la de mensajes del Isis para saber si te manda un warniing o algo y a veces es mejor hacerlo fisicamente que virtual.
"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 yukardo

  • PIC16
  • ***
  • Mensajes: 106
Re: Problema con programa
« Respuesta #24 en: 03 de Junio de 2008, 20:23:25 »
Bueno lo monte fisico y me funciono igual que en el proteus. y bueno adjunto el archivo de proteus que estoy probando.