TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rroque en 27 de Diciembre de 2010, 19:32:26
-
Gente como estan!!!!
Alguien de casualidad tendra un programa que trabaje master (pc) y slave (pics)
Que los slaves adquieran datos analogicos y que estos lo mande a la pc cuando este le mande una dato como la direccion de cada micro.
Estoy como loco con esto hace un tiempo. y no se que hacer!!! he visto de todo pero nada similar a lo q quiero.
algo que este en CCS
Gracias
Ayúdenmeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
-
Hola.
Por favor, lee las reglas del foro. El tema que dices es muy tratado acá.
Saludos
-
Gente como estan!!!!
Alguien de casualidad tendra un programa que trabaje master (pc) y slave (pics)
Que los slaves adquieran datos analogicos y que estos lo mande a la pc cuando este le mande una dato como la direccion de cada micro.
Estoy como loco con esto hace un tiempo. y no se que hacer!!! he visto de todo pero nada similar a lo q quiero.
algo que este en CCS
Gracias
Ayúdenmeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Has trabajado con Rs232 ??? si es asi la 485 sera muy facil
-
Pues como dice nuestros amigo Mlo, usa el buscador del foro por cualquier cosas de tu dudas, Redes RS484 lo hay de millones, para empezar Aqui (http://www.todopic.com.ar/foros/index.php?topic=19057.0) te pongo un tema de nuestros amigos RedPic.
Saludos
-
Lo se lo lamento! revisare los ejemplos del foro, empezando un rele en la lejania.
Gracias
-
Saludos MLO, al igual que darck_khronos yo he buscado informacion para un proyecto similar y en honor a la verdad en este foro si se ha tratado mucho este tema de RS485, pero no he podido conseguir ninguno terminado o con alguna respuesta satisfactoria, solo preguntas sin respuestas contundetes he visto, si sabes de algun proyecto terminado y probado que este aca en el foro te pido encarecidamnte me indiques donde esta y te pido disculpas por la peticion pero ya busque y no encontre mil gracias de antemano
-
si expecifica y pone codigo de lo que tiene hecho seguro que te ayudan, no espere encontrar nada hecho por aqui y si lo lo hay esta limitados ;-)
Saludos
-
Bueno estuve jugando un toque con el tema del rs485 y como que la logre transmitir datos por rs485 hacia la compu. Todo esto parti desde el ejemplo de redpic de un rele a la lejania.
Les muestro lo poco que hice. En si el programa adquiere datos analogicos y los envia al puerto serie. En la parte del main probe utilizar una sola entrada analoga para adquirir 8 lecturas diferentes con un 4051, pero x el momento lo deje como texto. pero si funciona.
Ahora el tema es de que como adquirir ese dato cuando el maestro le pregunte al esclavo. :S
#include <16F873A.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#device adc=8
#use delay(clock=4000000) // 4 Mhz PIC
#use rs232 (baud=9600, xmit=pin_b2, rcv=pin_b1)
#define TX_485_ENABLE PIN_B5
void USART_activa_tx(void);
void USART_activa_rx(void);
///////////////////////////////////////////////////////////
// Funciones
///////////////////////////////////////////////////////////
/** \brief Abre el canal RS485 para transmitir.
* \return void
*/
void USART_activa_tx(void)
{
output_high(TX_485_ENABLE);
delay_ms(5);
}
/** \brief Abre el canal RS485 para recibir.
* \return void
*/
void USART_activa_rx(void)
{
delay_ms(5);
output_low(TX_485_ENABLE);
delay_ms(1);
}
///////////////////////////////////////////////////////////
// M A I N
///////////////////////////////////////////////////////////
void main ()
{
int8 i;
float dato[8];
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
set_adc_channel(0);
delay_us(20);
set_tris_b(0b00000010);
while(1)
{
for(i=0;i<1;i++) // 8
{
switch(i)
{
case 0:
output_c(0x00);
break;
/*case 1:
output_c(0x01);
break;
case 2:
output_c(0x02);
break;
case 3:
output_c(0x03);
break;
case 4:
output_c(0x04);
break;
case 5:
output_c(0x05);
break;
case 6:
output_c(0x06);
break;
case 7:
output_c(0x07);
break;
*/
}
dato =100.0*(float)read_adc()/255;
}
USART_activa_tx();
printf("\n%f\n\r\n",dato[0]); //dato[1]
USART_activa_rx();
delay_ms(200);
}
}
-
Hola.
Para recibir, es mejor usar la interrupción de recepción serial. La idea es enviar un identificador de trama y recibes el dato como un string.
Saludos
-
interrupciones-??? uhm voy a probar a ver que sale Gracias MLO.
-
Bueno estuve jugando un toque con el tema del rs485 y como que la logre transmitir datos por rs485 hacia la compu. Todo esto parti desde el ejemplo de redpic de un rele a la lejania.
Les muestro lo poco que hice. En si el programa adquiere datos analogicos y los envia al puerto serie. En la parte del main probe utilizar una sola entrada analoga para adquirir 8 lecturas diferentes con un 4051, pero x el momento lo deje como texto. pero si funciona.
Ahora el tema es de que como adquirir ese dato cuando el maestro le pregunte al esclavo. :S
#include <16F873A.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT,NODEBUG
#device adc=8
#use delay(clock=4000000) // 4 Mhz PIC
#use rs232 (baud=9600, xmit=pin_b2, rcv=pin_b1)
#define TX_485_ENABLE PIN_B5
void USART_activa_tx(void);
void USART_activa_rx(void);
///////////////////////////////////////////////////////////
// Funciones
///////////////////////////////////////////////////////////
/** \brief Abre el canal RS485 para transmitir.
* \return void
*/
void USART_activa_tx(void)
{
output_high(TX_485_ENABLE);
delay_ms(5);
}
/** \brief Abre el canal RS485 para recibir.
* \return void
*/
void USART_activa_rx(void)
{
delay_ms(5);
output_low(TX_485_ENABLE);
delay_ms(1);
}
///////////////////////////////////////////////////////////
// M A I N
///////////////////////////////////////////////////////////
void main ()
{
int8 i;
float dato[8];
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
set_adc_channel(0);
delay_us(20);
set_tris_b(0b00000010);
while(1)
{
for(i=0;i<1;i++) // 8
{
switch(i)
{
case 0:
output_c(0x00);
break;
/*case 1:
output_c(0x01);
break;
case 2:
output_c(0x02);
break;
case 3:
output_c(0x03);
break;
case 4:
output_c(0x04);
break;
case 5:
output_c(0x05);
break;
case 6:
output_c(0x06);
break;
case 7:
output_c(0x07);
break;
*/
}
dato =100.0*(float)read_adc()/255;
}
USART_activa_tx();
printf("\n%f\n\r\n",dato[0]); //dato[1]
USART_activa_rx();
delay_ms(200);
}
}
y de pura casualidad sabras como se hace para que el esclavo obedesca por que ahi solo muetras al pi maestro no''
??