TODOPIC
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
. ¿Perdiste tu
email de activación
?
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión
Este tema
Este sub-foro
Todo el foro
Google
Inicio
Ayuda
Buscar
Ingresar
Registrarse
TODOPIC
»
Microcontroladores PIC
»
Lenguaje C para microcontroladores PIC
(Moderadores:
pikman
,
pocher
,
vszener
,
Suky
) »
Como configurar el timer 1 en modo contador
« anterior
próximo »
Imprimir
Páginas:
1
[
2
]
Ir Abajo
Autor
Tema: Como configurar el timer 1 en modo contador (Leído 9256 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Suky
Moderador Local
DsPIC33
Mensajes: 6758
Re: Como configurar el timer 1 en modo contador
«
Respuesta #15 en:
08 de Octubre de 2009, 23:32:06 »
La idea es la siguiente:
Código: C
#priority TIMER1,RB
char
Tecla
;
int1 Actualizar_hora
=
0
,
Tecla_pulsada
=
0
;
#INT_TIMER1
timer1_rsi
(
)
{
++
Conta_Segundos
;
Actualizar_hora
=
1
;
}
// Interrupcion RB4 - RB7 /////////////////////////////////////////////////////
#INT_RB
rb_isr
(
)
{
byte changes
;
changes
=
last_b
^
portb
;
//XOR.
last_b
=
portb
;
if
(
bit_test
(
changes
,
5
)
&&
!
bit_test
(
last_b
,
5
)
)
{
Tecla
=
1
;
}
if
(
bit_test
(
changes
,
6
)
&&
!
bit_test
(
last_b
,
6
)
)
//INCREMENTAR.
{
Tecla
=
2
;
}
if
(
bit_test
(
changes
,
7
)
&&
!
bit_test
(
last_b
,
7
)
)
//DECREMENTAR.
{
Tecla
=
3
;
}
}
void
main
(
void
)
{
lcd_init
(
)
;
set_tris_b
(
0xf0
)
;
port_b_pullups
(
TRUE
)
;
portb
=
0xf0
;
setup_timer_1
(
T1_EXTERNAL
|
T1_DIV_BY_2
|
T1_CLK_OUT
)
;
//el preescaler q va es 2.
set_tris_c
(
0b00000011
)
;
set_tris_d
(
0x00
)
;
lcd_gotoxy
(
1
,
1
)
;
lcd_putc
(
"Reloj Digital"
)
;
delay_ms
(
1500
)
;
lcd_putc
(
"
\f
Hora 00:00:00 "
)
;
lcd_gotoxy
(
1
,
2
)
;
lcd_putc
(
" .. "
)
;
delay_ms
(
250
)
;
lcd_gotoxy
(
1
,
2
)
;
lcd_putc
(
" "
)
;
delay_ms
(
250
)
;
lcd_gotoxy
(
1
,
2
)
;
lcd_putc
(
" .. "
)
;
delay_ms
(
250
)
;
set_timer1
(
0
)
;
enable_interrupts
(
INT_RB
)
;
enable_interrupts
(
INT_TIMER1
)
;
enable_interrupts
(
GLOBAL
)
;
while
(
1
)
{
if
(
Actualizar_hora
==
1
)
{
Actualiza_hora
=
0
;
...
}
if
(
Tecla_pulsada
==
1
)
{
Tecla_pulsada
=
0
;
switch
(
Tecla
)
{
case
1
:
...
}
}
}
}
Saludos!
En línea
No contesto mensajes privados, las consultas en el foro
Trev
PIC16
Mensajes: 115
Re: Como configurar el timer 1 en modo contador
«
Respuesta #16 en:
09 de Octubre de 2009, 20:54:22 »
Suky probe tu código estan blandos lo pulsadores estan que vuelan y fíjate que debujeando en proteus actualiza la hora cada un segundo exacto pero en la proto sigue = asique concluyo o que mi crystal se corrio de frecuencia o algo pero que el programa esta bien adjunto la imagen de proteus,Saludos
En línea
Suky
Moderador Local
DsPIC33
Mensajes: 6758
Re: Como configurar el timer 1 en modo contador
«
Respuesta #17 en:
09 de Octubre de 2009, 22:21:07 »
Te he convencido
Con respecto al hardware real, mmm.. lo has conectado como indica el datasheet, lo mas cerca posible del PIC?
En línea
No contesto mensajes privados, las consultas en el foro
Trev
PIC16
Mensajes: 115
Re: Como configurar el timer 1 en modo contador
«
Respuesta #18 en:
10 de Octubre de 2009, 00:40:25 »
Mira amigo Suky nunca use la directiva del priority pero supongo que acepté lo de las banderas porque se trata solo de if en el programa principal por eso quise meter dentro de la interrupción del timer el cálculo de la hora por ejemplo,porque no se puede controlar la carga del contador de programa;ej: en la función Mi_Hora estando en el programa principal q pasaba si se interrumpia por timer justo cuando el pc estuviese apuntando despues de la primera instrucción?:se hubiera ignorado el incremento del contador de segundos lo cual hubiera redundado en una perdida de tiempo ya que el registro MomentoActual seguiria operando con el valor previo a la interrupción,por eso a veces hago largas las interrupciones porque de alguna manera me sirve para ``controlar´´ el pc.Saludos.
PD:No cambia lo ponga cerca o mas lejos para mi es el cristal de 4MHz que esta corrido para arriba porque adelanta y no atrasa vi la hoja de datos como me dijiste la lei con dificultad ya que odio el english y lo único que dice es q van de 33pf pero habla de LP y no se si estara hablando para este caso (yo uso 2 de 27 pf no creo q haya gran diferencia =) asique yo esperaria que atrasara y no que adelantara.
En línea
MLO__
Colaborador
DsPIC33
Mensajes: 4581
Re: Como configurar el timer 1 en modo contador
«
Respuesta #19 en:
10 de Octubre de 2009, 12:31:28 »
Hola.
El cristal, al que se refiere Suky, debe ser de 32k768Hz. El de 4MHz es el cristal para el oscilador principal, el otro es para el oscilador secundario para el Timer1 (T1OSI - T1OSO).
Saludos
«
Última modificación: 10 de Octubre de 2009, 12:35:02 por MLO__
»
En línea
El papel lo aguanta todo
Trev
PIC16
Mensajes: 115
Re: Como configurar el timer 1 en modo contador
«
Respuesta #20 en:
10 de Octubre de 2009, 13:49:31 »
Da igual
alguno o los dos estan corridos para arriba y ¿porque debe estar lo más cerca posible?
,¿Coincidimos en esto?: el clock envia un flanco asc cada 1/32768 s si esto es cierto y si tengo algún error en el programa tiene que retrasar no adelantar,no se voy a ver si consigo mejores cristales y sino pasare al DS1307 y espero tener mejor suerte.
En línea
Imprimir
Páginas:
1
[
2
]
Ir Arriba
« anterior
próximo »
TODOPIC
»
Microcontroladores PIC
»
Lenguaje C para microcontroladores PIC
(Moderadores:
pikman
,
pocher
,
vszener
,
Suky
) »
Como configurar el timer 1 en modo contador