TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pirraca en 17 de Abril de 2009, 05:12:55
-
Estoy diseñando un programa sencillito de I2C master con un 16F886.
el codigo es el siguiente:
include <16F886.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=20000000)
#use i2c(MASTER, sda=PIN_C4,scl=PIN_C3, force_hw)
void main()
{
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
while(TRUE)
{
i2c_start(); //begin transmission
i2c_write(end_disp); //select address of device to communicate with
i2c_write(dado); //send actual data
i2c_stop(); //terminate communication
delay_ms(200);
}
}
La salida que obtengo en el pin SCL es la del archivo adjunto. En el pin SDA no se obtiene ninguna salida, se queda a nivel alto, pero no se aprecia variacion alguna.
Es decir, tengo un problema el cual no se soluciona de ninguna manera, por eso acudo a vosotros. Las resistencias de pull-up en SDA y SCL son de 4K7
muchas gracias!
-
he probado el mismo codigo en un pic16f876 con su cabecera correspondiente y funciona a la perfeccion...
imagino que será algun problema del header.
-
lo unico que encontre raro ...
#FUSES XT
su xtal es de 20MHZ entonces debes ponerle HS en el fuse. ese pic no lo conozco pero derepente tienes multiplexado en los pines que quieres usar para el i2c por hw alguna función que derepente debes desactivar.
saludos :-/