TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: zidfrid23 en 22 de Diciembre de 2009, 14:07:41
-
hola amigos del foro.
veran soy novato en pic y deseo realizar una rutina que me genere retardos sin parar la maquina, para ello tengo la intencion de usar el timer0, el problema es que me escribi un codigo de prueba sencillo y este no me corre en el pic.
el siguiente es el codigo, aclaro que programo con el picC:
#include "C:\Users\Alejandro\Documents\PIC\timer0\timer0.h"
#int_RTCC
void time_isr()
{
output_high(pin_a2);
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
set_timer0(0);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
output_a(0x00);
SET_TRIS_A(0x38);
while(1);
}
es como si no estubiera entrando a la interrupcion por overflow del timer, y no se por que.
Bueno eso es todo amigos, cualquier ayuda o sugerencia es bien benida, y de antemano gracias por su tiempo e interes.
-
Hola, no has definido que oscilador usas. Si usas uno de 4MHz es recomendable que agregues el fusible...
#fuses XT
Ya que puede que el pic esté esperando otro oscilador y por eso no funciona.
-
verifica el fuse LVP y ponlo en NOLVP
-
sube tambien este archivo
#include "C:\Users\Alejandro\Documents\PIC\timer0\timer0.h"
-
bueno amigos este es el .h de mi ensayo con el timer, el problema persiste.
#include <12F675.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPUT //No Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected
#use delay(clock=4000000)
gracias por la colaboracion amigos.
-
Hola.
El pin MCLR si esta conectado a Vcc?
-
yo reiniciaria el timer0 despues de prender el PIN a2, intenta para ver que sucede.
set_timer0(0);
primero pruebalo en un simulador, puede ser PROTEUS, si funciona ahi, trata de programar el PIC con un programa que encienda y apague (con un retardo de un segundo) todos los puertos del PIC, esto para comprobar que estas programando correctamente el PIC, y luego comprueba que todo este bien conectado que este llegando el suficiente voltaje a los pines indicados y nos comentas como te va.
INTENTO HACER EL PROGRAMA SIN EL COMPILADOR, YA QUE ESTOY EN UN COMPUTADOR DISTINTO MAS O MENOS TE RECOMIENDO QUE QUEDE ASI:
#include <12F675.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES PUT //Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES BANDGAP_HIGH
#use delay(clock=4000000)
#INT_TIMER0
void timer0(){
output_high(PIN_A2);//enciendes el pin A2
delay_ms(10);//Tiempo de duracion de encendido del pin A2
output_low(PIN_A2);//apagas el pin A2
set_timer0(0);//vuelves a esperar los 65 ms
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);// timer para que se dispare cada 65 ms
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
output_a(0x00);
set_timer0(0);
while(true){
}
}
Mira que quite el PIN MASTER CLEAR y tambien le coloque el cristal interno sin salida.
-
:?
Una vez se desborda, vuelve a su cuenta normal no?
Tienes el esquemático por ahi para verlo?
-
Disculpame, pero no veo en el código "clear_interrupt(int_timer0);"
Si no lo limpias se queda en la interrupt indefinidamente (en cuanto se ejecuta el retfie vuelve a entrar).
Saludos.
-
Disculpame, pero no veo en el código "clear_interrupt(int_timer0);"
Si no lo limpias se queda en la interrupt indefinidamente (en cuanto se ejecuta el retfie vuelve a entrar).
Saludos.
Hola bueno ya realize la simulacion en proteus y me funciono perfectamente con el codigo que tengo arriba, envia un pulso de duracion de 10 ms cada 65 ms..
-
Hola.
CCS limpia la bandera por nosotros ... jeje (eso es lo que nos mal-acostumbra)
Creo que es cuestión del hard, esperemos algún esquemático para revisar.
Saludos