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!!!
#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
!!!
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!
}