Programas para Pic C Compiler (Tutorial)

hola necesito ayuda, ya estoy desesperado. veran pues necesito enviar una señal por el TX del pic 16f877a a un transmisor y para que reconosca el transmisor estas diferentes señales deebn ser en codigo ASCII, y yo le estoy metiendo al pic señales hexadecimales.

pueden ayudarme con la programacion para esta actividad. estare a la espera de su ayuda.
gracias
 
hola necesito ayuda, ya estoy desesperado. veran pues necesito enviar una señal por el TX del pic 16f877a a un transmisor y para que reconosca el transmisor estas diferentes señales deebn ser en codigo ASCII, y yo le estoy metiendo al pic señales hexadecimales.

pueden ayudarme con la programacion para esta actividad. estare a la espera de su ayuda.
gracias

un transmisor RF?? usas CCS?? coloca tu codigo!!!
 
Efectivamente es un transmisor RF, MaxStream 9XStream, 900 MHz 9600 baud.
Y pues si estoy utilizando el CCS C con ayuda del ISIS 7 (o PROTEUS) y en la terminal virtual del TX supuestamente me debe mostras el caracter del codigo ASCII correspondiente.

En cuanto al codigo; como veras soy principiante en esto y solo estoy realizando pequeñas pruebas. Una de ellas es la siguiente.


#include<16f877a.h>
#include <stdio.h>
#fuses xt,nowdt,noprotect,noput,nowrt,nolvp,nobrownout,nocpd
#use delay(clock=4000000)
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7,BITS=8,PARITY=N)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08


void main(void)
{
set_tris_d(0b00000000);
set_tris_b(0b11111111);

while (true)
{
if (portb==0x01)
{
putchar(0x03);
}
else
{
putchar(0x00);
}
}

}




pues veras la idea es que si yo le introdusco al pic una señal correspondiente del 1 al 130, este me muestre en la terminal TX el valor correpondiente en codigo ASCII, es decir que el programa funcione algo asi como un selector para enviar el codigo ASCII. Estuve investigando y una forma de poder hacer este selector me parece que es con la funcion "case" pero aun no se como implementarla, o tal vez no eh intentado porque en mi codigo no me muestra el valor correspondiente en codigo ASCII.

Ojala me puedas ayudar saludos.
 
Efectivamente es un transmisor RF, MaxStream 9XStream, 900 MHz 9600 baud.
Y pues si estoy utilizando el CCS C con ayuda del ISIS 7 (o PROTEUS) y en la terminal virtual del TX supuestamente me debe mostras el caracter del codigo ASCII correspondiente.

En cuanto al codigo; como veras soy principiante en esto y solo estoy realizando pequeñas pruebas. Una de ellas es la siguiente.


#include<16f877a.h>
#include <stdio.h>
#fuses xt,nowdt,noprotect,noput,nowrt,nolvp,nobrownout,nocpd
#use delay(clock=4000000)
#use rs232 (baud=9600,XMIT=PIN_C6,RCV=PIN_C7,BITS=8,PARITY=N)
#use fast_io(b)
#use fast_io(d)
#byte portb=0x06
#byte portd=0x08


void main(void)
{
set_tris_d(0b00000000);
set_tris_b(0b11111111);

while (true)
{
if (portb==0x01)
{
putchar(0x03);
}
else
{
putchar(0x00);
}
}

}




pues veras la idea es que si yo le introdusco al pic una señal correspondiente del 1 al 130, este me muestre en la terminal TX el valor correpondiente en codigo ASCII, es decir que el programa funcione algo asi como un selector para enviar el codigo ASCII. Estuve investigando y una forma de poder hacer este selector me parece que es con la funcion "case" pero aun no se como implementarla, o tal vez no eh intentado porque en mi codigo no me muestra el valor correspondiente en codigo ASCII.

Ojala me puedas ayudar saludos.

Utiliza el printf a ver q tal!!
 
AYUDA: TENGO UNA DUDA

Estoy usando un cristal de 20MHz, resulta q para usar el USB tengo q hacer unos ajustes y cambiar el PLL resulta q al modificar el PLL queda trabajando a 48MHz internamente!!

Mi pregunta es: a la hora de configurar los timer uso 20MHz o 48MHz??

Este es el encabezado de mi programa:

#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV, PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
 
Que tal, saludos.
Estoy iniciando en el asunto de los pics, al darle en pic wizard para iniciar
un nuevo proyecto despuÉs de elegir donde guardar el trabajo, me despkliega una ventana
donde tengo que habilitar ciertas caracterÍsticas, decidÍ trabajar con el pic 18f452,
perono se quÉ habilitar, podrÍa alguien ayudarme con esto??
 
AYUDA: TENGO UNA DUDA

Estoy usando un cristal de 20MHz, resulta q para usar el USB tengo q hacer unos ajustes y cambiar el PLL resulta q al modificar el PLL queda trabajando a 48MHz internamente!!

Mi pregunta es: a la hora de configurar los timer uso 20MHz o 48MHz??

Este es el encabezado de mi programa:

#include <18F4550.h>
#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV, PLL5,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

Saludos, este pic tiene un pll interno que eleva la frecuencia hasta 48MHz, son estos 48MHz los que "entran" al CPU, es decir es la velocidad del micro, los timer trabajan con la velocidad del micro asi que se usa 48000000. De hecho la directiva:
#use delay(clock=48000000)
indica la velocidad del CPU del PIC, no la del crystal, y es el valor que el compilador usa para las funciones de delay y rs232.

Saludos.
 
Saludos, este pic tiene un pll interno que eleva la frecuencia hasta 48MHz, son estos 48MHz los que "entran" al CPU, es decir es la velocidad del micro, los timer trabajan con la velocidad del micro asi que se usa 48000000. De hecho la directiva:
#use delay(clock=48000000)
indica la velocidad del CPU del PIC, no la del crystal, y es el valor que el compilador usa para las funciones de delay y rs232.

Saludos.

Gracias por tu ayuda y respuesta precisa!!!
 
Que tal, saludos.
Estoy iniciando en el asunto de los pics, al darle en pic wizard para iniciar
un nuevo proyecto despuÉs de elegir donde guardar el trabajo, me despkliega una ventana
donde tengo que habilitar ciertas caracterÍsticas, decidÍ trabajar con el pic 18f452,
perono se quÉ habilitar, podrÍa alguien ayudarme con esto??

saludos, yo te recomendaria que no uses el wizard si estas empezando porque talvez te pierdas, asi que mejor usar la configuracion que el autor de este foro usa:

Código:
#include <18F452.h>                                     //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que        dependera la configuracion de los puertos y de los bytes

#fuses HS,NOWDT,NOPROTECT,NOLVP         //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..

#use delay(clock=20000000)                       //Cristal de 20 Mhz leer datasheet para conexión de capacitores se puede usar difereentes cristales ver datasheet una vez mas

Para esto simplemente cuando abras PIC C le das en el boton inicio (el boton circular arriba a a la izquierda) y CLOSE ALL (cerrar todo) para cerrar algun archivo que que hayas compilado antes y que te pueda causar problemas, esto solo por seguridad.

Luego le das en NEW Y SOURCE FILE, sale la ventana en blanco ahi escribes tu codigo como lo describe el autor del foro omitiendo las lines del bootloader si no lo usas (que supongo que no) y ya.

saludos
 
muchas gracias, fue de mucha ayuda, ahora ya estoy con los programas
podrian ayudarme con el código para monitorear la temperatura de dos distintas incubadoras
que deben estar entre 2 y 8 °C pero alpasar los 8°C y despues de pasar 15 min. que suene una alarma, ya logré que se muestre la temperatura de las 2 inc. en un lcd, pero me quedé atorado ahí, otra cosa, el pic 18f452 puede trabajar mucho tempo corrido,como por ejemplo, 72 horas seguidas?
 
muchas gracias, fue de mucha ayuda, ahora ya estoy con los programas
podrian ayudarme con el código para monitorear la temperatura de dos distintas incubadoras
que deben estar entre 2 y 8 °C pero alpasar los 8°C y despues de pasar 15 min. que suene una alarma, ya logré que se muestre la temperatura de las 2 inc. en un lcd, pero me quedé atorado ahí, otra cosa, el pic 18f452 puede trabajar mucho tempo corrido,como por ejemplo, 72 horas seguidas?

Si puede trabajar 72 hrs seguidas y mucho mas, me parece que un tiempo indefinido. respecto a tu programa estaria bien que lo subas para que la comunidad te pueda ayudar mejor.

por lo pronto yo puedo sugerir utilizar un timer, por ejemplo el timer1 para contar tiempos de 1 segundo y habilitar las interrupciones por desborde del timer, asi en cada desborde preguntas por el estado de las temperaturas, si alguna a superado 8°C de permiso a incrementar un contador (que se incrementara cada desborde) y preguntar si el contador ha llegado a 60*15=900seg en cuyo caso activas la alarma.

imagino que si la temperatura baja de 8°C se resetearia el contador para iniciar desde cero la proxima vez que suba de 8°C.

saludos
 
Este es el código de los termómetros que llevo hasta el momento, como mencione estoy empezando,
no sé como usar timers,bueno estoy en eso, investigando, a lo mejor hasta el código que muestro
tiene cosas que no deberían ir, pero sí me funcionó la simulación en proteus, ojalá me puedan ayudar con el código, por que es un trabajo que me pidieron con urgencia, yo estoy investigando por mi cuenta, pero como ven es poco lo que llevo, si sigo así me tardaré mucho, espero me puedan ayudar, yo sigo investigando

Código:
#include "C:\Users\G\Documents\Docs GFT\TRABAJOS\term.h"


#define LCD_TYPE 2
#include <lcd.c>
double   val,SEN,val2,SEN2;
void main()
{
   lcd_init();



   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_DIV_64);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

   // TODO: USER CODE!!
   
   
   
   lcd_gotoxy(2,1);
   printf(lcd_putc,"REFRI1:");
   lcd_gotoxy(2,2);
   printf(lcd_putc,"REFRI2:");
 while(true)
 {
   set_adc_channel(0);
   delay_us(10);
   
   
   val=read_adc();                              //LEE EL VALOR DEL SENSOR1
   SEN=val*0.003925*100;                        // LO CONVIERTE A DECIMAL
   lcd_gotoxy(9,1);                                   // Y LO MUESTRA EN EL LCD
   printf(lcd_putc,"  %2.1f'C",SEN);
   
   set_adc_channel(1);
   delay_us(10);
   
  
   val2=read_adc();                              //LEE EL VALOR DEL SENSOR2
   SEN2=val2*0.003925*100;                    // LO CONVIERTE A DECIMAL
   lcd_gotoxy(9,2);                                  // Y LO MUESTRA EN LCD
   printf(lcd_putc,"  %2.1f'C",SEN2);
   
 }
}
 
Última edición por un moderador:
Este es el código de los termómetros que llevo hasta el momento, como mencione estoy empezando,
no sé como usar timers,bueno estoy en eso, investigando, a lo mejor hasta el código que muestro
tiene cosas que no deberían ir, pero sí me funcionó la simulación en proteus, ojalá me puedan ayudar con el código, por que es un trabajo que me pidieron con urgencia, yo estoy investigando por mi cuenta, pero como ven es poco lo que llevo, si sigo así me tardaré mucho, espero me puedan ayudar, yo sigo investigando


#include "C:\Users\G\Documents\Docs GFT\TRABAJOS\term.h"


#define LCD_TYPE 2
#include <lcd.c>
double val,SEN,val2,SEN2;
void main()
{
lcd_init();



setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_DIV_64);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

// TODO: USER CODE!!



lcd_gotoxy(2,1);
printf(lcd_putc,"REFRI1:");
lcd_gotoxy(2,2);
printf(lcd_putc,"REFRI2:");
while(true)
{
set_adc_channel(0);
delay_us(10);


val=read_adc(); //LEE EL VALOR DEL SENSOR1
SEN=val*0.003925*100; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,1); // Y LO MUESTRA EN EL LCD
printf(lcd_putc," %2.1f'C",SEN);

set_adc_channel(1);
delay_us(10);


val2=read_adc(); //LEE EL VALOR DEL SENSOR2
SEN2=val2*0.003925*100; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,2); // Y LO MUESTRA EN LCD
printf(lcd_putc," %2.1f'C",SEN2);

}
}

Que tal, pues entonces te sugeriria que si no sabes usar timers e interrupciones entonces lo hagas mediante un simple delay de 1 segundo, es decir cada segundo se actualizan las lecturas de los sensores y se pregunta por si alguna a superado 8 grados en cuyo caso da permiso a incrementar un contador de segundos, si este contador llega a 900 (15min) pues se activa la alarma.

Te dejo un codigo basado en el tuyo, activa la alarma y eso pero solo exploro un sensor el otro no, ya te daras una idea (espero).


Código:
//#include "C:\Users\G\Documents\Docs GFT\TRABAJOS\term.h"
#include <18F452.h>                                     //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que        dependera la configuracion de los puertos y de los bytes

#fuses HS,NOWDT,NOPROTECT,NOLVP         //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..

#use delay(clock=20000000)

//#define LCD_TYPE 2
#include <flex_lcd.c>
double val,SEN,val2,SEN2;

int16 segundos=0;
int1  permiso=0;
#define alarma PIN_B0

void main()
{
lcd_init();



setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_DIV_64);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

// TODO: USER CODE!!



lcd_gotoxy(2,1);
printf(lcd_putc,"ReFRI1:");
lcd_gotoxy(2,2);
printf(lcd_putc,"REFRI2:");

while(true)
{
set_adc_channel(0);
delay_us(10);


val=read_adc(); //LEE EL VALOR DEL SENSOR1
SEN=val*0.3925; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,1); // Y LO MUESTRA EN EL LCD
printf(lcd_putc," %2.1fC",SEN);

set_adc_channel(1);
delay_us(10);


val2=read_adc(); //LEE EL VALOR DEL SENSOR2
SEN2=val2*0.3925; // LO CONVIERTE A DECIMAL
lcd_gotoxy(9,2); // Y LO MUESTRA EN LCD
printf(lcd_putc," %2.1fC",SEN2);

delay_ms(1000);  // simple retardo de 1 segundo sin usar timer ni interrupciones

if(SEN>8){        // si SEN supera 8 grados da permiso para incrementar
   permiso=1;        // el contador de segundos
   }
else{
   permiso=0;           // si es menor o igual que 8grados quita permiso y resetea
   segundos=0;          // la cuenta de segundos
   output_low(alarma);  // y apaga la alarma si es que ya hubiera sido activada
   }

if(permiso==1){         // si hay permiso 
   segundos++;          // se incrementa el contador de segundos y 
   if(segundos==5){     // se pregunta si ha llegado a X segundos (en este caso 5 para no esperarme tanto, en tu caso seria 900)
   output_high(alarma); // si segundos ha llegado a 5 encender alarma
   }
}

} //cierra loop infinito
} //cierra main

saludos
 
Última edición:
Gracias en verdad me fue de mucha ayuda, ahora tengo otro problema, necesito que se active la misma alarma para un nivel inferior que en este caso sería de -1°C , igualmente pasado después de un tiempo, ya tengo una idea de como hacerle, lo que no sé es como sería para que me de temperaturas negativas el adc, ya sé que la configuración del lm35 lleva dos diodos para que me de un nivel negativo pero no sé como hacerle con eso, esa línea negativa del lm35 va a otro canal del adc?, y como lo pongo en el código?, o simplemente pongo el rango de -°1<temp<8 y ya ? o que onda?
 
Gracias en verdad me fue de mucha ayuda, ahora tengo otro problema, necesito que se active la misma alarma para un nivel inferior que en este caso sería de -1°C , igualmente pasado después de un tiempo, ya tengo una idea de como hacerle, lo que no sé es como sería para que me de temperaturas negativas el adc, ya sé que la configuración del lm35 lleva dos diodos para que me de un nivel negativo pero no sé como hacerle con eso, esa línea negativa del lm35 va a otro canal del adc?, y como lo pongo en el código?, o simplemente pongo el rango de -°1<temp<8 y ya ? o que onda?

Saludos, bueno, primero que nada hay que ver que onda con varios puntos importantes cuando trabajamos con el ADC, primero, veo que hiciste una conversion del ADC a 100, osea que cuando lees 255 corresponde el 100, eso esta bien pero en este caso talvez no, yo lo recomendaria de esta forma:

El sensor lm35 te da 10mV por grado, asi que podemos ajustar el voltaje de referencia alto (del PIC) a 2.56V, asi la resolucion del ADC sera de

2.56V/256=10mV por bit

Si te fijas de esta forma la resolucion del ADC es la misma que la del sensor, asi la lectura es directa, si la lectura del ADC da 25 entonces son 25° sin mas problema.

Para mover el voltaje de referencia hay que indicarlo con la funcion setup_adc_ports(modo); el modo lo puedes checar en el archivo de cabecera .h buscas las constantes que acepta esta funcion, quedaria algo asi:
setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF);
Vref es la pata A3 y ahi colocamos un pot que ajuste el voltaje a 2.56V

Luego, para medir temperaturas negativas con el LM35 como dices, hay que leer ambas salidas la que dice + y la que dice -, por ninguna sale voltaje negativo sino que la diferencia entre estas es la temperatura, por ejemplo si el sensor saca por la salida "positiva" 0.02V y por la salida "negativa" 0.52V la diferencia es de -0.50 osea -50°.

saludos

pd talvez al rato suba algun codigo de ejemplo

Bueno, este es el codigo de las dos incubadoras, le quite lo que sobraba y lo deje un poco mas ordenado, enciende la alarma cuando esta fuera del rango (-1° a 8°) y nuevamente solo con uno de los sensores, espero te sirva de ejemplo:


Código:
#include <18F452.h>                     //Libreria del pic a usar aqui se pondra el pic que se usara de aqui que        dependera la configuracion de los puertos y de los bytes
#fuses HS,NOWDT,NOPROTECT,NOLVP         //tipo de cristal externo high speed, perro guardian off, sin proteccion etc..
#use delay(clock=20000000)

#include <flex_lcd.c>

double SEN,SEN2;
int16 segundos=0;

#define alarma PIN_B0
//Canales analogicos donde se conectan los sensores
#define sensor1_pos 0   //pin A0
#define sensor1_neg 1   //pin A1
#define sensor2_pos 2   //pin A2
#define sensor2_neg 4   //pin A5


void leer_sen1(void){
set_adc_channel(sensor1_pos); //selecciona el terminal positivo
delay_us(10);                 //del sensor 1
SEN=read_adc();               //y lo lee y guarda en SEN
set_adc_channel(sensor1_neg); //selecciona terminal negativo
delay_us(10);                 //
SEN=SEN-(read_adc());         //lo lee y lo resta de la lectura
                              //del terminal positivo
}                   

void leer_sen2(void){         //lo mesmo pero con el sensor2...
set_adc_channel(sensor2_pos);
delay_us(10);
SEN2=read_adc();
set_adc_channel(sensor2_neg);
delay_us(10);
SEN2=SEN2-(read_adc());
}


void main()
{
lcd_init();
setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF);
setup_adc(ADC_CLOCK_DIV_64);

lcd_gotoxy(2,1);
printf(lcd_putc,"REFRI1:");
lcd_gotoxy(2,2);
printf(lcd_putc,"REFRI2:");

while(true)
{
leer_sen1();               // toma la lectura del sensor1 ya sea positiva o negativa
lcd_gotoxy(9,1);           // Y LO MUESTRA EN EL LCD
printf(lcd_putc," %2.1fC",SEN);

leer_sen2();               //toma la lectura del sensor2 ya sea positiva o negativa
lcd_gotoxy(9,2);           // Y LO MUESTRA EN LCD
printf(lcd_putc," %2.1fC",SEN2);

if( (SEN>8) | (SEN<-1) ){  // si SEN supera 8 grados o baja de -1 entonces
   segundos++;             // se incrementa el contador de segundos y 
   if(segundos==5){        // se pregunta si ha llegado a X segundos (en este caso 5 para no esperarme tanto, en tu caso seria 900)
      output_high(alarma); // si segundos ha llegado a 5 encender alarma
      }
   }
else{
   segundos=0;             // resetea la cuenta de segundos
   output_low(alarma);     // y apaga la alarma si es que ya hubiera sido activada
   }

delay_ms(1000);            // simple retardo de 1 segundo sin usar timer ni interrupciones

} //cierra loop infinito
} //cierra main

este es de ejemplo y funciona, seguramente se puede hacer mejor.

Saludos

De una vez dejo la imagen en proteus de como conectar los lm35 y todo, haber si a alguien mas le puede servir:

imagen%2Bproteus.png


saludos
 
Última edición:
Saludos, y que tal nuevamente

he tenido problemas a la hora de querer simular el programa en proteus
tengo la versiÓn seis y a la hora de darle play me sale una ventana donde dice que tiene errores, dice que los lm35 (u2,u3) no es un modelo especificado o algo asÍ, antes por el mismo problema lo simulaba con resistencias variables, pero ahora que requiero la temperatura negativa necesito forsozamente simularlo con los sensores, pero ahora se me presenta este pequeÑo problema, acontinuaciÓn mando el mensaje que aparece, y la simulacion en proteus, ojalÁ me puedan ayudar.:
 

Adjuntos

  • Sin título.jpg
    Sin título.jpg
    188.2 KB · Visitas: 78
  • PROTEUS.jpg
    PROTEUS.jpg
    294.3 KB · Visitas: 73
Saludos, y que tal nuevamente

he tenido problemas a la hora de querer simular el programa en proteus
tengo la versiÓn seis y a la hora de darle play me sale una ventana donde dice que tiene errores, dice que los lm35 (u2,u3) no es un modelo especificado o algo asÍ...:

Pues yo creo que tendras que usar una version mas actual de proteus, en mi caso tengo la version 7.6 sp4. Saludos.
 
hola de entrada dar las gracias por todo lo que aqui se expone decir que soy muy novato en estos temas
y tengo algunas dudas que si bien estan aqui expuestas no las e visto
1 como puedo pasar los codigos del hilo a hex con el pic c
2 por que el proteus no me abre los codigos para ver la simulacion esto pone en proteus
is corrupt or not an isis schematic file
salu2
 
bueno ya a las constantes avances que se tiene aaui y para seguir aprendiendo bueno me gustaria mucho que tb me ayuden con el protocolo I2c del ccs pic
Bueno estoy tratando de hacer funcionar un Pll que tiene le protocolo de comunicacion i2c y ueno pero no consigo hacerle funcionar....
bueno estoy tratando de hacerlo funcionar con un pic 16f84A si bien este pic no tiene i2c por hardware pero por software mediante el ccs esque se puede pero no me sale jeje:p Bueno sin mas el pequeño bicho es este MC44BS374CA si bien la comunicacion es sencilla pero no me funciona
bueno resumire la forma que estoy tratando de realizarlo
...... bueno el dato del pic a utilizar....
#use i2c(MASTER,SDA=PIN_B1,SCL=PIN_B0,FAST,FORCE_HW)

y dentro del bucle while(true)
i2c_start();
delay_ms(10);
i2c_write(0xCA); //direccion del chip (0xCA) hoja de datos
//envio de 4 bytes segun hoja de datos
i2c_write(0x80); // C0 (VALORES SEGUN HOJA DE DATOS)
i2c_write(0x08); // C1
i2c_write(0x1E); // FM (N11...N0) SEGUN FORMULA DE HOJA DE DATOS
i2c_write(0x94); // FL
/////////////////////////
i2c_stop();
bueno esta la direccion de hoja de datos
http://www.freescale.com/files/app_specific_stand_prod/doc/data_sheet/MC44BS374CA.pdf
es una pasada ese chip bueno si se le hace funcionar ...:p y hacer buenas ideas...... con ello
espero me ayuden con eso de los protocolo de comunicacion i2c
 
Atrás
Arriba