TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: morfeus en 10 de Septiembre de 2005, 16:22:00

Título: Contar 10 pulsos y encender led
Publicado por: morfeus en 10 de Septiembre de 2005, 16:22:00
Hola a todos


Tengo una inquietud, quiero contar por ejemplo 15 pulsos en RB0 y una vez contados se encienda un led en RB7, alquien me puede dar una idea o algun codigo de ejemplo.

Saludos
Morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 11 de Septiembre de 2005, 00:04:00
Hola:

quieres contar pulsos generados por ti desde el pic...? o quieres contar pulsosprovenientes de algun circuito al pic....?

Si quieres generar tu los pulsos desde le pic revisa el tema que tu abriste con el titulo EXCELENTE alli ya te pusieron una respuesta o si quieres contar pulsos provenientes desde afuera comentame un poquito mas que es lo que quieres hacer exactamente... que te envia esos pulsos por ejemplo porque podrias utilizar funciones como COUNT ...
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 11 de Septiembre de 2005, 19:49:00
Hola LordLafebre,

Mira lo que yo quiero es contar 10 pulsos mediante un pulsador conectado a RB0 y que unas vez contados se encienda RB7, además quiero que los pulsos que se vayan contando se almacenen en la eeprom para evitar que el conteo empiece de nuevo si por ejemplo quito el voltaje al pic.

Gracias
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 11 de Septiembre de 2005, 20:21:00
Hola:

pues dejame te hago un ejemplo en proteus y mañana en la mañana hora de Ecuador lo cuelgo... ahora estoy un poco ocupado pero mañana prometo pasarte el ejemplo...
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 11 de Septiembre de 2005, 20:59:00
Hola:

Pues no llegue hasta mañana aqui te paso el codigo:

Es una resistencia a VCC y el pulsante a GND entre la resistencia y el pulsante va a RB0, de tal manera que cuando pulsas se produce un cero...

Codigo:
Cont    var byte

TRISB=%00000001
cont=0
PORTB=0

read 0,cont

loop:
    if PORTB.0=0 then
        cont=cont+1
        write 0,cont
        pause 200
        if cont = 10 then
            high 7
            cont=10
        endif
    endif
    goto loop
end


Solo cuenta hasta diez y luego se queda encendido, no me has dicho que quieres encerarlo y si es asi cuando seria...?

Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 13 de Septiembre de 2005, 23:07:00
Hola:

Pues el codigo que te e puesto ya almacena los datos en la eeprom... y con lo de encerar quiero decir que cuando quieres que vuelva a cero el conteo... xq en ese ejemplo solamente vas a poder contar una sola ves hasta 10 y como veras en el codigo cuando el valor excede a 10 le asigno nuevamente 10... osea que si pulsas unas 5 veces, apagas el circuito y lo enciendes tendras que pulsar 5 veces mas para que el led se prenda, pero una ves llegado hasta alli aun asi apagues el circuito una ves que lo vuelvas a conectar el contador va a estar en 10 y el led va a estar prendido... por eso te decia que cuando quieres que el valor del contador retorne a cero para que puedas nuevamente hacer el conteo de 10 pulsaciones para encender el led nuevamente... Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 15 de Septiembre de 2005, 19:13:00
Hola LordLafebre,

A ver si te entiendo, si por ejemplo el conteo va en 7 y apago el pic, cuando lo prenda este va seguir el conteo en 7 hasta llegar a 10 y prende el led cierto?.

La idea es que se almacene en la eeprom el ultimo conteo y cuando se encienda el pic este arranque desde este ultimo cuando termine encienda el led.

Estoy muy agradecido contigo por la ayuda que me has dado.

Saludos

Morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 15 de Septiembre de 2005, 22:49:00
Hola:

Lo que preguntas es cierto.

Ahora lo que no entiendo es si el codigo te sirve o no, o quieres hacer otra cosa...

Esta claro lo que te estoy diciendo...? con tu ultimo comentario me confundiste un poco y no se si es una pregunta... Sonrisa Gigante, pues como decia ese ejemplo ya almacena los datos en la eeprom, en que quieres aplicar este ejemplo o para que.... Sonrisa Gigante

Te sirve esto...? ya esta acabado...? RollEyes
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 18 de Septiembre de 2005, 12:22:00
Hola:

Pana morfeus desde que puse el ejemplo te comente que ya guarda en la eeprom el numero de veces que ha contado, esto no lo he simulado sino ya lo he probado en un protoboard, hice lo siguiente:

Alimente el circuito y pulse 4 veces y desconecte el circuito, le quite la alimentacion y como se registro en la eeprom el valor de 4 lo que hace nuevamente al conectar el circuito es contar 6 pulsos mas que es lo que le falta para llegar a 10 y encender el led, has probado esto ya o no todavia...? pruebalo y comentame que te parece ok? Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 18 de Septiembre de 2005, 14:43:00
Hola amigo,

Pues te comento que monte el circuito pero hay algo que está mal porque cuando lo apago y pulso no sucede nada y lo he revisado una y otra vez. Voy a probarlo de nuevo y te cuento. Perdona la molestia.

Saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 19 de Septiembre de 2005, 22:17:00
Hola:

Que pena contigo pana morfeus, cometi un error mas que grande me acabo de dar cuenta que el codigo que puse arriba no es el que te sirve ese es el primero y el que estaba haciendo las primeras pruebasAvergonzado.... el que te pongo a continuacion es el que te va a servir y por si las dudas este hoy lo probe y lo reprobe y dunciona ok, ahora si no hay pretextos.... ji ji ji Sonrisa Gigante, una disculpa nuevamente...Avergonzado

Codigo:
define OSC 4

Cont    var byte
temp    var byte

TRISB=%00000001
PORTB=0

eeprom 0,[0]

read 0,temp

if temp=0 then grabar
read 1,cont
if cont >= 9 then
    gosub EncenderLED
endif

loop:
    if PORTB.0=0 then
        cont=cont+1
        write 1,cont
        pause 200
        if cont >= 9 then
            gosub EncenderLED
        endif
    endif
    goto loop

grabar:
    write 0,1
    write 1,0
    goto loop  

EncenderLED:
            high 7
            cont=9
            return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 21 de Septiembre de 2005, 18:47:00
Hola amigo,

Disculpame por no haberte respondido antes pero he estado ocupado, voy a montar el circuito para probralo.

De nuevo muchas gracias por tu valiosa ayuda.

Saludos

Morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 21 de Septiembre de 2005, 22:57:00
Hola:

solo tendrias que poner un or entre el puerto que ya tienes y el que quieres y cuando activas el puerto B7 tambien tendrias que activat el B6...

Algo asi:

"---------------------------------------------------
TRISB=%00000011

"---------------------------------------------------
if (PORTB.0=0)OR(PORTB.1=0) then
        cont=cont+1
        write 1,cont
        pause 200
        if cont >= 9 then
            gosub EncenderLED
        endif
    endif

"---------------------------------------------------
EncenderLED:
            high 7
            high 6
            cont=9
            return

Eso es lo que tendrias que cambiar, nada mas.

Una pregunta solo por simple curiosidad.... en que estas utilizando este codigo...? o pra hacer que...? Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 09:34:00
Hola:

Que bien, entonces lo que puse anteriormente no sirve, lo que tienes que hacer es declarar tres variables mas y hacer lo mismo pero que cuenten hasta los numeros que necesitas, recuerda tambien aumentar la posicion en la eeprom, intenta hacerlo ahora tu, y si tienes algun inconveniente, postea el codigo de lo que has hecho para ayudarte.... Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 10:04:00
Hola:

A ver vamos con lo de la eeprom esta parte no la cambies eeprom 0,[0] esto te sirve para saber si es la primera ves que se esta ejecutando el programa, lo de la eeprom si revisas la ayuda tienes que dice lo siguiente con respecto a esa funcion:

EEPROM {Location,}[Constant{,Constant...}]
" Store 10, at location 5
EEPROM 5,[10]

el primer parametro es la localizacion de la eeprom y el segundo el valor que deseas guardar en la misma posicion... esto te puede ayudar mas para que puedas hacer el codigo, trata de hacer el programa en base a la estructura que puse, si te fijas bien no es mucho lo que tienes que cambiar o mejor dicho añadir, lo que me gustaria es que tu lo intentes para que veas que no es tan complicado... Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 10:28:00
A ver si me aproximo... me disculpas si lo he hecho mal.

define OSC 4

Cont    var byte
temp    var byte

Cont1   var byte
temp1   var byte


TRISB=%00000011
PORTB=0

eeprom 0,[0]
eeprom 1,[1]


read 1,temp1
read 0,temp


if temp1=0 then grabar1
read 1,cont1
if cont >= 20 then
    gosub EncenderLED2
endif


if temp=0 then grabar
read 1,cont
if cont >= 9 then
    gosub EncenderLED
endif


loop1:
    if PORTB.1=0 then
        cont1=cont1+1
        write 1,cont1
        pause 200
        if cont >= 20 then
            gosub EncenderLED2
        endif
    endif
    goto loop1



loop:
    if PORTB.0=0 then
        cont=cont+1
        write 1,cont
        pause 200
        if cont >= 9 then
            gosub EncenderLED
        endif
    endif
    goto loop





grabar1:
    write 1,1
    write 1,1
    goto loop  


grabar:
    write 0,1
    write 1,0
    goto loop

EncenderLED2:
            high 6
            cont=20
            return
   

EncenderLED:
            high 7
            cont=9
            return

end
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 10:57:00
Hola:

perdon por hacer esta pregunta un poco tarde, para que quieres tener varios pulsantes si vas a hacer un conteo de 0-60, por ejemplo lo puedes hacer solo con una esntrada y con la misma controlar los 4 leds..., salvo que necesites las 4 entradas...
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 11:59:00
Hola,

Sabes que me gustaria trabajar con las cuatro entradas y las cuatro salidas a ver tu que opinas.

Muchas gracias

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 13:34:00
Hola:

Antes de continuar vamos aclarando algunas cosas...

Ese algoritmo, me refiero al que estamos haciendo funciona bien para un solo pulsador, ya que como has visto y probado funciona bien, si quieres tener dos pulsante este mismo codigo no te serviria aun si aumentaras las partes para el pulsador en RB1 y el led en RB6, me explico: si tu empiezas a pulsar en RB1 este encendera el led en RB6 pero no el que esta en Rb7 ya que cuenta asta 20 y enciende el led en RB6, xq ningun momento estamos preguntando para sea 10 (me refiero al mismo pulsante de RB1) si quisieras hacer con varios pulsantes habria que cambiar en algo el algoritmo (no lo veo dificil), pero si quieres utilizar un mismo pulsante para que controle los pines RB7, RB6, RB5, RB4 se lo puede hacer con la misma base del algoritmo, solo habria que añadir unas cosillas....

Sea cual sea tu decision hasmela saber no importa cual elijas, escoje la que te sea mas factible y la que necesites, con eso estamos seguros de que lo que vamos a hacer nos va a servir, podemos hacer el algoritmo los dos juntos de poco a poco para que cojas el ritmo con esto de la eeprom, es importante que escribamos comentarios al lado de cada instruccion para que entendamos mutuamente que es lo que queremos hacer...!(yo lo voy  a hacer ahora)... que te parece...?
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 14:32:00
Hola:

aha, si las cosas son asi podemos hacer algo un poco mejor y mas "vistoso", para saber exactamente cuandos sellos llevas hechos podemos visualizar el conteo exacto en un LCD y asi no tendras que estar encendiendo leds, que opinas...? como es una produccion de sellos y me imagino que querras conectar mas maquinar no deberia importar cuanto cuente cada una de estas, sino me imagino que lo que debe interesar es el total, cierto? si es asi entonces necesitas el mismo algoritmo que te di la primera ves y solo preguntar con un OR que pin se activo, con esto harias un conteo general de las maquina, pero no llevarias el conteo independiente de cada maquina.

Que dices lo hacemos con un LCD...?

Por cierto que pic estas utilizando?
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 15:10:00
Hola LordLafebre,

Lo del LCD me parece muy bueno pero hay un detalle, yo necesito el led en el puerto porque cuando este se encienda que es cuando ha contado por ejemplo los 10 pulsos me active un rele y detenga la estampadora de la maquinita, en ese momento yo reviso los sellos y puedo continuar contando otros 10 sellos.

Me entiendes?, esta muy buena tu idea sobre el LCD pero si necesito lo de los leds si pudièramos ver los pulsos contados para cada salida en el LCD seria formidable, que opinas?.

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 15:14:00
Hola LordLafebre,

Disculpa pero no se porque se fueron 3 mensajes repetidos.

Saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 15:42:00
Se me olvidaba decirte que puedo utilizar un PIC16F628 o un PIC16F876.


Saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 15:59:00
Hola:

No hay problema, cuantas maquinas quieres tener, que pic utilizas...?

Quieres que cada maquina cuente independientemente la produccion...? eso es lo que entiendo.

y si dices que cada 10 pulsos paras la produccion para que quieres contar mas de 10...?
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 16:16:00
Hola,

Voy a manejar 4 maquinitas, el pic seria 16f628, quiero que cada maquinita cuente de forma independiente, lo del conteo es para que cuando llegue por ej a 10 encienda el led y pare el motor esos es todo ya el circuito de potencia lo diseño.

Los otros puertos los configuro como te dije en el mensaje anterior.

saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Septiembre de 2005, 16:23:00
Hola:

Pero el 16F628 no te alcanza. para el LCD necesitas 6 pines, 4 entradas y 4 salidas, mejor utiliza el 16f876... ahora en lo que resta del dia ya no te ofresco ayudar, pero si mañana...
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 22 de Septiembre de 2005, 18:46:00
Hola,

Estoy de acuerdo utilicemos entonces el 16f876.


Muchas gracias

morfeus





Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 23 de Septiembre de 2005, 13:29:00
Hola:

Bueno no he encontrado mi PIC 16F876 por lo que yo lo voy a hacer con un 16F871...pero el codigo te sirve igual porque voy a utilizar el puerto B y C, dejame me libro un poco de cosas que me quedan pendientes y hago el esquema y lo cuelgo aqui para hacer lo mismo los dos, y el codigo funcione ok...!
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 23 de Septiembre de 2005, 14:58:00
Hola,

Perfecto hagàmoslo de esa manera.

Saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 11:48:00
Hola:

Aqui esta el esquema, ya lo e armado en el proto para ir haciendo las pruebas, hazme saber cuando lo tengas armado...

Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 26 de Septiembre de 2005, 12:18:00
Hola de nuevo Lord,

Listo ya tengo armado el circuito en el board.



Saludos

morfeusVacilando
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 12:26:00
Hola:

Bien ahora prueba este codigo para que veas si todo funciona bien:

Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4        

TRISC=%00001111

pause 250

LCDOUT $FE,1,"  LCD INICIADO"
inicio:
    if PORTC.0=0 then
        high PORTC.4
    else
        low PORTC.4
    endif  
    if PORTC.1=0 then
        high PORTC.5
    else
        low PORTC.5
    endif  
    if PORTC.2=0 then
        high PORTC.6
    else
        low PORTC.6
    endif  
    if PORTC.3=0 then
        high PORTC.7
    else
        low PORTC.7
    endif  
    goto inicio
end
 

Lo que hace es mostrar un mensaje en el LCD, y cuando pulses un boton se enciende un led, diferentes botones - diferentes leds.

Con esto estamos seguros de que el circuito funciona ok... Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 26 de Septiembre de 2005, 12:43:00
Hola Lord,


Perfecto, funciona OK.
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 12:52:00
Hola:

Bien, ahora prueba el programa anterior que hicimos, y cuentame como podrias hacer para el que necesitas, deme las ideas y yo te ayudo...
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 26 de Septiembre de 2005, 12:59:00
Hola,

Bueno, voy a quemar neuronas y luego pongo el codigo.

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 13:02:00
ok, me parece bien, mientras tanto voy a seguir probando yo...!
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 26 de Septiembre de 2005, 15:20:00
Hola,

A ver como te parece, inicialmente para RC0, RC1 claro que no he puesto nada del LCD.

morfeus


define OSC 4

Cont    var byte   "VARIABLES PARA RC0
temp    var byte   "VARIABLES PARA RC0

cont1   var byte   "VARIABLES PARA RC1
temp1   var byte   "VARIABLES PARA RC1



TRISC=%00000011      "CONFIGURO RC0,RC1 COMO ENTRADAS
PORTC=0

eeprom 0,[0]

read 0,temp


if temp=0 then grabar
read 1,cont
if cont >= 9 then
    gosub EncenderLED
endif



if temp1=0 then grabar
read 1,cont1
if cont1 >= 20 then
    gosub EncenderLED2
endif

loop:
    if PORTC.0=0 then
        cont=cont+1
        write 1,cont
        pause 200
        if cont >= 9 then
            gosub EncenderLED
        endif
    endif
   


    if PORTC.1=0 then
        cont1=cont1+1
        write 1,cont1
        pause 200
        if cont1 >= 20 then
            gosub EncenderLED2
        endif
    endif
    goto loop

grabar:
    write 0,1
    write 1,0
    goto loop  

EncenderLED:
            high 7
            cont=9
            return

EncenderLED2:
            high 6
            cont=20
            return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 16:24:00
Hola:

Pues mira:

La variable temp la cree para saber si cuando arranca el micro es la primera ves que esta ejecutando la accion de ser asi asigna a la misma posicion de memoria (0) el valor de 1 para en un futuro indicar que el programa ya se a ejecutado y que la proxima ves el contador empiece desde el valor en el que quedo, por lo que temp1 creo que estaria demas a parte de que estas pregunando si es = 0 y temp1 nunca le hemos asignado un valor... trata de hacer el mismo programa solo con temp y una sola subrutina grabar, alli mismo grava los valores iniciales en la eeprom osea 0 porque es desde ese valor que vamos a empezar...
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 18:14:00
Hola:

Gracias por los elojios pero yo tambien soy principiante, y no trates de aprender de memoria el codigo sino mas bien de entender que es lo que hace...! lo probaste ya?
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 26 de Septiembre de 2005, 19:00:00
Tienes toda la razon sobre "no aprender de memoria" debo entender muy bien que hace cada linea.


morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 26 de Septiembre de 2005, 21:57:00
Hola Lord,

Pues te comento que logre en parte agregar la linea del codigo para el #03 esta salida la configure para 30 pulsos el cual me enciende el RC5 pero una vez se visualiza el 30 si sigo pulsando sigue 31,32,33 etc, porque sucede esto?.

Con el #04 lo intente pero no me funciona bien.

Este es el codigo que llevo hasta ahora.

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4        
define OSC 4

Cont     var byte
Cont1     var byte
Cont2    var byte
Cont4    var byte
temp     var byte

TRISC=%00001111
PORTC=0

pause 250

LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

eeprom 0,[0]

read 0,temp

if temp=0 then grabar

read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4


lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$C10,dec3 Cont4


if cont >= 10 then
    gosub EncenderLED
endif
if cont1 >= 20 then
    gosub EncenderLED1
endif
if cont2 >= 30 then
    gosub EncenderLED2
endif
if Cont4 >= 40 then
    gosub EncenderLED3
endif


loop:
    if PORTC.0=0 then
        cont=cont+1
        write 1,cont
        if cont >= 10 then
            gosub EncenderLED
        endif
        lcdout $FE,$C0,dec3 cont
        pause 200
    endif
     
    if PORTC.1=0 then
        cont1=cont1+1
        write 2,cont1
        if cont1 >= 20 then
            gosub EncenderLED1
        endif
        lcdout $FE,$C4,dec3 cont1
        pause 200
    endif
   
    if PORTC.2=0 then
        cont2=cont2+1
        write 3,cont2
        if cont2 >= 30 then
            gosub EncenderLED2
        endif
        lcdout $FE,$C8,dec3 cont2
        pause 200
    endif
   
    if PORTC.3=0 then
        Cont4=Cont4+1
        write 4,Cont4
        if Cont4 >= 40 then
            gosub EncenderLED3
        endif
        lcdout $FE,$C10,dec3 Cont4
        pause 200
    endif
   
         
    goto loop

grabar:
    cont=0:cont1=0:cont2=0:Cont4=0
    write 0,1
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    goto loop
   
   
EncenderLED:
    high PORTC.7
    cont=10
    return
EncenderLED1:
    high PORTC.6
    cont1=20
    return
   
EncenderLED2:
    high PORTC.5
    cont1=30
    return
   
EncenderLED3:
    high PORTC.4
    Cont4=30
    return
   

end


Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 23:05:00
Hola:

La primera falla esta aqui:

Codigo:
EncenderLED2:
    high PORTC.5
    cont1=30
    return


sigue contando mas de 30 porque no le estas asignando a la variable correcta, tu estas utilizando cont1 cuando deveria ser cont2

Codigo:
EncenderLED2:
    high PORTC.5
    cont2=30
    return


La otra tienes dos pequeños problemas:

lcdout $FE,$C10,dec3 Cont4

esta en esta parte, te comento que el simbolo $ se refiere a numeros hexadecimales y en Hexadecimal no existe el numero C10... la numeracion se maneja asi en hex:

0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F

por lo que corresponderia a $CC que es cuatro espacios mas que $C8 que es en donde imprime el valor anterior.

lcdout $FE,$CC,dec3 Cont4

asi quedaria.

la otra es que debes contar hasta 40 y estabas contando hasta 30

Codigo:
EncenderLED3:
    high PORTC.4
    Cont4=30
    return


por lo que tienes que hacer solamente que cuente hasta 40 y listo:

Codigo:
EncenderLED3:
    high PORTC.4
    Cont4=40
    return


Ahora has los cambio como te lo he mensionado y cuentame como te va....! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 23:33:00
Hola:

Aqui te pongo el programa tratando de describir que es lo que hace cada parte, si no entiendes algo o esta confuso hazmelo saber para aclarartelo....

Codigo:
"Contador de 10,20,30,40 pulsos con señalizacion en
"LCD y leds
"Codigo realizado por:
"MORFEUS - Colombia
"Giovanni Lafebre (LordLafebre) - Cuenca - Ecuador

"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
"----DEFINICION DEL VALOR DE OSCILADOR A UTILIZAR
define OSC 4

"---------VARIABLES UTILIZADAS
Cont var byte "VARIABLE PARA EL 1º CONTEO
Cont1 var byte"VARIABLE PARA EL 2º CONTEO
Cont2 var byte "VARIABLE PARA EL 3º CONTEO
Cont4 var byte "VARIABLE PARA EL 4º CONTEO
temp var byte "VARIABLE PARA ALMACENAR DATO EN LA EEPROM Y SABER SI EL
"PROGRAMA SE ESTA EJECUTANDO LA PRIMERA VES

"----CONFIGURACION DEL PUERTO C 4 PRIMEROS BITS COMO ENTRADA LOS 4
"ULTIMOS COMO SALIDA
TRISC=%00001111

"TIEMPO DE ESPERA PARA EL LCD
pause 250

"mensaje para mostrar el estado de los 4 pulsadores
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

"se asigna 0 a la primera posicion de la eeprom(0) sirve para indicar que nunca
"se ha ejecutado este programa
eeprom 0,[0]

"carga el valor de la eeprom de la direccion 0 en la variable temp
read 0,temp

"si el programa nunca ha sido ejecutado salta a la subrutina grabar
if temp=0 then grabar

"lee los estados de la posicion de memoria para saber los valores
"de los contadores
read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

"muestra en el lcd los valores de las variables
lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4

"condicional para saber si ha contado 10 veces
if cont >= 10 then
gosub EncenderLED
endif
"condicional para saber si ha contado 20 veces
if cont1 >= 20 then
gosub EncenderLED1
endif
"condicional para saber si ha contado 30 veces
if cont2 >= 30 then
gosub EncenderLED2
endif
"condicional para saber si ha contado 40 veces
if Cont4 >= 40 then
gosub EncenderLED3
endif
"si estas condiciones se cumplen salta a cada subrutina descrita


"programa principal
loop:
"todos los siguientes condicionales funcionan de la misma manera
"pero con diferentes pines y variables, pero el concepto es el mismo
"--------------------------------------------------------------------
"si el pulsante en C0 ha sido presionado
    if PORTC.0=0 then
"incrementa al contador en 1    
        cont=cont+1
"almacema en la posicion de memoria el valor actual de cont
        write 1,cont
"si cont iguala o supera a 10(que indicaria que el conteo se ha cumplido)
"entonces salta a la subrrutina que enciende el led para mostrar que el
"conteo se ha cumplido
        if cont >= 10 then
            gosub EncenderLED
        endif
"muestra en el display el valor actual de cont, permitiendo ver el conteo
"exacto, es decir el numero de veces que se a pulsado el boton
        lcdout $FE,$C0,dec3 cont
"tiempo de antirrebote de tecla, para que el conteo no se haga de una manera
"muy rapida
        pause 200
    endif
"--------------------------------------------------------------------
"todos los demas condicionales hacen la misma funcion
"--------------------------------------------------------------------
    if PORTC.1=0 then
        cont1=cont1+1
        write 2,cont1
        if cont1 >= 20 then
            gosub EncenderLED1
        endif
        lcdout $FE,$C4,dec3 cont1
        pause 200
    endif

    if PORTC.2=0 then
        cont2=cont2+1
        write 3,cont2
        if cont2 >= 30 then
            gosub EncenderLED2
        endif
        lcdout $FE,$C8,dec3 cont2
        pause 200
    endif

    if PORTC.3=0 then
        Cont4=Cont4+1
        write 4,Cont4
        if Cont4 >= 40 then
            gosub EncenderLED3
        endif
        lcdout $FE,$CC,dec3 Cont4
        pause 200
    endif
goto loop
"-------------------------------------------------------

"subrutina para asignar el valor inicial a la eeprom(en este caso se
"inicia desde 0)
grabar:
"enceramos todos los contadores
    cont=0:cont1=0:cont2=0:Cont4=0
    write 0,1
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    goto loop

"estas subrrutinas son para encender los leds y dejarlos encendidos en caso
"de que el conteo ha llegado a su final para cada caso
"asi mismo se asigna el valor maximo de conteo por ejemplo 10 para que en los
"condicionales donde se pregunta if cont1 >= 10 then salten a la subrutina
"adecuada y mantenga encendido el led
EncenderLED:
    high PORTC.7
    cont=10
    lcdout $FE,$C0,dec3 cont    
    return

EncenderLED1:
    high PORTC.6
    cont1=20
    lcdout $FE,$C4,dec3 cont1
    return

EncenderLED2:
    high PORTC.5
    cont2=30
    lcdout $FE,$C8,dec3 cont2
    return

EncenderLED3:
    high PORTC.4
    Cont4=40
    lcdout $FE,$CC,dec3 cont4
    return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 26 de Septiembre de 2005, 23:59:00
Hola:

y como imaginaba el simulador no sirve con la eeprom pero con lo demas si, fue de mucha ayuda...!



Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 27 de Septiembre de 2005, 00:33:00
Hola:

y aqui una fotito del circuito funcionando OK...!

Título: RE: Contar 10 pulsos y encender led
Publicado por: doppel en 27 de Septiembre de 2005, 01:21:00
Hola LORDlafebre! y morfeus!

impecable explicacion y ejemplos!! FELICITACIONES!!RebotadoRebotado


SALUDOS

Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 27 de Septiembre de 2005, 10:16:00
Hola:

Solo una cosa a parte de esto que te queria comentar desde una cosa que lei en unos de tus posts...

Primero no es que preguntes estupideces de hecho es la unica forma de aprender : "preguntando" o almenos eso creo yo. y no te trates de tonto a ti mismo... recuerda que somos humanos y cometemos errores creo que a todos nos pasa ademas recuerda que nadie nace sabiendo, es de los errores de donde se aprende...

Suerte con el codigo...! Sonrisa Gigante

Giovanni Lafebre.
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 27 de Septiembre de 2005, 18:41:00
Hola Lord,

Pues es excelente el codigo funciona de maravilla, muchas gracias por tu ayuda y recibe de mi parte un gran saludo. A proposito, he estado haciendo el codigo para un cargador de baterias "inteligente" para niquel metal cuando tenga el codigo bien estructurado lo subo para que lo veas y me des tu valiosa opinion.

La idea es un cargador que detecte cuando la bateria este cargada y corte la corriente para que no se sobrecargue, ademas le pienso colocar otras cositas que tengo en mente.


Un gran abrazo

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 27 de Septiembre de 2005, 18:47:00
Hola:

Felicidades... me alegra que el codigo te sirva, por lo que veo esto es todo lo que quieres hacer...! entonces creo que es caso cerrado...! Rebotado

Por lo del cargador de baterias suena bien... cuando quieras puedes abrir un nuevo hilo con ese tema para no mezclar las cosas y asi la demas gente tambien pueda ver y que le sirvan tus aportes...! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 27 de Septiembre de 2005, 20:43:00
Hola Lord,

Pues creo que si podemos decir que es caso cerrado, estoy en la tarea de habilitar un pulsador y 1 led para borrar la memoria y seria asi:

Para borrar los datos en la memoria pongo un pulsador conectado a negativo y en RB7 con una resistencia de 10k conectada a positivo, el led lo conecto en RB6 y para hacer el borrado oprimo el pulsador antes de encender el circuito, lo enciendo y para indicar que  fue un exito hago destellar el led por un segundo.

La idea es que cuando el RB7 reciba un pulso negativo borre la memoria.

Como te parece ?.

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 27 de Septiembre de 2005, 21:10:00
Hola:

esta bien pero eso tienes que hacerlo con el circuito encendido, y lo unico que tienes que hacer es preguntar el estado del pin que estaria conectado al pulsante y dentro de ese condicional haces que salte a la subrrutina gravar...!

Cuentame como te va... ok?
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 27 de Septiembre de 2005, 22:28:00
Hola Lord,

Le adicione al codigo el boton para borrar la eeprom, oprimes el pulsador con el circuito apagado y al encenderlo y soltar el pulsador la memoria se pone en cero, que otra forma hay para poder borrar la eprom con el pulsador?.



"Contador de 10,20,30,40 pulsos con señalizacion en
"LCD y leds
"Codigo realizado por:
"MORFEUS - Colombia
"Giovanni Lafebre (LordLafebre) - Cuenca - Ecuador

"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4
"----DEFINICION DEL VALOR DE OSCILADOR A UTILIZAR
define OSC 4

"---------VARIABLES UTILIZADAS
Cont var byte "VARIABLE PARA EL 1º CONTEO
Cont1 var byte"VARIABLE PARA EL 2º CONTEO
Cont2 var byte "VARIABLE PARA EL 3º CONTEO
Cont4 var byte "VARIABLE PARA EL 4º CONTEO
temp var byte "VARIABLE PARA ALMACENAR DATO EN LA EEPROM Y SABER SI EL
              "PROGRAMA SE ESTA EJECUTANDO LA PRIMERA VES
             

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" ESTE BLOQUE SE ENCARGA DE BORRAR LOS VALORES RETENIDOS EN LA    ""
" EEPROM, PARA INICIAR DE NUEVO EL CONTEO EN LAS ENTRADAS SE          ""
" OPRIME EL PULSADOR CON EL CIRCUITO APAGADO Y UNA VEZ ENCENDIDO""
" AL SOLTAR EL PULSADOR LA MEMORIA ESTARA EN CER0.                             ""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
                                           
LED   VAR PORTB.6  " LED INDICADOR
borra var PORTB.7  " PULSADOR CONECTADO A GND
low led            " LED=OFF
   
    if borra=0 then " SI PULSADOR ES PRESIONADO BORRA LA MEMORIA
        write 1,0
        write 2,0
        write 3,0
        write 4,0
        high led     " LED = ON
        pause 1000   "
        low led      " LED=OFF
        endif        "
       
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
       
"----CONFIGURACION DEL PUERTO C 4 PRIMEROS BITS COMO ENTRADA LOS 4
"ULTIMOS COMO SALIDA

TRISC=%00001111

"TIEMPO DE ESPERA PARA EL LCD
pause 250


"mensaje para mostrar el estado de los 4 pulsadores
LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

"se asigna 0 a la primera posicion de la eeprom(0) sirve para indicar que nunca
"se ha ejecutado este programa
eeprom 0,[0]

"carga el valor de la eeprom de la direccion 0 en la variable temp
read 0,temp

"si el programa nunca ha sido ejecutado salta a la subrutina grabar
if temp=0 then grabar

"lee los estados de la posicion de memoria para saber los valores
"de los contadores
read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

"muestra en el lcd los valores de las variables
lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4

"condicional para saber si ha contado 10 veces
if cont >= 10 then
gosub EncenderLED
endif
"condicional para saber si ha contado 20 veces
if cont1 >= 20 then
gosub EncenderLED1
endif
"condicional para saber si ha contado 30 veces
if cont2 >= 30 then
gosub EncenderLED2
endif
"condicional para saber si ha contado 40 veces
if Cont4 >= 40 then
gosub EncenderLED3
endif
"si estas condiciones se cumplen salta a cada subrutina descrita


"programa principal
loop:
"todos los siguientes condicionales funcionan de la misma manera
"pero con diferentes pines y variables, pero el concepto es el mismo
"--------------------------------------------------------------------
"si el pulsante en C0 ha sido presionado
    if PORTC.0=0 then
"incrementa al contador en 1    
        cont=cont+1
"almacema en la posicion de memoria el valor actual de cont
        write 1,cont
"si cont iguala o supera a 10(que indicaria que el conteo se ha cumplido)
"entonces salta a la subrrutina que enciende el led para mostrar que el
"conteo se ha cumplido
        if cont >= 10 then
            gosub EncenderLED
        endif
"muestra en el display el valor actual de cont, permitiendo ver el conteo
"exacto, es decir el numero de veces que se a pulsado el boton
        lcdout $FE,$C0,dec3 cont
"tiempo de antirrebote de tecla, para que el conteo no se haga de una manera
"muy rapida
        pause 200
    endif
"--------------------------------------------------------------------
"todos los demas condicionales hacen la misma funcion
"--------------------------------------------------------------------
    if PORTC.1=0 then
        cont1=cont1+1
        write 2,cont1
        if cont1 >= 20 then
            gosub EncenderLED1
        endif
        lcdout $FE,$C4,dec3 cont1
        pause 200
    endif

    if PORTC.2=0 then
        cont2=cont2+1
        write 3,cont2
        if cont2 >= 30 then
            gosub EncenderLED2
        endif
        lcdout $FE,$C8,dec3 cont2
        pause 200
    endif

    if PORTC.3=0 then
        Cont4=Cont4+1
        write 4,Cont4
        if Cont4 >= 40 then
            gosub EncenderLED3
        endif
        lcdout $FE,$CC,dec3 Cont4
        pause 200
    endif
goto loop
"-------------------------------------------------------

"subrutina para asignar el valor inicial a la eeprom(en este caso se
"inicia desde 0)
grabar:
"enceramos todos los contadores
    cont=0:cont1=0:cont2=0:Cont4=0
    write 0,1
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    goto loop

"estas subrrutinas son para encender los leds y dejarlos encendidos en caso
"de que el conteo ha llegado a su final para cada caso
"asi mismo se asigna el valor maximo de conteo por ejemplo 10 para que en los
"condicionales donde se pregunta if cont1 >= 10 then salten a la subrutina
"adecuada y mantenga encendido el led
EncenderLED:
    high PORTC.7
    cont=10
    lcdout $FE,$C0,dec3 cont    
    return

EncenderLED1:
    high PORTC.6
    cont1=20
    lcdout $FE,$C4,dec3 cont1
    return

EncenderLED2:
    high PORTC.5
    cont2=30
    lcdout $FE,$C8,dec3 cont2
    return

EncenderLED3:
    high PORTC.4
    Cont4=40
    lcdout $FE,$CC,dec3 cont4
    return
end


Que opinas tu?


Saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 27 de Septiembre de 2005, 22:44:00
Hola:

Probaste el codigo...? Hace lo que esperas que haga...?
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 28 de Septiembre de 2005, 06:38:00
Hola Lord,

Si el codigo funciona y borra la memoria, pero quiero que me expliques la manera en que tu me dices que tambien se puede hacer.

Yo conecte una resietncia de 10 K entre RB7 y positivo y un pulsador entre RB7 y negativo para lograr el pulso bajo que me pide la linea de programa para poder borrar la memoria.


Saludos

morfeus

Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 28 de Septiembre de 2005, 09:23:00
Hola:

si funciona asi esta bien, depende de como quieras, tambien puedes hacerlo dentro del bucle loop y preguntar el estado de RB7 y cuando sea 0 lo haces saltar a la subrutina grabar.... recuerda que en grabar asignamos tambien cero a todas las variables, prueba esto y cuentame como te va...! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 28 de Septiembre de 2005, 10:46:00
Hola Lord,

Pues anoche hice lo que me dijiste pero no me funciono lo intente de varias maneras y nada, con el codigo que le adicione lo que hace es un reset general y cuando detecta RB7 en cero borra la memoria.

Quisiera conocer otra forma de hacerlo para no tener que hacer un reset general y reiniciar del todo el programa. No he tenido oprtunidad de trabajar mucho con la eeprom pero si muchas ganas de aprender.

saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 28 de Septiembre de 2005, 11:17:00
Hola:

pana morfeus deberia funcionarte mira el codigo que tu pones:

Codigo:
if borra=0 then " SI PULSADOR ES PRESIONADO BORRA LA MEMORIA
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    high led " LED = ON
    pause 1000 "
    low led " LED=OFF
endif  


y mira como es la subrrutina que te decia:

Codigo:
grabar:
"enceramos todos los contadores
    cont=0:cont1=0:cont2=0:Cont4=0
    write 0,1
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    goto loop


es lo mismo solo que falta encender y apagar el led, cosa que no es dificil añadirla.

Prueba a poner esta instruccion en el bucle principal
if borra=0 then " SI PULSADOR ES PRESIONADO BORRA LA MEMORIA
y si se cumple hazla saltar a grabar y tambien ponle el tiempo de encendido del led...

Intentalo si no te funciona pon el codiga para ve que estamos haciendo mal...!


Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 28 de Septiembre de 2005, 13:17:00
Hola:

Pues ese es el error, recuerda que para que salte a una subrrutina se utiliza GOSUB o GOTO, la diferencia entre las dos es que la primera una ves terminada la subrrutina regresa a la linea siguiente de donde le enviaste a que salte a diferencia de GOTO que continua a linea siguiente de la subrrutina...

Entonces tienes que utilizar:

GOSUB grabar....!
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 28 de Septiembre de 2005, 20:59:00
Hola Lord,

Listo, ya me funciona muy bien, una última cosa cuando hago el borrado de la eeprom los valores del lcd no van a cero intente borrar el contenido de las cuatro variables pero nada lo que busco es que al borrar la eeprom los contadores del display queden en cero, es como un "refresco" del lcd.

Esto seria lo ultimo.

Gracias


morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 28 de Septiembre de 2005, 21:12:00
Hola:

con estas lineas puedes actualizar los datos del lcd....

lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4

prueba a poner estas lineas en tu codigo y luego me comentas... OK?
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 28 de Septiembre de 2005, 21:39:00
Hola,

Intente esto y nada


if borra=0 then

lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4

GOSUB grabar
     
       endif

pero no actualiza el lcd.

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 28 de Septiembre de 2005, 21:47:00
Hola:

Claro que no pasa nada porque los valores que tienes que encerar son las variables cont, pon ese codigo en la subrrutina grabar

grabar:
"enceramos todos los contadores
    cont=0:cont1=0:cont2=0:Cont4=0
"PON AQUI EL CODIGO ANTERIOR, NOTA QUE EN ESTA LINEA TODOS
"LOS CONTADORES TOMAN EL VALOR DE 0
    write 0,1
    write 1,0
    write 2,0
    write 3,0
    write 4,0
    goto loop

Con esto deberia bastar....!

suerte...!
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 29 de Septiembre de 2005, 09:33:00
Hola Lord,

Pues te comento que si funcionò de la manera como me dijiste lo del borrado de la eeprom es que no queria tener que resetear el circuito y por eso te pedi el favor de guiarme con otra idea.

De esta manera puedo decir que el proyecto en mente que tenìa hace unos dìas hoy se ve realizado y finalmente comprobado gracias a tu valiosa colaboraciòn, perdona si fui muy insistente en algun momento con preguntas y cosas parecidas pero cuando uno siente esa necesidad tan grande de aprender puede que en ocasiones se abuse un poco de la buena voluntad de la otra persona.

Tu tienes mucha "madera" para enseñar y eso es una gran virtud que no todas las personas poseen cultivala y aprende mas cada dia, de mi parte hare todo lo posible por aprender mas y mas sobre este que lenguaje que me fascina.

De pronto puedo escribirte para hacerte alguna pregunta sobre algo en especial?, mi correo es lsolano@geo.net.co por si alguna vez decides escribirme.

De mi parte un gran abrazo y suerte en tus proyectos futuros amigo.

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 29 de Septiembre de 2005, 09:45:00
Hola:

¡¡¡FELICIDADES!!!

Pues lo poco que se de esto lo he aprendido aqui, y leyendo uno que otro libro, y claro que me puedes escribir sin ningun problema o si quieres puedes contactarme en el messenger de msn o yahoo a g_lafebre@yahoo.com...

Saludos:

Giovanni Lafebre.
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 29 de Septiembre de 2005, 21:58:00
Hola a todos,

Hasta la fecha hemos realizado con Lord un contador de 4 entradas y 4 salidas con posibilidad de grabar el ultimo conteo en la eeprom, pero siendo mas futuristas y con el animo de recibir aportes queremos ampliar las funciones de este contador de la siguiente manera.

Utilizamos una LCD un 16F877 y un teclado matricial, la idea es poder grabar en la  memoria del pic mediante el LCD (visualizarlo) el numero de pulsos que queremos contar y por consiguiente activar cada salida cuando este llegue al final, para esto utilizamos el teclado matricial.

Esperamos que sea del agrado de todos y por supuesto aportes seran bienvenidos.

saludos

mosfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 29 de Septiembre de 2005, 22:20:00
Holas:

Asi es, el dia de mañana pienso subir el esquema para que los que esten interesados puedan seguirlo, y como siempre culaquier sujerencia o comentario sera bienvenido...! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 30 de Septiembre de 2005, 12:13:00
Holas:

Aqui pongo el circuito que vamos a utilizar....!

En la noche o mañana pongo unos pequeños ejemplos para confirmar que todo funciona perfectamente....!

Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 30 de Septiembre de 2005, 12:59:00
Hola Lord,

Perfecto me parece muy bien.


saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 02 de Octubre de 2005, 23:54:00
Hola:

Aqui esta una perqueña rutina para el LCD:

Codigo:
"rutina para el LCD

"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

"-------OSCILADOR-----------
Define OSC 4

Loop:
    lcdout $FE,1,"  LCD FUNCIONA"
    lcdout $FE,$C0,"    MUY BIEN"
    pause 300
    goto loop
end


Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 03 de Octubre de 2005, 01:01:00
Hola:

Este pequeño codigo para probar pulsantes y leds....!

Codigo:
"rutina para probar los leds y pulsantes

"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

i   var byte

"-------OSCILADOR-----------
Define OSC 4

TRISC=%00001111

Inicio:
    lcdout $FE,1," Probando LEDS"
    for i=0 to 5
        PORTC=%11110000
        pause 150
        PORTC=%00000000
        pause 150
    next i
    lcdout $FE,1,"    LEDS OK"
    pause 1000
    gosub mensaje
loop
    if PORTC.0=0 then
        lcdout $FE,1,"  Pulsante  RC0"
        High PORTC.7
        pause 500
        low PORTC.7
        gosub mensaje
    endif
    if PORTC.1=0 then
        lcdout $FE,1,"  Pulsante  RC1"
        High PORTC.6
        pause 500
        low PORTC.6
        gosub mensaje
    endif
    if PORTC.2=0 then
        lcdout $FE,1,"  Pulsante  RC2"
        High PORTC.5
        pause 500
        low PORTC.5
        gosub mensaje
    endif
    if PORTC.3=0 then
        lcdout $FE,1,"  Pulsante  RC3"
        High PORTC.4
        pause 500
        low PORTC.4
        gosub mensaje
    endif
    goto loop
    end

mensaje:
    lcdout $FE,1,"Probar Pulsantes"
    lcdout $FE,$C0,"  Pulsa Alguno"
    return
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 03 de Octubre de 2005, 01:07:00
Hola:

Esta rutina para el teclado lo he tomado de un libro muy bueno...!

Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

A VAR PORTD.0       ;nombres para los pines de las filas
B VAR PORTD.1
C VAR PORTD.2
D VAR PORTD.3

UNO VAR PORTD.4    ;nombres para los pines de las columnas
DOS VAR PORTD.5
TRES VAR PORTD.6
CUATRO VAR PORTD.7

Lcdout $FE,1,"Probando Teclado"
 
BARRIDO:    
        LOW A                      
    IF UNO    = 0 THEN lcdout $FE,$C0," 7"  
    IF DOS    = 0 THEN lcdout $FE,$C0," 8"    
    IF TRES   = 0 THEN lcdout $FE,$C0," 9"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"10"
        HIGH A                      
        LOW B                      
    IF UNO    = 0 THEN lcdout $FE,$C0," 4"    
    IF DOS    = 0 THEN lcdout $FE,$C0," 5"
    IF TRES   = 0 THEN lcdout $FE,$C0," 6"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"11"
        HIGH B                      
        LOW C                      
    IF UNO    = 0 THEN lcdout $FE,$C0," 1"
    IF DOS    = 0 THEN lcdout $FE,$C0," 2"
    IF TRES   = 0 THEN lcdout $FE,$C0," 3"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"12"
        HIGH C                      
        LOW D                      
    IF UNO    = 0 THEN lcdout $FE,$C0,"14"
    IF DOS    = 0 THEN lcdout $FE,$C0," 0"  
    IF TRES   = 0 THEN lcdout $FE,$C0,"15"
    IF CUATRO = 0 THEN lcdout $FE,$C0,"13"
        HIGH D                      
    pause 10                      
    GOTO BARRIDO                
END


Si hasta aqui no hemos tenido problemas estamos listos para continuar...!

PD: Pueden cambiar si no coinciden las posiciones de las teclas, solo tienen que ver cuando se este ejecutando el programa que tecla presionan y que valor se ve en el LCD.
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 03 de Octubre de 2005, 06:41:00
Hola Lord,

Que bueno, ya con esto estamos practicamente listos. Podemos ir comenzando mientras algunos de los integrantes del foro se animan a participar.

saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 05 de Octubre de 2005, 12:03:00
Para los que hasta ahora leen este post les explico el funcionamiento del proyecto que iniciamos con Lord.

Inicialmente queriamos contar (y visualizar en el LCD) una determinada cantidad de pulsos desde cada pulsador ubicados en RC0, RC1, RC2 y RC3 y que cuando estos pulsos fueran contados a su final se encendiera de forma independiente RC4, RC5, RC6 y RC7. Si quieren ver mas detalles pueden ver toda la información desde su comienzo en el post.

Finalizamos dicho proyecto pero pensando en hacerlo mas vistoso decidimos adicionarle un teclado y la propuesta es la siguiente:

Mediante el teclado poder modificar el valor de conteo y visualizar este dato en el LCD y poder confirmar el numero de pulsos y enviarlo a la eeprom.

Esto es con el fin de no tener que reprogramar el pic cada vez que necesitemos cambiar el numero de pulsos a contar.

Se debe tener en cuenta que se debe modificar la cantidad de pulsos a contar y grabarlos en la eeprom pero tambien este dato se debe enviar a la variable Cont por ejemplo para que esta sepa hasta cuanto debe contar.

He realizado estas pruebas de grabar y enviar a la variable Cont (sin utilizar el lcd) ni el teclado y no he tenido muy buenos resultados, el codigo lo pondre en el proximo post para ver si logro algo mejor.

Cualquier sugerencia o aporte al respecto sera bienvenido, agradezco a Lord por la ayuda que me ha brindado.
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 05 de Octubre de 2005, 12:11:00
Hola:

Pues lamentablemente como todo tiene sun fin sucedio eso con mis vacaciones y regrese a trabajar y los primeros dias estoy un poco liado... pero para mañana a mas tardar tendre algo de codigo para probar con el teclado ingresar el numero hasta donde se quiera contar y guardarlo en la eeprom, es un poco dificil ahora, ya que como digo regrese a trabajar y los primeros dias son matadores... Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 05 de Octubre de 2005, 12:20:00
Hola Lord,

Es muy entendible lo de tu trabajo y el solo hecho de aportar tus ideas y conocimientos es de gran valor para el foro.

saludos


morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 06 de Octubre de 2005, 12:36:00
Esto es lo que he logrado hasta ahora, lo que hace el @ es enviar directamente el valor por ejemplo 50 a la posisciòn 5 de la memoria, luego leo la posicion 5 y la envio a E1 y por ultimo almaceno este valor en la variable CONT.

Al compilarlo y ver la pagina de memoria en el programador podemos ver que efectivamente los valores se han depositado en dichas direcciones y al encender el circuito se van a mostrar estos valores por defecto, en la pruebas realizadas modifique los valores de la eeprom (desde el programador) para el conteo y al grabarlos en el pic estos se modifican.

No he logrado aun mostrar ni variar estos valores desde el LCD ni el teclado pero ahi vamos.


morfeus


E1 VAR BYTE   "variable para almacenar el numero de conteo
data @5, 50    "numero màximo permitido a contar y modificar
READ 5,E1
WRITE 5,CONT  "muevo el valor de conteo a la variable cont



E2 VAR BYTE   "variable para almacenar el numero de conteo
data @6, 70    "numero màximo permitido a contar y modificar
READ 6,E2
WRITE 6,CONT1  "muevo el valor de conteo a la variable cont1



E3 VAR BYTE   "variable para almacenar el numero de conteo
data @7, 100    "numero màximo permitido a contar y modificar
READ 7,E3
WRITE 7,CONT2  "muevo el valor de conteo a la variable cont2



E4 VAR BYTE   "variable para almacenar el numero de conteo
data @8, 120    "numero màximo permitido a contar y modificar
READ 8,E4
WRITE 8,CONT3  "muevo el valor de conteo a la variable cont3


"condicional para saber si ha contado 7 veces
if cont >= E1 then
gosub EncenderLED
endif
"condicional para saber si ha contado 20 veces
if cont1 >= E2 then
gosub EncenderLED1
endif
"condicional para saber si ha contado 30 veces
if cont2 >= E3 then
gosub EncenderLED2
endif
"condicional para saber si ha contado 40 veces
if Cont4 >= E4 then
gosub EncenderLED3
endif
"si estas condiciones se cumplen salta a cada subrutina descrita


"programa principal
loop:
       if borra1=0 then
       low PORTC.7
       GOSUB grabar
       endif
       
       if borra2=0 then
       LOW PORTC.6
       GOSUB grabar1
       endif
       
       if borra3=0 then
       LOW PORTC.5
       GOSUB grabar2
       endif
       
       if borra4=0 then
       LOW PORTC.4
       GOSUB grabar3
       endif
       
             
                           
"todos los siguientes condicionales funcionan de la misma manera
"pero con diferentes pines y variables, pero el concepto es el mismo
"--------------------------------------------------------------------
"si el pulsante en C0 ha sido presionado
    if PORTC.0=0 then
"incrementa al contador en 1    
        cont=cont+1
"almacema en la posicion de memoria el valor actual de cont
        write 1,CONT
"si cont iguala o supera a 10(que indicaria que el conteo se ha cumplido)
"entonces salta a la subrrutina que enciende el led para mostrar que el
"conteo se ha cumplido
        if cont >= E1 then
            gosub EncenderLED
        endif
"muestra en el display el valor actual de cont, permitiendo ver el conteo
"exacto, es decir el numero de veces que se a pulsado el boton
        lcdout $FE,$C0,dec3 CONT
"tiempo de antirrebote de tecla, para que el conteo no se haga de una manera
"muy rapida
        pause 200
    endif
       
"--------------------------------------------------------------------
"todos los demas condicionales hacen la misma funcion
"--------------------------------------------------------------------
    if PORTC.1=0 then
        cont1=cont1+1
        write 2,cont1
        if cont1 >= E2 then
            gosub EncenderLED1
        endif
        lcdout $FE,$C4,dec3 cont1
        pause 200
    endif

    if PORTC.2=0 then
        cont2=cont2+1
        write 3,cont2
        if cont2 >= E3 then
            gosub EncenderLED2
        endif
        lcdout $FE,$C8,dec3 cont2
        pause 200
    endif

    if PORTC.3=0 then
        Cont4=Cont4+1
        write 4,Cont4
        if Cont4 >= E4 then
            gosub EncenderLED3
        endif
        lcdout $FE,$CC,dec3 Cont4
        pause 200
    endif
goto loop
"-------------------------------------------------------

.
.
.
.
.
.

"estas subrrutinas son para encender los leds y dejarlos encendidos en caso
"de que el conteo ha llegado a su final para cada caso
"asi mismo se asigna el valor maximo de conteo por ejemplo 10 para que en los
"condicionales donde se pregunta if cont1 >= 10 then salten a la subrutina
"adecuada y mantenga encendido el led
EncenderLED:
    high PORTC.7
    cont=E1
    lcdout $FE,$C0,dec3 CONT    
    return

EncenderLED1:
    high PORTC.6
    cont1=E2
    lcdout $FE,$C4,dec3 cont1
    return

EncenderLED2:
    high PORTC.5
    cont2=E3
    lcdout $FE,$C8,dec3 cont2
    return

EncenderLED3:
    high PORTC.4
    Cont4=E4
    lcdout $FE,$CC,dec3 cont4
    return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 07 de Octubre de 2005, 13:24:00
Hola:

aqui te pongo un ejemplo para que el numero de conteos sea en funcion de la variable E1

Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

define OSC 4

Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
E1   var byte

TRISC=%00001111

pause 250

LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

eeprom 0,[0]

read 0,temp

if temp=0 then grabar

read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

lcdout $FE,$C0,dec3 cont
lcdout $FE,$C4,dec3 cont1
lcdout $FE,$C8,dec3 cont2
lcdout $FE,$CC,dec3 Cont4

read 5,E1

if cont >= E1 then
gosub EncenderLED
endif

loop:
"--------------------------------------------------------------------
    if PORTC.0=0 then
        cont=cont+1
        write 1,cont
        if cont >= E1 then
            gosub EncenderLED
        endif
        lcdout $FE,$C0,dec3 cont
        pause 200
    endif
goto loop
"-------------------------------------------------------
grabar:
    cont=0
    write 0,1
    write 1,0
    write 5,10
    goto loop

EncenderLED:
    high PORTC.7
    read 5,E1
    cont=E1
    lcdout $FE,$C0,dec3 cont    
    return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 11 de Octubre de 2005, 14:10:00
Hola:

Ahora revisa este codigo para que intentes el incremento de la variable E1 hasta el valor que necesites, tendrias que hacer la parte del incremento y luego enviar a guardar el dato en la eeprom:

Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

define OSC 4

Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
E1   var byte

TRISC=%00001111

pause 250

LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

eeprom 0,[0]

read 0,temp

if temp=0 then grabar

read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

lcdout $FE,$C0,dec3 cont

read 2,E1

if cont >= E1 then
    gosub EncenderLED
endif

loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom
    if PORTC.1=0 then
        pause 250
        repeat
            lcdout $FE,1,"CODIGO AQUI"
            pause 500
        until PORTC.1=0
        pause 500
        LCDOUT $FE,1,"#01 #02 #03 #04"
        lcdout $FE,$C0,dec3 cont
    endif
"--------------------------------------------------------------------
    if PORTC.0=0 then
        cont=cont+1
        write 1,cont
        if cont >= E1 then
            gosub EncenderLED
        endif
        lcdout $FE,$C0,dec3 cont
        pause 200
    endif
goto loop
"-------------------------------------------------------
grabar:
    E1=10
    cont=0
    write 0,1
    write 1,0
    write 2,E1
    goto loop

EncenderLED:
    high PORTC.7
    read 5,E1
    cont=E1
    lcdout $FE,$C0,dec3 cont    
    return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 11 de Octubre de 2005, 17:00:00
Este codigo esta configurado para que trabaje con la entrada 01 pero seria igual
para las otras entradas, hay una resistencia en RA4 con comum a positivo, todos los
pulsadores van con resistencias de 4.7K conectadas a positivo.

El circuito hace lo siguiente:

Para cambiar el numero de pulsos a contar oprimimos el pulsador en RA4 alli nos muestra un
menu para aumentar o disminuir los pulsos, para disminuir oprimimos el pulsador en RA0 y para
aumentar oprimimos el pulsador en RA1 para confirmar oprimimos el pulsador ubicado en RB7 y listo
ya podemos contar la cantidad de pulsos que configuremos en la eeprom.  

Ya monte el circuito y funciona OK!.


Este es el codigo:

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

define OSC 4

Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
E1   var byte

TECLA var PORTA.4
aumenta var PORTA.5
enter var PORTB.7
borra1 var PORTA.0

ADCON1=7
TRISA=%111111
TRISC=%00001111

pause 250

inicio:

LCDOUT $FE,1,"#01 #02 #03 #04"
LCDOUT $FE,$C0,"000 000 000 000"

eeprom 0,[0]

read 0,temp
read 5,E1

if temp=0 then grabar

read 1,cont
read 2,cont1
read 3,cont2
read 4,Cont4

lcdout $FE,$C0,dec3 cont



if cont >= E1 then
    gosub EncenderLED
endif

loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom

if tecla=0 THEN
pause 200
gosub AJUSTE
endif

IF borra1=0 then
low PORTC.7
GOSUB grabar
endif
   
"--------------------------------------------------------------------
    if PORTC.0=0 then
        cont=cont+1
        write 1,cont
        if cont >= E1 then
            gosub EncenderLED
        endif
        lcdout $FE,$C0,dec3 cont
        pause 200
    endif
goto loop
"-------------------------------------------------------
grabar:
    "enceramos todos los contadores
    cont=0
    lcdout $FE,$C0,dec3 CONT
    write 0,1
    write 1,0
        lcdout  $FE,1, "  Memoria #01"
        LCDOUT $FE,$C0,"    Borrada"
        pause 1000
        gosub inicio

EncenderLED:
    high PORTC.7
    cont=E1
    lcdout $FE,$C0,dec3 CONT    
    return
    end
    RETURN
   
end

ajuste:
 "muestra en el lcd los valores de la variable E
lcdout $FE,$C0,dec3 E1
LCDOUT $FE,1,  " Pulsos"
LCDOUT $FE,$C0," Para #01: "
lcdout $FE,$CA,dec3 E1
PAUSE 100
if PORTA.1=0 then           "aumenta cifras
        E1=E1+1
        write 5,E1
        lcdout $FE,$CA,dec3 E1
        pause 200
        endif
       
if PORTA.0=0 then           "disminuye cifras
        E1=E1-1
        write 5,E1
        lcdout $FE,$CA,dec3 E1
        pause 200
        endif
if PORTB.7=0 then
pause 200
GOSUB INICIO
ENDIF    
goto AJUSTE
return
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 11 de Octubre de 2005, 17:01:00
Hola:

Pues ya he acabado, funciona de la siguiente manera:

Con el pulsante en C0 se hace el conteo de pulsos.
Con el pulsante en C1 se ingresa al menu donde se puede seleccionar la cantidad de pulsos, los incrementos son de 1 en 1, para hacer estos incrementos se utiliza el pulsante en C2 y si supera los 25 se asignara siempre 10... una ves que se ha elegido la cantidad de pulsos se debe preionar nuevamente C1 para aceptar...

Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

define OSC 4

Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
aux var byte
E1   var byte

TRISC=%00001111


pause 250

gosub text_LCD

eeprom 0,[0]

read 0,temp

if temp=0 then grabarE1

read 2,cont

read 1,aux

lcdout $FE,$C0,dec3 cont

if cont >= aux then
    gosub EncenderLED
endif

loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom
    if PORTC.1=0 then
        pause 250
        E1=0
        repeat
            config:
            lcdout $FE,1,"Config. Pulsos"
            lcdout $FE,$C0,#E1
            if PORTC.2=0 then
                e1=e1+1
                if E1>= 25 then
                    lcdout $FE,1,"Valor Superior"
                    lcdout $FE,$C0,"Se asignara 10"
                    E1=10
                    pause 2000
                endif
                pause 50
            endif
            pause 150
            low PORTC.7
        until PORTC.1=0
        aux=E1
        gosub grabar
        pause 500
        gosub text_LCD
        lcdout $FE,$C0,dec3 cont
    endif
"--------------------------------------------------------------------
    if PORTC.0=0 then
        cont=cont+1
        write 2,cont
        if cont >= aux then
            cont=aux
            gosub EncenderLED
        endif
        lcdout $FE,$C0,dec3 cont
        pause 200
    endif
goto loop
"-------------------------------------------------------
grabar:
    cont=0
    write 0,1
    write 1,aux
    write 2,cont
    return

grabarE1:
    e1=10 "valor por defecto
    goto config

EncenderLED:
    high PORTC.7
    read 1,E1
    cont=aux
    lcdout $FE,$C0,dec3 E1    
    return

text_LCD:
    LCDOUT $FE,1,"#01 #02 #03 #04"
    LCDOUT $FE,$C0,"000 000 000 000"
    return
end
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 14 de Octubre de 2005, 18:56:00
     

muy buen proyecto hermanos

me encantaria que pasaran el archivo en proteus para simularlo...Flash

claro si no es mucha molestia  miren este es mi correo edgar_santiagos2@yahoo.com
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 14 de Octubre de 2005, 21:04:00
Hola:

Batman123 el problema es que no simula la EEPROM del pic por lo demas funciona muy bien, tengo proteus 6.7 SP3, igual si lo quieres lo puedo colgar aqui...! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 15 de Octubre de 2005, 11:35:00

mira wetuve miando lo que quieren  hacer  me imagino que es lo siguiente:
con el teclado escribir un numero de 0  a 999 y que luego la  por determinado pin llegue a esta variable y cuando llege prenda un led para indicar que llego al tope

es esto cierto o si no me corrigen..

porque si es como yo digo mañana posteo un codigo que estoy haciendo basandome en esta idea. okey
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 15 de Octubre de 2005, 12:42:00
Hola:

Pues esa es basicamente la idea de morfeus... el quiere algo asi para una maquinita pero no puedo ayudarle mucho por falta de tiempo, tengo que hacer muchas cosas que me han pedido para la U y estoy liado Helado... pero si lo tienes tu pues bienvenido....! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 15 de Octubre de 2005, 16:58:00
Hola

Como estan?, na habia mirado el foro estos días porque he estado muy ocupado pero me alegra que batman123 se sume al grupo y aporte sus ideas. He realizado un bosquejo de codigo para el teclado 4x4 pero estoy tratando de hacerlo funcionar y cuando lo haga lo subo.

saludosGiño
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 15 de Octubre de 2005, 19:28:00
morfeus en hora buena....

RebotadoTE CUENTO QUE TENGO LISTO EL CODIGO......Rebotado
 
POR MEDIO DEL TECLADO INTRODUCES LOS VALORES TOPES DE E1, E2 Y E3

Y LUEGO EL PIC COMIENZA A ESCANEAR LOS PUERTOS PARA CONTAR LOS PULSOS.

Y  CUANDO LLEGA A ESTE SE ENCIENDE EL LED CREO QUE ES ESO LO QUE QUIERES NO.


 FlashBUENO COMO NO HAY NADA PERFECTO TE CUENTO QUE COMO EL PROTEUS NO SIMULA EL 877 ME TOCO HACER EL CODIGO PARA UN 16F84A PERO ESTA FUNCIONANDO PERFECTO CLARO QUE SOLO PUEDO PONER A ESCANEAR DOS PUERTOS  OSEA E1 Y E2 Y POR UNA MISMA SALIDA [color=6A5ACD]EL LED[/color] QUE SE ACTIVA CUANDO LA PRIMERA DE LAS DOS VARIABLES LLEGE AL TOPE PRIMERO Y TAMBIEN RENICIA TODO EL CONTADOR PORQUE NESECITAVA MAS CODIGO PERO LA MEMORIA ME QUEDO FULL 1020 BYTES.Flash

BUENO EL FUNCIONAMIENTO ES EL SIGUIENTE..

PRESIONAS
  ASTERISCO * Y LUEGO  COLOCAS LOS VALORES PARA E1 Y E2 SI TE EQUIVOCAS EN LOS VALORES PRECIONAS ASTERISCO PARA BORRAR LO ESCRITO.
ENTOCES PRESIONAS NUEVAMENTE ASTERISCO PARA DIGITAR LOS NUEVOS TOPES

Y PARA EMPEZAR A ESCANEAR LOS PUERTOS PRESIONA NUMERAL # Y LISTO
COMIENZA A CONTAR .

JEJEJEJE. QUE FACIL.........

BUENO LOS PUERTOS PARA COLOCAR LOS PULSADORES SON RA.1 Y RA2 Y EL PUERTO PARA EL LED ES RA.3 EL ESQUEMA ES EL MISMO QUE TE ENVIE A TU CORREO, SOLO COLOCALE A LOS PUERTOS RA.1 Y RA.2 UNAS RESISTENCIAS FULL-UP A POSITIVO Y EL PULSADOR A TIERRA.

BOY A MEJORARLO UN POCO MAS PARA UN 16F628 Y HAY SI SUBO EL CODIGO POR AHORA SUBO EL HEX..

PRUEBALO Y ME DICES QUE TAL.....

CUALQUIER COSA ME ESCRIBES O ME LLAMAS AL CELULAR....

SUERTE
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 15 de Octubre de 2005, 23:36:00
Hola:

Si lo quisieran hacer con una memoria externa vendria bien una I2C como la 24LC04B... Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 18 de Octubre de 2005, 11:47:00
y este es el basRebotado

"****************************************************************
"*  
"* Flash Author  : BATMAN123   Flash                                                                          
"*  Notice  : Copyright (c) 2005 Tecnico Superior en Electronica
"*          : Todos los Deechos Reservados                      
"*  Date    : 14/OCTUBRE/2005                                  
"*  Version : 1.0                                            
"*  Notes   :  CONTADOR DE PULSOS CON PIC16F84A UTILIZANDO 1    
"*          :  TECLADO MATRICIAL 4X4 Y LCD                      
"****************************************************************
 
DEFINE LCD_DREG PORTB       " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0           " Setea el bit de comienzo de datos (0 o 4)
DEFINE LCD_RSREG PORTB      " Setea el port LCD Register Select
DEFINE LCD_RSBIT 4          " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA       " Setea el port LCD Enable
DEFINE LCD_EBIT 0           " Setea el bit LCD Enable
DEFINE LCD_BITS 4           " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2          " Setea el numero de lineas en el LCD
         
 
   
    tecla   var byte        " definicion de variables
    n1      var byte
    n2      var byte
    n3      var byte
    n4      var byte
    n5      var byte
    n6      var byte
    unidad1   var byte
    decena1   var byte    
    centena1  var byte
    unidad2   var byte
    decena2   var byte
    centena2  var byte    
    E1        var byte
    E2        var byte
    numero1 var byte
    numero2 var byte
     
    n1=0                  " asigno valor a las variables
    n2=0                  " el valor es equivalente en asccII
    n3=0
    n4=0                  " asigno valor a las variables
    n5=0                  " el valor es equivalente en asccII
    n6=0
    numero1=0
    numero2=0
   
   
     read 10, numero1                      " Leo el ultimo numero guardado en E1
     READ 11, numero2                      " Leo el ultimo numero guardado en E2
     READ 6, E1                            " Leo el valor del tope en E1
     READ 7, E2                            " Leo el valor del tope en E2
     if numero1=0 and numero2=0 then goto inicio   "Comapra con 0 sino es salta
     pause 200                             " Pausa para estabilizar LCD
     LCDOUT $FE,1,dec3 numero1,dec3 numero2  " Muestra el numero en que va  E1
     LCDOUT $FE,$C0,dec3 E1                " Muestra el numero del tope   E1
     LCDOUT $FE,$C5,dec3 E2                " Muestra el numero del tope   E2
     
     goto mirar                            " Salta a la rutina mirar para esca
                                           " near los puertos de los pilsadores.
   
    inicio:                                " Inicia el progrma desde cero
    LCDOUT $FE,1,"#1  #2  #3  #4"          " Mensajes maricos
    LCDOUT $FE,$C0,"000 000 000 000"       " Mensaje para mostrar valores
    pause 1000                             " iniciales y pausa para verlos
   
   
    arrancar:                              " RUTINA PARA ACTIVAR EL CIRCUITO
    OPTION_REG=0                           " Activo resistencias full-up
    TRISB = %11111110                      " Declaro el puerto B como salida    
    IF portb= $7e  then goto clave         " SI PRESIONO * PUEDO INTRODUCIR LOS
                                         " VALORES PARA LOS TOPES #1, #2,#3,#4
    goto arrancar                          " Si no presiono asterisco el circu-
                                           " ito no deja hacer nada....jajaja
   
    clave:                  " RUTINA PARA INTRODUCIR LOS VALORES  DE E1, E2, E3
    pause 500                              " Pausa para estavilizar el sistema
    gosub teclado                          " Llamado de la rutina teclado
    SWAP  tecla, n1                  " Asigno a n1 el valor de la tecla pulsada
    LCDOUT $FE,$C0,dec n1                  " Muestra en el LCD la tecla pulsada
    pause 500                              " Pausa para ver la tecla pausada
    gosub teclado                    " Llamado para traer el siguiente  valor
    SWAP  tecla, n2                        " DE AQUI EN ADELANTE PARA CADA #
    LCDOUT $FE,$C1,dec n2                  " EL PROCEDIMIENTO ES EL MISMO....
    pause 500
    gosub teclado
    SWAP  tecla, n3
    LCDOUT $FE,$C2,dec n3
    pause 500
    gosub teclado
    SWAP  tecla, n4
    LCDOUT $FE,$C4,dec n4
    pause 500
    gosub teclado
    SWAP  tecla, n5
    LCDOUT $FE,$C5,dec n5
    pause 500
    gosub teclado
    SWAP  tecla, n6
    LCDOUT $FE,$C6,dec n6
    pause 500                      
     
     
    iniciar_conteo:
    OPTION_REG=0
    TRISB = %11111011                                  
    IF portb= $7B  then goto contar
    pause 20
    TRISB = %11111011                                  
    IF portb= $7e  then goto inicio
    pause 20
    goto iniciar_conteo
   
   
    contar
    unidad1= n3 * 1
    decena1= n2 * 10
    centena1= n1 * 100
   
    unidad2= n6 * 1
    decena2= n5 * 10
    centena2= n4 * 100
   
    E1=centena1 + decena1 + unidad1
    E2=centena2 + decena2 + unidad2
   
    write 6, E1
    write 7, E2
    pause 100
    LCDOUT $FE,1,"SCANEANDO PUERTO"
    pause 500
   
    mirar:
    IF porta.2= 0  then goto led1
    IF porta.1= 0  then goto led2
    goto mirar

    led1:
    numero1 = numero1 + 1
    write 10, numero1
    pause 50
    LCDOUT $FE,1,dec3 numero1," ", dec3 numero2
    LCDOUT $FE,$C0,dec3 E1," ",  dec3 E2          
   
    if numero1=>E1  then prender_led
    pause 20
    goto mirar
   
    led2:
    numero2 = numero2 + 1
    write 11, numero2
    pause 50
    LCDOUT $FE,1,dec3 numero1, dec3 numero2
    LCDOUT $FE,$C5,dec3 E1, dec3 E2        
   
    if numero2=>E2  then prender_led
    pause 10
    goto mirar
   
     
    prender_led
    high porta.3
    pause 3000
    low porta.3
    numero1=0
    numero2=0
    write 10, numero1
    write 11, numero2
    goto inicio



    "************************************************************************
    " RUTINA PARA LEER EL TECLADO: devuelve el valor de la tecla pulsada
    "en el teclado .
    "************    PUEDE SER USADA EN CUALQUIER PROGRAMA PBP  *************
    "                PARA LEER UN TECLADO MATRICIAL 4 X 4
    "************************************************************************
   
    teclado:
    OPTION_REG=0
    TRISB = %11111110
    low portb.0
    if portb = $EE  then uno
    if portb = $DE  then cuatro
    if portb = $BE  then ciete
    if portb = $7E  then asterisco
       
    TRISB = %11111101
    low portb.1
    if portb = $ED  then dos
    if portb = $DD  then cinco
    if portb = $BD  then ocho
    if portb = $7D  then cero
       
    TRISB = %11111011
    low portb.2
    if portb = $EB  then tres
    if portb = $DB  then seis
    if portb = $BB  then nueve
    if portb = $7B  then numeral
   
    goto teclado
   
    asterisco
    tecla="*"
    return
   
    ciete:
    tecla=7
    return
   
    cuatro:
    tecla=4
    return
   
    uno:
    tecla=1
    return
   
    dos:
    tecla=2
    return
   
    cinco:
    tecla=5
    return
   
    ocho:
    tecla=8
    return
   
    cero:
    tecla=0
    return
     
    tres:
    tecla=3
    return
     
    seis:
    tecla=6
    return
   
    nueve:
    tecla=9
    return
     
    numeral:
    tecla="#"
    return
   
    endRebotado

FALTA MEJORARLO UN POCO....PERO YA CASI
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 18 de Octubre de 2005, 12:06:00
Hola:

Batman123.... puedes colgar el diseño para verlo...?
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 18 de Octubre de 2005, 18:55:00
bueno FlashLordLafebre Flash aqui tienes el esquema para los dos proyectos

es practicamente el mismo lo unico que cambia son los pulsadores

espero te sea de gran ayuda...Rebotado

Rebotadomira realizo el mismo plano para el pic 16f628 pero no enciende el led que pasara
sera que el puerto esta declarado como dijital y por eso no prende..

ESPERO ME SOLUCIONES ESTA INQUIETUD?...
 
   MUCHA SUERTE......Y ESPERO RESPUESTA..Rebotado

Fumadordame tu correo para enviartelo porque no pude subir el esquema me dice que no hay espacio...Fumador



Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 18 de Octubre de 2005, 22:20:00
Hola,

Debes desabilitar los comparadores con CMCON = 7 de esta manera no habra problema.


Saludos

morfeusSonrisa GiganteSonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 18 de Octubre de 2005, 22:27:00
Hola:

morfeus tiene reazon... debes desabilitar los comparadores y por lo del link subelo al almacen del foro que es esta la direccion:

http://miarroba.com/foros/ver.php?id=348538

Luego postea el link aqui y puede servir a todos...! Sonrisa Gigante
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 19 de Octubre de 2005, 09:34:00
morfeus tenias toda la razon ya me funciona a la perfeccion

me gustaria que me dieran otros comandos para otros parametros
por ejemplo como poner salidas dijitales, analogas, activar el comparador, etc


RebotadoESTE ES EL LINK`PARA EL ESQUEMA  LORDLAFEBRE.Rebotado

http://miarroba.com/foros/ver.php?foroid=348538&temaid=3740693
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 19 de Octubre de 2005, 09:58:00
Hola:

Ya tengo el esquema lo voy a chequear, y por lo de digitalizar el puerto pues se lo hace con CMCON = 7, esa misma funcion sirve para los comparadores pero tendrias que reviasr el data del pic para que veas dependiendo que que valor asignes que funcion va a cumplir el puerto....
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 20 de Octubre de 2005, 18:17:00
Hola Lord,

Como te comenté quiero ponerle una eeprom externa al pic puede ser la 24lc08 o cualquier otra ya que como el pic va a estar trabajando continuamente y los valores en la eeprom tambien se van a cambiar continuamente no quiero que la memoria del pic se "achicharre" me puedes decir como hacerlo tomando como ejemplo tu codigo en la parte de abajo?.

Gracias por tu ayuda LordGiñoGiñoGiño


Saludos

morfeus

Escrito originalmente por LordLafebre
Hola:

Pues ya he acabado, funciona de la siguiente manera:

Con el pulsante en C0 se hace el conteo de pulsos.
Con el pulsante en C1 se ingresa al menu donde se puede seleccionar la cantidad de pulsos, los incrementos son de 1 en 1, para hacer estos incrementos se utiliza el pulsante en C2 y si supera los 25 se asignara siempre 10... una ves que se ha elegido la cantidad de pulsos se debe preionar nuevamente C1 para aceptar...

Codigo:
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 5
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 4

define OSC 4

Cont var byte
Cont1 var byte
Cont2 var byte
Cont4 var byte
temp var byte
aux var byte
E1   var byte

TRISC=%00001111


pause 250

gosub text_LCD

eeprom 0,[0]

read 0,temp

if temp=0 then grabarE1

read 2,cont

read 1,aux

lcdout $FE,$C0,dec3 cont

if cont >= aux then
    gosub EncenderLED
endif

loop:
"Aqui puedes generar el codigo para que incremente la variable E1
"y luego manda a guardar el dato en la eeprom
    if PORTC.1=0 then
        pause 250
        E1=0
        repeat
            config:
            lcdout $FE,1,"Config. Pulsos"
            lcdout $FE,$C0,#E1
            if PORTC.2=0 then
                e1=e1+1
                if E1>= 25 then
                    lcdout $FE,1,"Valor Superior"
                    lcdout $FE,$C0,"Se asignara 10"
                    E1=10
                    pause 2000
                endif
                pause 50
            endif
            pause 150
            low PORTC.7
        until PORTC.1=0
        aux=E1
        gosub grabar
        pause 500
        gosub text_LCD
        lcdout $FE,$C0,dec3 cont
    endif
"--------------------------------------------------------------------
    if PORTC.0=0 then
        cont=cont+1
        write 2,cont
        if cont >= aux then
            cont=aux
            gosub EncenderLED
        endif
        lcdout $FE,$C0,dec3 cont
        pause 200
    endif
goto loop
"-------------------------------------------------------
grabar:
    cont=0
    write 0,1
    write 1,aux
    write 2,cont
    return

grabarE1:
    e1=10 "valor por defecto
    goto config

EncenderLED:
    high PORTC.7
    read 1,E1
    cont=aux
    lcdout $FE,$C0,dec3 E1    
    return

text_LCD:
    LCDOUT $FE,1,"#01 #02 #03 #04"
    LCDOUT $FE,$C0,"000 000 000 000"
    return
end

Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 20 de Octubre de 2005, 20:40:00
Hola batman123,

Voy a hacer las pruebas basado en tu ejemplo, estuve buscando informacion acerca de este tipo de memorias externas trabajando con picbasic pro pero no encontre nada.

Tengo varias memorias, la 24lc08, 24c05, 24c16 con alguna de estas debe funcionar me imagino.

Luego te cuento.

Un gran saludo

morfeusGiñoGiño
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 21 de Octubre de 2005, 06:44:00
Hola batman123,

Pues hasta el momento la eeprom externa no graba los datos, he mirado de una y otra forma pero no se porque nolo hace, ayer le pedi a Lord que me diera un ejemplo de como hacerlo ya que no hay nada concluyente sobre este tema en el foro. Si el nos colabora con un codigo que funcione estoy seguro que lograremos el cometido.

saludos


morfeusGiño
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 21 de Octubre de 2005, 08:56:00

mira morfeus las instrucciones para gravar la eprom estam bien porque
yo la he probado con un 16f84a que es el unico que tengo y me ha funcionado perfecto...

te voy a enviar un codigo basado en este pic para que lo prueves...

suerte............
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 21 de Octubre de 2005, 11:16:00
Hola:

Pues el ejemplo de morfeus esta bien, no te olvides de alimentar la memoria, el pin 4 a gnd y el 8 a vcc.. otra cosa que no sistingo bien... el pin 7 es para hacer la memoria de lectura y escritura o solo lectura, si el pin 7 va a vcc es solo de lectura y si va a gnd es lectura/escritura trata poniendo el pin 7 a gnd.... y ensaya el codigo de batman...
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 21 de Octubre de 2005, 13:56:00
Hola,

Gracias a los dos por sus respuestas, anoche ensaye de mil formas con la eeprom externa y nada no me funciono voy a hacer el ensayo de nuevo a ver que pasa. Estuve leyendo algo sobre estas eeprom y dicen que los pines 1,2, y 3 deben ir a tierra y en otro articulo dicen que el pin 3 debe ir a vcc, en realidad ya no se que pensar porque batman me dice que ya lo ensayo y funciono.

Bueno amigos les comento luego lo que pude hacer.

saludos

morfeusVacilando
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 21 de Octubre de 2005, 14:05:00
Hola:

Conectalo asi:

el 1,2,3 y 4 a gnd el el 5 señal de reloj, pin 6 pin de datos el 7 a gnd para que sea lectura/escritura y el 8 a vcc....
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 21 de Octubre de 2005, 14:42:00
Hola:

Prueba con este codigo y este esquema a mi me funciona bien:



Codigo:
   ;Programa para grabar y leer una memoria serial 24LCxx
Define  I2C_SCLOUT      1       ;No es necesario resistencia pull-up en SCL

contro  CON %10100000      ;contro contiene valor constante %10100000
PinSCL  Var Portb.7                 ;pin señal de reloj I2C
PinSDA  Var Portb.6                 ;pin de datos I2C
dato    VAR BYTE                 ;variable para almacenar dato leído

Inicio:
LCDOUT $fe,1," Grabando..."             ;limpiar y sacar el texto
PAUSE 1000

I2CWRITE PinSDA,PinSCL,contro,0,["H"]  ;guarda la H en posición 0
PAUSE 10                               ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,1,["O"]  ;guarda la O en posición 1
PAUSE 10                               ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,2,["L"]  ;guarda la L en posición 2
PAUSE 10                               ;pause para la grabación
I2CWRITE PinSDA,PinSCL,contro,3,["A"]  ;guarda la A en posición 3
PAUSE 10                               ;pause para la grabación

LCDOUT $fe,1,"Leer memoria"            ;limpiar y sacar el texto
PAUSE 1000
LCDOUT $FE,1                          ;limpiar pantalla del LCD

leer:                                 ;programa para leer memoria s.
I2CREAD PinSDA,PinSCL,contro,0,[dato]  ;leer la mem. 0 y guardar en dato
    LCDOUT ,dato                     ;mostrar dato en el LCD
    PAUSE 1000                         ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,1,[dato]  ;leer la mem. 1 y guardar en dato
    LCDOUT ,dato                     ;mostrar dato en el LCD
    PAUSE 1000                         ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,2,[dato]  ;leer la mem. 2 y guardar en dato
    LCDOUT ,dato                     ;mostrar dato en el LCD
    PAUSE 1000                         ;esperar 1 seg.
I2CREAD PinSDA,PinSCL,contro,3,[dato]  ;leer la mem. 3 y guardar en dato
    LCDOUT ,dato                     ;mostrar dato en el LCD

End


Es de un libro que tengo... SUERTE...!
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 21 de Octubre de 2005, 15:37:00
Hola Lord,

Te comento que funciona muy bien el codigo, entonces el que tiene problemas es el anterior debe ser alguna linea mal escrita o mal ubicada lo voy a analizar para ver donde se encuentra el error. Ademas funciona muy bien con la 24c05 y la 24c16 sin ningún problema.

Ahora mismo me pongo a examinar el codigo.

Saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 21 de Octubre de 2005, 17:10:00
Hola:

Morfeus utiliza este mismo tipo de conexion con el ejemplo de batman123... si no funciona quiere decir que hay algun problema en el codigo de el, si funciona debe ser por un error en el circuito, como digo vi que el pin 7 va a vcc y cuando esta en vcc es solo de lectura por ende que no podras escribir, encambio en el ejemplo que te puse va a gnd y asi funciona como lectura/escritura...

Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 22 de Octubre de 2005, 10:50:00
loard tiene toda la razon ..  
en mi ejemplo hay dos problemas.
1. el de software ya que en el comando de escritura y lectura me falto el codigo de control   mira:
  la linea son asi:
I2Cread porta.0,porta.1,10, numero1
pero la linea correcta debe ser asi:
I2CWRITE porta.0,porta.1,%10100000 ,10,numero1
falto la orden de control.
2 y el otro problema es lo que comenta lord respecto a la memoria
"el pin 7 va a vcc y cuando esta en vcc es solo de lectura por ende que no podras escribir, encambio en el ejemplo que te puse va a gnd y asi funciona como lectura/escritura... "
 
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Octubre de 2005, 13:32:00
Hola:

Morfeus tienes alguna idea de donde es la parte que esta fallando xq el codigo esta muy largo como para seguirlo, o puedes comentar lo que quieres hacer y te puedo dar una idea....!
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 22 de Octubre de 2005, 17:26:00
Hola:

Pero si lo que quieres es grabar en un amemoria externa utiliza el msmo codigo que antes y solo cambia en las partes en las que le mandabas a grabar en la eeprom del pic y reemplazalas con las instrucciones para grabar en la eeprom externa....!
Título: RE: Contar 10 pulsos y encender led
Publicado por: picraul en 24 de Octubre de 2005, 12:40:00
Hola a todos,

Hoy me he suscrito al foro quiero felicitar a morfeus y lordlafebre por tan maravilloso trabajo que han hecho en este post, de verdad no es muy frecuente ver tanto interès sobre un tema especifico en la red. Mirè uno a uno cada post desde la pagina 1 y en realidad la informacion que cada uno presento es fantastica ya que este lenguaje aunque sea mas facil que el assembler no existe mucha info al respecto.

Llevo algunos meses aprendiendo este lenguaje y por fin encontrè un portal donde se pueda expresar las dudas y sobre todo recibir ayuda, adelante muchachos con su interes los felicito!.

Un nuevo integrante...RebotadoRebotadoRebotado

picraulSonrisa GiganteSonrisa GiganteSonrisa Gigante

Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 24 de Octubre de 2005, 13:00:00
Hola:

Bien Venido picraul y ya sabes cualquier cosa estamos todos aqui para ayudarnos en lo que nos sea posible... ya vas a ver que te encariñas mucho con el foro...!
Título: RE: Contar 10 pulsos y encender led
Publicado por: batman123 en 25 de Octubre de 2005, 10:52:00
FlashCOMO DIJO EL COMAPEÑERO  LORD  BIENVENIDO PICRAULRebotado

YA SABES CUALQUIER DUDA AQUI CON AYUDA DE TODOS LAS RESOLVEREMOS.

SUERTE.. DESDE COLOMBIA
Título: RE: Contar 10 pulsos y encender led
Publicado por: morfeus en 25 de Octubre de 2005, 12:14:00
Hola picraul,

Pues al igual que Lord y batman123 te doy la bienvenida, esperamos poder ayudarte en lo que este a nuestro alcance, de seguro vas a estar muy a gusto en el foro. RebotadoRebotadoRebotado


saludos

morfeus
Título: RE: Contar 10 pulsos y encender led
Publicado por: electronando en 28 de Octubre de 2005, 19:07:00
ESO ME PAS POR SUBESTIMAR LOS TITULOS , EMPEZO COMO ALGO SENCILLITO Y SE MANDARON CON LAS EEPROM Muchas risas FANTASTICO AVER SI ME PONGO AL DIA CON ESO DE LAS MEMORIAS Y APARTE UNA PREGUNTILLA TENGO UNA DE ATMEL CREO Q
24C256 O 24C16 LA VERDA NO ME ACUERDO PERO EN EL TUTORIAL DE PIC BASIC PONEN UNOS NUMEROS QUE LA VERDAD ME CONFUNDIERON Y LAS DEJE XXX DDD , NO SE PERO NO ME ACUERDO AHORA PERO BUENA ONDA EL CODIGO QUE DEJARON SOBRE LAS EEPROM POR FIN UN CODIGO DE ESOS BICHOS PARA EXPERIMENTAR Y MOLESTANDO DE NUEVO SABEN LAS DIFERENCIAS ENTRE COMO PONER EN EL CODIGO PARA UNA 24C256 O 24C16 SON DE ATMEL , BUENO LES AGRADECERIA PARA EMPEZAR A JUGAR CON ESOS BICHITOS invasor
Título: RE: Contar 10 pulsos y encender led
Publicado por: LordLafebre en 28 de Octubre de 2005, 22:20:00
Hola:

Pues el codigo no cambiaria sino mas bien la conexion.... no he visto el data de las de atmel pero me imagino que debe ser paresido.... si purdes poner una imagen del pin-out de la memoria seria mas facil ver como hacerlo...!