Autor Tema: 18F4550 con CDC y RS232  (Leído 5617 veces)

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

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
18F4550 con CDC y RS232
« en: 10 de Noviembre de 2009, 15:45:23 »
Holas a todos :), Tengo un problemita que no puedo solucionar.
La idea es transmitir con un 18F4550 atravez de un wenshing 433 conectado por usb al ordenador.
Este funciona en CDC con interfaz VB6, se envia caracteres con botones y se muestran (lo que llega de la interfaz en el LCD) pero el problema es que
no manda por el RS232 el aviso de Contro por RC, esto solo lo uso para probar si envia algo y asi conectarlo al RX para
asegurarme que llegan los caracteres enviados por el TX al RX.
Los fuses estan para usar un Cristal de 4Mhz la cuestion es que para que funcione el RS232 cambio el cristal de 4mhz a 48 (en propiedades del PIC en Proteus) y los fuses a estos y funciona el RS232 pero no la parte de USB!!! :mrgreen:

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN,NOBROWNOUT
#use delay(clock=48000000)//48MHz


HSPLL ( era XTPLL)  y PLL1 (era PLL5) la consulta es.... :(

Hay combinacion de fuses para que funcionen ambas, si es si sigo buscando en el datasheet :shock: !!! 
GRACIAS POR SU ATENCION

Adjunto el programa original abajo.... lo que no manda es printf("*** Control Robot por RC 433Mhz ***\r\n") antes de enumerar al PIC.

#include <18F4550.h>
#fuses XTPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)

#USE RS232 (baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)

#byte RCSTA=             0xFAB       // Registro de recepcion de la usart
#byte RCREG=             0xFAE       // Aquí se recibe el dato de la usart
#byte TMR1L=             0xFCE// Byte bajo del timer1

#bit CREN=               RCSTA.4      // Se activa para recepción continua
#bit OERR=               RCSTA.1      // Error de Overrun

#define use_portb_lcd TRUE
#define USB_CON_SENSE_PIN PIN_E3
#include <lcd.c>
#include "usb_cdc.h"
#include <string.h>

#byte PORTA = 0xF80// Son las direcciones de memoria de los puertos en este PIC
#byte PORTB = 0xF81
#byte PORTC = 0xF82
#byte PORTD = 0xF83
#byte PORTE = 0xF84

#include <string.h>

/////////////////////////////////////// PRINCIPAL /////////////////////////////////////

void main()
{
       
char LETRA;

usb_cdc_init(); // llamadas necesarias para iniciar el módulo USB
usb_init_cs();    // inicia el USB y sale. va a la par con usb_task()
lcd_init();    // llamadas necesarias para iniciar la LCD
output_high(PIN_C0);   //LED ROJO ENCENDIDO
output_low(PIN_C1);      //LED VERDE APAGADO
 
disable_interrupts(INT_TIMER1);
disable_interrupts(GLOBAL);   

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);

printf("*** Control Robot por RC 433Mhz ***\r\n");


while(true){
     usb_task(); // configura el USB
     if(usb_cdc_connected()){
      // espera a detectar una transmisión de la PC (Set_Line_Coding)
       if (usb_enumerated()) // aquí se hace el acceso HOST<->PC y después sale
        output_low(PIN_C0);         //LED ROJO APAGADO
        output_high(PIN_C1);      //LED VERDE ENCENDIDO
         if(usb_cdc_kbhit()){
             LETRA=usb_cdc_getc();
              if(LETRA=='*'){
               lcd_putc("\f");
               }
               else{
                   lcd_putc(LETRA);
                   printf(usb_cdc_putc,LETRA); // envia una respuesta al Host       
                   } 
                   
            }
          }
      }
GRaCIAs! :-/
   }

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: 18F4550 con CDC y RS232
« Respuesta #1 en: 10 de Noviembre de 2009, 18:05:04 »
Yo lo he hecho funcionar perfectamente los dos canales, el USB CDC y la USART Serie. 

Pero los fuses eran los necesarios para el USB, que es el que requiere los megaherzios correspondientes, y como yo tenía un cristal de 20 Mhz utilizaba el HSPLL y el PLL5 para dividir los 20 Mhz por 5 y así la entrada del PLL tenía los a 4 Mhz que debe tener.

No entiendo porqué no te va a funcionar a tí.  :shock:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado hernanfire

  • PIC10
  • *
  • Mensajes: 32
Re: 18F4550 con CDC y RS232
« Respuesta #2 en: 10 de Noviembre de 2009, 19:19:06 »
Gracias, por responder RedPic :-/. Queria saber si se podia, porque quizas me faltaba configurar algo, si tu me decis que pudistes entonces seguire mirando el datasheet, :shock: o tendre en cuenta los fuses que me mencionas para poder usar ambas.
El codigo que pegue, pudiste observarlo??¿¿  tiene algun error o piensas que combiando los fuses deberia funcionar!!!!
Lo probare en proteus con tus indicaciones. Gracias !!! :mrgreen:

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: 18F4550 con CDC y RS232
« Respuesta #3 en: 10 de Noviembre de 2009, 23:53:57 »
 :?

El USB funciona en el proteus sin importar el valor del cristal que le pongas en propiedades -el lo asume solito-, lo que no te va a funcionar es en real. Que cristal pensas ponerle? ya que de eso depende mucho la configuracion de los bits de configuracion o #fuses

Saludos
El papel lo aguanta todo

Desconectado Drod

  • PIC16
  • ***
  • Mensajes: 136
Re: 18F4550 con CDC y RS232
« Respuesta #4 en: 26 de Noviembre de 2009, 09:46:17 »
Hola foreros!

Estoy ententando hacer lo mismo, comunicacion CDC e RS-232, con el mismo PIC.
Pero no consigo enviar datos por el RS-232!

El codigo para test del RS232:

Código: [Seleccionar]
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOBROWNOUT
#use delay(clock=48000000)
#USE RS232 (baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)

void main() {

printf("\r\n PIC18F4550 - RS-232 ok!" );

}

Lo simulo en Proteus, conecto los dos COM con el Virtual Serial Port, y recibo datos con un programa en C#...

Pero me sale: "????????????" en la recepcion.

Con un PIC 16F, y otra configuracion, funciono correctamente, por esso creo que es un fallo en los fuses o algo asi...

Alguien lo sabe?

Gracias!







Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: 18F4550 con CDC y RS232
« Respuesta #5 en: 26 de Noviembre de 2009, 10:21:32 »
USB por ahora no estas usando, si usarás un cristal de 20MHz los fuses estarían bien. Lo único que puedas estar errando es en proteus colocar una frecuencia al PIC distinta de 48MHz.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Drod

  • PIC16
  • ***
  • Mensajes: 136
Re: 18F4550 con CDC y RS232
« Respuesta #6 en: 26 de Noviembre de 2009, 11:06:48 »
QUE RAPIDO!!!

jejeje!

Funcionó correctamente! Genial!!!!

Muchisimas gracias!

Desconectado Xavo

  • PIC10
  • *
  • Mensajes: 4
Re: 18F4550 con CDC y RS232
« Respuesta #7 en: 04 de Febrero de 2010, 08:22:16 »
Hola, tengo una pequeña duda con la configuracion de los fuses, utilizo el 18f2680, y estos son los fuses que estan disponibles para este pic:

LP      Low power osc < 200 khz
XT      Crystal osc <= 4mhz
HS      High speed Osc (> 4mhz)
RC      Resistor/Capacitor Osc with CLKOUT
EC      External clock with CLKOUT
EC_IO      External clock
H4      High speed osc with HW enabled 4X PLL
RC_IO      Resistor/Capacitor Osc
PROTECT   Code protected from reads
NOPROTECT   Code not protected from reading
BROWNOUT_NOSL   Brownout enabled during operation, disabled during SLEEP
BROWNOUT_SW   Brownout controlled by configuration bit in special file register
NOBROWNOUT   No brownout reset
BROWNOUT   Reset when brownout detected
WDT1      Watch Dog Timer uses 1:1 Postscale
WDT2      Watch Dog Timer uses 1:2 Postscale
WDT4      Watch Dog Timer uses 1:4 Postscale
WDT8      Watch Dog Timer uses 1:8 Postscale
WDT16      Watch Dog Timer uses 1:16 Postscale
WDT32      Watch Dog Timer uses 1:32 Postscale
WDT64      Watch Dog Timer uses 1:64 Postscale
WDT128      Watch Dog Timer uses 1:128 Postscale
WDT      Watch Dog Timer
NOWDT      No Watch Dog Timer
BORV21      Brownout reset at 2.1V
BORV28      Brownout reset at 2.8V
BORV43      Brownout reset at 4.3V
BORV46      Brownout reset at 4.6V
PUT      Power Up Timer
NOPUT      No Power Up Timer
CPD      Data EEPROM Code Protected
NOCPD      No EE protection
NOSTVREN   Stack full/underflow will not cause reset
STVREN      Stack full/underflow will cause reset
NODEBUG   No Debug mode for ICD
DEBUG      Debug mode for use with ICD
NOLVP      No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
LVP      Low Voltage Programming on B3(PIC16) or B5(PIC18)
WRT      Program Memory Write Protected
NOWRT      Program memory not write protected
WRTD      Data EEPROM write protected
NOWRTD      Data EEPROM not write protected
IESO      Internal External Switch Over mode enabled
NOIESO      Internal External Switch Over mode disabled
FCMEN      Fail-safe clock monitor enabled
NOFCMEN   Fail-safe clock monitor disabled
PBADEN      PORTB pins are configured as analog input channels on RESET
NOPBADEN   PORTB pins are configured as digital I/O on RESET
BBSIZ1K      1K words Boot Block size
BBSIZ2K      2K words Boot Block size
WRTC      configuration registers write protected
NOWRTC      configuration not registers write protected
WRTB      Boot block write protected
NOWRTB      Boot block not write protected
EBTR      Memory protected from table reads
NOEBTR      Memory not protected from table reads
EBTRB      Boot block protected from table reads
NOEBTRB   Boot block not protected from table reads
CPB      Boot Block Code Protected
NOCPB      No Boot Block code protection
LPT1OSC   Timer1 configured for low-power operation
NOLPT1OSC   Timer1 configured for higher power operation
MCLR      Master Clear pin enabled
NOMCLR      Master Clear pin used for I/O
XINST      Extended set extension and Indexed Addressing mode enabled
NOXINST      Extended set extension and Indexed Addressing mode disabled (Legacy mode)
INTRC      Internal RC Osc
INTRC_IO      Internal RC Osc, no CLKOUT
WDT256      Watch Dog Timer uses 1:256 Postscale
WDT512      Watch Dog Timer uses 1:512 Postscale
WDT1024   Watch Dog Timer uses 1:1024 Postscale
WDT2048   Watch Dog Timer uses 1:2048 Postscale
WDT4096   Watch Dog Timer uses 1:4096 Postscale
WDT8192   Watch Dog Timer uses 1:8192 Postscale
WDT16384   Watch Dog Timer uses 1:16384 Postscale
WDT32768   Watch Dog Timer uses 1:32768 Postscale
BBSIZ4K      4K words Boot Block size



Necesito hacer una comunicación serie donde solo envia string's, el reloj es de 8mhz y funciona a 115200baudios, alguien me puede decir que fuses necesitare activa/seactivar

Gracias
Un saludo foreros!!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: 18F4550 con CDC y RS232
« Respuesta #8 en: 04 de Febrero de 2010, 11:05:57 »
Pues si son 8MHz, creo que toca el HS .... pero recuerdo que por ahí hubo comentarios acerca de fallos en la comunicación cuando se usaban otro tipo de relojes diferentes a 4, 12 y 20MHz.

saludos
El papel lo aguanta todo


 

anything