|
|
View previous topic :: View next topic |
Author |
Message |
geolover
Joined: 08 Feb 2011 Posts: 18
|
USB data acquisition with Explore 16 |
Posted: Fri Feb 11, 2011 2:48 pm |
|
|
Hello! My project involves getting data from an ADC connected to the PIC24FJ128GA010 on the explorer 16 to PC by implementing a USB CDC on the PIC18F4550 (on explorer 16 as well), a Master_Slave SPI is used for inter-PIC communication, however, upon testing, I found data coming out on putty is not what is written by PIC24FJ128GA010, here are the following code, it features a very simple function of master_slave SPI write and read:
One syndrome I found out is whenever I change the value in #use delay of PIC24FJ code, I got different data on the PC, does it suggests something wrong with PIC24FJ clock configuration?
Code: | #include <18F4550.h>
//configure a 20MHz crystal to operate at 48MHz
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses USBDIV, PLL1, CPUDIV1, PROTECT, NOCPD, noBROWNOUT,HSPLL,NOWDT,nolvp, VREGEN
#use delay(clock=48000000)
// Includes all USB code and interrupts, as well as the CDC API
#include <usb_cdc.h>
#rom int 0xf00000={1,2,3,4}
void main() {
int16 value;
setup_spi (SPI_SLAVE | SPI_H_TO_L | spi_ss_disabled);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
do {
usb_task();
if (usb_enumerated()) {
printf(usb_cdc_putc, "\r\n\nData read from ADC:\r\n"); // Display contents of the first 64
if (spi_data_is_in())
{
//while(!spi_data_is_in()); // wait for SPI activity from master
// Read byre from SPI interface
value = spi_read();
// Write byte to USB
printf(usb_cdc_putc, "%1x ",value);
}
}
}while (TRUE);
} |
Code: | #INCLUDE <24FJ128GA010.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOJTAG //JTAG disabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOCOE //Device will reset into operational mode
#FUSES ICSP2 //ICD uses PGC2/PGD2 pins
#FUSES WINDIS //Watch Dog Timer in non-Window mode
#FUSES WPRES128 //Watch Dog Timer PreScalar 1:128
#FUSES WPOSTS16 //Watch Dog Timer PostScalar 1:32768
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES PR_PLL //Primary Oscillator with PLL
#FUSES NOCKSFSM //Clock Switching is disabled, fail Safe clock monitor is disabled
#FUSES NOOSCIO //OSC2 is clock output
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#use delay(clock=32000000)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#use rs232(UART1,baud=9600,parity=N,bits=8)
void main()
{
int j;
int sine_table[9]={0x10,0x09,0x11,0x22};
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_4 |0x0000);
setup_spi2(SPI_SS_DISABLED);
while(1)
{
for (j=0 ; j < 4 ;j++)
{
output_low(PIN_A0);
spi_write(sine_table[j]);
output_high(PIN_A0);
}
}
// setup_wdt(WDT_ON);
// setup_timer1(TMR_DISABLED|TMR_DIV_BY_1);
// TODO: USER CODE!!
}
|
|
|
|
geolover
Joined: 08 Feb 2011 Posts: 18
|
|
Posted: Tue Feb 15, 2011 4:58 am |
|
|
Hello! A little bit update! I find my problem, it seems there is a type mismatch: i send out binary data from PIC24FJ but print out hex number on USB, do you think that might be the cause of problem? |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9221 Location: Greensville,Ontario
|
|
Posted: Tue Feb 15, 2011 8:48 am |
|
|
First, test the USB PIC > PC link by sending KNOWN data. Maybe a small table of 10 known data and confirm the PC is reading and showing them as correct.
When that happens..
test the PIC 24 to USB PIC by again, sending a table of KNOWN data.
Since we have NO idea what your PC program is doing, only you can confirm WHERE the data is being corrupted.
Also I don't have either of those PICs and don't know how you've setup the SPI physical transfer( wire length, grounds,power supplies, etc. Heck, even the MIG welder in the room two doors down could cause problems ! |
|
|
|
|
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
|