Autor Tema: USO DE TIMER EN PIC 12F675  (Leído 6145 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Garbanzo

  • PIC10
  • *
  • Mensajes: 13
USO DE TIMER EN PIC 12F675
« en: 30 de Marzo de 2016, 03:04:27 »
HOLA A TODOS  SOY NUEVO EN EL FORO Y EN LA PROGRAMACION , HACE POCO COMENZE A HACER UN PROGRAMA EN EL PIC12F675 EN CCS EN EL CUAL PRETENDO USAR EL TIMER DEL PIC COMO CONTADOR PARA QUE CADA VEZ QUE LLEGUEN DOS PULSOS AL PIC ESTE ENCIENDA UN LED Y SI LLEGAN OTROS DOS SE APAGUE EL LED, LO QUE SUCEDE ES QUE NO PUEDO HACER FUNCIONAR EL TIMER AUNQUE YA VI VARIOS TUTORIALES SOBRE LOS TIMERS
ALGUNA IDEA DE COMO REALIZAR ESTO???
DE ANTEMANO GRACIAS POR SUS RESPUESTAS  :D

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:USO DE TIMER EN PIC 12F675
« Respuesta #1 en: 30 de Marzo de 2016, 06:36:39 »
Podes poner el programa que tenes ?, Por que hasta ahora no sabemos ni en que lenguaje estas programando. Ademas para corregir lo que tengas mal.

Desconectado Garbanzo

  • PIC10
  • *
  • Mensajes: 13
Re:USO DE TIMER EN PIC 12F675
« Respuesta #2 en: 31 de Marzo de 2016, 00:56:51 »
Una disculpa olvide subir el código estoy programando en ccs compiler el código es este:

#include <12f675.h>
#USE DELAY (CLOCK=4000000)
#fuses XT,NOWDT,NOPROTECT
#BYTE TRISIO =0X85         
#BYTE PORTGPIO =0X05
#DEFINE LED PORTGPIO,1


INT PULSO;

Void main()
{
bit_set(TRISIO,0);
bit_clear(TRISIO,1);
bit_set(TRISIO,2);

setup_timer_1(T1_EXTERNAL|RTCC_EXT_L_TO_h|RTCC_DIV_1);
set_timer1(0);

PULSO=get_timer1();

if(PULSO==2)
{
BIT_SET(LED);
set_timer1(0);
}
}

Lo que intento hacer es configurar el timer 1 como contador de flanco de subida y guardar el conteo en la variable "pulso"
y cuando se cuenten dos pulsos encender un led.
Gracias por sus respuestas  :D

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:USO DE TIMER EN PIC 12F675
« Respuesta #3 en: 31 de Marzo de 2016, 13:52:58 »
Tal vez el código debe ser así

Código: C
  1. Void main()
  2. {
  3.    bit_set(TRISIO,0);
  4.    bit_clear(TRISIO,1);
  5.    bit_set(TRISIO,2);
  6.  
  7.    setup_timer_1(T1_EXTERNAL|RTCC_EXT_L_TO_h|RTCC_DIV_1);
  8.    set_timer1(0);
  9.  
  10.    while(1)
  11.   {
  12.        PULSO=get_timer1();
  13.        if(2 == PULSO)
  14.        {
  15.             BIT_SET(LED);
  16.            //set_timer1(0);
  17.            while(1); // aqui se acaba tu código, cuando ha "detectado" dos pulsos
  18.        }
  19.   }

No conozco mucho de CCS, pero que hace la función get_timer1 ????
« Última modificación: 31 de Marzo de 2016, 13:55:42 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:USO DE TIMER EN PIC 12F675
« Respuesta #4 en: 31 de Marzo de 2016, 18:33:50 »
Creo que se podria achichar aun mas.. por ejemplo el TRISIO no haria falta por que el mismo compilador lo pone a entrada o salida segun como se usa, el pin

Código: C
  1. #USE FAST_IO(A)
  2.  
  3.  
  4. void main(void)
  5. {
  6.    set_tris_a(0b11111101)
  7.    output(PIN_A1);
  8.  
  9.    setup_timer_1(T1_EXTERNAL|RTCC_EXT_L_TO_h|RTCC_DIV_1);
  10.    set_timer1(0);
  11.  
  12.    while(1)
  13.   {
  14.        PULSO=get_timer1();
  15.        if(bit_test(PULSO,0) == 0)
  16.        {
  17.             output_toggle(PIN_A1);
  18.        }
  19.   }

Todo suponiendo que la configuracion del timer sea correcta. No se como acceder a GPIO, pero por lo que vi en internet es como si fuera el puerto A.. Algo un poco confuso.

Desconectado Garbanzo

  • PIC10
  • *
  • Mensajes: 13
Re:USO DE TIMER EN PIC 12F675
« Respuesta #5 en: 02 de Abril de 2016, 00:24:25 »
Gracias por sus respuestas probé con esos códigos que propusieron pero tampoco funciono  :?
creo que KILLERJC tiene razón y la configuración del timmer debe ser diferente ya que me ocurrió lo mismo
con la configuración del puerto en vez de ser RA0 o RB0 tenia que ser GPIO0 para funcionar.
aunque yo creía que la configuración del timmer en todos los pic era la misma

Desconectado Garbanzo

  • PIC10
  • *
  • Mensajes: 13
Re:USO DE TIMER EN PIC 12F675
« Respuesta #6 en: 07 de Abril de 2016, 20:08:37 »
hola todos el programa ya funciona el problema era que la configuración del puerto gpio estaba mal al parecer hay que configurar
todo el puerto gpio que en el caso de este pic (12f675) son todos los pines excluyendo alimentación y tierra
el programa quedo así donde se configura el timer 0 como contador de eventos externos y cuando este llega a dos pulsos enciende un led
y al llegar a 4 (o conar otros dos pulsos) se apaga lo dejo aca por si alguien tiene el mismo problema y le pueda servir  ;-)

#include <12f675.h>
#fuses hs,nowdt,noprotect,noput
#use delay (clock=4M)
#byte gpio=0x05     //puerto gpio en espacio de memoria 05
#byte trisio=0x85   // trisio en espacio de memoria 85h
int8 cuenta;

void main()
{
set_tris_a(0b001100); //configuracion del trisio donde las entradas son el timer0(bit2) y el mclr(3) y el bit 1 es la salida para el led
setup_timer_0(rtcc_ext_h_to_l|rtcc_div_1); //configuracion del timer0 como contador de flanco de bajada y prescaler de 1
set_timer0(0); //inicio del timer0 en 0
while(true)
{
cuenta=get_timer0(); //almacena la cuenta del timer en la variable de 8 bits "cuenta"
if(cuenta==2)  //cuando el contador llegue a 2
{
bit_set(gpio,1);  //enciende el led
}
if(cuenta==4)  /cuando el contador llegue a 4
{
bit_clear(gpio,1); //apaga el led
set_timer0(0); //reinicia el timer
}
}
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:USO DE TIMER EN PIC 12F675
« Respuesta #7 en: 07 de Abril de 2016, 20:13:16 »
Una pregunta, intentaste usar:

output_high(PIN_A0);

en ves de:

bit_set(gpio,1);  //enciende el led

y si funciona ?


 

anything