Menú
Foros
Nuevos mensajes
Buscar en foros
Novedades
Nuevos mensajes
Nuevos recursos
Última actividad
Recursos
Últimas revisiones
Buscar recursos
Acceder
Registrarse
Novedades
Buscar
Buscar
Buscar sólo en títulos
De:
Nuevos mensajes
Buscar en foros
Menú
Acceder
Registrarse
Install the app
Instalar
Foros
Diseño digital
Microcontroladores y sistemas embebidos
[Aporte] Librería RS-485 para PIC C Compiler (CCS)
JavaScript está desactivado. Para una mejor experiencia, por favor, activa JavaScript en el navegador antes de continuar.
Estás usando un navegador obsoleto. No se pueden mostrar este u otros sitios web correctamente.
Se debe actualizar o usar un
navegador alternativo
.
Responder al tema
Mensaje
[QUOTE="dcsalg, post: 1243045, member: 341148"] Justamente lo que hice si te fijas es tu programa con la diferencia que coloque el dipswitch, [B](Aclaro que siempre con proteus, por lo tanto no puede estar mal la linea RS485)[/B], entonces por eso digo esta muy sencillo el programa con un par de lineas modificadas, por lo tanto no entiendo el porque se cambian los datos de lugar y menos presionar varias veces. Lo que si te comento que estoy haciendo es agregar esto en dos programas diferentes uno transmisor y otro receptor , no un solo programa para los dos y tampoco funciona: [CODE] INT ID_LOCAL=0x20; INT ID_RECEPTOR=0x20; INT Checksum; //port1 #define RS485_ID ID_LOCAL #define RS485_REPETIDOR ID_RECEPTOR #define RX_ENABLE_PIN EN #include "RS485_Lib.h" char comando='R'; ////////////////////////////////////////////////////////////////////////////// // CONFIGURA LA DIRECCION DEL MODULO LOCAL Y RECEPTOR DE 20 A 2F ////////////////////////////////////////////////////////////////////////////// void address() { ID_LOCAL+=input_b() & 0x0F; //20 a 2F ID_RECEPTOR+=((input_b()>>4) & 0x0F); //20 a 2F en un futuro 30 a 3F } [/CODE] Al agregar las lineas de INT ID_LOCAL=0x20; e INT ID_RECEPTOR=0x20; y la funcion address(); que la llamo dentro del void main(), no dentro del bucle infinito , note, que con eso ya el programa funciona mal. Ahi es cuando preciono varias veces, y los datos del buffer_rs485[1] me los pasa al buffer_rs485[4] una locura eso. Ahora saco es IN ID_LCAL y el otro y coloco RS485_ID y el RS485_REPETIDOR con los valores fijos, ya funciona todo bien. Esas cosas me las hace funcionar mal. Pero sin eso no puedo utilizar los dipswitch. tambien probe haciendo comentario // //#define RS485_ID ID_LOCAL y al repetidor tambien como se observa abajo y manejarme con las variables, me pasa lo mismo, sin funcionar. Solo funciona con dos programas uno transmisor y otro receptor , se comunican entre ellos lo mas bien y con ID fijas, agrego esas lineas sea un programa o en dos como mencione y no funciona. [CODE] INT ID_LOCAL=0x20; INT ID_RECEPTOR=0x20; INT Checksum; //port1 //#define RS485_ID ID_LOCAL //#define RS485_REPETIDOR ID_RECEPTOR ////////////////////////////////////////////////////////////////////////////// // CONFIGURA LA DIRECCION DEL MODULO LOCAL Y RECEPTOR DE 20 A 2F ////////////////////////////////////////////////////////////////////////////// void address() { ID_LOCAL+=input_b() & 0x0F; //20 a 2F ID_RECEPTOR+=((input_b()>>4) & 0x0F); //20 a 2F en un futuro 30 a 3F } void main() { port_b_pullups(0xFF); address(); iniciar_rs485(); for(int8 i=0; i < RS485_MAX_BUFFER; i++) // Limpiar el búfer "buffer_rs485" buffer_rs485[i] = 0; while(TRUE) { if(flag_rs485==1) { flag_rs485=0; printf("ID Local: %u\r", buffer_rs485[0]); printf("ID Esclavo: %u\r", buffer_rs485[1]); printf("Comando: %u\r", buffer_rs485[2]); printf("Checksum: %u\r", buffer_rs485[3]); for(int8 i =0;i<=RS485_MAX_BUFFER;i++) printf("Buffer RS-485[%u] = %u\r", i, buffer_rs485[i]); if((buffer_rs485[0]==RS485_ID)&&(buffer_rs485[3]==(RS485_ID+comando))) { if((buffer_rs485[2]=='R')) output_high(PIN_C0); } delay_ms(500); output_low(PIN_C0); } if(!input(RA7)) { Checksum=ID_RECEPTOR+comando; // Ingresar los datos al arreglo "buffer_rs485" (! = Fin de datos.) sprintf(buffer_rs485, "%c%c%c%c!", ID_RECEPTOR, // Enviar el ID remoto. ID_LOCAL, // Enviar el ID local. comando, Checksum ); // Comando para encender/apagar el LED // Enviar los datos por RS-485 enviar_datos_rs485(buffer_rs485); }//FIN INPUT RA7 while(!input(RA7)) delay_ms(10); // Esperar hasta que se suelte el pulsador. }//WHILE } [/CODE] La verdad triste el asunto este pero bueno, nose. Gracias D@rkbytes. [/QUOTE]
Verificación
Responder
Foros
Diseño digital
Microcontroladores y sistemas embebidos
[Aporte] Librería RS-485 para PIC C Compiler (CCS)
Arriba