|
|
View previous topic :: View next topic |
Author |
Message |
Jody
Joined: 08 Sep 2006 Posts: 182
|
PIC87J50 and USB(SOLVED) |
Posted: Mon May 30, 2011 4:01 am |
|
|
Forgot the VUSB connection!!!!
FUSES:
Code: |
#include <18F87J50.h>
#device ICD=TRUE
#device adc=16
#FUSES NOWDT //No Watch Dog Timer
#FUSES PLL12 //Divide By 12(48MHz oscillator input)
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES DEBUG //Debug mode for use with ICD
#FUSES NOCPUDIV
#FUSES NOPROTECT
#FUSES HSPLL
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES NOFCMEN
#FUSES NOIESO
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES NOEASHFT
#FUSES MSSPMSK7
#use delay(clock=48000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=ID20)
|
Hello,
I had the CDC code running on a PIC18F4550.. and now I want to get it running at a PIC87J50...
But I am missing something....
I think I messed up the fuse settings... (PIC Wizard isn't helping much)
What I have:
Compiler version: 4.119
Fuses:
Code: |
#include <18F87J50.h>
#device ICD=TRUE
#device adc=16
#FUSES ECPLL
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES PLL12 //Divide By 12(48MHz oscillator input)
#FUSES NOCPUDIV
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES DEBUG //Debug mode for use with ICD
#use delay(clock=48000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=ID20)
|
and in mine code I enable the PLLEN:
Code: |
#include <main.h>
#include <stdlib.h>
#include <string.h>
#include <input.c>
#include <M95160SPI.c>
#include <LCD_CCS.c>
#include <DS1302SPI.c>
// Includes all USB code and interrupts, as well as the CDC API
#include <usb_cdc.h>
#define SLOT pin_H3 //Relais uitgang 1
#define START pin_H6 //Digitale I/O bit0
#define LICHTSLUIS0 pin_H7 //Digitale I/O bit1
#define LICHTSLUIS1 pin_H5 //Digitale I/O bit2
int string_ready = 0;
signed int next_in = 0;
char string[20];
char string_lengte[8];
char string_papagaai_teller[4];
char RFID[5];
int16 addres = 0;
int8 teller = 0;
int8 papagaai_teller = 0;
int8 papa_teller = 0;
int8 first = 1;
int8 lengte_string = 0;
int8 i = 0;
int8 hr = 0;
int8 min = 0;
int8 sec = 0;
int8 data_eeprom = 0;
#byte OSCTUNE = 0xF9B
#bit PLLEN = OSCTUNE.6
char string1[6] = "C820\0";//papagaainummer
#USE SPI (MASTER, SPI2, MODE=0, BITS=8, STREAM=SPI_2, MSB_FIRST)
#int_RDA
void RDA_isr(void)
{
string[next_in]=fgetc(ID20);
if((string[next_in] == 0x0D) & (next_in > 1)) //Einde string
{
string_ready = 1;
string[next_in+1] = '\0';
next_in = 0;
}
next_in=(next_in+1);
if(next_in > 20) next_in = 0;
}
void main()
{
int8 data;
int8 wrote;
int16 addr;
int16 errors = 0;
setup_timer_1(T1_DISABLED);
setup_timer_3(T3_INTERNAL|T3_DIV_BY_1);
setup_timer_4(T4_DISABLED,0,1);
setup_spi2(SPI_MASTER|SPI_XMIT_L_TO_H|SPI_SAMPLE_AT_MIDDLE|SPI_CLK_DIV_16);// test
enable_interrupts(INT_RDA);
enable_interrupts(INT_RDA2);
enable_interrupts(GLOBAL);
PLLEN = 1; // Enable PLL
delay_ms(50);
usb_cdc_init();
usb_init();
init_ext_eeprom();
lcd_init();
delay_ms(50);
output_low(SLOT);// van het slot af...
lcd_gotoxy(1,1);
printf(lcd_putc, "Papagaaiendeur");
for(teller = 0; teller < 45; teller++)
{
string[teller] = ' ';
}
next_in = 0;
while(1)
{
usb_task();
if (usb_enumerated())
{
lcd_gotoxy(1,1);
printf(lcd_putc, "USB enumerated!");
}
if(string_ready == 1)
{
printf(usb_cdc_putc,"string = ");
printf(usb_cdc_putc,string);
lengte_string = strlen(string);//lengte van de ontvangen string
itoa(lengte_string, 10, string_lengte);// omzetten naar een string
printf(usb_cdc_putc,string_lengte);// afbeelden
printf(usb_cdc_putc,"\n");
RFID[0] = string[(lengte_string-5)];
RFID[1] = string[(lengte_string-4)];
RFID[2] = string[(lengte_string-3)];
RFID[3] = string[(lengte_string-2)];
RFID[4] = '\0';
printf(usb_cdc_putc,"RFID = ");
printf(usb_cdc_putc,RFID);
string_ready = 0;
next_in = 0;
lengte_string = 0;
for(teller = 0; teller < 20; teller++)
{
string[teller] = ' ';
}
if((strcmp(RFID, string1))==0)
{
output_high(SLOT);// deur open
}
if(input(LICHTSLUIS0))// deur open gedaan
{
papagaai_teller = papagaai_teller + 1;
rtc_get_time(hr,min,sec);
write_ext_eeprom(addres,hr);addres++;
write_ext_eeprom(addres,min);addres++;
write_ext_eeprom(addres,sec);addres++;
write_ext_eeprom(addres,papagaai_teller);addres++;
delay_ms(50);
papa_teller = read_ext_eeprom(0x000);
itoa(papa_teller, 10, string_papagaai_teller);// omzetten naar een string
printf(usb_cdc_putc,"papagaai_teller_eeprom = ");
printf(usb_cdc_putc,string_papagaai_teller);
printf(usb_cdc_putc,"\n");
first = 0;
}
}
}
}
} |
anybody any ideas?????
Regards,
Jody |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19520
|
|
Posted: Mon May 30, 2011 7:59 am |
|
|
Is this solved?.
Thread title says so.
I have to ask 'why' you are using 48MHz?. Unless it is available elsewhere for some reason, you get less RF problems, and lower power consumption, running off a slower clock.
However with 48MHz, the combination you are trying to use is 'over complex'.
You have 48MHz, so don't need the PLL.
EC
FOSC2=1
PLLEN=0
FSEN=1
gives 48MHz to the USB.
Then CPUDIV1, and primary clock source enabled, gives 48MHz to the CPU.
You are unnecessarily taking 48MHz, dividing it by 12, multiplying by 24, and then dividing by 2. All extra power that is not needed.....
Best Wishes |
|
|
Jody
Joined: 08 Sep 2006 Posts: 182
|
|
Posted: Mon May 30, 2011 8:03 am |
|
|
@Ttelmah,
You are right... it is a overkill and not charming to do this, this way.
And I will change it like the way you sugest... but the problem was that I can't connect to the USB ... and that is solved.
Thanks for thinking with me.
Regards,
Jody |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|