Haz una pregunta
  Foros de Electrónica » Principiantes » Cuestiones Elementales de Electrónica
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/09/2015 #1


Timer con PIC12F629. Tiempos
Hola gente del foro, hace mucho no pasaba por aca, y ahora ando necesitando si me pueden dar una manito con esto.

ME "he hecho" un temporizador con el PIC 12F629, para que controle 3 tiempos.
EL programita seria este:
Código:
'--------------------------INICIO------------------------------------
TRISIO = %111001  'GP4 y GP5 y 3 son entradas; GP0 y GP1 y 2 son salidas
CMCON = %111111  'deshabilita comparadores
GPIO = 0  'pone a 0 todas las salidas
WaitUs 0  'establece una demora para el oscilador interno
'--------------------------NOMBRO VARIABLES------------------------
Symbol llave = GPIO.3  'Determ puerto 4 llave
Symbol intermedio = GPIO.4  'Determ puerto 3 el medio
Symbol rele = GPIO.1  'Determ pto 1 220V
Symbol contador = GPIO.2  'Numero de ciclos llevados = dias
'--------------------------CERO------------------------------------
	timer:  'Programa gral
				If llave = 1 Then  'Condicional, si la llave esta prendida
				Goto tiempo2  'responde con tiempo2
				Else  'sino
				Goto tiempo1  'responde tiempo1
				Endif  'fin del condic
'--------------------------PRIMERO----------------------------------
	tiempo1:  'Tiempos para 1
				If intermedio = 1 Then
				Goto tiempointermedio  'Vaya a tiempointermedio
				Else
		rele = 1
		WaitMs 8
		rele = 0
		WaitMs 8
				Endif
	Goto timer
'--------------------------SEGUNDO----------------------------------
	tiempo2:  'Tiempos para 2
				If intermedio = 1 Then
				Goto tiempointermedio  'Vaya a tiempointermedio
				Else
		rele = 1
		WaitMs 10
		rele = 0
		WaitMs 10
				Endif
	Goto timer
'--------------------------TERCERO---------------------------------
	tiempointermedio:  'Tiempos para el medio
		rele = 1
		WaitMs 1
		rele = 0
		WaitMs 5
	Goto timer
'--------------------------FIN--------------------------------------
End

(NOTA: Si, el inicio, donde seteo los puerto y todo eso lo saque copy-paste de internet.)

Aparentemente, probandolo en PROTEUS y en PIC Simulator. no da errores. Pero,mi conflicto viene aca:

Los tiempos que puse para probar el programa son infimos, yo necesito tiempos de 18hs(64800000 ms), 12hs(43200000 ms), etc. Valores en horas de medio día en adelante.

Hay algun problema si pongo esos calores en el programa? Es factible? En caso de ser SI, con mucho error sera?


Una vez mas les agradezco recontra re mil muchisisismo la buena onda, la generosidad de su tiempo y conocimientos y la paciencia.

SAludos!!!
10/09/2015 #2

Avatar de TRILO-BYTE

es muy facil

es incrementar una variable, yo no programo en basic pero si en C y cuando hago tiempos cortos como de us puedo obtener horas

segun tu tienes ya los segundos

cada vez que llege un segundo a 60 incrementas una variable minuto y cuando llegue a 60 incrementas hora y cuando hora llegue a 24 incrementas a dias

muy facil con 4 bytes tienes:

un byte para 60 segundos
otro byte para 60 minutos
un byte para horas 24
y un byte para 31 dias

bien facil no?
10/09/2015 #3


Osea, vos decís que esta mal usar la "funcion WaitMs???

Medio que si entendí tu explicación medio que no. Este micro tiene un "clock" de 4Mhz, no deberia tener encuenta eso, para hacer aumentar la variable? Porque siendo asi me aumentaria en 1 la variable segundos por cada ciclo, y eso serian 4.000.000/s, o he entendido todo MUY mal??

Pero resumiendo, esta mal usado, o no se puede usar la funcion WaitMs??
10/09/2015 #4
Moderador

Avatar de D@rkbytes

Es mejor que uses los timers del PIC, el 12F629 tiene el Timer 0 de 8 bits y el Timer1 de 16 bits.
Con el Timer 1 puedes alcanzar periodos más largos que con el Timer 0.

Una de las ventajas del Timer 1, es que cuenta con oscilador externo, y si colocas en ese oscilador un cristal de 32768 Hz, puedes hacer que desborde cada 1000 ms. (1 segundo)
De esa forma tienes un RTC (Reloj en tiempo real) muy preciso.

También puedes hacer que cuente internamente usando el reloj del sistema.
Lo configuras para que desborde sobre tiempos fáciles de calcular, por ejemplo, cada 1, 10, 100, o 500 ms.
Y así haces lo que mencionó TRILO-BYTE. Eso evita el uso de WaitMS que congelará al microcontrolador.
11/09/2015 #5


Ha bueno, ahora me pongo a investigar sobre eso. LA verdad que es muy poco lo que se, y creí que con eso andaba.
Espero estarlos molestando de nuevo, pero para mostrarle algo mas terminado jaja..

PD: UN pregunta asi sin fin de seguir alargando el post, que significa que se congelaria el micro, y porque pasaria?

De nuevo muchas gracias por la onda y el tiempo!
11/09/2015 #6


J3R0ss dijo: Ver Mensaje
...
PD: UN pregunta asi sin fin de seguir alargando el post, que significa que se congelaria el micro, y porque pasaria?
.....
Hola...Por que puede realizar una sola tarea a la vez y mientras cuenta el tiempo, no puede hacer otra cosa.
Saludos.

Ric.
11/09/2015 #7


ricbevi dijo: Ver Mensaje
Hola...Por que puede realizar una sola tarea a la vez y mientras cuenta el tiempo, no puede hacer otra cosa.
Saludos.

Ric.
Perdón, dije que no la iba a alargar mas.

Pero si lo que yo necesito es que mantenga en alto "una patita" activandome un rele, cuente ese tiempo, y de "de baja la patita".

Debería funcionar lo que estoy planteando no? (según Proteus funciona)

O realmente tengo un error conceptual MUY de base? Contar y tener en alta una patita serian dos tareas? No se toma como que queda en alta y esa tarea ya termino?
11/09/2015 #8

Avatar de TRILO-BYTE

congelar el micro se refiere a que no hace nada un ejemplo basico

prendo un led rojo
delay(1000); //un segundo de retraso

prendo un led verde
delay(200); //un retardo de 200 milisegundos

¿que pasaria si quiero que ambos prendan simultaneamente respetando ambos su tiempo de encendido y apagado?
11/09/2015 #9


TRILO-BYTE dijo: Ver Mensaje
congelar el micro se refiere a que no hace nada un ejemplo basico

prendo un led rojo
delay(1000); //un segundo de retraso

prendo un led verde
delay(200); //un retardo de 200 milisegundos

¿que pasaria si quiero que ambos prendan simultaneamente respetando ambos su tiempo de encendido y apagado?
Si si , te re entiendo. Y ahi si veo mi falla en mi falta de conocimientos.

Ahora, como para salir del paso mi configuración es valida verdad? (Osea, yo quiero activar rele, esperar t segundos, desacativar rele y asi repetir)

PD: en caso de ser afirmativo, prometo en algun momento instruirme para no depender de mi ignorancia.
14/09/2015 #10


J3R0ss dijo: Ver Mensaje
Si si , te re entiendo. Y ahi si veo mi falla en mi falta de conocimientos.

Ahora, como para salir del paso mi configuración es valida verdad? (Osea, yo quiero activar rele, esperar t segundos, desacativar rele y asi repetir)

PD: en caso de ser afirmativo, prometo en algun momento instruirme para no depender de mi ignorancia.
Lo que pretendes se puede hacer perfectamente, lo que pasa es que no son dos tareas, primero se activa el relay y a continuación se espera hasta que se cumpla el tiempo pre-fijado para luego desactivar el relay(son tres operaciones). Según como realices el programa en el tema del conteo del tiempo, se puede decir que el micro se "congela"(no hace otra cosa). Hay formas para que esto no pase(interrupciones, etc) o minimizar el efecto sobre el programa en sí.

Ric.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Cuestiones Elementales de Electrónica

Deseas aprender electrónica y necesitas ayuda para comenzar? Resuelve tus dudas en esta sección.

Cerrar
Foros de Electrónica » Principiantes » Cuestiones Elementales de Electrónica

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.