Problema Puerto A6 y A7 en el pic 16f628a

Hola a todos tengo un problema, tengo un circuito que uso lcd y teclado 3x4 los cuales se me acabaron los puertos en el pic,a excepcion de 3 A5,A6 y A7 el A5 como sabemos es el MCRL activado en bajo y solo entrada por eso no lo topo pero necesito los puertos restantes hacerles salidas pero no me señala como salida viendo en el datasheet me dice que es CLKOUT y CLKIN (los clocks) quiero desactivar esa opcion para que sea salida.

Estoy trabajndo en Microcode y simulando en Proteus
 
si estoy trabajando con el oscilador interno, como activo el fuse???
Con:
Código:
@ DEVICE PIC16F628A
@ DEVICE [COLOR=Red]INTRC_OSC_NOCLKOUT[/COLOR],[COLOR=Blue]PROTECT_OFF,WDT_OFF,PWRT_ON,MCLR_ON,BOD_OFF,LVP_OFF,CPD_OFF[/COLOR]
; O con
[COLOR=Red]@ DEVICE INTRC_OSC[/COLOR]
Lo azul es extra.:apreton:
 
Última edición:
Hola buen día. estoy tratando de utilizar A4 A5 A6 A7 como pines de salida en el programa CCS compiles. de casualidad ustedes saben como hacer este procedimiento. mil gracia :cry: :oops::oops::oops:
 
En el PIC16F628A el pin RA4 es con drenador abierto. (Open Drain)
El pin RA5 es el reset y sólo puede ser usado cómo entrada.
Y los pines RA6 y RA7 son para el oscilador externo, así que únicamente funcionarán como pines E/S, si se usa el oscilador interno.

En la hoja de datos te podrás enterar de muchas cosas más.
 
Hola D@rkbytes, tengo un pequeño problema y no se si es por la configuracion del puerto_A o por que hago mal el codigo, me explico:

Uso el pic 16F628A y tengo el programa para hacer un tacometro usando el pin A4 como detector de pulsos, el clasico codigo que corre por las webs, pues cuando pongo en funcionamiento el programa este se queda parado y no hace caso a los sensores, probe con el sensor optico reflexivo TCRT5000L y nada de nada, tambien con un interruptor de barrera, el HY880N y lo mismo, no cuenta, sinembargo si lo hago como un simple contador, no como tacometro, funciona bien.

He visto que tiene en el puerto_A 8 entradas y mi duda es esa, si tengo bien configurado el pic ya que en proteus corre bien, aunque uso como sensor el PC817 al no tener otro que poder poner para hacer la funcion similar.

Devo configurar 0x00, que es como lo tengo ahora y en el simulador funciona bien, que son todo salidas, o 0x70 indicando A4_5_6_7 como entradas?
 
Hola D@rkbytes, tengo un pequeño problema y no se si es por la configuracion del puerto_A o por que hago mal el codigo, me explico:

Uso el pic 16F628A y tengo el programa para hacer un tacometro usando el pin A4 como detector de pulsos, el clasico codigo que corre por las webs, pues cuando pongo en funcionamiento el programa este se queda parado y no hace caso a los sensores, probe con el sensor optico reflexivo TCRT5000L y nada de nada, tambien con un interruptor de barrera, el HY880N y lo mismo, no cuenta, sinembargo si lo hago como un simple contador, no como tacometro, funciona bien.

He visto que tiene en el puerto_A 8 entradas y mi duda es esa, si tengo bien configurado el pic ya que en proteus corre bien, aunque uso como sensor el PC817 al no tener otro que poder poner para hacer la funcion similar.

Devo configurar 0x00, que es como lo tengo ahora y en el simulador funciona bien, que son todo salidas, o 0x70 indicando A4_5_6_7 como entradas?

Buenas
si utilizas el puerto RA4 como contador de pulsos debes configurar el timer0 para tal fin, solo tienes que ver el registro del timer0 en el datasheet.
 
Si quieres usar esos pines configura el oscilador interno o sino tu programa no corre porque los pines a6 y a7 son para usarlo con oscilador de crystal, entonces como los estás usando sin configurar no hay inicio del programa debido a que está sin oscilador

! EN EL PROTEUS SE PONE EL OSCILADOR POR ARTE DE MAGIA AUNQUE ESTE MAL CONFIGURADO! sino muestra tu programa para saber que es lo que quieres hacer y ayudarte mejor
 
Última edición por un moderador:
Bueno perdon a todos y gracias de antemano, no he podido contestar antes, pongo el programa y el codigo y me comentais donde puede haber el error, por lo que que leido hay muchos conceptos del 16F628A que no habia tenido encuenta.

wasausky no habia pensado en lo de proteus.
 

Adjuntos

  • Tacometro.rar
    70.7 KB · Visitas: 17
Modifiqué algunas cosas en el programa.
Y en el esquema corregí la conexión del optoacoplador.

Como tu versión de proteus es inferior, seguramente no podrás ejecutar la simulación, pero adjunté el esquema.
 

Adjuntos

  • Tacómetro.rar
    125.7 KB · Visitas: 22
Jejejejeje, hay que fastidiarse, te cuento D@rkbytes y para los que les interese:

Ahora el programa corre perfectamente con tu codigo, que mas o menos es parecido al que yo habia puesto, con algunas modificaciones por tu parte como la variable flag_timer1 que la usas para que indique segundos o minutos, pero salvo eso y la eliminacion de los fuses no veo diferencia, si la veo en el circuito y aqui viene mi gran sorpresa y no por tu circuito si no por mi error garrafal, yo puse que el interruptor de barrera era un HY880N, pues noooooo, de hay que no encontrase hoja de datos, es un HY860N, problema de hacerte mayor es que pierdes vista, jejejeje, este interruptor de barreara lleva el transistor al reves de los otros, me equivocado en los pines, de hecho tengo hechas varias placas y por eso no me funcionaba ninguna, que gran fallo el mio.

Cual es el motivo de que tu programa corra y el mio no?, puede ser tambien la configuracion del timer0?, e incluso la que puse del puerto_A ya que visto que tu no has puesto ninguna configuracion del puerto.

Gracias D@rkbytes por tu ayuda.
 
Última edición por un moderador:
¿Cuál es el motivo de que tu programa corra y el mio no?
¿Puede ser también la configuración del timer0?
E incluso la que puse del puerto_A, ya que he visto que tú no has puesto ninguna configuración del puerto.
Puedes salir de dudas mirando los registros de los archivos .cof.
Entra en modo de depuración con proteus y en Watch Window agrega los registros para observar las diferencias.

Sin embargo, suelo no configurar cosas que el compilador establece por defecto.
Por ejemplo:
Muchas personas declaran set_tris_x(0xFF); cuando quieren todo el puerto como entrada, siendo que ese es el valor por defecto en el POR (Power On Reset) para todos los puertos.
Tampoco tiene caso establecer pines de salida, si se va a usar output_x(); o instrucciones nativas.
Ya que algunas instrucciones en compiladores de alto nivel, suelen configurar los pines seleccionados en salidas o entradas, automáticamente.

Y para que no busques por otro lado cuál debe ser la configuración de los registros, siempre debes tener a la mano la hoja de datos y mirar el archivo .h correspondiente para ver los parámetros.
En PIC C Compiler aparecerá en el árbol de archivos tras una compilación correcta, o en su defecto, puedes agregarlo antes de compilar.
 
D@rkbytes gracias, contigo siempre siempre se aprende algo, con lo de las ojas de datos, ya me gustaria saber interpretarlas bien, uno sabe lo que sabe y gracias a que estais vosotros para resolver ciertas dudas, pero encima, para mas inri, bienen todas en ingles y eso si es un problemilla, aunque tenga el traductor, muchos, asi como yo, no sabemos ingles jejejeje, que le vamos hacer.

Me aprobecho de ti para hacerte una ultima pregunta, como es que cuando mide flutua tanto en los datos?, hay veces que haciendo pruebas, aunque es insignificante, si tubiese que aparecer un numero impar, este no lo saca? ejemplo si tubiese que salir un 5, sale, o 6 o 4, esto en revoluciones bajas, ya no te digo en revoluciones mas altas, de nuevo gracias.
 
Es por la resolución del timer. Mientras más cercana sea la frecuencia al limite del desborde, más se perderá resolución.
Así que puedes realizar comparaciones para ajustar el divisor.
El Timer 0 es de 8 bits y configurado con el divisor 1:1, se podrá contar hasta 255 pulsos y luego se desbordará.
Si el conteo fuera con el Timer 1 que es de 16 bits y el divisor 1:1, podrás contar hasta 65535.

También se pueden realizar cálculos matemáticos para realizar conteos más precisos.
Por ejemplo, usando ciclos de reloj o conteos.
Pero como se hacen dentro del main, el microcontrolador únicamente podrá ser destinado para ese proceso.

Sin embargo, te recomiendo que uses el Timer 1 para contar los pulsos y con algunas multiplicaciones y divisiones, podrás obtener mejor resolución.
Y si la quieres fácil, puedes usar una variable float.
Su entrada de reloj externo es el pin T1CKI
 
Atrás
Arriba