Autor Tema: Duda comunicar: PC-PICa-Picb  (Leído 3227 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado yopicuo

  • PIC10
  • *
  • Mensajes: 8
Duda comunicar: PC-PICa-Picb
« en: 05 de Abril de 2010, 09:39:23 »
Bueno, aprovecho y posteo mi segundo post.

Resulta que me he puesto a experimentar un poco con el USART, para la comunicación entre pics, y hasta el momento sin problemas. Por otra parte también he hecho algunas prácticas de conectar el PIC al PC mediante USB y mas o menos funciona.

Ahora pretendo conectar al pc un pic maestro mediante usb, y empleando el hyperteminal mandar ordenes para que el pic maestro se comunique con un pic esclavo, mediante USART y este le transmita los datos para poder mostrarlos por pantalla.




Creo que el principal problema es el asunto de las frecuencias de trabajo, ya que para el USB es necesario 48Mhz y para el USART 4MHz. ¿no?

Les posteo el código tanto del maestro como del esclavo:

Código: [Seleccionar]
[b][u]CODÍGO PARA EL MAESTRO:[/u][/b]

#include <18F2550.h>
#fuses XT,HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay (clock=48000000)
#use RS232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8,PARITY=N)
#define USB_CON_SENSE_PIN PIN_B3
#include <stdlib.h>
#include <usb_cdc.h>

void main(){

char ORD;
int8 Dato;


usb_cdc_init();
usb_init();

while(!usb_cdc_connected());

do{
  if (usb_enumerated())
         {
         if (usb_cdc_kbhit())
            {
            usb_task();
            printf(usb_cdc_putc,"\n\r Prueba de envio de órdenes y comunicación entre Pics\r\n");
            printf(usb_cdc_putc,"\n\r Introducir variable de lectura. a(RA0) b(RA1):\r\n\n");
            ORD=usb_cdc_getc();
            
            if (ORD == 'a') {
               PUTC(0);
               delay_ms(1500);
               Dato=GETC();
               usb_task();
               printf(usb_cdc_putc,"\n\r Voltaje de %s es =%01.3fV\r\n\n",ORD,Dato*5.0/255.5);
            }
            else if (ORD =='b') {
               PUTC(1);
               delay_ms(1500);
               Dato=GETC();
               usb_task();
               printf(usb_cdc_putc,"\n\r Voltaje de %s es =%01.3fV\r\n\n",ORD,Dato*5.0/255.5);
            }
            Else{
            printf(usb_cdc_putc,"\n\rComando incorrecto\r\n\n");
            }
         }
       }
}    

While (TRUE);
}


[b][u]CÓDIGO PARA EL ESCLAVO:[/u][/b]

#include <18F2550.h>
//#device *=16 // configuramos para envio de paquetes de 16bits
#fuses XT,NOWDT
#device adc=8
#use delay(Clock=4000000)
#use rs232(Baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8,PARITY=N)
#include <LCD.C>
#BYTE TRSIA=0x85
#BYTE PORTA=0x05

char ORD;
int8 S0,S1;


#int_RDA
void RDA_isr()
{
   ORD=GETC();
   if (ORD=='0'){
   PUTC(S0);
   }
   If (ORD=='1'){
   PUTC(S1);
   }


}

void main()
{

setup_adc_ports(AN0_TO_AN1|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(10);
lcd_init();
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

for (;;)
{
  set_adc_channel(0);
  delay_us(10);
  read_adc(ADC_START_ONLY);                  
  while (!adc_done());                              
  S0=read_adc(ADC_READ_ONLY);
  
  set_adc_channel(1);
  delay_us(10);
  read_adc(ADC_START_ONLY);                  
  while (!adc_done());                              
  S1=read_adc(ADC_READ_ONLY);
  
  lcd_gotoxy(1,1);
  printf(lcd_putc,"V (RA0):=%01.3fV",S0*5.0/255.5);
  lcd_gotoxy(1,2);
  printf(lcd_putc,"V (RA1):=%01.3fV",S1*5.0/255.5);
  delay_us(10);
 // /*sleep();*/
}
}


Bueno, si alguien sabe como podría solucionar este problemilla le agradecería que me lo comentara.

Un saludo y gracias.

PD: Usu el CCS para compilar.
« Última modificación: 08 de Abril de 2010, 05:29:32 por yopicuo »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda comunicar: PC-PICa-Picb
« Respuesta #1 en: 05 de Abril de 2010, 10:52:35 »
Para trabajar con USB Full-Speed es necesario 48 MHz, ahora para trabajar con UART no tienes ninguna limitación. Y cual es el problema exactamente?  :roll:
No contesto mensajes privados, las consultas en el foro

Desconectado yopicuo

  • PIC10
  • *
  • Mensajes: 8
Re: Duda comunicar: PC-PICa-Picb
« Respuesta #2 en: 05 de Abril de 2010, 11:19:21 »
Para trabajar con USB Full-Speed es necesario 48 MHz, ahora para trabajar con UART no tienes ninguna limitación. Y cual es el problema exactamente?  :roll:

Cierto!!  :shock:

bueno el problema es que NO HACE NADA. En la ventana del hyperterminal salen los mensajes de:  "Prueba de envio de órdenes y comunicación entre Pics" y "Introducir variable de lectura. a(RA0) b(RA1):" , en ese momento si introduzco cualquier letra que no sea "a" o "b" me sale el mensaje de "Comando incorrecto".

Pero cuando pulso a o b, se queda en blanco, como esperando que se realice la comunicación entre los pics (no se desconecta el usb). Y mirando la pantalllita del "Terminal Virtual", en el proteus, se queda en negro, y no se muestran transmisiones de ningún tipo. Tanto el proteus como el hyperterminal siguen funcionando sin problemas, es decir, el problema no es que se hayan conlago, simplemente es como si estuvieran esperando.

He puesto los dos pic a 48MHz y sigue haciendo lo mismo. ¿alguna idea de cual puede ser el problema?

Un saludo y gracias por la aclaración del UART.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Duda comunicar: PC-PICa-Picb
« Respuesta #3 en: 05 de Abril de 2010, 11:42:17 »
Revisa las conexiones

Estas conectando TX de la Terminal Virtual con TX del picb

Creo que ahi hay un conflicto ya que TX esta en ALto cuando no transmite y cuando lo hace baja a 0v

Y como tienes 2 tx conectados juntos , hacer corte entre 0 y 5v de las señales

Desconectado yopicuo

  • PIC10
  • *
  • Mensajes: 8
Re: Duda comunicar: PC-PICa-Picb
« Respuesta #4 en: 06 de Abril de 2010, 06:30:54 »
Revisa las conexiones

Estas conectando TX de la Terminal Virtual con TX del picb

Creo que ahi hay un conflicto ya que TX esta en ALto cuando no transmite y cuando lo hace baja a 0v

Y como tienes 2 tx conectados juntos , hacer corte entre 0 y 5v de las señales

Inicialmente no tenía el el terminal virtual, y como no funcionaba lo puse para ver que estaba haciendo. He intercambiado las conexiones del terminal, pero sigue igual.

Estaba pensando en utilizar interrupciones para la recepción y el envio, pero al estar conectado al USB, no se si se inhabilitaran esas interrupciones...

AKENAFAB, si no es molestias, podrías mostrarme como debería ser el conexionado correcto.

Bueno un saludo y gracias, seguiré haciendo modificaciones a ver si lo consigo solucionar.


 

anything