Professional Documents
Culture Documents
Objetivo:
4 x Potencimetro - 2 de 1 K y 2 de 10 K.
Switch grande simple transero para cortar el cable vivo de la red 110v.
4 x Patas de goma.
PIC16F917
MAX232 Maxim
PIC16F917.
RS232 Transistorizado.
// adc
///////////////////////////////////////////////////////////////
void adc(void)
{
set_adc_channel(1);
//medir tension
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value=READ_ADC();
// read analog value from channel 1
vol1 = (float) (((value*500)/1024)/10);//Escalar Variable
//de 0 a 500
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(voltage1, "%f", vol1);
voltage1[5] = '\0';
/////////////////////////////////////////////////////////
set_adc_channel(4);
//medir corriente
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value=READ_ADC();
// read analog value from channel 4
AN1 = (float) (value*5.0/1024); //AN1=value*(Vref(+) //Vref(-)/2^n +Vref(-),
//multiplica el numero de
//bits por su equivalente
//en analogico
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(amperaje1, "%f", AN1);
amperaje1[5] = '\0';
/////////////////////////////////////////////////////////
set_adc_channel(0);
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value = READ_ADC(); // read analog value from channel 0
vol2 = (float) ((value*500)/1024)/10 ;//Escalar Variable
//de 0 a 500
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(voltage2, "%f", vol2);
voltage2[5] = '\0';
/////////////////////////////////////////////////////////
set_adc_channel(5);
//medir corriente
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value = READ_ADC(); // read analog value from channel 5
AN2 = Filtro_Analog_AN2((float) ((value*5.0)/1024));
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(amperaje2, "%f", AN2);
amperaje2[5] = '\0';
/////////////////////////////////////////////////////////
set_adc_channel(2);
delay_us(TIEMPO_DELAY); //Temporiza 20uS
value=READ_ADC();
// read analog value from channel 2
vol3 = (float) ((value*500)/1024)/10 ;//Escalar Variable
//de 0 a 500
delay_us(TIEMPO_DELAY); //Temporiza 20uS
sprintf(voltage3, "%f", vol3);
voltage3[4] = '\0';
/////////////////////////////////////////////////////////
set_adc_channel(3);
delay_us(TIEMPO_DELAY); //Temporiza 10uS
value=READ_ADC(); // read analog value from channel 3
delay_us(TIEMPO_DELAY);
temperatura= (float) ((5.00*value*100.00/1024.0)/10);
sprintf(temperatura1, "%f", temperatura);
temperatura1[5] = '\0';
/////////////////////////////////////////////////////////
}
Imgenes
de la Aplicacin de PC:
temperatura activa.
Imgenes
de la fuente
de electrnica.
Imgenes
Foto de atrs.
Foto Frontal.
Objetivo:
La finalidad para realizar este proyecto no es mas que tratar de solventar el problema de los
equipos electrnicos de calidad y accesibles para los estudiantes universitarios, los estudiantes
tcnicos y entusiasta, por ello se enfoco en el desarrollo de un sistema completo en el cual se
tenga integrado la mayora de los equipos de laboratorios de electrnica a nivel universitario.
Estos equipos deben tener los requerimientos suficientes para poder realizar todas las
practicas a lo largo de la carrera universitaria. Con esto en mente se determino que se
conformara en sistema integrado de equipos los cuales trabajan en una sola interfaz de
computadora, donde todas la variaciones de niveles de salidas y entradas, as como las
lecturas de estados lgicos, voltajes y corrientes, y estas se puedan configurar de manera
digital desde el software de control realizado para el equipo.
Con esto se llego a la conclusin de que se compondra de dos fuentes variables digitales de
0v a 20v con precisin de 0.01V y control de corriente de 0A a 2A con precisin de 0.1A, estas
fuentes puede trabajar en modo serial, paralelo o independiente, ademas cuenta con una
tercera fuente fija a 5V a 5A como mximo en su salida, por otra parte se encuentra el
generador de funciones el cual puede generar seales seno, cuadradas y TTL gracias al
AD9850, donde es posible variar su amplitud de 1Vpp a 7Vpp, frecuencia de 10hz a 1Mhz y
ciclo de trabajo 0% a 100%, tambin una punta lgica la cual mida tanto circuitos TTL como
CMOS y muestre el estado lgico en forma de 7 segmentos en la interfaz o en forma de led
iluminados en la interfaz, por ultimo un multmetro con voltmetro AC y DC de 0v a 600v,
ampermetro AC y DC por efecto hall con el ACS714 de -5A a 5A dependiendo de como se
tome la lectura, lector de ohmios de 1ohm a 10 Mohm y lector de continuidad.
El sistema esta conectado por un bus de datos I2C el cual esta aislado por integrados
especializados ADuM1250, con esto se asegura que cual quier falla no afecte otro de los
equipos y ademas permite el agregar nuevos equipos al bus de datos y con esto complementar
aun mas el sistema como podra ser la adicin de un osciloscopio o de un frecuencmetro.
La placas del sistema estas controladas por PIC Microchip de varios modelos segn el mdulos
y familias, pero todos con la caractersticas mnima de que cuente con bus de datos I2C por
hardware, para conectarse a la placa de bus de datos aislada y todo esto ser controlado por la
placa de control principal que esta basada en el PIC18F2550, por su bus I2C y conexin USB
al computador la cual se aisl con el integrado ADuM4160 y el uso de una LCD 20x4 para
visualizar el estado general del equipo ya que el mismo no cuenta con ningn pulsador o
potencometro de configuracin, todo es realizado de manera digital desde la aplicacin de
control en la computadora personal.
integrados fue realizado por software para no tener retrasos generados al emular algn
protocolo o tarea.
El software de control se realizo en Visual Studio 2013 en lenguaje C# con libreras capaces de
trabajar con el puerto USB del PIC18F2550 en las versiones mas actuales de windows, tanto
en x86 como en x64, as como tambin se usaron libreras para los 7 segmentos en la interfaz
y los led animados.
LCD 20X4 luz de fondo azul para los distintos mensajes de estado y control del sistema.
Placa fuente de poder digital de salida de voltaje fija a 5V, con salida fija de corriente
maxima de 2A, esta placa cuenta con alimentacin propia para potencia y lgica.
La lgica es basada en el micro-controlador PIC 16F1503 de Microchip y la potencia
en el regulador LM338 con control mediante amplificador operacional y seales PWM.
variable.
fija.
Objetivo:
4 x Patas de goma.
Microcontrolador PIC16F88.
LM317 Regulador
74HC164
Esquemas de Conexin de algunas partes del proyecto:
LCD 3 pines.
Esquema Completo
Diagrama de proyecto:
PCB completo.
Libreras y algunas rutinas del cdigo fuente desarrolladas para el proyecto:
Lectura del Sensor MQ4 usando una entrada analgica del PIC.
WEB de ejemplo 2.
///////////////////////////////////////////////////////////////
// adc
///////////////////////////////////////////////////////////////
void adc(void)
{
ADC_1_LM35
= 0;
ADC_2_MQ4
= 0;
ADC_3_SUPPLY
= 0;
ADC_4_BATT
= 0;
set_adc_channel(1); //BATT CANAL 1 (LM35)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
ADC_1_LM35 = Filtro_Analog_LM35((float) (value*(0.48875)));
//--------------------------------------------------------value = 0;
set_adc_channel(2); //BATT CANAL 2 (Bateria)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
ADC_4_BATT = Filtro_Analog_BATT((float)(value*0.048828125));
//---------------------------------------------------------value = 0;
set_adc_channel(3); //BATT CANAL 3 (SUPPLY)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
//el registro adc
delay_us(TIEMPO_DELAY);
if((float)(value*0.048828125) > 9)
ADC_3_SUPPLY = (float)(value*0.048828125);
else
ADC_3_SUPPLY = 0;
//--------------------------------------------------------value = 0;
set_adc_channel(4); //BATT CANAL 4 (Sensor de Gas)
delay_us(TIEMPO_DELAY);
value = read_adc(); //lee el valor del ADC y lo guarda en
Imgenes
PCB conectadas.
de atrs de serca.
de lado.
exterior prototipo.
Imgenes
del sensor de
// flex_lcd_3_pins.c
//Modificacin de Flex_lcd por Duende_Azul y Akenafab
//Trabaja con 3 pines y 74VHC164
//8-Bit Serial-In, Parallel-Out Shift Register
//La LCD se usa en modo 4bits
//Revisar diagrama de conexion Adjunto
//Se ha utilizado a una velocidad de @40MHz sin ningun problema
//No esta habilitada la lectura del LCD
//RW debe ir a gnd
//Definir pines antes de llamar libreria//
//#define LCD_E
PIN_A0
//#define LCD_CK PIN_A1
//#define LCD_DAT PIN_A2
//========================================
int RS_bit;
#define lcd_type 2 // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line
int8 const LCD_INIT_STRING[4] =
{
0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
0xc,
// Display on
1,
// Clear display
6
// Increment cursor
};
//------------------------------------void lcd_send_nibble(int8 nibble, int rs_bit)
{
int x;
if(RS_bit==1)
nibble=nibble|0x10;
for(x=0;x<5;x++) {
output_bit(LCD_DAT,shift_right(&nibble,1,0));
delay_cycles(1);
output_low(LCD_CK);
delay_us(1);
output_high(LCD_CK);}
output_high(LCD_E);
delay_us(2);
output_low(LCD_E);
}
//----------------------------------//----------------------------------// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
//output_low(LCD_RS);
RS_bit=0;
delay_us(100);
if(address)
//output_high(LCD_RS);
RS_bit=1;
else
//output_low(LCD_RS);
RS_bit=0;
delay_cycles(1);
output_low(LCD_E);
lcd_send_nibble(n >> 4,RS_bit);
lcd_send_nibble(n & 0xf,RS_bit);
}
//---------------------------void lcd_init(void)
{
int8 i;
//output_low(LCD_RS);
RS_bit=0;
output_low(LCD_E);
delay_ms(20);
#include <16F88.h>
#FUSES
INTRC_IO,NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,CCPB0,N
OFCMEN,NOIESO
#use delay(Internal=8M)
//------------ Pines del LCD ---------------------//
#define LCD_E
PIN_A0
#define LCD_CK PIN_A1
#define LCD_DAT PIN_A2
//--------------------------------------------------//
#include "flex_lcd_3pins.c"
// Cargamos libreria del lcd
void main() {
delay_ms(100);
output_a(0);
output_b(0);
lcd_init();
// inicializamos el LCD
lcd_setcursor_vb(1,1); //cursor visible,papadeo
while(1){
printf(lcd_putc,"\f-LCD 3 pin Mode-\n* !.|.|..|.|.! *");
delay_ms(1000);
printf(lcd_putc,"\f* Duende_Azul *\n * Akenafab *");
delay_ms(1000);
} //end while
} //end main
1 Introduction
1.1 Specification
2 Pin Definition
3 Potentiometer
Introduction
The MQ4 is used in gas leakage detecting equipment in consumer and industry markets,this sensor
is suitable for detecting CH4,Natural gas, LNG, avoid exposure to alcohol, cooking fumes, and
cigarette smoke. The sensitivity can be adjusted by the potentiometer.
Specification
Fast response
Size: 40x20mm
Pin Definition
1. Signal Output
2. GND
3. Power
Potentiometer
Potentiometer is used to calibrate the readings from this sensor as stated on the datasheet:
SENSITVITY ADJUSTMENT
Resistance value of MQ-4 is difference to various kinds and various concentration gases. So,When
using this components, sensitivity adjustment is very necessary. we recommend that you calibrate
the detector for 5000ppm of CH4 concentration in air and use value of Load resistance ( RL) about
20K(10K to 47K). When accurately measuring, the proper alarm point for the gas detector
should be determined after considering the temperature and humidity influence.
Connection Diagram
Sample Code
?
2
3
4
void setup()
{
Serial.begin(9600); //Set serial baud rate to 9600 bps
5
6
7
}
void loop()
{
8
9
10
int val;
val=analogRead(0);Read Gas value from analog 0
Serial.println(val,DEC);//Print the value to serial port
11 delay(100);
12 }
This example is for Wiring version 1.0 build 0100+. If you have a previous version, use the
examples included with your software. If you see any errors or have comments, please let
us know.
int sensorValue;
void setup()
{
Serial.begin(9600);
void loop()
{
sensorValue = analogRead(0);
Serial.println(sensorValue, DEC);
delay(100);
Objetivo:
Diseo y construccin de un convertido USB a Serial para as facilitar la conexin de los
proyectos que se disearon con el antiguo conector DB9 que trabaja sobre la conexin serial
que cada da es mas difcil de conseguir en las PC y laptop actuales imposibilitando el uso de
El modulo se construye con una poca cantidad de componentes de los cuales los mas
importantes es el PL2303 que convierte de USB a Serial pero a niveles TTL de voltaje y luego
se adapta el voltaje con el conocido MAX232 para poder llegar a los valores de voltaje
normales
de
las
comunicaciones
serial
de
las
PC.
Nota: Windows 8 no soporta las versiones del chip HXA/XA (aparece un cdigo de error en
controlador).
4 x Patas de goma.
PL2303 de Prolific.
MAX232 de Maxim
USB tipo B
Esquema PCB:
PCB en negro
PCB en color
Vista superior.
Imgenes
The physical communication standard defines the signal voltage of -10V for logic '1', and +10V
for logic '0'. However in practise, the voltage can be ranging from +/-3V to +/-25V. Not to worry if
the measured voltage is not +/-10V. Typical receiver is able detect the incoming signal with
voltage as low as +/-3V.
A microcontroller like PIC16F877a uses USART (5V system). The PC (personal computer) that
we have in the office/home uses the standard RS232. To enable a microcontroller to
communicate with the computer, a RS232 to TTL converter is required.
IC chip maker has come up with the integrated circuit for interfacing RS232 with TTL logic (5V
for logic 1, 0V for logic 0), making the interfacing work very simple. MAX232 is one of the many
IC in the market which helps to convert between RS232 -/+10V and TTL +/- 5V. It is a simple
voltage level converter in short. The charge pump design allows the circuit to generate +/-10V
from a 5V supply, with the help from the four capacitor. With charge pump to double up the
supply voltage for RS232 transmitter, there is no need to design a power supply for +/-10V.
The diagram on the left shows the schematic of the MAX232 IC circuit. It consist of only 4x 1uF
16V electrolytic capacitor, and the MAX232 IC itself. It is that simple. I have include a layout
which I always use for PC to PIC16F877a microcontroller, RS232 interface.
http://www.dfrobot.com/
http://jartur2013.blogspot.com/2013/12/post11-controlador-de-servo-condspic-y.html
Objetivo:
Con el fin de realizar futuros proyectos de robtica donde se tengan muchas articulaciones con
lo cual se deba tener estabilidad y movimientos precisos, me di a la tarea de disear y
construir un prototipo de placa controladora de servomotores, con visualizacin LCD,
conectividad Xbee o mediante Bluetooth Bee y que cuente con variedad de sensores, como los
que proporciona el modulo GY-80. Todo esto para facilitar los desarrollos venideros y con esto
solo enfocarme principalmente en la parte mecnica y la programacin de los movimiento, con
sus respectivos sistemas de control.
2 x Pulsadores
Giroscopio de 3 ejes.
Aceleremotro de 3 ejes.
Diagrama de proyecto:
http://robotypic.blogspot.com/2010/11/control-de-8-servos-con-pic16f876a_13.html
http://blog.oscarliang.net/use-gy80-arduino-adxl345-accelerometer/
http://robotypic.blogspot.com/2010/11/control-de-8-servos-con-pic16f876a_13.html
bit_pwm0=1;
Para interpretar los valores numricos de varias cifras a partir de nmeros simples
introducidos por teclado, primero espera a que se pulse una tecla
x=kbd_getc();
el valor obtenido est en codificacin ASCII por lo que habr que pasarlo a su valor
numrico decimal
tecla=x-48;
if (x!=0&&x!='*'&&x!='#'){
y conforme se van pulsando nmeros el ltimo pulsado ser las unidades y los
anteriores van pasando a decenas y centenas
centenas=decenas;
decenas=unidades;
unidades=tecla;
angulo=(centenas*100)+(decenas*10)+unidades;
//////////////////////////////////////////////////////////////////////
//////////
//
//
//
CONTROL
DE
8
SERVOS
CON
PIC
//
//
//
//
(c)
RobotyPic
//
//
//
//////////////////////////////////////////////////////////////////////
//////////
#include <16f876a.h>
//archivo para control del pic
16f876a
#fuses
XT,NOWDT,NOPROTECT,NOLVP
//protecciones
#use delay(clock=4000000)
#byte
#byte
#byte
#byte portc=0x07
trisc=0x87
#define
use_portb_lcd
control
#define
use_portb_kbd
control
#include <lcd.c>
#include <kbd.c>
teclado
#bit
Bit_PWM0
modulacin
#bit
Bit_PWM1
modulacin
#bit
Bit_PWM2
modulacin
#bit
Bit_PWM3
modulacin
#bit
Bit_PWM4
modulacin
#bit
Bit_PWM5
modulacin
#bit
Bit_PWM6
modulacin
#bit
Bit_PWM7
modulacin 7
TRUE
b
lcd
//Configuracin
puerto
b
teclado
//archivo para control del lcd
//archivo para control del
TRUE
//Configuracin
puerto
PORTC.0
//Bit
puerto
PORTC.1
//Bit
puerto
PORTC.2
//Bit
puerto
PORTC.3
//Bit
puerto
PORTC.4
//Bit
puerto
PORTC.5
//Bit
puerto
PORTC.6
//Bit
puerto
PORTC.7
//Bit
puerto
/**********************
Prototipos
***************************/
void
main
(void);
void generacion_pwm (void);
de
void presentacion (void);
/**********************
*************************/
de
las
Salida
0
Salida
1
Salida
2
Salida
3
Salida
4
Salida
5
Salida
6
Salida
funciones
//funcin
principal
//genera seales moduladas para control
servos
//mensaje de presentacin
Variables
para
generacin
PWM
int8
PWM0=0,PWM1=0,PWM2=0,PWM3=0,PWM4=0,PWM5=0,PWM6=0,PWM7=0;
//Valores
de
las
seales
PWM
int8 control_PWM=0;
/
**********************************************************************
********/
/*******************
FUNCIN
GENERACIN
MODULACIONES
PWM
**********************/
#int_Timer0
void
generacion_pwm(){
control_PWM++;
if (control_PWM==0){
pulsos
pwm
//Finalizar
correspondiente
if
if
if
if
if
if
if
if
el
pulso
//inicio
de
del
modulacin
(control_PWM==PWM0)
(control_PWM==PWM1)
(control_PWM==PWM2)
(control_PWM==PWM3)
(control_PWM==PWM4)
(control_PWM==PWM5)
(control_PWM==PWM6)
(control_PWM==PWM7)
set_timer0(255);
//Carga
del
contador
}
/*********************************************************************
*********/
/*************************
PRESENTACIN
LCD
***********************************/
void presentacion (){
lcd_putc("\f
lcd_putc("
}
num.
Introduce
de
servo
\n");
");
/
**********************************************************************
********/
/********************
FUNCIN
PRINCIPAL
***************************************/
void
int x;
int tecla;
int
int16
main(){
servo;
angulo;
int16 centenas;
ngulo
int decenas,unidades;
unidades
int pwm;
trisc=0x00;
//variable
para
las
centenas
del
como
salida
de
datos
pwm0=7;
pwm1=7;
pwm2=7;
pwm3=7;
pwm4=7;
pwm5=7;
pwm6=7;
pwm7=7;
0
0
0
0
0
0
0
0
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
//Configuracin
interrupcin generacin PWM
enable_interrupts(INT_TIMER0);
//Habilitacin
interrupcin
generacin
pwm
enable_interrupts(GLOBAL);
//Habilitacin
de
las
interrupciones
port_b_pullups(TRUE);
b
lcd_init();
kbd_init();
presentacion
();
//Inicializacin
//Inicializacin
//Muestra
while
mensaje
de
del
del
inicio
lcd
teclado
en
lcd
(true){
x=kbd_getc();
//En "x" valor ASCII de la
tecla pulsada
if (x!=0&&x!='9'&&x!='8'&&x!='*'&&x!='#'){ //Si se pulsa tecla
numrica
0
a
7
...
servo=x-48;
//Valor ASCII se pasa a valor numerico
de
servo
printf(lcd_putc,"\fServo = %d\n", servo); //...muestra el
valor
pulsado
lcd_putc("Introduce
angulo");
while
(x!='*'){
//Espera
con
aceptar
if (x!=0&&x!='*'&&x!='#'){
introducir
ngulo
y
*
x=kbd_getc();
tecla=x-48;
//Solo se toman los valores
numricos
se
decenas,
del
angulo=(centenas*100)+(decenas*10)+unidades;
if (angulo>180) angulo=180;
//No acepta valores >180
pwm=(angulo/13)+7;
//Ajuste modulacin en funcin
valor
introducido
centenas=decenas=unidades=0;
//Segn nmero de servo introducido se le aplica el ngulo
elegido
case
case
case
case
case
case
case
case
0:
1:
2:
3:
4:
5:
6:
7:
printf(lcd_putc,"\fServo
printf(lcd_putc,"
Angulo
switch(servo){
pwm0=pwm;
break;
pwm1=pwm;
break;
pwm2=pwm;
break;
pwm3=pwm;
break;
pwm4=pwm;
break;
pwm5=pwm;
break;
pwm6=pwm;
break;
pwm7=pwm;
break;
}
%d\n",
servo);
%ld",
angulo);
delay_ms(200);
presentacion();
}
}
PIC Maestro
A partir de este momento, para enviar algo por el bus I2C ejecutamos la
funcin Envio_I2C(),en la que deberemos especificar previamente la direccin en
el bus I2C del esclavo con el que se quiere comunicar, la posicin del buffer de
memoria donde se va a guardar en el esclavo el dato enviado y la informacin del
propio dato.
direccion=0xA0;//DireccindelesclavoenelbusI2C
posicion=0x05;//Posicin donde se guardar el dato
dato=0xfb;//Dato
transmitir
i2c_start();//Comienzocomunicacin
i2c_write(direccion);//DireccindelesclavoenelbusI2C
i2c_write(posicion);//Posicindondeseguardareldato
i2c_write(dato);//Datoatransmitir
i2c_stop();//Fincomunicacin
Para la lectura de los esclavos el proceso es similar, pero esta vez ejecutando la
funcin Lectura_I2C(). Tambin previamente deberemos especificar la direccin
del esclavo en el bus I2C, la posicin en el buffer de memoria del PIC esclavo de
donde queremos obtener el byte que contiene y la variable donde lo vamos a
guardar (&dato).
direccion=0xA0;//DireccindelesclavoenelbusI2C
posicion=0x05;//Posicindondeseguardareldato
i2c_start();//Comienzodelacomunicacin
i2c_write(direccion);//DireccindelesclavoenelbusI2C
i2c_write(posicion);//Posicindedondeseleereldato
enelesclavo
i2c_start();//Reinicio
i2c_write(direccion+1);//Direccindelesclavoenmodolectura
dato=i2c_read(0);//Lecturadeldato
i2c_stop();//Fincomunicacin
PIC esclavo
Igual que en el PIC master, en cada PIC esclavo se debe configurar la comunicacin
I2C. En este caso vamos a establecer que se trata de un PIC esclavo (slave), que
vamos a usar velocidad rpida (fast), que los pines del PIC van a ser C4 para la
lnea sda y C3 para scl, y cual va a ser su direccin en el bus (address).
A diferencia del PIC maestro que es quien decide en que momento iniciar la
comunicacin, en los esclavos, la comunicacin se establece cuando, mediante la
interrupcin #INT_SSP se detecta actividad en el bus I2C.
En el caso del PIC esclavo, si que vamos a necesitar del mdulo SSP, por tanto no
se puede forzar una comunicacin por software como en el PIC maestro y los pines
han de ser necesariamente los propios del bus I2C del PIC.
#INT_SSP
void ssp_interupt (){
int incoming;
manda el maestro
fstate = i2c_isr_state();
interrupcin
}
/* Sino est solicitando lectura es que est enviando algo */
else {
I2C...
incoming = i2c_read();
if (fState == 1) {
la posicion
//... lo lee
//Informacin recibida corresponde a
posicion = incoming;
}
else if (fState == 2) {
dato
buffer[posicion] = incoming; //Se guarda dato
EnvioMaster=1;
}
}
http://robotypic.blogspot.com/2012/03/comunicacion-i2c-entre-trespics.html
https://www.youtube.com/watch?v=_aTmVS3xGOc