Deberías comenzar instalando filtros de línea
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
#include <16F886.h>
#DEVICE ADC=10
#DEVICE *=16
//#ignore_warnings 201, 216
#fuses NOWDT
#FUSES NOBROWNOUT //No brownout reset
#use delay(internal=8MHz) // Usar 20 MHz para montaje en físico.
//#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, stream=PC)
int8 RS_ID = 0x20; // Direccion Base de los Modulos
int8 ID_Central = 10; /// Direccion de la Central
//int8 ID_BT1 = 50;
#define tope_array 40 /// Tamaño del almacenmiento
#define RS485_USE_EXT_INT TRUE
#define RS485_RX_PIN PIN_B0
#define RS485_TX_PIN PIN_B3
#define RS485_ENABLE_PIN PIN_B2 // Controls DE pin. RX low, TX high.
#define RS485_RX_ENABLE PIN_B1 // Controls RE pin. Should keep low.
#define RS485_RX_BUFFER_SIZE tope_array
#define RS485_ID RS_ID
#include "rs485.c"
int1 flag_rs485 = 0;
int8 i,msg[tope_array];
int16 port_pin[4]={PIN_A4, PIN_A5, PIN_A6, PIN_A7};
//#include <stdlib.h>
#INT_TIMER1
void timer1_isr()
{
if(rs485_get_message(msg, FALSE))
{
flag_rs485 = 1;
}
// set_timer1(80);
}
//////////////////////////////////////////////////////////////////////////////
// CONFIGURA LA DIRECCION DEL MODULO DE 20 A 2F
//////////////////////////////////////////////////////////////////////////////
void address()
{
int a=RS_ID;
a+=input(PIN_C4);
a+=(input(PIN_C5)*2);
a+=(input(PIN_C6)*4);
a+=(input(PIN_C7)*8);
RS_ID=a;
}
void clean_msg (void)
{
for(i=0;i<sizeof(msg);i++)
{
msg[i] = 0x00;
}
}
void RS485send(char* s, int8 id)
{
int8 size;
for(size=0; s[size]!='\0'; ++size);
rs485_wait_for_bus(FALSE);
while(!rs485_send_message(id, size, s))
delay_ms(RS_ID); //RS_ID
}
void trama(int salida, int estado, int tx)
{
int mascara = 0x00;
msg[0]=0x4C;
mascara=salida;
mascara<<=4;
mascara^=estado;
msg[1]=mascara;
msg[2]=msg[0]+msg[1];
RS485send(msg, ID_Central); //Transmite a la Central
delay_ms(1);
//RS485send(msg, ID_BT1); //Transmite a la Central
if(tx)
RS485send(msg, RS_ID); // Transmite al otro modulo
}
void main()
{
//delay_ms(500);
//output_low(PIN_A0);
output_a(0x01);
address();
port_b_pullups(0xF0);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
// rs485_init();
// delay_ms(300);
enable_interrupts(GLOBAL);
// set_timer1(80);
enable_interrupts(INT_TIMER1);
rs485_init();
while (true)
{
/* if(!input(PIN_A2))
{
msg[0] = 'a';
RS485send(msg, 0x01);
while(!input(PIN_A2));
}
if(!input(PIN_A3))
{
msg[0] = 'b';
RS485send(msg, 0x01);
while(!input(PIN_A3));
}*/
if(flag_rs485)
{
disable_interrupts(global); //INT_TIMER1
flag_rs485 = 0;
// if(msg[4]==(msg[2]+msg[3]))
// if(input_state(PIN_C0)) //&&(input(PIN_C1)==1)&&(input(PIN_C2)==1)&&(input(PIN_C3)==1));
// {
if(msg[2] == 0x4C)
output_bit(port_pin[((msg[3]&0xf0)>>4)-1], (msg[3]&0x0f));
//output_bit(port_pin[((msg[3]>>4)&0x0f)-1], (msg[3]&0x0f));
// }
clean_msg();
enable_interrupts(global);
}
// disable_interrupts(INT_TIMER1);
if(!input(PIN_B4)){ output_toggle(PIN_A4); trama(0x01,input_state(PIN_A4),input(PIN_C0)) ; while(!input(PIN_B4)); delay_ms(10);}
if(!input(PIN_B5)){ output_toggle(PIN_A5); trama(0x02,input_state(PIN_A5),input(PIN_C1)) ; while(!input(PIN_B5)); delay_ms(10);}
if(!input(PIN_B6)){ output_toggle(PIN_A6); trama(0x03,input_state(PIN_A6),input(PIN_C2)) ; while(!input(PIN_B6)); delay_ms(10);}
if(!input(PIN_B7)){ output_toggle(PIN_A7); trama(0x04,input_state(PIN_A7),input(PIN_C3)) ; while(!input(PIN_B7)); delay_ms(10);}
// enable_interrupts(INT_TIMER1);
}// FIN WHILE
}
no lo tiene es tal cual el circuito que pase en el PDF en el ITEM #25 de este tema. vos decis que con eso funciona? lo voy a probar en el dia de mañana si es asi a ver si tengo uno de ese valor.Tiene el microcontrolador un condensador de 100nF entre VDD y GND?