TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: venerable13 en 01 de Marzo de 2010, 10:51:16
-
Hola tengo un 16877a que simulado funciona correctamente, pero al probarlo en la realidad no hace lo que debería así que os pregunto qué puede ser que tenga mal? A mi entender es cuestion o de fuses o de configuración. He leído que la RA4 es open drain así que si yo la tengo como entrada haría falta poner algo en la configuración o físicamente un pull up? o eso es sólo para cuando sea salida?
#include <16F877A.h> //libreria para el manejo del pic16f877a
#use delay(clock=12000000) //declara la frecuencia del cristal
#include <string.h> //para usar los string (textos)
#include <stdlib.h> //biblioteca estándar de propósito general
#fuses HS,PUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT,NOWRT //palabra de configuración PUESTO "--"PUT Y NOWRT
#use standard_io(a) //Esta directiva afecta al código que el compilador genera para las instrucciones de entrada
#use standard_io(b) // y salida. El método standar de hacer I/O causará que el compilador genere
#use standard_io(c) //código para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza
#use standard_io(d)
#use standard_io(e)
#define use_portb_lcd TRUE //utiliza el port b para lcd
#include <ds1307mod.c> //libreria ds1307 modificada
#include <flex_lcd.c> //libreria de lcd
void main(void){
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_counters(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
/*setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);*/
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_a (0xff); //configuramos los puertos
set_tris_d (0x01);
set_tris_b (0x00);
set_tris_c (0x00);
set_tris_e (0xff);
output_low(PIN_D6);
output_low(PIN_D7);
Como véis tengo dudas en la configuración está puesta correctamente? Necesitaré cai todo los pines y lo único que empleo son entradas, salidas, una LCD en el B y el I2C para el DS1307. Vuelvo a preguntar, hay algo mal en la configuración? En setup de los timers si utilizo el timer0, qué pongo? esto?
setup_timer_0(RTCC_INTERNAL,RTCC_DIV_256); //configuracion interrupcion TMR0
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);*/
Está bien especificado el 0 para mi temporización que no puse el código y los otros deshabilitados?
Espero que alguien con experiencia me aconseje sobre la configuración en la realidad para este pic ya que dispongo de poco tiempo. Muchísimas grácias y si hay algo que no tenga en cuenta háganmelo saber
-
Parece que los fuses están correctos. Primero que nada, verifica que las conexiones estén correctas. No se si lo que sigue ya lo hiciste: Coloca una capacitor de 100nf bien cerca entre los pines VCC y GND del pic. Verifica que el pin de reset este conectado a VCC. Te aconsejo que si tienes entradas sin usar las conectes a GND. Colócale los capacitores al cristal, del valor que te aconsejen en la hoja de datos. Verifica que la fuente te esté entregando el voltaje correcto y esté bien filtrada y regulada.
Verifica en tu programa quemador, que los fuses sean los que en realidad le quieres quemar.
Como verás en la simulación hay muchas cosas que no hace falta verificar y en la realidad si.
-
muchas grácias si no llega a ser por ti... verifiqué las conexiones y había un error de conexionado, además le puse esos fuses y los setups que más o menos ves y el pic fue, al no estar las cosas bien conectadas el pic se volvía loco, lo fuerte es que habían cosas que iban y otras no, pero tus consejos son muy buenos que pueden ayudar a alguien ya que las demás cosas que comentas las tuve en cuenta, sólo era que había una mala conexión
Muchas grácias