CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Use I/O pin to trigger event

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
geolover



Joined: 08 Feb 2011
Posts: 18

View user's profile Send private message

Use I/O pin to trigger event
PostPosted: Thu Mar 24, 2011 9:28 am     Reply with quote

In my circuit, an ADC's /DRDY pin will pulse low when data is ready to retrieve and then returns high on the falling edge of the first subsequent SCLK, if data is not retrieved (SCLK held low), this pin will pulse high just before next conversion data is ready.

I am using PCD compiler v4.117, in my programme, i use set_tris_a(0x10) to set Pin RA4 to input state, which is connected to the /DRDY pin of ADC.

Part of my code is below: when DRDY goes low, while((DRDY!=0)); become false, and spi2 will try to read from the ADC, generating the serial clock and
read data in, however, upon compiling, I found that the compiler warned me that the condition while((DRDY!=0)); is always true, and when I powered up the devices and connect serial clock of PIC which is connecting to serial clock of the ADC, I found out there is no serial clock on the oscilloscope....

Could anyone tell me why?
Code:
      #include <24FJ128GA010.h>
#include "stdio.h"
#include "string.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 NOIESO                   //Internal External Switch Over mode disabled
#FUSES PR                       //Primary Oscillator
//#FUSES PR_PLL                   //Primary Oscillator with PLL
#FUSES CKSNOFSM                 //Clock Switching is enabled, fail Safe clock monitor is disabled
#FUSES NOOSCIO                  //OSC2 is clock output
#FUSES XT
#use delay(clock=32000000)
#use rs232(UART1,baud=9600,parity=N,bits=8)

#define AD_SYNC PIN_A0
#define DRDY PIN_A4
#define DAC1_CS PIN_A7

#byte SPI2BUF = 0x0268
#bit SPIRBF2 =0x0260.0
#bit frmen1 = 0x0244.15
#bit spifsd1= 0x0244.14
#bit spifpol1 = 0x0244.13
#bit spifsd1 = 0x0244.2
#bit spife1 = 0x0244.1
#bit spisidl2 = 0x0260.13
#bit frmen2  = 0x0264.15
#bit spifsd2 = 0x0264.14
#bit spifpol2= 0x0264.13
#bit spife2  = 0x0264.2
#bit spiben  = 0x0264.1
#bit TRISF7  = 0x02DE.7

const sine1[480]={random 480 points 16-bit numbers....};

void main()
{
   delay_ms(1);
   unsigned char colon= ':';
   unsigned char h='h';
   unsigned char i='i';
   unsigned char t='t';
   unsigned char c='c';
   
   int16 j,k;
   int8 ad_samples1[480],ad_samples2[480],ad_samples3[480];
 //  int8 ad_samples1,ad_samples2,ad_samples3;
//   TRISF7 = 1;
//   spisidl2 =0;
//   frmen2=1;
//   spifsd2=1;
//   spifpol2=1;
//   spife2=0;
//   spiben=0;

   set_tris_a(0x10); //A0,A7 output while A4 is input(/DRDY)
   setup_spi2(spi_master | spi_l_to_h | spi_clk_div_4);
   setup_spi(spi_master | spi_l_to_h | spi_clk_div_4);
   output_low(AD_SYNC);
   delay_us(2);
   output_high(AD_SYNC);
   while(1)
   { 
      for (j=0;j<480;j++)
      {
      output_low(DAC1_CS);
  //       writeSPI2(sine[j]);
            spi_write2(make8(sine1[j],1)); //get msb from i and write to spi2
  //          delay_us(100);
            spi_write2(make8(sine1[j],0)); // lsb same stuff           
  //         delay_us(100);     
      output_high(DAC1_CS);
       
      while((DRDY!=0)); 
        ad_samples1[j]=spi_read2(0x00);
        ad_samples2[j]=spi_read2(0x00);
        ad_samples3[j]=spi_read2(0X00);
      }
     


         output_low(PIN_A7);         
         for(k=0;k<480;k++)
         {
         spi_write(h);
         delay_us(100);
         spi_write(i);
         delay_us(100);
         spi_write(t);
         delay_us(100);
         spi_write(colon);
         delay_us(100);
            spi_write(make8(sine1[k],1));
            delay_us(100);
            spi_write(make8(sine1[k],0));
            delay_us(100);
            spi_write(ad_samples1[k]);//write 8-bit data into spi
            delay_us(100);
            spi_write(ad_samples2[k]);
            delay_us(100);
            spi_write(ad_samples3[k]);
            delay_us(100);
         }

         output_high(PIN_A7);
   }
}

temtronic



Joined: 01 Jul 2010
Posts: 9173
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Thu Mar 24, 2011 11:25 am     Reply with quote

IS pin RA4 open collector ?
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Thu Mar 24, 2011 1:07 pm     Reply with quote

Quote:
I found that the compiler warned me that the condition while((DRDY!=0)); is always true

The compiler is correct. In the line below, you have DRDY defined
as a pin number:
Code:
#define DRDY PIN_A4

Look in the file below, and see what the definition of 'PIN_A4' is:
Quote:
24FJ128GA010.h

If you need more help, see this post:
http://www.ccsinfo.com/forum/viewtopic.php?t=45012&start=1
geolover



Joined: 08 Feb 2011
Posts: 18

View user's profile Send private message

PostPosted: Thu Mar 24, 2011 1:47 pm     Reply with quote

PCM programmer wrote:
Quote:
I found that the compiler warned me that the condition while((DRDY!=0)); is always true

The compiler is correct. In the line below, you have DRDY defined
as a pin number:
Code:
#define DRDY PIN_A4

Look in the file below, and see what the definition of 'PIN_A4' is:
Quote:
24FJ128GA010.h

If you need more help, see this post:
http://www.ccsinfo.com/forum/viewtopic.php?t=45012&start=1

I solved this problem by manually read RD7's PORT register, but thanks, now I know the approriate way to do it Smile
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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