[Tutorial] y manejo de Proton IDE

Saludos foreros,

Estoy intentando medir rpm para un motor dc, parece funcionar aunque no del todo bien, utilizo un 7447 y un encapsulado de 4 displey de 7 seg, ya me quedé sin ideas para que no se note el parpadeo, así como sucede en la simulación está sucediendo en físico, por lo que acudo a este espacio con la esperanza de encontrar alguna idea viable.

Como siempre, muchas gracias.
 

Adjuntos

  • RPM 4 DIGITOS.rar
    18.2 KB · Visitas: 143
Última edición:
Saludos foreros,

Estoy intentando medir rpm para un motor dc, parece funcionar aunque no del todo bien, utilizo un 7447 y un encapsulado de 4 displey de 7 seg, ya me quedé sin ideas para que no se note el parpadeo, así como sucede en la simulación está sucediendo en físico, por lo que acudo a este espacio con la esperanza de encontrar alguna idea viable.

Como siempre, muchas gracias.
Saludos DEPREDADORX1
¿Seguro que montaste el circuito físicamente?
Lo digo porque tienes transistores NPN con el emisor hacia VDD para conmutar los displays.
Aparte resistencias de 100K para los segmentos. En fin. ;)
Modifique el programa que adjuntaste y el diseño para hacerlo funcionar.
Se puede simular el circuito, pero a baja velocidad de conmutación.
Lo deje en 250 mS para que se pueda apreciar la conmutación de los displays.
Cuando se monte el circuito, hay que cambiar los retardos a 2mS.
Con ese retardo es como físicamente me ha dado buenos resultados la multiplexación.
Pero yo he usado tablas LookUpL para no usar el decodificador 7447 o 7448,
y trabajar los segmentos directamente por un puerto del micro.
En lo personal me gusta más como se muestran los números de esta forma.
Ya que puedes modificar el número 6 y el 9, que los 744X ya tienen definidos.

Prueba el programa modificado y nos cuentas como te fue.

Suerte.
 

Adjuntos

  • RPM 4 DIGITOS(2).rar
    19.9 KB · Visitas: 140
Gracias por responder,

Efectivamente lo monté con 3904 y funciona la conmutación. He vuelto a probar y el problema persiste, en definitiva para que me funcione tengo 2 opciones, eso creo, una sería utilizar un puerto por cada displey directamente, lo que funciona perfectamente por cierto pues probé con 2 displey aunque es poco práctico pues se utilizan muchos pines; la otra forma me parece la más adecuada, utilizar tres 4511 para 3 displeys, esto eliminaría el parpadeo ya que esto decodificadores a 7 seg tienen latch y permiten memorizar los datos para mostrarlos hasta que se refresquen nuevamente. En realidad lo que quería era implementarlo con lo que tenía, pic16f877+4447+módulo de 4 displeys, pero veo que así no se ve nada bien, de todas formas mi sincero agradecimiento por la ayuda, apenas lo implemente, lo subo por si alguien lo llega a necesitar.
 
Gracias por responder,

Efectivamente lo monté con 3904 y funciona la conmutación. He vuelto a probar y el problema persiste, en definitiva para que me funcione tengo 2 opciones, eso creo, una sería utilizar un puerto por cada displey directamente, lo que funciona perfectamente por cierto pues probé con 2 displey aunque es poco práctico pues se utilizan muchos pines; la otra forma me parece la más adecuada, utilizar tres 4511 para 3 displeys, esto eliminaría el parpadeo ya que esto decodificadores a 7 seg tienen latch y permiten memorizar los datos para mostrarlos hasta que se refresquen nuevamente. En realidad lo que quería era implementarlo con lo que tenía, pic16f877+4447+módulo de 4 displeys, pero veo que así no se ve nada bien, de todas formas mi sincero agradecimiento por la ayuda, apenas lo implemente, lo subo por si alguien lo llega a necesitar.
Me imagine que pasaría eso, ya que el problema del parpadeo se produce al regresar a Counter.
Que tiene un periodo de 1 segundo, y eso detiene la secuencia de conmutación.

OK. Sigue intentando con otros métodos, te deseo suerte.

Hasta luego.
 
bien vamos con menejo de lcd con proton plus ide


dejo esquematico , simulacion , codigo fuente y .hex

BUENAS NOCHES, hola estoy haciendo este programa (lo deje adjunto led22) entonces, quisiera preguntarte xq el programa cuando lo simulo me hace todo bien, pero luego cuando cumple todo el ciclo no se queda titilando?, como cuando uno coloca un solo led y se queda titilando siempre.
espero me hayas entendido y me puedas ayudar. chau...
 

Adjuntos

  • LED22.rar
    29.9 KB · Visitas: 90
Osea que lo que quieres lograr es..... que si no se oprime el boton los leds esten parpadeando de forma indefinida? y que si se oprime cumplan con el ciclo que quieres?
 
exactamente y no entiendo xq no se sigue cumpliendo en ciclo de titilar. Que estoy haciendo mal?



Osea que lo que quieres lograr es..... que si no se oprime el boton los leds esten parpadeando de forma indefinida? y que si se oprime cumplan con el ciclo que quieres?
ah otra cosa y disculpa el abuso, sabes que antes de inicio coloque que todos los puertos estuvieran apagados y en la simulacion no aparecen apagados. pero hago eso mismo programa con dos leds y si me aparecen apagados y cuando presiono el pulsador comienzan a titilar, pero igual no siguen cumpliendo el ciclo sino q se vuelven a apagar. y le quito off y hace lo mismo. la unica manera de que sigan titilando es que le quite la condicion del pulsador. y obviamente no quiero eso. gracias.
 
Última edición:
Hola sydjoe,

Yo pienso que puedes enviar a una subrutina cuando se pulse el botón, mientras se hará el ciclo establecido. los puertos D0 a D5 están inicializados con alto (1), cámbialos a bajo (0) para que empiecen apagados. Espero haber entendido y que te pueda servir de ayuda.

Código:
inicio:
if boton=1  then gosub lo_que_sea  'Se pulsó el botón, ir a subrutina
'esto lo está haciendo constantemente
DelayMS 400
PORTD.0=1
PORTD.1=1
DelayMS 200
PORTD.0=0
PORTD.1=0
DelayMS 600
goto inicio

lo_que_sea:
DelayMS 200
PORTD.4=0
PORTD.5=0
DelayMS 600
return
 
Última edición:
Hola sydjoe,

Yo pienso que puedes enviar a una subrutina cuando se pulse el botón, mientras se hará el ciclo establecido. los puertos D0 a D5 están inicializados con alto (1), cámbialos a bajo (0) para que empiecen apagados. Espero haber entendido y que te pueda servir de ayuda.

Código:
inicio:
if boton=1  then gosub lo_que_sea  'Se pulsó el botón, ir a subrutina
'esto lo está haciendo constantemente
DelayMS 400
PORTD.0=1
PORTD.1=1
DelayMS 200
PORTD.0=0
PORTD.1=0
DelayMS 600
goto inicio

lo_que_sea:
DelayMS 200
PORTD.4=0
PORTD.5=0
DelayMS 600
return
COMO ESTAS DEPREDADORX1?, Gracias por responder. hice lo que tu me dijiste pero me da error el gosub y creo que es xq no la se declarar. Y_Y:oops:
 
Hola, no te preocupes, lo modifiqué de todos modos, lo que sucede con tu código también es que los retardos suman más de 3 segundos haciendo parpadear los leds, como el programa se va ejecutando linea a linea demora demasiado para chequear el boton, la solución más práctica es con la interrupción por puerto B.0, sino estás familiarizado con el tema, debes estudiarlo para comprenderlo un poco más o reducir drásticamente los tiempos de tal forma que el puerto del pulsador pueda ser leido muy rápido, de lo contrario tendrás que pulsarlo durante un largo periodo. Yo me tomé el atrevimiento de modificar el código con el agregado de la interrupción, ojalá te sirva, anexo todo funcionando, si te falla ya es otro cuento con el proteus.
 

Adjuntos

  • LED22--.rar
    47.3 KB · Visitas: 74
Saludos,

Adjunto cuenta vueltas o rpm con displeys de 7 segmentos, uno con decodificador bcd 4511 y otro conectando un displey por puerto, aunque no me gustó mucho el resultado pues en físico con un pulsador muestra valores que a mi parecer están errados porque saltan de uno a otro sin mostrar el ascenso o descenso correspondiente, segun la programación y la simulación parecen funcionar correctamente, bueno ahí quedan, ojalá alguien se anime a mejorarlos y lo publique aquí para aclarar dudas, sino, pues ahí queda por si alguien lo necesita.
 

Adjuntos

  • CUENTA VUELTAS PIC16F877 CON 3 DISPLEYS 7 SEG SIN DECOD BCD.rar
    16.3 KB · Visitas: 139
  • RPM.rar
    19.5 KB · Visitas: 122
saludos DEPREDADORX1 Buenas tardes, estoy leyendo el tutorial parte 4 y estoy haciendo los ejercicios propuestos, y no entiendo la parte en donde dice mostrar los numeros binarios del 0 al 255 en los leds. mi pregunta es que quiere decir con esto?, ya que lo hago y en la simulacion los leds se encienden discontinuamente, y todos se encienden de manera diferente. no entiendo, como deberian o
deben encenderce los leds?, por ejemplo el ejercicio que dice: Los números de inicio y final de 65 a 190, como deberien encender los leds? (adjunto el ejemplo y la simulacion).
 

Adjuntos

  • proton parte 4.rar
    16.3 KB · Visitas: 94
Hola sydjoe,

Ah.... interesante cierto, lo que nosotros vemos solo es el efecto de parpadeo de los leds pero... Ajá, ciertamente es el dialecto de 0 y 1 o lenguaje binario que habla el pic, al enviar la variable X directamente a todo el puerto, el micro no tiene otra forma de hacerlo, al menos que yo sepa. Para que veas bien la cosa, puedes enviar un valor directamente al puerto, eje: portb=1, sino, pues aprende el manejo del lcd y así puedes hacer ambas cosas. Sigue practicando y aprendiendo, publica aquí y ojalá en poco tiempo seas tu quien me eche la mano con los programas, je, je, je.... ;) Suerte!
 
jeje gracias DEPREDADORX1, creo que ya entendi la cuestion es que los leds van a encender segun el numero binario donde esten para asi hacer el conteo y llegar hasta el 255 por ejemplo si es el 64 solo se va encender el bit 6 o en mi caso el PORTD.6. Me di cuenta al hacer lo que me dijiste. espero no se burlen de mi por no haber entendido eso... :cry:
 
por ejemplo si es el 64 solo se va encender el bit 6 o en mi caso el PORTD.6
Saludos sydjoe
Pues aún sigues sin entender.
Toma el puerto como si fuera un número binario de 8 bits.
Empezando por el bit más alto del puerto D tenemos RD7,RD6,RD5,RD4,RD3,RD2,RD1,RD0
Entonces si mandas un 64 al puerto > PORTD = 64 tendrás > b'01100100'
RD7 = 0 RD6 = 1 RD5 = 1 RD4 = 0 RD3 = 0 RD2 = 1 RD1 = 0 RD0 = 0

Te recomiendo una buena lectura sobre el código binario.

Suerte.
 
Saludos sydjoe
Pues aún sigues sin entender.
Toma el puerto como si fuera un número binario de 8 bits.
Empezando por el bit más alto del puerto D tenemos RD7,RD6,RD5,RD4,RD3,RD2,RD1,RD0
Entonces si mandas un 64 al puerto > PORTD = 64 tendrás > b'01100100'
RD7 = 0 RD6 = 1 RD5 = 1 RD4 = 0 RD3 = 0 RD2 = 1 RD1 = 0 RD0 = 0

Te recomiendo una buena lectura sobre el código binario.

Suerte.
jajaja esta bien lo hare!. bueno en realidad quise decir lo que tu dijiste... pero igual gracias. (perdon por el mal entendido)
 
Última edición:
Hola a todos, necesito de urgencia que me ayuden a programar el micro 18F4550 para recibir la distancia detectada de dos sensor sharp que tienen salida analogica detectando una distancia de 10 a 80 cm por los pines A0 y A1, por favor es de urgencia.... se los agradezco a todos y espero que me puedan ayudar... necesito los comandos para recibir las señales por ADC...
 
necesito los comandos para recibir las señales por ADC...
Saludos Stefany9
Adjunto 2 ejemplos sencillos para trabajar con el ADC a 8 y 10 Bits en el 18F4550

Espero que esto sea lo que necesitas, ya que no adjuntas ningún proyecto.

Nota:
Para mostrar los resultados finales, se tiene que usar una formula conforme al tipo de sensor.

Suerte.
 

Adjuntos

  • 18F4550 ADC 8 Bits.rar
    17.2 KB · Visitas: 124
  • 18F4550 ADC 10 Bits.rar
    17.3 KB · Visitas: 122
Saludos a todos,

Solicito ayuda a los amigos del foro, estudiando un poco el uso del timer0 me he topado con una pequeña dificultad para incrementarlo por el pin tocki, supongo un detalle mínimo para que funcione pero no he podido dar, agradecería una mano con este error, publico el codigo a la espera de ayuda.
Código:
Device = 16F877A
Xtal = 20

All_Digital true
'Declaration for LCD 
       Declare LCD_Type = 0         ;LCD is Alpha
       Declare LCD_DTPin = PORTD.4  ;LCD data line starting port.pin
       Declare LCD_ENPin = PORTD.1  ;LCD EN line
       Declare LCD_RSPin = PORTD.0  ;LCD RS line
       Declare LCD_Interface = 4    ;LCD 4 line interface
       Declare LCD_Lines = 2


'**********Establezca la opción de registro************************
             '10110101
OPTION_REG = %10110000      ; PÁGINA 48 de Hoja de datos del PIO 16f877a
                                               ; bit 7=1 deshabilita pull-ups de PORTB
                                               ; bit 6   bit para seleccionar borde de interrupción
                                               ; bit 5   incremento:  0-reloj interno, 1 por pin TOCKI
                                               ; bit 4   Determina flanco de incremento: 0-de high a low, 1-de low a high
                                               ; bit 2=1 }
                                               ; bit 1=0 } Timer0 conjuntos pre-escalador Para 64
                                               ; bit 0=1 }
'**********establece el registro de control de interrupción*******

INTCON = %11100000             ; bit 7=1  permite todas las interrupciones
                               ; bit 6   (PEIE)   permite las interrupciones periféricas (1=Enable, 0=Disable)
                               ; bit 5=1 (tmr0IE) permite interrumpir el desbordamiento del Timer0
                               ; bit 4   (intoIE) bit que habilita la interrupción por B.0
                               ; bit 2   (tmr0IF) es la bandera de desborde de TMR0, se debe limpiar al final de la interrupción.
                               
                             
TRISA=%00010000
TRISD=0

Dim B0 As Byte
Symbol led= PORTA.1
Symbol LED1=PORTA.2

On Interrupt GoTo desborde_TMR0
           
INICIO:
Print At 2,1,Dec B0                       
  High led
  DelayMS 200
  Low led
  DelayMS 200
 GoTo INICIO
Disable

desborde_TMR0:   
Inc B0 
If B0 < 255 Then SALIR            
Cls
B0 = 0                                   
Toggle LED1
SALIR:                               
INTCON.2 = 0                    
Resume                           ; Reanudar el programa principal
Enable                           ; Deshabilitar y habilitar la rutina de interrupción 
End
 
Atrás
Arriba